0

engageいくつかのカスタム機能/スタイリングのタイプのトークンを作成するカスタム オーバーレイを作成しています。

私は現在"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);
});
4

1 に答える 1