Android Syntax Highlighting?

2020-01-23 06:58发布

Does anyone know of syntax highlighting libraries which work on Android? I've looked at jsyntaxpane but that doesn't seem to support Android.

6条回答
Bombasti
2楼-- · 2020-01-23 07:23

I managed to create a syntax highlighter for Android, based on the Prettify. It was easy, actually, when I found the Java Prettify. Just download it (sadly, it is not published for maven) and add its jar to the build path of you application.

The syntax highlighter I created based on it:

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

The colors of the syntax are hardcoded, but may be also set by i.e. application preferences. In order to display a Java source code in a TextView, just do:

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

The Java Prettify library made my application around 50kB bigger.

查看更多
甜甜的少女心
3楼-- · 2020-01-23 07:28

Hi you can use my CodeEditor Android Arsenal

Play Video

Simply use:

Setup build.gradle (project)

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

build.gradle (app)

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

XML DataBinding

XML

    <com.github.ahmadaghazadeh.editor.widget.CodeEditor
        bind:code="<html></html>"
        bind:lang="html"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
查看更多
劫难
4楼-- · 2020-01-23 07:29

I have created an API for text highlighting which can solve your problem.

https://github.com/nakshay/TextHighlighter

This API allows you to pass words and colours specific to words and will return the string which is formatted with html tags which you can send to Html.fromHtml() to get highlighted text. add below Gradle dependency to your module's gradle file.

compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'
查看更多
等我变得足够好
5楼-- · 2020-01-23 07:31

920 Text Editor (app on Play Store, source on GitHub) uses a combination of WebView and Ace, an embeddable code editor written in JavaScript.

I'm working on an app which is an IDE for Android, I think I'm going the same way.

查看更多
老娘就宠你
6楼-- · 2020-01-23 07:43

Well, I did a open-source syntax-highlighting editor for Android:

https://github.com/markusfisch/ShaderEditor

It's quite simple and maybe only suitable for small data, but it's probably a good starting point.

查看更多
神经病院院长
7楼-- · 2020-01-23 07:44

For read-only syntax highlighting, you have two options:

  1. Find a Java library that can syntax highlight and generate HTML using <font color=""> (i.e., no CSS). You can then use Html.fromHtml() to create a Spanned object which you can hand to a TextView.

  2. Find a Java library that can syntax highlight and generate any sort of HTML. You can then display that in a WebView. This appears to be what the android-codepad project a commenter linked to does.

If you are seeking syntax highlighting for an editor, that is significantly more difficult. While EditText can take the same Spanned that TextView can, you would have to run everything through the syntax highlighter to reflect changes, either on a per-keystroke basis, or after a pause in typing. Or, you would need to bake the syntax highlighting rules much more tightly to the editing process, so you can somehow incrementally adjust the highlighting without having to redo the entire contents of the EditText. I have not seen an open source syntax-highlighting editor for Android -- a few closed-source ones as apps on the Play Store, though.

查看更多
登录 后发表回答