LINUX.ORG.RU

Swing - подсветка синтаксиса. Варианты реализации?

 , , ,


0

1

Господа, это снова я, только не бейте пожалуйста :) И все еще на Swing, да. Потом буду на пробовать JavaFX, честно.

Хочу простого - многострочное текстовое поле с подсветкой синтаксиса собственного языка. По минимуму - выделение цветом ключевых слов, строк внутри кавычек, числовых констант, и подсветка парных скобок от текущего положения курсора. По максимуму - нет предела совершенству Да, реализация пока на Swing - компонентах, потом планируется вариант на JavaFX. Беглый просмотр инета дал 3 общих варианта:

1) Готовые библиотеки где все из коробки. В принципе не против, только смущает их тяжеловесность, наличие ненужного функционала (мне только свой язык подсвечивать). Но зато там бывает и нумерация строк, и подсветка текущей строки, и свертка-развертка по плюсикам и т.п., что интригует. И конечно надо выбрать библиотеку (например, RSyntaxTextArea) и умудриться подключить её к проекту.

2) Свои написания с нуля на JEditorPane, Document и EditorKit.

3) Вариант 2, но на JTextComponent, java.text.AttributedString и еще каких-то непонятных пока компонентах.

Что посоветуете, доктора?


Свинговые компоненты поддерживают базовые возможности html, только без css и стилей, а как раньше было. Например, так, или вот тут просто про оформление текста.

GblGbl ★★★★★ ()
Последнее исправление: GblGbl (всего исправлений: 2)
Ответ на: комментарий от Adonai

RSyntaxTextArea упоминается в каждой пятой ссылке гугла по связанным запросам. Но я скачал ее, восхитился размерами, и таки не смог запустить/прикрутить к проекту. Скачал также несколько других готовых библиотек, часть из них смог запустить и попробовать, но те, что заработали, не удовлетворили полностью. В итоге сейчас я ваяю собственный велосипед, который будет простой, полностью мной понимаемый и настраиваемый, скорее всего медленный, но должен решать мои задачи. Даже без ЭдиторКита, т.к. его пока не понял как готовить.

Ivana ()
Ответ на: комментарий от Ivana

Например, подсветку парных скобок я возьму с небольшими доработками вот отсюда http://www.informit.com/articles/article.aspx?p=31204 - всего один класс, который имплементит КаретЛистенер - и все. Никаких 100500 файлов и прочей лабуды. Вешается карет листенером на любой текст компонент. Просто как 2+2. Подсветку синтаксиса сделаю сам втором классе, имплементящим документ листенер. Сам разобью содержимое на токены, потом применю стили к нужным токенам. Правда, не понял, куда лепить ЭдиторКит и зачем. Вот и все, 2 простых класса, вешающиеся листенерами. А не библиотечное изобилие, которое еще и работает не так как надо. Хотя, может я просто не умею их готовить.

Ivana ()
Ответ на: комментарий от Ivana

Вести с полей - всего 2 класса церковно-приходской школы, 150 строк в одном и 100 в другом, никаких ЭдиторКитов, ВьюМоделей и прочих страшных непонятных вещей - и работает подсветка парных скобок, выделение разными стилями ключевых слов из задаваемого набора, чисел, подсветка комментариев и «оконченных»/«неоконченных... строк в кавычках, добавление парной скобки ) и кавычки при наборе открывающих ( и ». И все понятно как работает и как поменять если что. И на текстах кода длиной в 100000 (и скорее всего больше тоже, просто лень было копипастить) символов никаких тормозов при редактировании.

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

А все предлагают прокрустово ложе готовых либ...

Ivana ()
Ответ на: комментарий от Ivana

Господа, а не посоветуете ли про реализацию интерфейса? Я тут сначала хотел сделать простой РЕПЛ - одно окно, вопрос-ответ с компом... Но чтобы длинный код не стирался каждый раз, вынес код в отдельное окно - можно многократно запускать, результат выводится в окне вывода. Код по флажку можно стирать (как в аське например) или оставлять (как в любой ИДЕ).Но теперь встал вопрос - где вводить запрашиваемые при работе кода данные? Сейчас читаются из окна кода, значит код приходится стирать :) Логично читать или из третьего окна, или из окна вывода - как в стандартных аналогах. Но это уже не РЕПЛ ). У меня можно открывать много закладок с подобным интерфейсом. Что посоветуете? Или вообще сделать 2 вида интерфейса закладок - ИДЕ/гиттер и РЕПЛ?

Ivana ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.