我想创建一个编辑器并将格式化的文本存储在数据库中。我只想让一个示例编辑器执行StackOverFlow编辑器等功能:
_sfdfdgdfgfg_
:用于带下划线的文字
/sfdfdgdfgfg/
:用粗体文字
我将使用一个函数将_
替换为<b>
,将第二个</b>
替换为/
的respec。
所以我的问题是,如果它们是嵌套的,我该如何检测结束和最后_
和/
?
例如:
/dsdfdfffddf _ dsdsdssd_/ ffdfddsgds /dfdfehgiuyhbf/ ....
我将在Java Application中使用这个编辑器。
答案 0 :(得分:5)
答案 1 :(得分: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 conquer
的应用。 How do I do everything I want with my text?
的任务分为三部分:
x
处理特定的textpart x
? (来自Parser的答案)Tokenizer和Parser都不需要额外的类。因为上下文并不复杂,所以它们可以是您喜欢的Textarea类型的扩展类中的方法。
我认为,提供更详细的建议并没有帮助,下一个最好的步骤是您可能最好自己想做的实施。不过,不要犹豫,问你是否找不到一个特定部分的好解决方案。
答案 2 :(得分:1)
你可以看到stackoverflow.com页面源并尝试集成......我想它应该有用......
http://blog.stackoverflow.com/2008/12/reverse-engineering-the-wmd-editor/
答案 3 :(得分:0)
这是一个展示如何使用MarkDownJ的示例:
首先,确保MarkdownJ是在Java应用程序中调用的类库。
其次,使用此代码调用MarkdownJ:
MarkdownProcessor m = new MarkdownProcessor();
String html = m.markdown("this is *a sample text*");
System.out.print("<html>"+html+"</html>");