in v4/en/builder/lib/etpl.js [1591:1628]
function (text) { // <!--...-->内文本的处理函数
var match = commandSyntax.exec(text);
// 符合command规则,并且存在相应的Command类,说明是合法有含义的Command
// 否则,为不具有command含义的普通文本
if (match
&& (NodeType = commandTypes[match[2].toLowerCase()])
&& typeof NodeType === 'function'
) {
// 先将缓冲区中的text节点内容写入
flushTextBuf();
var currentNode = analyseContext.current;
if (engine.options.strip && currentNode instanceof TextNode) {
currentNode.value = currentNode.value
.replace(/\r?\n[\x20\t]*$/, '\n');
}
if (match[1]) {
currentNode = autoCloseCommand(analyseContext, NodeType);
}
else {
currentNode = new NodeType(match[3], engine);
if (typeof currentNode.beforeOpen === 'function') {
currentNode.beforeOpen(analyseContext);
}
currentNode.open(analyseContext);
}
analyseContext.current = currentNode;
}
else if (!/^\s*\/\//.test(text)) {
// 如果不是模板注释,则作为普通文本,写入缓冲区
textBuf.push(commandOpen, text, commandClose);
}
NodeType = null;
},