2011-03-21 73 views
1

我想在数据库中创建编辑器并存储格式化文本。我想只是一个样本编辑器做类似计算器的编辑功能:示例编辑器 - 与stackOverflow相同

_sfdfdgdfgfg_:下划线文本

/sfdfdgdfgfg/:为黑体字

我将使用功能通过<b>和第二,以取代第一_</b>(分别适用于/)。

所以我的问题是如何才能检测结束和最后_/如果它们嵌套?

例如:

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

我将使用Java应用程序这个编辑器。

+0

肖恩指出,SO使用标记。我建议你*重新使用*格式**和**执行它,因为有很多令人讨厌的角落案例可能会引入微妙和难以修复的错误。 – 2011-03-21 13:27:19

回答

5

所以你想要的是一个Java版本markdown

下面是谷歌发现:

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

+0

那么我可以在Java类中调用Markdown.pl吗?我认为这是可能的,但pl文件需要一些改变? – alibenmessaoud 2011-03-21 13:52:34

+1

@alibm不,从谷歌代码项目下载Java版本 – 2011-03-21 14:24:25

2

它不会让你开心,但你应该花时间学习编写解析器(龙书很好)。解析器任务的事情是,如果你知道如何去做,那么它们很容易,如果你不知道它们几乎是不可能的。 我会写一个标记器,它可以识别令牌,如<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, "/">,

的开始和结束,可以跟踪与布尔变量相当容易,因为它是没有意义的巢他们。这就是为什么我会在tokenizer中进行跟踪。

之后,我会编写一个解析器类,它接受这些标记并相应地将输出配置为textarea。

你看,这实际上只是应用了原理divide and conquerHow do I do everything I want with my text?的任务分为3个部分:

  1. 根据一个有用的结构,这个字符串是什么? (Tokenizer答复)
  2. 如何处理特定文本部分x所有可能的x? (解析器解答)
  3. 如何表示该字符串的解析器解释?(JTextpane或其他人的答复)

Tokenizer和Parser都不需要额外的类。因为上下文并不复杂,所以它们只能是您喜欢的Textarea类型的扩展类中的方法。

给出更详细的建议是没有帮助的我认为,下一步最好的步骤是您可能最好自己做的实现。尽管如此,请不要犹豫,询问您是否找不到某个特定部件的良好解决方案。

+0

+1提龙书 – 2011-03-21 14:24:43

0

这是一个例子说明如何使用MarkDownJ:

首先,确保MarkdownJ是在Java应用程序调用的类库。

其次,使用该代码来调用MarkdownJ:

MarkdownProcessor m = new MarkdownProcessor(); 

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

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