Syntax highlight


This is a module to add syntax highlight functionality to your markdown rendered with Markwon library. It is based on Prism4j so lead there to understand how to configure Prism4j instance.

theme-default theme-darkula

First, we need to obtain an instance of Prism4jSyntaxHighlight which implements Markwon's SyntaxHighlight:

final SyntaxHighlight highlight = 
    Prism4jSyntaxHighlight.create(Prism4j, Prism4jTheme);

we also can obtain an instance of Prism4jSyntaxHighlight that has a fallback option (if a language is not defined in Prism4j instance, fallback language can be used):

final SyntaxHighlight highlight = 
    Prism4jSyntaxHighlight.create(Prism4j, Prism4jTheme, String);

Generally obtaining a Prism4j instance is pretty easy:

final Prism4j prism4j = new Prism4j(new GrammarLocatorDef());

Where GrammarLocatorDef is a generated grammar locator (if you use prism4j-bundler annotation processor)

Prism4jTheme is a specific type that is defined in this module (prism4j doesn't know anything about rendering). It has 2 implementations:

  • Prism4jThemeDefault
  • Prism4jThemeDarkula

Both of them can be obtained via factory method create:

  • Prism4jThemeDefault.create()
  • Prism4jThemeDarkula.create()

But of cause nothing is stopping you from defining your own theme:

public interface Prism4jTheme {

    int background();

    int textColor();

    void apply(
            @NonNull String language,
            @NonNull Prism4j.Syntax syntax,
            @NonNull SpannableStringBuilder builder,
            int start,
            int end


You can extend Prism4jThemeBase which has some helper methods

final Markwon markwon = Markwon.builder(context)
        .usePlugin(SyntaxHighlightPlugin.create(prism4j, prism4jTheme))
Last Updated: 7/16/2020, 12:14:12 PM