Символы новой строки в CodeMirror
Я пишу синтаксический анализатор для CodeMirror, который анализирует код по одному символу за раз и выводит стиль, основанный на принятом переходе состояния. В коде используется символ перевода строки \n, чтобы вызвать переход состояния, но CodeMirror, кажется, удаляет их из входного текста (console.log (char === '\n') всегда возвращает false)
Есть ли способ настроить CodeMirror, чтобы в качестве входных данных указывалось \n? В документации, похоже, не упоминается проблема.
Мой объект состояния отформатирован, как показано ниже
{
state1: {
active: true,
edges: {
'\n': 'state2'
}
},
state2: {
active: false,
edges: {
'#': 'state1'
}
}
}
Если потребуется дополнительная информация или уточнение, дайте мне знать
1 ответ
Имеющий console.log (char === '\n')
всегда возвращаюсь false
не обязательно означает, что CodeMirror удаляет символы новой строки - текст передается как есть, т.е. \n
будет передан как два символа - \
а также n
,
Попробуйте и используйте token
метод в вашем режиме, чтобы обнаружить \n
в потоке:
var newLine = '\\n';
token : function(stream) {
var next = stream.next();
var tokenName = null;
if ('\\' === next) {
var match = stream.match(new RegExp(newLine.charAt(1)));
match && (tokenName = 'some-style' || null);
}
return tokenName;
}
Вы также можете обобщить этот подход для работы с любой последовательностью, а не только \n
:
var sequence = 'some-sequence';
token : function(stream) {
var next = stream.next();
var tokenName = null;
var ch = sequence.charAt(0);
// search for the first letter
if (next === ch) {
// try to match the rest of the sequence
var match = stream.match(new RegExp(sequence.substring(1)));
match && (tokenName = 'some-style' || null);
}
return tokenName;
}
Это не было проверено, но я подозреваю, что было бы достаточно, чтобы сделать трюк. Пожалуйста, дайте мне знать, как у вас дела.