Образец редактора - такой же, как stackOverflow

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

_sfdfdgdfgfg_: для подчеркнутого текста

/sfdfdgdfgfg/: для жирного текста

Я буду использовать функцию, чтобы заменить первый _ от <b> и для второго </b> (соответственно для /).

Итак, мой вопрос, как я могу сделать, чтобы определить конец и последний _ а также / если они вложенные??

Например:

 /dsdfdfffddf _ dsdsdssd_/ ffdfddsgds /dfdfehgiuyhbf/  ....

Я буду использовать этот редактор в приложении Java.

4 ответа

Решение

Так что вы хотите, это версия уценки Java.

Вот что находит Google:

http://code.google.com/p/markdownj/

Это не сделает вас счастливыми, но вам, вероятно, стоит потратить время на то, чтобы научиться писать парсеры (книга драконов хороша для этого). Суть задач парсера в том, что они просты, если вы знаете, как это делать, и почти невозможны, если вы этого не делаете. Я бы написал токенизатор, который может распознавать токены как <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, "/">,

Start и End можно довольно легко отследить с помощью логических переменных, потому что их нет смысла вкладывать. Вот почему я бы уже сделал это отслеживание в токенизаторе.

После этого я напишу класс парсера, который берет эти токены и настраивает вывод для текстовой области соответственно.

Вы видите, что это на самом деле просто применение принципа divide and conquer, Задача How do I do everything I want with my text? разделен на 3 части:

  1. Согласно полезной структуре, о чем эта строка? (Ответ от токенизатора)
  2. Как мне обработать конкретную текстовую часть x для всех возможных x? (Ответ от парсера)
  3. Как мне представить интерпретацию парсера этой строки? (Ответ от JTextpane или тому подобное)

И Tokenizer, и Parser не должны быть дополнительными классами. Поскольку контекст не сложен, они могут быть просто методами в классе расширения типа Textarea, который вы предпочитаете.

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

Вы можете посмотреть на Source Source и попробовать интегрировать... Я думаю, это должно работать...

http://blog.stackru.com/2008/12/reverse-engineering-the-wmd-editor/

Это пример, показывающий, как использовать MarkDownJ:

Во-первых, убедитесь, что MarkdownJ является библиотекой классов, вызываемой в вашем приложении Java.

Во-вторых, используйте этот код для вызова MarkdownJ:

MarkdownProcessor m = new MarkdownProcessor(); 

String html = m.markdown("this is *a sample text*");

System.out.print("<html>"+html+"</html>");
Другие вопросы по тегам