ucbuilder
Version:
For Developing Applications with multiple form/usercontrols etc.. In Single BrowserWindow...
78 lines (66 loc) • 2.5 kB
text/typescript
import { loopRegs } from "ucbuilder/build/regs/process/loopRegs";
import { switchRegs } from "ucbuilder/build/regs/process/switchRegs";
import { objectOpt } from "ucbuilder/build/common";
import { patternMatcher } from "ucbuilder/build/regs/patternMatcher";
class regsManage {
private switchRgx: switchRegs;
private loopRgx: loopRegs;
private proceeFindRegs = new RegExp(/`\s*{(\w*)=(.+?)}\s*`([^]*?)`\s*{\/\1}\s*`/g);
private tableColCellPattern = new RegExp(/{=([\.\w]+?) *}/g);
constructor() {
this.switchRgx = new switchRegs();
this.loopRgx = new loopRegs();
}
/**
*
* @param {{}} node
* @param {string} content
* @returns {string}
*/
parse(node: {}, content: string): string {
let res = "";
let _this = this;
res = content.replace(this.proceeFindRegs, function (
match: string,
_code: string,
valtoFind: string,
subcontent: string,
offset: number,
input_string: string
) {
let prcRes = "";
if (_code.startsWith("loop")) {
if (subcontent.includes("loopCELL")) {
// console.log(subcontent);
}
prcRes += _this.loopRgx.parseDirect(node, _code, valtoFind, subcontent,
(obj: {}, loop_content: string) => {
return _this.parse(obj, loop_content);
});
} else if (_code.startsWith("switch")) {
let cnt = _this.switchRgx.parseDirect(node, valtoFind, subcontent);
prcRes += _this.parse(node, cnt);
} else return subcontent;
// console.log(prcRes);
return prcRes;
});
return this._GET_CELL_VAL(node, res);
}
/**
*
* @param {string} content
* @param {{}} node
* @returns {string}
*/
private _GET_CELL_VAL(node: {}, content: string): string {
return content.replace(this.tableColCellPattern, (
match: string,
cellName: string,
offset: number,
input_string: string
):string => {
return (cellName == ".") ? ''+ node : ''+objectOpt.getValByNameSpace(node, cellName);
});
}
}
export { regsManage };