Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/56: Рейтинг темы: голосов - 56, средняя оценка - 4.59
8 / 8 / 0
Регистрация: 14.03.2011
Сообщений: 61
1

Подсветка синтаксиса

08.04.2011, 22:35. Показов 10339. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые форумчане ,
Мне нужно написать текстовый редактор с подсветкой синтаксиса PHP, HTML и JavaScripts.
Сам редактор сделал, но встал в тупик перед необходимостью подсветки синтаксиса.Предполагаю только, что можно использовать базу(ы) данных. Если Вы можете пожалуйста объясните мне, как это можно реализовать.
Заранее благодарю Вас.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2011, 22:35
Ответы с готовыми решениями:

Подсветка синтаксиса
Здравствуйте. Можете пожалуйста помочь с подсветкой синтаксиса на C#. После того, как у меня...

Подсветка синтаксиса
вижу много вопросов как зделать подсветку синтаксиса нескольких языков. я сам пишу что то вроде...

Подсветка синтаксиса различных языков в RichTextBox
доброго времени суток всем. пишу сейчас приложение, в котором было бы возможно сохранять примеры...

подсветка синтаксиса
Есть ли у кого пример подсветки необходимых слов в Richtextboxe , с реализацией Undo, Redo?

16
87 / 85 / 10
Регистрация: 04.04.2011
Сообщений: 221
08.04.2011, 22:44 2
http://sourceforge.net/projects/e-plus-plus/

Там проект вроде на VB.NET, но подход и компоненты можно присмотреть
1
8 / 8 / 0
Регистрация: 14.03.2011
Сообщений: 61
08.04.2011, 22:55  [ТС] 3
Цитата Сообщение от shapod Посмотреть сообщение
http://sourceforge.net/projects/e-plus-plus/

Там проект вроде на VB.NET, но подход и компоненты можно присмотреть
Подскажи пожалуйста, где там исходный код?

Добавлено через 5 минут
Если кто-то имеет другие идеи прошу написать.
Спасибо.
0
87 / 85 / 10
Регистрация: 04.04.2011
Сообщений: 221
08.04.2011, 23:02 4
Цитата Сообщение от Sergo_Dubovick Посмотреть сообщение
Подскажи пожалуйста, где там исходный код?
в разделе "Files" лежит архив с исходниками...
0
8 / 8 / 0
Регистрация: 14.03.2011
Сообщений: 61
09.04.2011, 10:40  [ТС] 5
А есть ли у кого-то другие идеи.
0
194 / 193 / 17
Регистрация: 07.11.2010
Сообщений: 477
09.04.2011, 10:51 6
Цитата Сообщение от Sergo_Dubovick Посмотреть сообщение
А есть ли у кого-то другие идеи.
делаешь обычный текстовый файл с несколькими секциями. В начале каждой секции прописываешь код цвета шрифта (можно еще и шрифт при желании), потом в отдельных строках перечисляешь слова, которые должны подсвечиваться вышеуказанным цветом. При запуске редактора считываешь инфу из этого файла и раскрашиваешь все слова в соответствии с настройками.
1
8 / 8 / 0
Регистрация: 14.03.2011
Сообщений: 61
09.04.2011, 10:57  [ТС] 7
Leaх, спасибо большое.
Буду пробовать.
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
09.04.2011, 11:24 8
Просто так реализовать не получится. Для начала надо создать свой контрол, реализовать для него виртуальный режим (для того чтоб не зависало приложение при загрузке содержимого и отрисовке стиля).

Далее, вам необходимо знать спецификацию языка, в самом простом случае, это XML с ключевыми словами (foreach, class, function, bla bla).
После этого - надо выделить ключевые знаки, но это уже для интерфейса самого языка (на пример комментарий, в C# - // и /* */).

Далее, если вы реализовали контрол, то для видимой части вас надо сделать раскраску.
Алгоритм примерно такой:
Проходимся по отображаемой части текста (желательно это все делать в отдельном потоке), и ищем ключевые слова, если таковые есть - выделяем их цветом.
Далее, накладываем условие: если в начале строки есть знак комментария это для // - то тогда до конца строки цвет текста и шрифт, если знак /* такой - тогда запоминаем его позицию, и ищем окончание комментария (*/), внутри все выделяем цветом комментария.

И так далее, обрабатываете условия и соответственно применяете стиль.

Это как бы обобщенно я попытался рассказать как и что делать, но есть еще одно делать надо все таким образом, чтобы не вызывались медленные функции языка (к примеру вместо Select(n=>n > 0)) используйте обычные циклы с условием, это ускорит отклик интерфейса.

ЗЫ. Если вы будете использовать для этой задачи RichTextBox - и будете делать это для всего текста (не только видимой части) - то у вас будет все тормозить, в случае больших объемов текста, потому что вызывать прорисовку надо будет всегда при изменении текста, а представте что будет если текста у вас 1000 строк и более...

ЗЫЫ. Вообще то отслеживать изменение текста можно по текущей позиции курсора... и вызывать перерисовку для именно изменяемого текста...
0
гроза ленивых студентов
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
09.04.2011, 11:25 9
Leax, в этой теме я говорил о твоем варианте - он не покатит...причины - там же
Sergo_Dubovick, тоже глянь в тему, там дали направление поисков, я пока еще не смотрел, но может тебе будет полезным...

Цитата Сообщение от Konctantin Посмотреть сообщение
ищем ключевые слова, если таковые есть - выделяем их цветом.
маленький кусочек кода на шарпе, но думаю, подобное легко встретится и в тех, которые рассматривает автор
C#
1
2
string stringS;
(string) something;
как будет вести себя описанной тобой алгоритм в таких ситуациях?
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
09.04.2011, 11:33 10
так и будет, вы же можете разложить текст по словам, а можете просто проходится по коллекции символов, на низком уровне - это практически тоже самое.

ЗЫ. Или вы думаете Split() даст выиграш?
0
гроза ленивых студентов
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
09.04.2011, 11:35 11
неа...тут надо будет учитывать еще и то, какие символы идут перед и после искомых...в общем, метод, насколько я понимаю, верный в теории, но на практике его придется очень сильно дорабатывать...

ну то есть...допустим мы где-то забили, что string - это ключевое слово некоего языка...
потом в проге мы бежим по какому-то коду и пытаемся подсветить string...как мы можем это сделать?
1) начать поиск вхождения string в наш код...с одной стороны - он выделит ключевые слова...но он так же выделит и переменные вида stringS
2) начать поиск вхождения "string " (пробел в конце), чтобы не нарваться на такие переменные..но тогда погорим на варианте (string)

вот что я пытался сказать...

и кстати да, Konctantin, если Split'ом со всякими пробелами, скобками и прочим разделить весь код (или хотя бы отображаемую его часть)...хм...и правда можно ведь избавиться от описанных косяков...
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
09.04.2011, 12:24 12
но на практике его придется очень сильно дорабатывать...
А вы как хотели, пару строк кода и все?
1
8 / 8 / 0
Регистрация: 14.03.2011
Сообщений: 61
09.04.2011, 16:23  [ТС] 13
Спасибо всем.
А скажите , пожалуйста, можно ли ключевые слова брать из базы данных?
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
09.04.2011, 16:29 14
ем... а что вы понимаете под "База данных"?

Да и все равно перечень вы будете хранить в коллекции программы (List<> Dictionary<>)

PS. Вы вообще представляете что это такое или у вас текстовый редактор что вы написали, случайно не простой RichTextBox на форме?
0
8 / 8 / 0
Регистрация: 14.03.2011
Сообщений: 61
09.04.2011, 16:34  [ТС] 15
Цитата Сообщение от Konctantin Посмотреть сообщение
Вы вообще представляете что это такое или у вас текстовый редактор что вы написали, случайно не простой RichTextBox на форме?
А что Вы подразумеваете под "простой RichTextBox на форме"?

Цитата Сообщение от Konctantin Посмотреть сообщение
а что вы понимаете под "База данных"?
В данном случае я имею в виду файл типа *.mdb.А Вы?
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
10.04.2011, 09:54 16
База данных, а *.mdb это всего лишь способ хранения данных. и в вашем случае - это не очень удобно ИМХО.
0
8 / 8 / 0
Регистрация: 14.03.2011
Сообщений: 61
10.04.2011, 16:20  [ТС] 17
Цитата Сообщение от Konctantin Посмотреть сообщение
и в вашем случае - это не очень удобно ИМХО
Возможно, но мне кажется , что в моём варианте можно более менее просто осуществить поиск ключевых слов.
0
10.04.2011, 16:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2011, 16:20
Помогаю со студенческими работами здесь

Подсветка синтаксиса
Я практически новичок в C#. Помогите сделать подсветку синтакиса. Вобщем, надо выделить цветом...

Подсветка синтаксиса
Доброго времени суток ув. профессионалы. программа получает исходный код, форматирует и делает...

Подсветка текста(синтаксиса) в richtextbox
Добрый день! Есть ли способ быстро подсветить определенный текст в richtextbox? один способ я...

Регулярные выражения. Подсветка синтаксиса.
Подскжите как составить выражение для поиска точного слова в строке. string = &quot;sum min max&quot; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru