2016-10-31 5 views
0

Я пишу пользовательский оверлей для создания токенов типа 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); 
}); 

ответ

0

Если кто-нибудь натыкается на это, вот решение вышеупомянутой проблемы:

Мы в основном только выделить между началом и концом двойных кавычек, в моем конкретном случае у меня всегда было = = до первого », если это не так, вы можете легко установить другой флаг.

 Смежные вопросы

  • Нет связанных вопросов^_^