Это не сделает вас счастливыми, но вам, вероятно, стоит потратить время на то, чтобы научиться писать парсеры (книга драконов хороша для этого). Суть задач парсера в том, что они просты, если вы знаете, как это делать, и почти невозможны, если вы этого не делаете.
Я бы написал токенизатор, который может распознавать токены, такие как <start_underline, "_">
и <end_underline, "_">
для индикаторов формата, которые вы хотите использовать в вашем редакторе, и один для всех остальных. Результаты могут выглядеть так:
Текст: Hello _world_, /how are you?/
Жетоны: <text, "Hello ">,<start_underline, "_">,<text, "world">,<end_underline, "_">,<text, ", ">,<start_bold, "/">,<text, "how are you?">,<end_bold, "/">,
Начало и конец довольно легко можно отследить с помощью логических переменных, потому что нет смысла их вкладывать. Вот почему я уже сделал бы это отслеживание в токенизаторе.
После этого я напишу класс синтаксического анализатора, который берет эти токены и соответствующим образом настраивает вывод для текстовой области.
Вы видите, что это на самом деле просто применение принципа divide and conquer
. Задание How do I do everything I want with my text?
разбито на 3 части:
- В соответствии с полезной структурой, о чем эта строка? (Ответ от токенизатора)
- Как мне обработать определенную текстовую часть
x
для всех возможных x
? (Ответ от парсера)
- Как мне представить интерпретацию парсера этой строки? (Ответ от JTextpane или аналогичный)
И Tokenizer, и Parser не должны быть дополнительными классами. Поскольку контекст не сложен, они могут быть просто методами в классе расширения типа Textarea, который вы предпочитаете.
Давать более подробные советы бесполезно. Думаю, следующим лучшим шагом будет реализация, которую вы, вероятно, лучше захотите сделать самостоятельно. Не стесняйтесь спрашивать, если вы не можете найти хорошее решение для одной конкретной части, однако.