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