Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CodeMirror和方括号,使用CSS快速编辑的自定义模式_Javascript_Codemirror_Adobe Brackets_Codemirror Modes - Fatal编程技术网

Javascript CodeMirror和方括号,使用CSS快速编辑的自定义模式

Javascript CodeMirror和方括号,使用CSS快速编辑的自定义模式,javascript,codemirror,adobe-brackets,codemirror-modes,Javascript,Codemirror,Adobe Brackets,Codemirror Modes,我正在制作一个Adobe括号扩展,以添加对Laravel刀片语法突出显示的支持 Blade是一个运行在HTML(更具体地说是一个.php文件)之上的模板系统,在扩展名不活动的情况下,我可以对css规则名称执行CTRL+E快速编辑,以在stlye.css文件中快速找到该规则。 但是当我激活扩展时,CTRL+E不再工作,但是HTML语法工作得很好 我在文本/html上使用覆盖模式 以下是main.js扩展代码: define(function (require, exports, module) {

我正在制作一个Adobe括号扩展,以添加对Laravel刀片语法突出显示的支持

Blade是一个运行在HTML(更具体地说是一个.php文件)之上的模板系统,在扩展名不活动的情况下,我可以对css规则名称执行CTRL+E快速编辑,以在stlye.css文件中快速找到该规则。 但是当我激活扩展时,CTRL+E不再工作,但是HTML语法工作得很好

我在文本/html上使用覆盖模式

以下是main.js扩展代码:

define(function (require, exports, module) {
    'use strict';

    var LanguageManager = brackets.getModule("language/LanguageManager");


    CodeMirror.defineMode("laravelblade", function (config, parserConfig) {
        var mustacheOverlay = {
            token: function (stream, state) {

                var ch;

                //Highlight Comments {{-- --}}
                if (stream.match("{{--")) {
                    while ((ch = stream.next()) != null)
                        if (ch == "}" && stream.next() == "}") break;
                    stream.eat("}");
                    return "comment";
                }
                //--

                //Highlight {{ $var }})
                if (stream.match("{{")) {
                    while ((ch = stream.next()) != null)
                        if (ch == "}" && stream.next() == "}") break;
                    stream.eat("}");
                    return "def";
                }

                //Highlight {% $var %} (Laravel 5)
                else if (stream.match('{%')) {
                    while ((ch = stream.next()) != null)
                        if (ch == "%" && stream.next() == "}") break;
                    stream.eat("}");
                    return "def";
                }

                //Highlight {% $var %} (Laravel 5)
                else if (stream.match('{%')) {
                    while ((ch = stream.next()) != null)
                        if (ch == "%" && stream.next() == "}") break;
                    stream.eat("}");
                    return "def";
                }

                //Return Null if no condition was met.
                else if (stream.next() != null) {
                    return null;
                }
            }
        };
        return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || "php"), mustacheOverlay);
    });


    LanguageManager.defineLanguage("laravelblade", {
        "name": "Laravel Blade",
        "mode": "laravelblade",
        "fileExtensions": ["blade.php"],
        "blockComment": ["{{--", "--}}"]
    });
});
真正的问题是:
如何添加对自定义模式和*blade.php文件的快速编辑支持?

我认为问题在于代码的这一部分:

            else if (stream.next() != null) {
                return null;
            }
看,它做了一些稍微不同的事情:

  while (stream.next() != null && !stream.match("{{", false)) {}
  return null;
您的代码为每个被忽略的字符返回null一次,而演示程序仅为每个被忽略的连续字符块返回null一次


为每个字符分别返回似乎会使CodeMirror将其所有普通标记分解为单独的一个字符标记,括号中的快速编辑代码无法识别这些标记——例如,如果光标在这里-
cl|ass
-CodeMirror说它位于名称为“l”的属性标记中,在括号代码查看名为“class”的属性时,您还应该添加
var codemirr=bracts.getModule(“thirdparty/CodeMirror2/lib/codemirr”)靠近顶部-作为全局访问CodeMirror已被弃用,并将很快消失。(应该是打印控制台警告)。我知道(在控制台上准确地阅读),但还没有更改(lazy me…changed now:)。谢谢大家!@谢谢你的帮助。我知道你在代码上做了什么,但是我需要在“while”循环中声明每个新规则吗?它看起来确实像,但是match()支持正则表达式,所以它可能仍然非常紧凑:
while(stream.next()!=null&&!stream.match(/{[{%]/,false))
。如果没有更多细节,我不确定这意味着什么,因此我建议将其作为一个新问题发布,以便有空间添加更多信息:-)