我目前正在CodeMirror中为我当前的项目添加一种新的语言模式。这是一种专有语言,用户可以在其中创建新关键字。基本上我试图在运行时更新现有的关键字列表,我的语法荧光笔可以选择这个新的关键字。
var mode = editor.doc.modeOption;
if(mode === "dmsrl") mode = "text/dmsrl";
var keyWords = CodeMirror.resolveMode(mode).keywords;
keyWords[x]=true;
我目前正在尝试添加上面的新关键字,但不知何故,我的tokebase()方法无法更新列表并且新关键字不可用。
任何帮助将不胜感激。
答案 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,这不是繁重的操作