CodeMirror叠加计算括号

时间:2015-09-27 15:19:06

标签: javascript codemirror adobe-brackets

更新

我修复了代码,所以它看起来像这样:

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;
    }
} 

它有效,除非我对要突出显示的代码行进行了更改。

我打印到控制台并获得以下信息: screenshot2

似乎正在发生的事情是在覆盖代码完成解析之前,当我对文件进行更改时代码被中断并重新启动。问题是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;
    }
}

结果很难描述,所以请看一下这个截图: screenshot1

但似乎我的代码也混淆了匹配的括号'内置的功能。

我认为由于某种原因,我没有正确退出state.inExpression

有什么想法吗?

0 个答案:

没有答案