2012-10-09 23 views
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)的內容,我設法得到以下例外,我現在堅持:讓gwt-syntaxhighlighter工作

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

我的設置是這樣的:我對定製的罐子我的構建路徑。我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); 

只要達到上述行,除了我提供被拋出。任何形式的幫助非常感謝!

回答

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); 

我使用它,它的作品就像一個魅力。此解決方案是使用該庫的最簡單快捷的方法。