0

CodeMirror のモード オーバーレイを作成しようとしています。

(ストリームからの) 行のセクションに一致するテスト済みの正規表現がたくさんあります。これらを使用して、行の一部を一致させてトークン化できればと思います。

例えば:

# h1

なる:

<span class="..."><span class="cm-overlay cm-markup">#</span> h1</span>

アドオン以外にsimplemode、モードで正規表現を使用する例を見つけることができません。この質問は私がやっていることと非常に似ていますが、ストリームラインのサブセットのみのトークンを返す方法についての回答はありません: CodeMirror - Using RegEx with overlay

動作する次のモードを作成することができましたが、行全体に一致するため、次のような html が生成されます。<span class="cm-overlay cm-markup"># h1</span>

CodeMirror.defineMode("markdown-extra", function() {
    return {
        token: function(stream, state) {
            markup = stream.match(/^([#]{1,6})[^#]/g); // matches markdown header syntax
            stream.skipToEnd();

            if (markup){
                console.log(markup, stream)
                return "markup"
            }

            return null
        }
    };
});

ドキュメントではstream.match、一致する文字を「食べる」ために使用することを求めていますが、正規表現を使用しながらサブセクションのみをトークン化する方法については言及していません。

どうやって続けたらいいのかわからない。

4

1 に答える 1