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

Я создал для себя летний проект и решил, что хочу написать простой редактор текста/кода. Я думаю, что до сих пор все шло хорошо. Я создал базовый графический интерфейс и могу выполнять простые операции, такие как открытие, сохранение и создание файлов.

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

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

Кроме того, если у кого-то есть время, я хотел бы услышать комментарии о моем коде, вот репозиторий: https://mcmillhj.beanstalkapp.com/jtexteditor/browse

Основными файлами являются JTextEditor.java и ui/JTextEditorUI.java.


person Hunter McMillen    schedule 19.07.2011    source источник
comment
Вы смотрели Highlighter? и классы HighlightPainter? Пример приведен в руководстве Как использовать текстовые поля.   -  person Moonbeam    schedule 19.07.2011
comment
Возможно, мне не стоило использовать термин «хайлайтер», сейчас, когда я думаю об этом, он кажется двусмысленным. Эти классы буквально выделяют текст, который вы хотите. Я просто хочу, чтобы ключевые слова отличались от обычных слов по цвету. извините за путаницу. Спасибо за вашу ссылку.   -  person Hunter McMillen    schedule 19.07.2011
comment
Я ценю разъяснение! :)   -  person Moonbeam    schedule 19.07.2011


Ответы (1)


Я думаю, вам следует начать читать о лексическом анализе , вы также можете использовать JLex для получения токенов из содержимого файла... вы также должны немного прочитать о компиляторы (что будет непросто)

person Darth Plagueis    schedule 19.07.2011
comment
Я использовал что-то похожее под названием JFlex для создания токенизатора для написанного мной интерпретатора. Итак, вы говорите, что я должен токенизировать все содержимое моего файла, а затем пройтись по токенам в поисках ключевых слов и тому подобного? Кстати, спасибо за ссылку. - person Hunter McMillen; 19.07.2011
comment
да ... или если вам не нравится токенизировать и искать токены в два разных этапа, вы можете сообщить графическому интерфейсу о месте токенов при разборе, чтобы выделить его (используя шаблон наблюдателя или что-то еще, уведомив наблюдатель, когда токен найден), что, вероятно, займет меньше времени, чем выполнение этого на разных этапах. - person Darth Plagueis; 19.07.2011