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.
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
);
}
TIP
You can extend Prism4jThemeBase
which has some helper methods
final Markwon markwon = Markwon.builder(context)
.usePlugin(SyntaxHighlightPlugin.create(prism4j, prism4jTheme))
.build();