Markwon/markwon-syntax-highlight
Dimitry e0563dca43
V2.0.0 (#66)
* Add `html-parser-api` and `html-parser-impl` modules
* Add `HtmlEmptyTagReplacement`
* Implement Appendable and CharSequence in SpannableBuilder
* Renamed library modules to reflect maven artifact names
* Rename `markwon-syntax` to `markwon-syntax-highlight`
* Add HtmlRenderer asbtraction
* Add CssInlineStyleParser
* Fix Theme#listItemColor and OL
* Fix task list block parser to revert parsing state when line is not matching
* Defined test format files
* image-loader add datauri parser
* image-loader add support for inline data uri image references
* Add travis configuration
* Fix image with width greater than canvas scaled
* Fix blockquote span
* Dealing with white spaces at the end of a document
* image-loader add SchemeHandler abstraction
* Add sample-latex-math module
2018-09-17 13:15:58 +03:00
..
2018-09-17 13:15:58 +03:00
2018-09-17 13:15:58 +03:00
2018-09-17 13:15:58 +03:00
2018-09-17 13:15:58 +03:00

Markwon-syntax

This is a simple 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 {

    @ColorInt
    int background();

    @ColorInt
    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