¿Destaca la syntax de Android?

¿Alguien sabe de la syntax que destaca las bibliotecas que funcionan en Android? He visto jsyntaxpane pero eso no parece ser compatible con Android.

Para el resaltado de syntax de solo lectura, tiene dos opciones:

  1. Busque una biblioteca Java que pueda resaltar la syntax y generar HTML usando (es decir, sin CSS). Luego puede usar Html.fromHtml() para crear un objeto Spanned que puede entregar a un TextView .

  2. Encuentre una biblioteca Java que pueda resaltar la syntax y generar cualquier clase de HTML. Luego puede mostrar eso en una vista WebView . Esto parece ser lo que el proyecto de android-codepad proyectará un comentarista vinculado.

Si buscas resaltar la syntax para un editor , eso es mucho más difícil. Mientras EditText puede tomar el mismo Spanned que puede TextView , debería ejecutar todo a través del marcador de syntax para reflejar los cambios, ya sea por pulsación de tecla, o después de una pausa al escribir. O bien, necesitaría hornear las reglas de resaltado de syntax mucho más estrechamente en el proceso de edición, para que de alguna manera pueda ajustar incrementalmente el resaltado sin tener que rehacer todo el contenido de EditText . No he visto un editor de resaltado de syntax de código abierto para Android, aunque hay algunos de código cerrado como aplicaciones en Play Store.

Logré crear un resaltador de syntax para Android, basado en el Prettify . Fue fácil, en realidad, cuando encontré Java Prettify . Simplemente descárguelo (lamentablemente, no está publicado para maven) y agregue su jar a la ruta de comstackción de su aplicación.

El marcador de syntax que creé basado en él:

 public class PrettifyHighlighter { private static final Map COLORS = buildColorsMap(); private static final String FONT_PATTERN = "%s"; private final Parser parser = new PrettifyParser(); public String highlight(String fileExtension, String sourceCode) { StringBuilder highlighted = new StringBuilder(); List 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 buildColorsMap() { Map 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; } } 

Los colores de la syntax están codificados, pero también pueden establecerse por ejemplo, las preferencias de la aplicación. Para mostrar un código fuente de Java en un TextView , simplemente hazlo:

 // 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 biblioteca Java Prettify hizo que mi aplicación tuviera unos 50kb más grandes.

Bueno, hice un editor de resaltado de syntax de código abierto para Android:

https://github.com/markusfisch/ShaderEditor

Es bastante simple y tal vez solo adecuado para datos pequeños, pero probablemente sea un buen punto de partida.

He creado una API para destacar texto que puede resolver su problema.

https://github.com/nakshay/TextHighlighter

Esta API le permite pasar palabras y colores específicos a las palabras y devolverá la cadena que está formateada con tags html que puede enviar a Html.fromHtml () para obtener el texto resaltado. agregue la dependencia de Gradle debajo del archivo gradle de su módulo.

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

920 Text Editor (aplicación en Play Store , fuente en GitHub ) utiliza una combinación de WebView y Ace , un editor de código incorporado escrito en JavaScript.

Estoy trabajando en una aplicación que es un IDE para Android, creo que voy por el mismo camino.