Core plugin 3.0.0
Since 3.0.0 with introduction of plugins, Markwon core functionality was moved to a dedicated plugin.
CorePlugin.create();
Node visitors
CorePlugin registers these commonmark-java node visitors:
TextStrongEmphasisEmphasisBlockQuoteCodeImageFencedCodeBlockIndentedCodeBlockBulletListOrderedListListItemThematicBreakHeadingSoftLineBreakHardLineBreakParagraphLink
Span factories
CorePlugin adds these SpanFactorys:
StrongEmphasisEmphasisBlockQuoteCodeFencedCodeBlockIndentedCodeBlockListItemHeadingLinkThematicBreak
TIP
By default CorePlugin does not register a Paragraph SpanFactory but
this can be done in your custom plugin:
Markwon.builder(context)
.usePlugin(new AbstractMarkwonPlugin() {
@Override
public void configureSpansFactory(@NonNull MarkwonSpansFactory.Builder builder) {
builder.setFactory(Paragraph.class, (configuration, props) ->
new ForegroundColorSpan(Color.RED));
}
})
Props
These props are exported by CorePlugin and can be found in CoreProps:
Prop<ListItemType> LIST_ITEM_TYPE(BULLET | ORDERED)Prop<Integer> BULLET_LIST_ITEM_LEVELProp<Integer> ORDERED_LIST_ITEM_NUMBERProp<Integer> HEADING_LEVELProp<String> LINK_DESTINATIONProp<Boolean> PARAGRAPH_IS_IN_TIGHT_LIST
List item type
Before 3.0.0 Markwon had 2 distinct lists (bullet and ordered).
Since 3.0.0 a single SpanFactory is used, which internally checks
for Prop<ListItemType> LIST_ITEM_TYPE.
Beware of this if you would like to override only one of the list types. This is
done to correspond to commonmark-java implementation.
More information about props can be found here
Soft line break
Since 4.3.0 there is a dedicated plugin to insert a new line for
markdown soft breaks - SoftBreakAddsNewLinePlugin:
final Markwon markwon = Markwon.builder(this)
.usePlugin(SoftBreakAddsNewLinePlugin.create())
.build();
It is still possible to do it manually with a custom visitor:
final Markwon markwon = Markwon.builder(this)
.usePlugin(new AbstractMarkwonPlugin() {
@Override
public void configureVisitor(@NonNull MarkwonVisitor.Builder builder) {
builder.on(SoftLineBreak.class, (visitor, softLineBreak) ->
visitor.forceNewLine());
}
})
.build();
WARNING
Please note that CorePlugin will implicitly set a LinkMovementMethod on a TextView
if one is not present. If you wish to customize a MovementMethod that is used, apply
one manually to a TextView (before applying markdown) or use the MovementMethodPlugin
which accepts a MovementMethod as an argument.
OnTextAddedListener 4.0.0
Since 4.0.0 CorePlugin provides ability to receive text-added event. This can
be useful in order to process raw text (for example to linkify it):
final Markwon markwon = Markwon.builder(context)
.usePlugin(new AbstractMarkwonPlugin() {
@Override
public void configure(@NonNull Registry registry) {
registry.require(CorePlugin.class, new Action<CorePlugin>() {
@Override
public void apply(@NonNull CorePlugin corePlugin) {
corePlugin.addOnTextAddedListener(new CorePlugin.OnTextAddedListener() {
@Override
public void onTextAdded(@NonNull MarkwonVisitor visitor, @NonNull String text, int start) {
// NB text is already added and you are __strongly__ adviced not to
// modify visitor here, but only add spans
//
// this will make all text BLUE
visitor.builder().setSpan(
new ForegroundColorSpan(Color.BLUE),
start,
visitor.length()
);
}
});
}
});
}
})
.build();