Codemirror动态添加关键字以进行语法高亮显示

时间:2014-01-31 10:30:15

标签: codemirror

我目前正在CodeMirror中为我当前的项目添加一种新的语言模式。这是一种专有语言,用户可以在其中创建新关键字。基本上我试图在运行时更新现有的关键字列表,我的语法荧光笔可以选择这个新的关键字。

var mode = editor.doc.modeOption;
        if(mode === "dmsrl") mode = "text/dmsrl";
        var keyWords = CodeMirror.resolveMode(mode).keywords;
        keyWords[x]=true;

我目前正在尝试添加上面的新关键字,但不知何故,我的tokebase()方法无法更新列表并且新关键字不可用。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我希望达到与你相同的目标,但有更多的自由度,包括输入容器,我可以在运行中重新定义。

1)将以下代码放入custom.mode.js文件中,从您的网页加载

var _glob_keywords = [ [ "key1", "keyword1" ],
                       [ "key2", "keyword2" ]
                     ] ;

var cm_custom_check_stream_fn = function( stream )
{
    for( var _i = 0 ; _i < _glob_keywords.length ; _i++ )
    {
        if ( stream.match( _glob_keywords[_i][0] ) ) return _glob_keywords[_i][1] ;
    }
    return "" ;
}

CodeMirror.defineMode("custom.mode", function()
{
    return {
    token: function(stream,state)
            {
                var _ret = cm_custom_check_stream_fn( stream ) ;
                if ( _ret.length > 0 ) return _ret ;
                else { stream.next(); return null; }
            }
           };
});

此代码将自动嵌入到Codemirror对象中,以动态处理文本框中的输入。 示例:如果找到“key1”,则返回“keyword1”。

我们假设“keyword1”,“keyword2”是指自定义css定义文件中的条目,如codemirror文档中所述,即

.cm-keyword1 { color:#8BA8C4; }
.cm-keyword2 { color:lime; }

希望它有所帮助!

答案 1 :(得分:0)

您可以尝试重新定义hintOptions对象,该对象传递给Codemirror的init函数,而不是使用此数据在特定提示插件中构建提示。试试这个

cm.setOption("hintOptions", { "keywords" : ["k1", "k2"] });

首先在sql-hint中查看(link):

cm.setOption("hintOptions", { "tables" : ["k1", "k2"] });

对于sql-mode,这不是繁重的操作