diff --git a/art/markwon-syntax-darkula.png b/art/markwon-syntax-darkula.png new file mode 100644 index 00000000..e9cde95e Binary files /dev/null and b/art/markwon-syntax-darkula.png differ diff --git a/art/markwon-syntax-default.png b/art/markwon-syntax-default.png new file mode 100644 index 00000000..5cae944f Binary files /dev/null and b/art/markwon-syntax-default.png differ diff --git a/library-syntax/README.md b/library-syntax/README.md new file mode 100644 index 00000000..d5872e34 --- /dev/null +++ b/library-syntax/README.md @@ -0,0 +1,64 @@ +# Markwon-syntax + +This is a simple module to add **syntax-highlight** functionality to your markdown rendered with Markwon library. It is based on [Prism4j](https://github.com/noties/Prism4j) so lead there to understand how to configure `Prism4j` instance. + +![theme-default](/art/markwon-syntax-default.png) + +![theme-darkula](/art/markwon-syntax-darkula.png) + +--- + +First, we need to obtain an instance of `Prism4jSyntaxHighlight` which implements Markwon's `SyntaxHighlight`: + +```java +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): + +```java +final SyntaxHighlight highlight = + Prism4jSyntaxHighlight.create(Prism4j, Prism4jTheme, String); +``` + +Generally obtaining a `Prism4j` instance is pretty easy: + +```java +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: + +```java +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