Я пытаюсь создать оверлей режима для CodeMirror.
У меня есть куча протестированных регулярных выражений, которые соответствуют участкам строки (из потока), и я хотел бы использовать их для сопоставления и токенизации части строки.
Например:
# h1
Становится:
<span class="..."><span class="cm-overlay cm-markup">#</span> h1</span>
Кроме аддона simplemode
, мне не удалось найти примеров использования регулярных выражений в режимах. Этот вопрос очень похож на то, что я делаю, но нет ответов о том, как вернуть токен только для подмножества строки потока: CodeMirror - Использование RegEx с наложением
Мне удалось создать следующий режим, который работает, но соответствует всей строке, поэтому выдает 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
, чтобы «съесть» совпадающие символы, но не упоминает, как только маркировать подраздел, продолжая использовать регулярные выражения.
Я действительно понятия не имею, как продолжить.