UNPKG

ceri-compiler

Version:

compiles template strings for ceriJS

76 lines (75 loc) 2.16 kB
module.exports = (camelize, spliceStr, marker, templateArgs) => { var matchTemplateArgs; matchTemplateArgs = (val) => { var arg, found, i, len, reg, result, tmp; reg = /[^\\\$]?((\$+)(\d+))/g; found = false; while (result = reg.exec(val)) { tmp = templateArgs[templateArgs.length - result[2].length]; tmp.args = Math.max(tmp.args || 0, (arg = parseFloat(result[3]))); arg = templateArgs.toArg(tmp.depth, arg); len = result[1].length; i = result.index + (result[0].length - len); /*if i > 0 arg = '"+' + arg if val[0] != '"' val = '"' + val i++ if i + len > val.length arg += '+"' if val[val.length-1] != '"' val += '"'*/ val = spliceStr(val, i, len, arg); found = true; } if (found) { val = marker + val + marker; } return val; }; return (attr, opt = {}) => { var j, k, len1, mod, mods, obj, oname, splitted, type, v; if (Object.keys(attr).length > 0) { for (k in attr) { v = attr[k]; if (/[^\w\s]/.test(k[0])) { type = k[0]; oname = k.slice(1); } else { type = ""; oname = k; } splitted = oname.split("."); [oname] = splitted.splice(0, 1); if (opt[oname] == null) { opt[oname] = {}; } if (splitted.length > 0) { mods = {}; for (j = 0, len1 = splitted.length; j < len1; j++) { mod = splitted[j]; mods[camelize(mod)] = true; } if (Object.keys(mods).length === 1 && mods.expr) { obj = `${marker}function(){return ${v};}${marker}`; } else if (mods.expr) { delete mods.expr; obj = { val: `${marker}function(){return ${v};}${marker}`, mods: mods }; } else { obj = { val: matchTemplateArgs(v), mods: mods }; } opt[oname][type] = obj; } else { opt[oname][type] = matchTemplateArgs(v); } } } return opt; }; };