更新
我修复了代码,所以它看起来像这样:
var ch;
if (state.inExpression) {
while ((ch = stream.next()) != null) {
if (ch == "(") {
depth++;
} else if (ch == ")") {
depth--;
if (depth === 0) {
state.inExpression = false;
}
}
return highlightClass;
}
} else {
if (stream.match("@if")) {
state.inExpression = true;
return highlightClass;
}
}
它有效,除非我对要突出显示的代码行进行了更改。
似乎正在发生的事情是在覆盖代码完成解析之前,当我对文件进行更改时代码被中断并重新启动。问题是depth
计数器从未被重置,所以括号计数搞砸了。
如何确保循环不间断运行?或者有不同的解决方案吗?
原始问题:
我正在尝试编写CodeMirror Overlay以突出显示Laravel语法。要突出显示的语法示例为@if (foo(bar))
。突出显示应从@
开始,到最后)
之后结束,因此需要计算括号。
以下是我为实现此目的而编写的代码,但它无法正常工作。
var ch;
if (state.inExpression) {
while ((ch = stream.next()) != null) {
if (ch == "(") {
depth++;
return highlightClass;
} else if (ch == ")") {
depth--;
if (depth === 0) {
state.inExpression = false;
return highlightClass;
}
}
}
} else {
if (stream.match("@if")) {
state.inExpression = true;
return highlightClass;
}
}
但似乎我的代码也混淆了匹配的括号'内置的功能。
我认为由于某种原因,我没有正确退出state.inExpression
。
有什么想法吗?