2012-08-16 18 views
20

Androidで動作する構文ハイライトライブラリを知っている人はいますか?私はjsyntaxpaneを見てきましたが、それはAndroidをサポートしていないようです。読み取り専用の構文強調表示のためにAndroidの構文ハイライト?

+0

yiuはハイライトしたいものは何ですか? – Ahmad

+0

あなたの質問にもっと詳しく説明してください。どのコンポーネントにハイライトを表示したいですか? –

+1

http://code.google.com/p/android-codepad/ –

答えて

12

は、次の2つのオプションがあります:

  1. はハイライトを構文と<font color="">(すなわち、何もCSS)を使用していないHTMLを生成することができますJavaライブラリを検索します。 Html.fromHtml()を使用してSpannedオブジェクトを作成し、TextViewに渡すことができます。

  2. 構文を強調表示して任意の種類のHTMLを生成できるJavaライブラリを見つける。これをWebViewに表示することができます。これは、the android-codepad projectのコメント投稿者が行ったことのようです。

あなたはエディタのための構文強調表示を求めている場合は、それははるかに困難です。 EditTextは同じSpannedTextViewを取ることができますが、キー入力ごとに、または入力の一時停止後に変更を反映させるために、ハイライト表示のすべてを実行する必要があります。または、構文処理の強調表示規則を編集プロセスにもっと緊密に焼く必要があるため、EditTextの内容全体をやり直さなくても強調表示を調整していくことができます。私はAndroid用のオープンソースシンタックスハイライトエディタを見ていませんが、いくつかのクローズドソースのものはPlayストアのアプリとして考えられています。

+0

でハイライトしたいと思います。 jsyntaxpaneを見てみると、アンドロイド/ edittextに移植できるかどうかがわかります。 – ng93

+2

@ ng93:構文ハイライターの実装に成功しましたか? 「はい」の場合、実装プロセスについて説明できますか? ありがとうございます。 – rule

+0

1. "マジックを行うJavaライブラリが見つかったことがありますか? – fracz

19

まあ、私はAndroidのためのオープンソースの構文の強調表示エディタをした:

https://github.com/markusfisch/ShaderEditor

それは非常にシンプルで小さなデータのための多分唯一適していますが、それはおそらく良い出発点です。

+1

非常に良い例ですが、簡単です。EditText source:https://github.com/markusfisch/ShaderEditor/blob/master/src/de/markusfisch/android/shadereditor/ShaderEditor.java – JRomero

+1

@JRomero Link doesn –

+3

上記のリンクが壊れています(新しいリンクです)(https://github.com/markusfisch/ShaderEditor/blob/5af7129d05a1d122923ae78d110a55a09597589f/app/src/main/java/de/markusfisch/android/shadereditor /widget/ShaderEditor.java) –

32

Prettifyに基づいて、Android用の構文ハイライトを作成することができました。実際には、私がJava Prettifyを見つけたときは簡単でした。ちょうどそれをダウンロードしてください(悲しいことに、それはmavenのために公開されていません)、あなたのアプリケーションの構築パスにそのjarファイルを追加してください。

それに基づいて、私が作成した構文ハイライト:構文の

public class PrettifyHighlighter { 
    private static final Map<String, String> COLORS = buildColorsMap(); 

    private static final String FONT_PATTERN = "<font color=\"#%s\">%s</font>"; 

    private final 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<>(); 
     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; 
    } 
} 

色がハードコーディングされているだけでなく、即ちアプリケーションの環境によって設定されてもよいです。 TextViewのJavaソースコードを表示するためには、単に実行します。

// code is a String with source code to highlight 
// myTextView is a TextView component 
PrettifyHighlighter highlighter = new PrettifyHighlighter(); 
String highlighted = highlighter.highlight("java", code); 
myTextView.setText(Html.fromHtml(highlighted)); 

のJava飾り立てるライブラリが大きく50KBの周りに自分のアプリケーションを作りました。

+0

@wojciechパーフェクトで正確な................ –

+0

@WojciechFrączDude、Cコードはどうですか? 返信を待っています –

+2

@タルン、最初の " "java"引数を "c"または "cpp"に設定してください。 – fracz

1

あなたの問題を解決できるテキストハイライトのAPIを作成しました。

https://github.com/nakshay/TextHighlighter

このAPIを使用すると、言葉に特定の単語や色を渡すと、()強調表示されたテキストを取得するために、あなたはHtml.fromHtmlに送ることができるHTMLタグでフォーマットされた文字列を返しますことができます。あなたのモジュールのgradleファイルに以下のGradle依存関係を追加してください。

compile 'com.github.akshay-naik:texthighlighterapi:1.1.0' 
+0

潜在的な解決策へのリンクはいつでも歓迎しますが、リンクがもはや利用できない場合のために将来の訪問者のためにいくつかの詳細を追加してください。 –

+1

提案ありがとうNikolay。詳細を追加する。 – Akshay

+0

私はこの関数を見つけることができませんでしたhighlighter.setLanguage(); –

関連する問題