Правила  •  FAQ  •  Поиск  •  Пользователи  •  Группы
Профиль  •  Войти и проверить личные сообщения  •  Вход  •  Регистрация 
 
 
Подсветка кода в managed c++
 
Начать новую тему   Ответить на тему    Список форумов FREESTUDENTS -> Архив
 
Автор Сообщение
Snake!



Репутация: 0    Сообщения: 1941
Стаж: 3 года 4 месяца
Сообщение24.07.2006 20:03 Подсветка кода в managed c++ Ответить с цитатой

Подскажите, как можно реализовать сабж.
Надо сделать в текст боксе подсветку отдельных слов (если это возможно конечно).
И какие есть вообще алгоритмы разбора выражений? У меня пока что только одна идея есть: при изменении содержимого бокса просматривать весь текст, предварительно записывая каждый токен в структуру, потом сравнивать каждый элемент структуры со словарём и выводить определённым цветом.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
roman koff



Репутация: +2   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург Сообщения: 369
Стаж: 2 года 10 месяцев
Сообщение25.07.2006 8:39 Ответить с цитатой

В теории надо писать свой контрол и работать с процедурой вывода в окно (анализировать только область вывода). Если внимательно посмотреть на большинство редакторов с подсветкой, то они создаются на базе не текствого поля (типа rtf) а на основе grid control.

Вообще регулярные выражения очень могут помочь. Я в свое время брался писать, но потом плюнул. Очень много нюансов.

Лучше поискать готовый контрол, которому скармливается словарь и правила. Нечто подобное реализовано в текстовом редакторе Aditor.

Если решишь задачу, дай знать. Тоже интересно ...

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Blackmore



Репутация: 0    Сообщения: 1334
Стаж: 3 года 4 месяца
Сообщение25.07.2006 10:42 Ответить с цитатой

Попробуй классик Regex посмотреть, проблему поиска токенов должен решить.

_________________
she turns and says "are you alright?"
I said "I must be fine cause my heart's still beating"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Snake!



Репутация: 0    Сообщения: 1941
Стаж: 3 года 4 месяца
Сообщение25.07.2006 11:32 Ответить с цитатой

roman koff
Вообще-то есть способо разбора текста при помощи написаня программ под flex и yacc (или bison), но мне они не особо нравятся, так что я думал как-нить по другому решить данный вопрос.
А прога, написанная с использованием вышеуказанных пакетов есть, могу кинуть потом.
Кстати, наткнулся на хороший редактор scintilla, идёт вместе с исходниками под всё =) сейчас разбираюсь.
Blackmore
Угу, посмотрю.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Snake!



Репутация: 0    Сообщения: 1941
Стаж: 3 года 4 месяца
Сообщение26.07.2006 22:14 Ответить с цитатой

Я тут нарыл простенький транслятор, который разбирает строку на выражения. Мона потом выражения на выходе сравнивать со словарём и выводить на экран нужным цветом. По крайней мере при загрузке файла всё просто: читаем весь текст и выводим. А вот как реализуется подсветка по время редактирования конкретного текста я пока не очень понимаю. Видимо надо смотреть от начала редактируемого слова и до конца текста.
Кстати, код который генерирует flex и yacc почему-то отказывается работать с пользовательскими классами. Может кто-нибудь работал с этими пакетами и знает, как это дело "лечить"?

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
roman koff



Репутация: +2   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург Сообщения: 369
Стаж: 2 года 10 месяцев
Сообщение27.07.2006 8:27 Ответить с цитатой

Flex и yacc вещи, конечно мощные, но их надо потом аккуратно доводить до ума (до современных платформ).

По поводу разбора текста, во всех популярных языках существуют встроенные высокоуровневые методы для реализании задачи, например instr для (C/VB).NET, а также регулярные выражения. Несложно самому написать парсер.

А вот с подсветкой текста при редактировании - это непростая логическая задача. Надо аккуратно продумывать логику и оптимизацию алгоритма.

На многих программистких форумах эта тема периодически мусолится, но решения я пока не видел. Наверное кто знает как - молчит в тряпочку Подмигивает

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Blackmore



Репутация: 0    Сообщения: 1334
Стаж: 3 года 4 месяца
Сообщение27.07.2006 16:29 Ответить с цитатой

Первое, что мне пришло в голову, это не разбивать весь текст на токены, а следить за последним редактированным токеном. Ловить к примеру OnTextChanged для текстбокса, выдергивать токен и подсвечивать его, если надо.

_________________
she turns and says "are you alright?"
I said "I must be fine cause my heart's still beating"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Snake!



Репутация: 0    Сообщения: 1941
Стаж: 3 года 4 месяца
Сообщение27.07.2006 21:33 Ответить с цитатой

Blackmore
А если ты допустим п строке "in t" убираешь пробел, то твоя тема по-идее не будет работать, а должна.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
roman koff



Репутация: +2   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург Сообщения: 369
Стаж: 2 года 10 месяцев
Сообщение28.07.2006 8:36 Ответить с цитатой

А если вставляется/вырезается буфер обмена?...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Blackmore



Репутация: 0    Сообщения: 1334
Стаж: 3 года 4 месяца
Сообщение28.07.2006 11:54 Ответить с цитатой

Snake! писал(а):
А если ты допустим п строке "in t" убираешь пробел, то твоя тема по-идее не будет работать, а должна.

Ну почему. Если убрать пробел, то получится новый токен "int", который можно выцепить из строки и подсветить если надо (:

Надо бы попробовать конечно, но мне лень (:


_________________
she turns and says "are you alright?"
I said "I must be fine cause my heart's still beating"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов FREESTUDENTS -> Архив Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы


На главную •  RSS-лента •  PDA-версия
 
Powered by phpBB © 2001, 2007 phpBB Group
Hosted by INFOBOX