Символы новой строки в 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;
}

Это не было проверено, но я подозреваю, что было бы достаточно, чтобы сделать трюк. Пожалуйста, дайте мне знать, как у вас дела.

Другие вопросы по тегам