2

我一直在努力让 Syntaxhighlighter 的 GWT 包装器工作。我从http://code.google.com/p/gwt-syntaxhighlighter/得到了这些库,但它们似乎都没有工作。我开始怀疑是否是我对使用外部库的理解如此糟糕,或者它是否确实构建了糟糕的 JAR。有没有人设法使用这个?gwt-syntaxhighlighter-1.1.1-gwt-standard.jar 应该是我运行它所需的全部,缺少源和 Highlighter.gwt.xml 文件。通过结合其他 JAR 的内容(http://cl.ly/K1N4),我设法得到了以下异常,我现在陷入了困境:

http://www.pastit.dotcloud.com/131

我的设置如下:我的构建路径上有自定义构建的 jar。我的 MainPage.gwt.xml 包含以下行:

<inherits name='com.alexgorbatchev.syntaxhighlighter.Highlighter'/>

在我的代码的某处,我执行以下操作:

final Highlighter highlighter = new Highlighter(Brushes.XML());
highlighter.setText(xml);
final VerticalPanel xmlPanel = new VerticalPanel();
xmlPanel.add(highlighter);

一旦达到上述行,就会抛出我提供的异常。非常感谢任何形式的帮助!

4

1 回答 1

3

我也尝试使用 gwt-syntaxhighlighter,但由于缺乏文档,我更喜欢围绕 JavaScript 解决方案编写一个包装器。

我在http://alexgorbatchev.com/SyntaxHighlighter/download/下载了最新版本的 .js 文件。

然后在与“client”(不在)文件夹相同级别创建一个名为“public”的文件夹,并从 zip 文件中添加“script”和“style”。

然后我在我的项目 *.gwt.xml 中包含了我的所有需求

<!-- Base CSS SyntaxHighlighter -->
<stylesheet src="styles/shCore.css"/>

<!-- Eclipse Syntax Theme -->
<stylesheet src="styles/shThemeEclipse.css"/>

<!-- Base JS SyntaxHighlighter -->
<script src="scripts/shCore.js"/>

<!-- Extension for each wanted language to support -->
<script src="scripts/shBrushJava.js"/>
<script src="scripts/shBrushXml.js"/>

然后我创建了一个刷子工厂

public class BrushFactory {
    public native JavaScriptObject newJavaBrush() /*-{
        return new $wnd.SyntaxHighlighter.brushes.Java();
    }-*/;

    public native JavaScriptObject newXmlBrush() /*-{
        return new $wnd.SyntaxHighlighter.brushes.Xml();
    }-*/;
}

这是一个 JSNI 类,它使用 SyntaxHighlighter 实现从字符串到 HTML 语法格式字符串的转换。

public class SyntaxHighlighter {
    public static native String highlight(String code, JavaScriptObject brush, boolean toolbar) /*-{
        var params = {};
        params['toolbar'] = toolbar;
        brush.init(params);
        return brush.getHtml(code);
    }-*/;
}

最后,我使用 GWT 中的 HTML 小部件输出字符串。

String htmlCode = SyntaxHighlighter.highlight("YOUR_CODE_HERE", BrushFactory.newJavaBrush(), false);
HTML html = new HTML();
html.setHTML(htmlCode);

我使用它,它就像一个魅力。此解决方案是使用该库的最简单、最快捷的方式。

于 2013-07-05T18:03:29.770 回答