Package org.jivesoftware.smackx.message_markup.element

Smack's API for XEP-0394: Message Markup, which can be used to style message. Message Markup is an alternative to XHTML-im to style message, which keeps the message body and the markup information strictly separated.

Usage

The most important class is the MarkupElement class, which contains a Builder to construct message markup..

To start creating a Message Markup Extension, call MarkupElement.getBuilder(). (Almost) all method calls documented below will be made on the builder.

Whenever a method call receives a `start` and `end` index, `start` represents the first character, which is affected by the styling, while `end` is the character *after* the last affected character.

Inline styling

Currently there are 3 styles available:

  • *emphasis*, which should be rendered by a client as *italic*, or **bold**
  • *code*, which should be rendered in `monospace`
  • *deleted*, which should be rendered as ~~strikethrough~~.

Those styles are available by calling `builder.setEmphasis(int start, int end)`, `builder.setDeleted(int start, int end)` and `builder.setCode(int start, int end)`.

If you want to apply multiple inline styles to a section, you can do the following:

 
 Set<SpanElement.SpanStyle> spanStyles = new HashSet<>();
 styles.add(SpanElement.SpanStyle.emphasis);
 styles.add(SpanElement.SpanStyle.deleted);
 builder.addSpan(start, end, spanStyles);
 
 

Note, that spans cannot overlap one another.

Block Level Styling

Available block level styles are: * Code blocks, which should be rendered as

 blocks
 of
 code
 
  • Itemized lists, which should render as
    • Lists
    • with possibly multiple
    • entries
  • Block Quotes, which should be rendered by the client > as quotes, which >> also can be nested

To mark a section as code block, call builder.setCodeBlock(start, end).

To create a list, call MarkupElement.Builder.ListBuilder lbuilder = builder.beginList(), which will return a list builder. On this you can call lbuilder.addEntry(start, end) to add an entry.

Note: If you add an entry, the start value MUST be equal to the end value of the previous added entry!

To end the list, call lbuilder.endList(), which will return the MessageElement builder.

To create a block quote, call builder.setBlockQuote(start, end).

Note that block level elements MUST NOT overlap each other boundaries, but may be fully contained (nested) within each other.

See Also:
XEP-0394: Message Markup