Coloration Syntaxique Android?

Est-ce que quelqu'un connaît des bibliothèques de coloration syntaxique qui fonctionnent sur Android? J'ai regardé jsyntaxpane mais cela ne semble pas prendre en charge Android.

22
demandé sur Andrew T. 2012-08-16 16:58:21

6 réponses

Pour la coloration syntaxique en lecture seule, vous avez deux options:

  1. Trouvez une bibliothèque Java qui peut mettre en évidence la syntaxe et générer du HTML en utilisant <font color=""> (c'est-à-dire sans CSS). Vous pouvez ensuite utiliser Html.fromHtml() pour créer un objet Spanned que vous pouvez remettre à un TextView.

  2. Trouvez une bibliothèque Java qui peut mettre en évidence la syntaxe et générer N'importe quel type de HTML. Vous pouvez alors l'afficher dans un WebView. Cela semble être ce que le android-codepad projet un commentaire lié à faire.

Si vous recherchez la coloration syntaxique pour un éditeur , c'est beaucoup plus difficile. Alors que EditText peut prendre le même Spanned que TextView, vous devrez tout exécuter à travers le surligneur de syntaxe pour refléter les changements, soit par frappe, soit après une pause dans la frappe. Ou, vous devez faire cuire les règles de coloration syntaxique beaucoup plus étroitement au processus d'édition, de sorte que vous pouvez en quelque sorte ajuster progressivement la surbrillance sans avoir à refaire tout le contenu du EditText. Je n'ai pas vu un éditeur de coloration syntaxique open source pour Android-quelques sources fermées en tant qu'applications sur le Play Store, cependant.

13
répondu CommonsWare 2012-08-16 13:13:45

J'ai réussi à créer un surligneur de syntaxe pour Android, basé sur le Prettify . Il était facile, en fait, quand j'ai trouvé le Java Embellir. Il suffit de le télécharger (malheureusement, il n'est pas publié pour maven) et d'ajouter son jar au chemin de construction de votre application.

Le surligneur de syntaxe que j'ai créé sur cette base:

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

Les couleurs de la syntaxe sont codées en dur, mais peuvent également être définies par les préférences de l'application. Afin d'afficher un code source Java dans un TextView, il suffit de faire:

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

La bibliothèque Java Prettify a agrandi mon application d'environ 50 Ko.

33
répondu fracz 2013-12-11 10:06:27

Eh bien, j'ai fait un éditeur de coloration syntaxique open-source pour Android:

Https://github.com/markusfisch/ShaderEditor

C'est assez simple et peut-être seulement adapté aux petites données, mais c'est probablement un bon point de départ.

20
répondu mf511 2013-06-24 21:06:29

J'ai créé une API pour la mise en évidence du texte qui peut résoudre votre problème.

Https://github.com/nakshay/TextHighlighter

Cette API vous permet de passer des mots et des couleurs spécifiques aux mots et retournera la chaîne qui est formatée avec des balises html que vous pouvez envoyer au Html.fromHtml() pour obtenir du texte en surbrillance. ajoutez la dépendance Gradle ci-dessous au fichier gradle de votre module.

compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'
1
répondu Akshay 2016-12-06 05:12:51

920 Éditeur de Texte (app sur Play Store, source sur GitHub) utilise une combinaison de WebView et As, une intégrable éditeur de code écrit en JavaScript.

Je travaille sur une application qui est un IDE pour Android, je pense que je vais de la même manière.

0
répondu Antonio Vinicius Menezes Medei 2018-06-04 02:50:31

Bonjour, vous pouvez utiliser mon CodeEditor

Utilisez simplement:

Configuration construire.gradle (projet)

allprojects {
    repositories {
        ...
        maven {
            url 'https://jitpack.io'
        }
    }
}

Construire.gradle (app)

dependencies {
    ...
    compile 'com.github.ahmadaghazadeh:CodeEditor:1.0.4'
}

Liaison de données XML

XML

    <com.github.ahmadaghazadeh.editor.widget.CodeEditor
        bind:code="<html></html>"
        bind:lang="html"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
0
répondu Ahmad Aghazadeh 2018-10-05 05:43:47