Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SynUniHighlighter и SynEdit > Подсветка ключевых слов в диапазонах


Автор: Kibab 3.12.2004, 18:55
Я поднял этот вопрос в комментариях о SynPlus на wincmd.ru, и теперь по просьбе авторов создаю и здесь. Итак, суть проблемы:

Хотелось бы, чтоб можно было не отменять действие подсветки ключевых слов в диапазонах... Вот я для схемы PHP хотел сделать подсветку блока try{..} и catch{...}. Однако, чтобы все было корректно, приходится ВСЕ узлы в Root (Control, Numbers, Functions и т.д.) копировать в узел Exceptions (=диапазон), чтобы подсветка работала как надо. Это, конечно, выход, однако не очень красивый... Если можно, предусмотрите, пожалуйста, в дочерних диапазонах возможность применения правил для ключевых слов родительского узла!

Vitalik, напиши, пожалуйста, здесь, как ты хочешь выйти из ситуации?

Автор: Vitalik 7.12.2004, 12:10
Kibab, спасибо, что создал эту тему. Извини, что так задержался с ответом. У меня скоро сессия и поэтому сейчас совсем мало времени smile

Подобная тема немного обсуждалась в http://www.fforum.ru/index.php?showtopic=4688&view=findpost&p=138595 (страницы 35 и 36).

Тогда я предложил следующее: сделать новый вид правил: так называемые правила-ссылки. Их идея заключается в том, что правило-ссылка является не отдельным правилом, я ссылкой на уже существующее (и таким образом является его точной "копией"). Разработку этих правил-ссылок остановил один неприятный баг, проявляющийся при создании правила-ссылки внутри правила на которое оно ссылается... smile

Если их реализовать, то такие правила-ссылки на твои ключевые слова можно было бы тогда повставлять внутрь твоих диапазонов try и catch. И всё было бы замечательно.

Хотя вот возник вопрос: может быть и стоит сделать что-то вроде галочки или пункта меню: "Копировать ВСЕ правила из родительского диапазона"? Не усложнит ли это интерфейс?

Kibab, что ты думаешь по всему этому?

Автор: Kibab 9.12.2004, 21:21
Vitalik, та же фигня с сессией, поэтому торможу немного...
Сильно затрудняюсь с ответом, поскольку не знаю, как ты работаешь с правилами. НО: суть бага я представляю так: ссылка ведет на родительское правило, в котором при перечислении (enumetating) правил при применении их к тексту находится в т.ч. и правило-ссылка, которую пытаются применить.... далее stack overflow. Предлагаю: каждому правилу назначить уникальный ID, по которому в том числе прерывать применение правила, если оно было инициировано внутри этого правила. Иными словами, прерывать злобную рекурсию по совпадению ID обрабатываемого в данный момент правила и правила, которое только собираются применить.
Наверняка у тебя правило задается как тип запись (говорю как програмист Delphi в его терминах)

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

Насчет усложнения интерфейса лишней кнопкой - думаю, если версию обозвать "beta", это снимет часть претензий. В принципе, это нормальный выход, наверное...
К тому же, где гарантия, что не скопируется то самое правило-ссылка и при применении не будет опять Stack overflow?

Автор: Vitalik 9.12.2004, 23:43
Цитата(Kibab @ 9.12.2004, 21:21)
Сильно затрудняюсь с ответом, поскольку не знаю, как ты работаешь с правилами.
Цитата(Kibab @ 9.12.2004, 21:21)
Извини если идея не в кассу - я не знаю, как на самом деле работает твоя система правил

Kibab, если тебе интересно, я могу подробно и как можно более понятно описать здесь идеи реализации нашего парсинга smile

У тебя есть желание (хотя бы небольшое smile) разобраться с исходниками компонента и может быть принять участие в разработке? smile

Автор: Гость_Kibab 26.9.2005, 21:36
Vitalik

Нифига себе, как я задержал ответ smile
прошу прощения... За темой не следил, и вот такая фигня smile

Плз давай переписываться не в форуме по поводу принять участие в разработке, что я хочу сделать, потому что использую сей плагин как основной рабочий инструмент. Мыло webmaster[собака]kibab[точка]com


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)