我正在编写一个自定义覆盖来engage
为一些自定义功能/样式创建类型标记。
我目前正在创建双引号内的标记,例如"EXP=SOMETHING"
我只需要获取双引号之间的内容:EXP=SOMETHING
,我可以轻松跳过第一个引号并获得类似EXP=SOMETHING"
但我似乎找不到跳过最后一个引号的可行方法引用,我已经在这个问题上敲了很长时间,我开始认为这实际上是不可能的,因为由一个角色支持会返回 aEXCEPTION: Uncaught (in promise): Error: Mode engage failed to advance stream.
这是有道理的。我确定我遗漏了一些东西,我会喜欢一些输入。
遵循产生EXP=SOMETHING"
感谢任何帮助的代码:-)
CodeMirror.defineMode("engage", function(config, parserConfig) {
var engageOverlay = {
startState: function() {return {inString: false};},
token: function(stream, state) {
// If we are not inside the engage token and we are peeking a "
if (!state.inString && stream.peek() == '"') {
// We move the stream to the next char
// Then mark the start of the string
// Then return null to avoid including the first " as part of the token
stream.next();
state.inString = true;
return null;
}
// We are inside the target token
if (state.inString)
{
if (stream.skipTo('"'))
{
stream.next();
state.inString = false;
}
else
{
stream.skipToEnd();
}
return "engage";
}
else
{
stream.skipTo('"') || stream.skipToEnd();
return null;
}
}
};
return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || "xml"), engageOverlay);
});