我想使用 Java 编写从 Mylyn Wiki 支持的格式到 HTML 的转换代码。我没有找到任何有用的在线示例来演示如何使用 Java 为 Mylyn WikiText 编写代码。我只在 Eclipse 上找到了这个页面,但它使用了 Ant。我要求一些示例代码。
1 回答
虽然您始终可以编写 Ant 脚本并从 Java 启动它们,但下面是我刚刚编写的一个完整的实用程序类,它可以让您通过注册到 WikiText 独立部署的各种核心语言来转换 wiki 文本。
值得注意的是,最简单的做法是下载 Standalone Deployment,展开它并阅读 API 以查看您需要应用哪些其他配置。
将 WikiText 转换为 HTML
package com.stackoverflow.mylyn;
import java.io.StringWriter;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.mylyn.wikitext.core.parser.MarkupParser;
import org.eclipse.mylyn.wikitext.core.parser.builder.HtmlDocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.markup.MarkupLanguage;
import org.eclipse.mylyn.wikitext.core.util.ServiceLocator;
/**
* Utility to parse Wiki Text of varying languages and convert to HTML.
*/
public final class ParseWikiToHTMLUtility {
public static final String NAME_TEXTILE = "Textile";
public static final String NAME_TRACWIKI = "TracWiki";
public static final String NAME_MEDIAWIKI = "MediaWiki";
public static final String NAME_CONFLUENCE = "Confluence";
public static final String NAME_TWIKI = "TWiki";
private ParseWikiToHTMLUtility() {
/* Do not instantiate utility classes */
}
public static String parseTextile(String wikiText) {
return parseByLanguage(NAME_TEXTILE, wikiText);
}
public static String parseTracWiki(String wikiText) {
return parseByLanguage(NAME_TRACWIKI, wikiText);
}
public static String parseMediaWiki(String wikiText) {
return parseByLanguage(NAME_MEDIAWIKI, wikiText);
}
public static String parseConfluence(String wikiText) {
return parseByLanguage(NAME_CONFLUENCE, wikiText);
}
public static String parseTWiki(String wikiText) {
return parseByLanguage(NAME_TWIKI, wikiText);
}
public static String parseByLanguage(String name, String wikiText) {
return parseByLanguage(ServiceLocator.getInstance().getMarkupLanguage(name), wikiText);
}
public static String parseByLanguage(MarkupLanguage language, String wikiText) {
StringWriter writer = new StringWriter();
HtmlDocumentBuilder builder = new HtmlDocumentBuilder(writer);
MarkupParser parser = new MarkupParser(language, builder);
parser.parse(wikiText);
return writer.toString();
}
/**
* MarkupLanguage API prefers we retrieve the MarkupLanguge by name from
* the ServiceLocator; since there are no name constants, we obtain the names
* from this method or alternately use the hard-coded names from this utility class,
* which were pulled directly from a prior call to this very method.
*/
public static Set<String> getLanguageNames() {
Set<String> languages = new TreeSet<String>();
for (MarkupLanguage s : ServiceLocator.getInstance().getAllMarkupLanguages()) {
languages.add(s.getName());
}
return languages;
}
}
要从 HTML 转换,请使用HtmlParser.parse()
方法。提交您的 HTMLInputSource
并提供一个DocumentBuilder
目标。 DocumentBuilder
实现包括XslfoDocumentBuilder
(用于 XSL-Fo 和最终转换为 PDF 或 PostScript)、DocBookDocumentBuilder
(用于 Docbook 格式)和扩展类AbstractMarkupDocumentBuilder
(几乎每个标记都有一个:TextileDocumentBuilder
、、ConfluenceDocumentBuilder
等)。
其他 WikiText 链接:
如何在 Java 中使用 Mylyn WikiText(有一些示例代码)
关于使用 WikiText 解析的 SO 问题(有一些示例代码)
Eclipse 集成的WikiText 开发人员指南
开始使用 WikiText (1 of 2)
高级 WikiText(2 之 2)