Можно ли использовать регулярные выражения для определения подсветки синтаксиса в Scintilla? И если да, то как это сделать?Scintilla.NET синтаксис на основе регулярных выражений на основе выражений
У меня есть настраиваемый язык для обработки, который нельзя описать простыми словами ключевых слов и разделителей. Значение конкретных структур на этом языке зависит только от их положения относительно ключевых слов. Я использую синтаксический анализатор, основанный на регулярном выражении, для этого формата, все, что мне нужно, - применять правила регулярного выражения в виде текстовых стилей.
Я имею в виду, если что-то соответствует regex1, он должен иметь style1. Является ли это возможным? Как?
Если нет - могу ли я устанавливать стили для выбранных вручную диапазонов? Я хочу присвоить номер стиля указанному диапазону символов в редакторе. Как это сделать?
Можно ли определить стили Scintilla в коде, а не в xml-файле?
EDIT: ОК, я нашел способ.
foreach (Match m in Patterns.Keyword0.Matches(Encoding.ASCII.GetString(e.RawText)))
e.GetRange(m.Index, m.Index + m.Length).SetStyle(1);
Проблема заключается в свойствах RawText. Это байтовый буфер кодированного текста UTF-8. Свойство text содержит хороший текст UTF-16, но метод GetRage принимает смещение байта, а не смещение символов. Если я использую преобразование в каждом событии TextChanged, я теряю почти все преимущества от использования Scintilla.
Конечно, самый простой способ - изменить внутреннюю кодировку на UTF-16, но когда я это сделаю, я получаю исключение, говоря, что эта кодировка не поддерживается. Единственный поддерживаемый, похоже, UTF-8, который смехотворно тяжелый (и медленный) для обработки.
Я нахожусь на стене здесь.
Похоже, что я должен дать Сцинтиллу вторую попытку. В моей первой попытке я испытал недопустимое отставание во время редактирования выделенного текста. В настоящее время я остаюсь с FTCB, который, как оказалось, быстро пылает, когда парсер компилируется во внешнюю dll. Оба они очень похожи друг на друга. Почти такие же функции. – Harry