in v4/en/builder/lib/etpl.js [422:478]
function (text) {
// 加入默认filter
// 只有当处理forText时,需要加入默认filter
// 处理if/var/use等command时,不需要加入默认filter
if (forText && text.indexOf('|') < 0 && defaultFilter) {
text += '|' + defaultFilter;
}
// variableCode是一个gv调用,然后通过循环,在外面包filter的调用
// 形成filter["b"](filter["a"](gv(...)))
//
// 当forText模式,处理的是文本中的变量替换时
// 传递给filter的需要是字符串形式,所以gv外需要包一层ts调用
// 形成filter["b"](filter["a"](ts(gv(...))))
//
// 当variableName以*起始时,忽略ts调用,直接传递原值给filter
var filterCharIndex = text.indexOf('|');
var variableName = (
filterCharIndex > 0
? text.slice(0, filterCharIndex)
: text
).replace(/^\s+/, '').replace(/\s+$/, '');
var filterSource = filterCharIndex > 0
? text.slice(filterCharIndex + 1)
: '';
var variableRawValue = variableName.indexOf('*') === 0;
var variableCode = [
variableRawValue ? '' : toStringHead,
toGetVariableLiteral(variableName),
variableRawValue ? '' : toStringFoot
];
if (filterSource) {
filterSource = compileVariable(filterSource, engine);
var filterSegs = filterSource.split('|');
for (var i = 0, len = filterSegs.length; i < len; i++) {
var seg = filterSegs[i];
if (/^\s*([a-z0-9_-]+)(\((.*)\))?\s*$/i.test(seg)) {
variableCode.unshift('fs["' + RegExp.$1 + '"](');
if (RegExp.$3) {
variableCode.push(',', RegExp.$3);
}
variableCode.push(')');
}
}
}
code.push(
wrapHead,
variableCode.join(''),
wrapFoot
);
},