-
Коллеги!
Есть у кого опыт по созданию своего Highlighter'а для TSynEdit?
В принципе понятно, что нужно писать потомка для TSynCustomHighlighter. Также понятно, что можно воспользоваться SynGen.exe (идет вместе в TSynEdit). Но все это как-то мутно описано.
Может есть хорошее описание сабжа?
Спасибо!
-
На sql.ru говорили, что это одно из тестовых заданий :) Тестируешься ?
-
> На sql.ru говорили, что это одно из тестовых заданий :) > Тестируешься ?
Нет.
Надоело свой редактор поддерживать для встроенного скриптового языка. Язык хочу оставить, а редактировать в TSynEdit сделать. Соответственно встала проблема Highlighter'а.
Игорь, ты что-то про это знаешь?
Я вчера весь день тему изучал. Главный вопрос такой: вот QSynHighlighterPas.pas (для паскаля) они писали "руками" или сгенерировали из чего-то?
У них там есть SynGen.exe для генерации. Но он мутно описан. К тому же, глядя на код QSynHighlighterPas.pas, не могу понять - как он сгенерен из SynGen.exe. Похоже, что QSynHighlighterPas.pas таки писан "руками".
Но если это так, то это жуть какая-то, с этими ихними Hash.
Плюс ко всему - в интернете очень обрывочная информация...
-
> Игорь, ты что-то про это знаешь?
Не сталкивался
-
У них есть SynEdit\Demos\HighlighterDemo\. Однако мне от этого не намного легче стало, когда я поверхностно этим вопросом интересовался.
-
Коллеги!
Может, кому полезно будет.
1. Генератор SynGen\SynGen.exe - ерунда. А) Описан плохо. Б) Не понятно, как работает.
2. Делать надо руками. За пример взять что-то не очень сложное. Я взял SynHighlighterRuby.pas. Ибо SynHighlighterPas.pas дюже большой.
3. По сути - это автомат. Главный метод MakeMethodTables (у меня версия SynEdit 2.0.6 - последнюю не взял, ибо у меня еще Delphi2007, где нет уникода, а в последней версии SynEdit все на уникоде - у меня не вышло заставить работать его с кириллицей на Delphi2007).
Плюс Ruby - там "забили болт" на Hash (я вообще не понял, зачем он нужен - видимо, для скорости).
4. В общем берете SynHighlighterRuby.pas, делаете свой класс и последовательно дописываете автомат разбора. Какие-то вещи можно брать и из SynHighlighterPas.pas (я брал разбор строк оттуда).
5. Удобная деталь. Полученный SynHighlighter можно использовать как парсер (если его, конечно, верно написать - например в Ruby они не верно строки разбирают - в случае 'abc''defg' у них получается два токена 'abc' и 'defg').
6. Для моего случая SynHighlighter был написан часа за 2-3.
Надеюсь, полезно.
|