Class MarkdownWriter

java.lang.Object
org.commonmark.renderer.markdown.MarkdownWriter

public class MarkdownWriter extends Object
Writer for Markdown (CommonMark) text.
  • Field Details

    • buffer

      private final Appendable buffer
    • blockSeparator

      private int blockSeparator
    • lastChar

      private char lastChar
    • atLineStart

      private boolean atLineStart
    • prefixes

      private final LinkedList<String> prefixes
    • tight

      private final LinkedList<Boolean> tight
    • rawEscapes

      private final LinkedList<CharMatcher> rawEscapes
  • Constructor Details

    • MarkdownWriter

      public MarkdownWriter(Appendable out)
  • Method Details

    • raw

      public void raw(String s)
      Write the supplied string (raw/unescaped except if pushRawEscape(org.commonmark.text.CharMatcher) was used).
    • raw

      public void raw(char c)
      Write the supplied character (raw/unescaped except if pushRawEscape(org.commonmark.text.CharMatcher) was used).
    • text

      public void text(String s, CharMatcher escape)
      Write the supplied string with escaping.
      Parameters:
      s - the string to write
      escape - which characters to escape
    • line

      public void line()
      Write a newline (line terminator).
    • block

      public void block()
      Enqueue a block separator to be written before the next text is written. Block separators are not written straight away because if there are no more blocks to write we don't want a separator (at the end of the document).
    • pushPrefix

      public void pushPrefix(String prefix)
      Push a prefix onto the top of the stack. All prefixes are written at the beginning of each line, until the prefix is popped again.
      Parameters:
      prefix - the raw prefix string
    • writePrefix

      public void writePrefix(String prefix)
      Write a prefix.
      Parameters:
      prefix - the raw prefix string to write
    • popPrefix

      public void popPrefix()
      Remove the last prefix from the top of the stack.
    • pushTight

      public void pushTight(boolean tight)
      Change whether blocks are tight or loose. Loose is the default where blocks are separated by a blank line. Tight is where blocks are not separated by a blank line. Tight blocks are used in lists, if there are no blank lines within the list.

      Note that changing this does not affect block separators that have already been enqueued with block(), only future ones.

    • popTight

      public void popTight()
      Remove the last "tight" setting from the top of the stack.
    • pushRawEscape

      public void pushRawEscape(CharMatcher rawEscape)
      Escape the characters matching the supplied matcher, in all text (text and raw). This might be useful to extensions that add another layer of syntax, e.g. the tables extension that uses `|` to separate cells and needs all `|` characters to be escaped (even in code spans).
      Parameters:
      rawEscape - the characters to escape in raw text
    • popRawEscape

      public void popRawEscape()
      Remove the last raw escape from the top of the stack.
    • getLastChar

      public char getLastChar()
      Returns:
      the last character that was written
    • isAtLineStart

      public boolean isAtLineStart()
      Returns:
      whether we're at the line start (not counting any prefixes), i.e. after a line() or block().
    • write

      private void write(String s, CharMatcher escape)
    • write

      private void write(char c)
    • writePrefixes

      private void writePrefixes()
    • flushBlockSeparator

      private void flushBlockSeparator()
      If a block separator has been enqueued with block() but not yet written, write it now.
    • append

      private void append(char c, CharMatcher escape) throws IOException
      Throws:
      IOException
    • isTight

      private boolean isTight()
    • needsEscaping

      private boolean needsEscaping(char c, CharMatcher escape)
    • rawNeedsEscaping

      private boolean rawNeedsEscaping(char c)