2014-03-02 18 views
1

我需要將語法突出顯示集成到我的Android應用程序中。我嘗試使用Java Prettify(https://code.google.com/p/java-prettify),但我無法集成它。該應用程序崩潰。由於我的AVD沒有工作,所以我無法從logcat獲取關於崩潰的信息。使用Java Prettify for Android應用語法突出顯示

我下面這個信息:https://code.google.com/p/java-prettify/wiki/UseTheParserAlone

我的代碼至今:

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import prettify.PrettifyParser; 
import syntaxhighlight.ParseResult; 
import syntaxhighlight.Parser; 

public class PrettifyHighlighter { 
Map<String, String> COLORS = buildColorsMap(); 
String FONT_PATTERN = "<font color=\"#%s\">%s</font>"; 
Parser parser = new PrettifyParser(); 

public String highlight(String fileExtension, String sourceCode) { 
    StringBuilder highlighted = new StringBuilder(); 
    List<ParseResult> results = parser.parse(fileExtension, sourceCode); 
    for(ParseResult result : results){ 
     String type = result.getStyleKeys().get(0); 
     String content = sourceCode.substring(result.getOffset(), result.getOffset() + result.getLength()); 
     highlighted.append(String.format(FONT_PATTERN, getColor(type), content)); 
    } 
    return highlighted.toString(); 
} 

private String getColor(String type){ 
    return COLORS.containsKey(type) ? COLORS.get(type) : COLORS.get("pln"); 
} 

private static Map<String, String> buildColorsMap() { 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("typ", "87cefa"); 
    map.put("kwd", "00ff00"); 
    map.put("lit", "ffff00"); 
    map.put("com", "999999"); 
    map.put("str", "ff4500"); 
    map.put("pun", "eeeeee"); 
    map.put("pln", "ffffff"); 
    return map; 
} 

}

調試時,我發現,當我評論行: 解析器解析器=新PrettifyParser();

和它的相關行,沒有崩潰的應用程序。 我GOOGLE了,但沒有得到解決方案。

我的logcat:

03-02 07:57:12.300: E/AndroidRuntime(1245): FATAL EXCEPTION: main 
03-02 07:57:12.300: E/AndroidRuntime(1245): Process: com.himanshujaju.codeit, PID: 1245 
03-02 07:57:12.300: E/AndroidRuntime(1245): java.lang.NoClassDefFoundError: prettify.PrettifyParser 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at com.himanshujaju.codeit.PrettifyHighlighter.<init>(PrettifyHighlighter.java:14) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at com.himanshujaju.codeit.codeArea$Run.onPostExecute(codeArea.java:193) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at com.himanshujaju.codeit.codeArea$Run.onPostExecute(codeArea.java:1) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at android.os.AsyncTask.finish(AsyncTask.java:632) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at android.os.Handler.dispatchMessage(Handler.java:102) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at android.os.Looper.loop(Looper.java:137) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at java.lang.reflect.Method.invoke(Method.java:515) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
03-02 07:57:12.300: E/AndroidRuntime(1245):  at dalvik.system.NativeStart.main(Native Method) 
+0

這是一個java庫,在android上有一些類不存在(例如:swing。*)。你可以嘗試一個https://code.google.com/p/android-codepad/ – R4j

+0

http://stackoverflow.com/a/19787125/1340797 ...這是我見過這種突出顯示方法的地方。 –

+0

請張貼您的'logcat'找到原因。 – R4j

回答

1

我想你的代碼,效果不錯。

PrettifyHighlighter highlighter = new PrettifyHighlighter(); 
    String code = "for (int i = 0; i < 5; i++){System.out.println(i);}"; 
    String highlighted = highlighter.highlight("java", code); 
    textView1.setText(Html.fromHtml(highlighted)); 

這裏是TextView的輸出在模擬器

highlight

對於NoClassDefFoundError例外,看起來像日食時,它建立不出口的jar庫。嘗試this answer

+0

工作。謝謝! –

+0

抱歉太晚評論這個問題,但它給出了字符串作爲輸出。換句話說,它不意圖的代碼...有什麼辦法可以保留縮進 –