|
|
@@ -1,28 +1,47 @@ |
|
|
|
var valueRegex = "([a-zA-Z0-9_\\-]+)#([a-zA-Z0-9_\\-]+)"; |
|
|
|
var vals = { |
|
|
|
env: "[^\\s}]+#[^\\s}]+", |
|
|
|
string: "\"[^\"}]+\"" |
|
|
|
} |
|
|
|
|
|
|
|
//Get regex for all values |
|
|
|
var valueRegex = |
|
|
|
Object.keys(vals) |
|
|
|
.map(function(i) { return vals[i]; }) |
|
|
|
.join("|"); |
|
|
|
|
|
|
|
//Turn value regex strings into actual regexes |
|
|
|
Object.keys(vals).forEach(function(i) { |
|
|
|
vals[i] = new RegExp(vals[i]); |
|
|
|
}); |
|
|
|
|
|
|
|
var regexStr = |
|
|
|
"{{"+ //{{ |
|
|
|
valueRegex+ //foo#bar - $1#$2 |
|
|
|
"("+valueRegex+")"+ //value - $1 |
|
|
|
"(?:"+ //<optional> |
|
|
|
" \\? "+ //? |
|
|
|
valueRegex+ //foo#bar - $3#$4 |
|
|
|
"("+valueRegex+")"+ //value - $2 |
|
|
|
" : "+ //: |
|
|
|
valueRegex+ //foo#bar - $5#$6 |
|
|
|
"("+valueRegex+")"+ //value - $3 |
|
|
|
")?"+ //</optional> |
|
|
|
"}}"; //}} |
|
|
|
|
|
|
|
var localRegex = new RegExp(regexStr); |
|
|
|
var globalRegex = new RegExp(regexStr, "g"); |
|
|
|
|
|
|
|
function getVal(ns, key, env) { |
|
|
|
var n = env[ns]; |
|
|
|
function getVal(str, env) { |
|
|
|
if (vals.env.test(str)) { |
|
|
|
var parts = str.split("#"); |
|
|
|
var ns = env[parts[0]]; |
|
|
|
|
|
|
|
if (typeof n === "function") |
|
|
|
return n(key); |
|
|
|
else if (n) |
|
|
|
return n[key]; |
|
|
|
else |
|
|
|
throw new Error("Namespace "+ns+" doesn't exist."); |
|
|
|
if (typeof ns === "function") |
|
|
|
return ns(parts[1]); |
|
|
|
else if (ns !== undefined) |
|
|
|
return ns[parts[1]]; |
|
|
|
else |
|
|
|
throw new Error("No: "+str); |
|
|
|
} else if (vals.string.test(str)) { |
|
|
|
return str.substring(1, str.length - 1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
module.exports = function(str, env) { |
|
|
@@ -36,11 +55,11 @@ module.exports = function(str, env) { |
|
|
|
var s = parts[0]; |
|
|
|
|
|
|
|
//Ternary |
|
|
|
if (parts[6]) { |
|
|
|
if (parts[3]) { |
|
|
|
try { |
|
|
|
var cond = getVal(parts[1], parts[2], env); |
|
|
|
var val1 = getVal(parts[3], parts[4], env); |
|
|
|
var val2 = getVal(parts[5], parts[6], env); |
|
|
|
var cond = getVal(parts[1], env); |
|
|
|
var val1 = getVal(parts[2], env); |
|
|
|
var val2 = getVal(parts[3], env); |
|
|
|
} catch (err) { |
|
|
|
return; |
|
|
|
} |
|
|
@@ -54,7 +73,7 @@ module.exports = function(str, env) { |
|
|
|
//Direct value |
|
|
|
else { |
|
|
|
try { |
|
|
|
var val = getVal(parts[1], parts[2], env); |
|
|
|
var val = getVal(parts[1], env); |
|
|
|
} catch (err) { |
|
|
|
return; |
|
|
|
} |