Markwon/docs/docs/v3/core/core-plugin.md
2019-02-17 12:23:44 +03:00

2.8 KiB

Core plugin

Since with introduction of plugins, Markwon core functionality was moved to a dedicated plugin.

CorePlugin.create();

Node visitors

CorePlugin registers these commonmark-java node visitors:

  • Text
  • StrongEmphasis
  • Emphasis
  • BlockQuote
  • Code
  • FencedCodeBlock
  • IndentedCodeBlock
  • BulletList
  • OrderedList
  • ListItem
  • ThematicBreak
  • Heading
  • SoftLineBreak
  • HardLineBreak
  • Paragraph
  • Link

Span factories

CorePlugin adds these SpanFactorys:

  • StrongEmphasis
  • Emphasis
  • BlockQuote
  • Code
  • FencedCodeBlock
  • IndentedCodeBlock
  • ListItem
  • Heading
  • Link
  • ThematicBreak

:::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_LEVEL
  • Prop<Integer> ORDERED_LIST_ITEM_NUMBER
  • Prop<Integer> HEADING_LEVEL
  • Prop<String> LINK_DESTINATION
  • Prop<Boolean> PARAGRAPH_IS_IN_TIGHT_LIST

:::warning List item type Before Markwon had 2 distinct lists (bullet and ordered). Since 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. :::


:::tip Soft line break Since Markwon core does not give an option to insert a new line when there is a soft line break in markdown. Instead a custom plugin can be used:

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. :::