8 / 8 / 0
Регистрация: 14.03.2011
Сообщений: 61
|
|
1 | |
Подсветка синтаксиса08.04.2011, 22:35. Показов 10339. Ответов 16
Метки нет (Все метки)
Уважаемые форумчане ,
Мне нужно написать текстовый редактор с подсветкой синтаксиса PHP, HTML и JavaScripts. Сам редактор сделал, но встал в тупик перед необходимостью подсветки синтаксиса.Предполагаю только, что можно использовать базу(ы) данных. Если Вы можете пожалуйста объясните мне, как это можно реализовать. Заранее благодарю Вас.
0
|
08.04.2011, 22:35 | |
Ответы с готовыми решениями:
16
Подсветка синтаксиса Подсветка синтаксиса Подсветка синтаксиса различных языков в RichTextBox подсветка синтаксиса |
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 |
Подскажи пожалуйста, где там исходный код?
Добавлено через 5 минут Если кто-то имеет другие идеи прошу написать. Спасибо.
0
|
87 / 85 / 10
Регистрация: 04.04.2011
Сообщений: 221
|
|
08.04.2011, 23:02 | 4 |
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 |
делаешь обычный текстовый файл с несколькими секциями. В начале каждой секции прописываешь код цвета шрифта (можно еще и шрифт при желании), потом в отдельных строках перечисляешь слова, которые должны подсвечиваться вышеуказанным цветом. При запуске редактора считываешь инфу из этого файла и раскрашиваешь все слова в соответствии с настройками.
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, тоже глянь в тему, там дали направление поисков, я пока еще не смотрел, но может тебе будет полезным... маленький кусочек кода на шарпе, но думаю, подобное легко встретится и в тех, которые рассматривает автор
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 |
А что Вы подразумеваете под "простой RichTextBox на форме"?
В данном случае я имею в виду файл типа *.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 |
Возможно, но мне кажется , что в моём варианте можно более менее просто осуществить поиск ключевых слов.
0
|
10.04.2011, 16:20 | |
10.04.2011, 16:20 | |
Помогаю со студенческими работами здесь
17
Подсветка синтаксиса Подсветка синтаксиса Подсветка текста(синтаксиса) в richtextbox Регулярные выражения. Подсветка синтаксиса. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |