Я пишу пользовательский оверлей для создания токенов типа engage
для некоторых пользовательских функций/стилей.Codemirror, defineMode внутри doublequotes
Я в настоящее время создает маркеры, которые в двойных кавычках, например, "EXP=SOMETHING"
мне нужно, хотя, чтобы получить только то, что между двойными кавычками: EXP=SOMETHING
, я могу легко пропустить первую цитату и получить что-то вроде EXP=SOMETHING"
, но я не могу найти жизнеспособный способ пропустить последнюю цитату, я так долго стучал головой по этой проблеме, я начал думать, что это на самом деле невозможно, так как резервное копирование символом возвращает EXCEPTION: 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);
});