所以我正在尝试创建一个SCXML编辑器,它基本上是带有JavaScript块的XML(状态机)。我很接近,但我在添加提示时遇到了麻烦。它似乎归结为我不知道我提到的编辑模式是什么时候提示。我查看了CodeMirror对象的线索,但我没有看到它。我这样做多路复用:
CodeMirror.defineMode("scxml", function (config) {
return CodeMirror.multiplexingMode(
CodeMirror.getMode(config, "text/xml"),
{
open: "<script>", close: "</script>",
mode: CodeMirror.getMode(config, "text/javascript"),
delimStyle: "delimit"
}
);
});
editorXml = CodeMirror.fromTextArea(document.getElementById("editXmlFile"), {
lineNumbers: true,
mode: 'scxml',
indentUnit: 4,
autoCloseTags: true,
matchBrackets: true,
extraKeys: {
"'>'": function (cm) { cm.closeTag(cm, '>'); },
"'/'": function (cm) { cm.closeTag(cm, '/'); },
"' '": function (cm) { CodeMirror.xmlHint(cm, ' '); },
"'<'": function (cm) { CodeMirror.xmlHint(cm, '<'); },
"Ctrl-Space": function (cm) { CodeMirror.xmlHint(cm, ''); }
}
});
注意在XML提示工作的extraKeys
中,如何在那里获得JavaScript提示?从JavaScript提示帮助来看,似乎我会做一些事情:
CodeMirror.commands.autocomplete = function(cm) {
CodeMirror.simpleHint(cm, CodeMirror.javascriptHint);
}
... extraKeys: {"Ctrl-Space": "autocomplete"} ...
但不管怎样,我需要知道我所使用的模式(XML或JavaScript)才能使用simpleHint
与xmlHint
。任何人都知道如何做到这一点?
编辑:cm.getMode().name
和cm.getOption('mode')
当我在任一部分时,只返回scxml
谢谢!
答案 0 :(得分:0)
我认为您应该能够CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(POS).state).mode.name
发送,其中POS
是您感兴趣的{line, ch}
位置。它会返回"xml"
之类的名称或"javascript"
,描述该位置的内部模式。