пример редактора - такой же, как stackOverflow - PullRequest
1 голос
/ 21 марта 2011

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

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

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

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

Поэтому мой вопрос заключается в том, как определить конец и последний _и / если они вложенные ??

Например:

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

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

Ответы [ 4 ]

5 голосов
/ 21 марта 2011

Итак, вам нужна Java-версия markdown .

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

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

2 голосов
/ 21 марта 2011

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

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

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

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

1 голос
/ 21 марта 2011

Вы можете увидеть источник страницы stackoverflow.com и попытаться интегрировать ... Я думаю, это должно работать ...

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

0 голосов
/ 25 марта 2011

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

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

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

MarkdownProcessor m = new MarkdownProcessor(); 

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

System.out.print("<html>"+html+"</html>");
...