Я бы так подумал. (Я не использую Notepad ++, потому что я не использую Windows, поэтому у меня нет хорошего способа проверить эту теорию.)
Насколько я понимаю, Noteoad ++ основан на Scintilla, а Scintilla предоставляет механизм добавления пользовательских лексеров, использующий протокол, описанный в файле doc / Lexer.txt в исходном коде Scintilla.
По сути, чтобы сгенерировать сгибаемый текст процесса лексера с использованием этого протокола, вам нужно будет либо прочитать текст, который нужно отсканировать, во временный буфер, либо показать yylex
, как читать текст (что означает компиляцию лексера с помощью пользовательского YY_INPUT
макроса ).
Я бы go для первого варианта, потому что для настройки YY_INPUT
, вам нужно убедиться, что несколько значений видны в функциях, которые включают расширения YY_INPUT
и, к сожалению, авторы Flex никогда не принимал во внимание такую потребность. (Однако это можно сделать. Я просто избегаю длинного описания того, как это сделать.)
Чтобы предоставить правильные аргументы для styler.ColourTo()
, вам необходимо отследить текущий сцинтиллы положение курсора. Для этого инициализируйте переменную курсора startPos
и увеличивайте ее с cursor += yyleng
в каждое действие . Flex позволяет легко что-то делать в каждом действии: просто определите макрос YY_USER_ACTION
. ( ПРИМЕЧАНИЕ: Если вы используете yyless
или yymore
, вам необходимо исправить положение курсора в соответствующих действиях.)