powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Редактор кода
19 сообщений из 19, страница 1 из 1
Редактор кода
    #32564997
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, стукноло мне как-то в голову написать редактор кода (не важно какого, любого). Ну и соответственно хочеться чтоб ключевые слова выделялись другим цветом... Короче все как Visual Studio например. Вот встал вопрос, как это реализовать? Первый очевидный ответ, заюзать RichTextBox и там красить, но честно говоря вариант не из лутших... Во-первых нужно учитывать кучу всяких вариантов, после применения SelctedTextColor (так помоему наз-ся) вводимый текст начинает краситься в тот же цвет.
Во-вторых выделение текста не иногода не успевает прорисоваться достаточно быстро чтобы быть незаметным, а это очень раздражает. Короче есть куча претензий которые заставляют подумать о альтернативном варианте.
Отсюда вопрос, а какой вариант?
Сразу говорю, варианты типа, залазим на сайт такой то, качаем такойто контрол и радуемся жизни не подходит (хотя бы потому что не интерестно)
Можно ли обойтись без System.Drawing? Хотелось бы услышать ваши размышления по этому поводу...
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Редактор кода
    #32565075
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да в RichTextBox текст красить с помощью SelctedTextColor - последнее дело, так некрасиво получается, что аж противно.
Я вот было время решил на Дельфи написать среду разработки для PHP, т.к. все известные мне среды для него меня раздражают своей недоделанностью.
Ещё толком не начал писать, как стал папой и время на хобби быстро улетучилось :).

Соображения такие:
- перехватывать нажатия клавиш и подкрашивать слова только когда слово написано и опознанно как ключевое.
- оформить всё естественно в виде класса/классов, для удобства :)
- унаследоваться от RichTextBox и создать его расширенную версию так сказать....


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Редактор кода
    #32565169
Basilisk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
M234
- перехватывать нажатия клавиш и подкрашивать слова только когда слово написано и опознанно как ключевое.
- оформить всё естественно в виде класса/классов, для удобства :)
- унаследоваться от RichTextBox и создать его расширенную версию так сказать....


Сделать свой контрол от RichEditBox - это хорошая идея.
Только опять же - понадобится анализ текста и расцветка (например в случае загрузки существующего файла)
Можно сделать один класс с поддержкой нескольких языков программирования - нужно сделать коллекции слов для каждого из поддерживаемых языков плюс проверку синтаксиса (типа проверку констант и т.д.).
Проверять и подкрашивоть слова при вводе текста можно только после ввода символов-разделиделей (space ; , = & etc)
Раскрашивать можно путем вставки кодов RTF
...
Рейтинг: 0 / 0
Редактор кода
    #32565203
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверять и подкрашивоть слова при вводе текста можно только после ввода символов-разделиделей (space ; , = & etc)

Да, но делать это надо так сказать "за кадром", без использования ф-ий RichTextBox`а SelctedTextColor и прочих.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Редактор кода
    #32565204
Фотография nex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ключевые слова можно перехватывать при помощи регулярных выражений (Regex). К примеру:

Код: plaintext
1.
2.
3.
string text = "int[] newArr = new int[4];";
Regex rx = new Regex(@"\bnew\b", RegexOptions.IgnoreCase);
Match match = rx.Match(text);

Найдет "new" в тексте, а "newArr" пропустит мимо.
...
Рейтинг: 0 / 0
Редактор кода
    #32565407
Basilisk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
M234
Да, но делать это надо так сказать "за кадром", без использования ф-ий RichTextBox`а SelctedTextColor и прочих.


Использовать RichTextBox.Rtf ?
Добовляя/удаляя из него коды RTF
...
Рейтинг: 0 / 0
Редактор кода
    #32567014
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все же, что будет производительней, прямой перехват вводимых символов или регулярные выражения?
Перехват не плох, но очень объемен по размеру кода.
Регулярные выражения тоже ничего, но каждый раз сканить весь текст не особо прикольно... хотя можна например сканить только активную строку... и работает для файл открытия файлов...

Согласен, вставка RTF тегов гораздо лутше чем SelectedTextColor... уж покрайней мере выглядит сипатичней :)
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Редактор кода
    #32567147
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я писал в своей проге a la SQL Query Analyzer
syntax highlight для T-SQL с использованием регулярных выражений.

На о объемах до пары сотен строк работает очень даже ничего.
...
Рейтинг: 0 / 0
Редактор кода
    #32567195
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мне типа того и надобно... но вот хотелось бы приличную производительностьпри объемах близких к тысяче строк... Ну ежли на выходных времени немоного будет, попробую... и обательно раскажу о результатах :)
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Редактор кода
    #32568151
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
viperИ все же, что будет производительней, прямой перехват вводимых символов или регулярные выражения?

если просто надо раскрасить ключевые слова, то
имхо, делаем массив этих самых ключевых слов, а лучше хештаблицу "первая буква кл.слова - всё слово", перехватываем нажатия клавишь посимвольно, выбираем слово из хэштаблицы по первому символу, заводим какой-то указатель на символ в строке и двигаем его, пока приходят правильные чары. Если дошли до конца(+пробел) - слово ключевое, красим и выделяем, если пришёл сивол, которого нет в строке - откатываетмся к выбору из хештаблицы.
Должно быть быстро.
...
Рейтинг: 0 / 0
Редактор кода
    #32568153
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если несколько кл. слов на одну букву - тогда в хештаблице не строка, а дерево символов. И при приходе неправильного чара для текущей ветви надо проверять все остальные.
...
Рейтинг: 0 / 0
Редактор кода
    #32568179
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dronopotamus
если просто надо раскрасить ключевые слова, то
имхо, делаем массив этих самых ключевых слов, а лучше хештаблицу "первая буква кл.слова - всё слово", перехватываем нажатия клавишь посимвольно, выбираем слово из хэштаблицы по первому символу, заводим какой-то указатель на символ в строке и двигаем его, пока приходят правильные чары. Если дошли до конца(+пробел) - слово ключевое, красим и выделяем, если пришёл сивол, которого нет в строке - откатываетмся к выбору из хештаблицы.
Должно быть быстро.

Это так до тех пор пока не задумаешься о существовани комментариев -строчных и блочных, строковых константах и пр.
...
Рейтинг: 0 / 0
Редактор кода
    #32568190
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, с коментариями лажа получаеться... причем самые противные коментарии типа /*.....*/ , прийдеться хранить еще и статус строки (содержит коментарий/ не содержит)... А может даже луише хранить начальную и конечную позицию в тексте всех коментариев... Громоздко получаеться , однако, но лутшего варианта я пока не вижу, мож у кого-то есть идеи на сей счет?
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Редактор кода
    #32568198
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и раз уж пошла такая пьянка, предлагаю подумать еще и над таким вопросом, охота понятное дело после определенного оператора (., -> ну и тд) вываливать список членов. Как с таким бороться? Возьмем самый простой случай, sql... тоесть нужно проследить за всеми локальными/лобальными переменными/временными таблицами (с колонками таблиц все и так ясно). Моя думает что походу дела еще не мешало бы строить дерево этих вещей (корень название процедуры/батча и т.д, листья соответственно переменные/таблички). Но вот как определить в теле чего мы находимся? Опять сканить? Или еще и ко всему хранить позиции начала и конца?

ЗЫ Я понимаю,что как-то странно выглядит, я задаю вопросы и сам на них пытаюсь ответить но скажем так, не то, что я вообще не знаю как это реализовать, просто я хочу услышать ваше мнение, может я что-то не так понимаю или просмотрел какой-то вариант...
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Редактор кода
    #32568281
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viperМда, с коментариями лажа получаеться... причем самые противные коментарии типа /*.....*/ , прийдеться хранить еще и статус строки (содержит коментарий/ не содержит)... А может даже луише хранить начальную и конечную позицию в тексте всех коментариев... Громоздко получаеться , однако, но лутшего варианта я пока не вижу, мож у кого-то есть идеи на сей счет?

Я приблизительно так и делаю. Дроблю текст на лексемы. Держу в памяти таблицу лексем, при введении, изменении символа(ов), пересматриваю от введенной позиции до первой "неизмененной" лексемы. Только этот участок и перераскрашиваю.

Выношу на суд общественности свой исходник. Если кто выскажет конструктивные замечания буду только рад.
...
Рейтинг: 0 / 0
Редактор кода
    #32568283
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Редактор кода
    #32568284
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Редактор кода
    #32568285
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Редактор кода
    #32568288
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Редактор кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]