5

ウェブサイト用のテキスト エディターが必要だったので、最近 codemirror を始めたばかりですが、プログラムについてはよくわかりません。エディターを JavaScript モードで動作させましたが、エディター用の構文を作成する必要があります。これは、エディター用のモードを作成する必要があることを意味すると思いますが、これを行うのに問題があります。マニュアルを数回読みましたが、おそらくこのような作業をしたことがないため、何かがうまくいきません。とにかく今は、単純な加算、減算、および乗算関数を作成して、コツをつかむ必要があります。誰かが私をこれで転がすことができれば、私は非常に感謝しています.

4

1 に答える 1

6

まず第一に、本当に新しいモードが必要ですか? 多くの組み込みモードのいずれかによってまだ提供されていないカスタムDSL構文をサポートしようとしていますか?

マニュアルには、このための情報に関する良いスタートがあります。宣言型アプローチにシンプルモードアドオンを使用する単純なケースについて言及しています。を使用して新しいモードを作成する方法について説明し、CodeMirror.defineModeモード開発の最も重要な機能について言及しますtoken(stream, state)

文字ストリームを入力として受け取り、それをトークンを超えて進め、そのトークンのスタイルを返す関数。

マニュアルには、2 つのモード例も記載されています。本当に単純なモードの場合はdiffを、より複雑なモードの場合はclikeをお勧めします。また、モード ディレクトリで使用可能なモードを調べて、必要に応じて既存のモードを変更できないかどうかを確認することも価値があります。

参考までに、以下に差分モードをインラインで含めます。

// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
"use strict";

CodeMirror.defineMode("diff", function() {

  var TOKEN_NAMES = {
    '+': 'positive',
    '-': 'negative',
    '@': 'meta'
  };

  return {
    token: function(stream) {
      var tw_pos = stream.string.search(/[\t ]+?$/);

      if (!stream.sol() || tw_pos === 0) {
        stream.skipToEnd();
        return ("error " + (
          TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, '');
      }

      var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd();

      if (tw_pos === -1) {
        stream.skipToEnd();
      } else {
        stream.pos = tw_pos;
      }

      return token_name;
    }
  };
});

CodeMirror.defineMIME("text/x-diff", "diff");

});

これは非常にシンプルなモードで、状態情報さえ含まれていません (したがって、'token' メソッドの 2 番目のパラメーターは含まれていません)。

これが役立つことを願っています。

于 2015-10-15T14:16:01.793 に答える