Class InlineParserImpl

java.lang.Object
org.commonmark.internal.InlineParserImpl
All Implemented Interfaces:
InlineParserState, InlineParser

public class InlineParserImpl extends Object implements InlineParser, InlineParserState
  • Field Details

    • context

      private final InlineParserContext context
    • inlineContentParserFactories

      private final List<InlineContentParserFactory> inlineContentParserFactories
    • delimiterProcessors

      private final Map<Character,DelimiterProcessor> delimiterProcessors
    • linkProcessors

      private final List<LinkProcessor> linkProcessors
    • specialCharacters

      private final BitSet specialCharacters
    • linkMarkers

      private final BitSet linkMarkers
    • inlineParsers

      private Map<Character,List<InlineContentParser>> inlineParsers
    • scanner

      private Scanner scanner
    • includeSourceSpans

      private boolean includeSourceSpans
    • trailingSpaces

      private int trailingSpaces
    • lastDelimiter

      private Delimiter lastDelimiter
      Top delimiter (emphasis, strong emphasis or custom emphasis). (Brackets are on a separate stack, different from the algorithm described in the spec.)
    • lastBracket

      private Bracket lastBracket
      Top opening bracket ([ or ![)).
  • Constructor Details

  • Method Details

    • calculateInlineContentParserFactories

      private List<InlineContentParserFactory> calculateInlineContentParserFactories(List<InlineContentParserFactory> customFactories)
    • calculateLinkProcessors

      private List<LinkProcessor> calculateLinkProcessors(List<LinkProcessor> linkProcessors)
    • calculateDelimiterProcessors

      private static Map<Character,DelimiterProcessor> calculateDelimiterProcessors(List<DelimiterProcessor> delimiterProcessors)
    • addDelimiterProcessors

      private static void addDelimiterProcessors(Iterable<DelimiterProcessor> delimiterProcessors, Map<Character,DelimiterProcessor> map)
    • addDelimiterProcessorForChar

      private static void addDelimiterProcessorForChar(char delimiterChar, DelimiterProcessor toAdd, Map<Character,DelimiterProcessor> delimiterProcessors)
    • calculateLinkMarkers

      private static BitSet calculateLinkMarkers(Set<Character> linkMarkers)
    • calculateSpecialCharacters

      private static BitSet calculateSpecialCharacters(BitSet linkMarkers, Set<Character> delimiterCharacters, List<InlineContentParserFactory> inlineContentParserFactories)
    • createInlineContentParsers

      private Map<Character,List<InlineContentParser>> createInlineContentParsers()
    • scanner

      public Scanner scanner()
      Description copied from interface: InlineParserState
      Return a scanner for the input for the current position (on the trigger character that the inline parser was added for).

      Note that this always returns the same instance, if you want to backtrack you need to use Scanner.position() and Scanner.setPosition(Position).

      Specified by:
      scanner in interface InlineParserState
    • parse

      public void parse(SourceLines lines, Node block)
      Parse content in block into inline children, appending them to the block node.
      Specified by:
      parse in interface InlineParser
      Parameters:
      lines - the source content to parse as inline
      block - the node to append resulting nodes to (as children)
    • reset

      void reset(SourceLines lines)
    • text

      private Text text(SourceLines sourceLines)
    • parseInline

      private List<? extends Node> parseInline()
      Parse the next inline element in subject, advancing our position. On success, return the new inline node. On failure, return null.
    • parseDelimiters

      private List<? extends Node> parseDelimiters(DelimiterProcessor delimiterProcessor, char delimiterChar)
      Attempt to parse delimiters like emphasis, strong emphasis or custom delimiters.
    • parseOpenBracket

      private Node parseOpenBracket()
      Add open bracket to delimiter stack and add a text node to block's children.
    • parseLinkMarker

      private List<? extends Node> parseLinkMarker()
      If next character is [, add a bracket to the stack. Otherwise, return null.
    • parseCloseBracket

      private Node parseCloseBracket()
      Try to match close bracket against an opening in the delimiter stack. Return either a link or image, or a plain [ character. If there is a matching delimiter, remove it from the delimiter stack.
    • parseLinkOrImage

      private Node parseLinkOrImage(Bracket opener, Position beforeClose)
    • parseLinkInfo

      private LinkInfo parseLinkInfo(Bracket opener, Position beforeClose)
    • wrapBracket

      private Node wrapBracket(Bracket opener, Node wrapperNode, boolean includeMarker)
    • replaceBracket

      private Node replaceBracket(Bracket opener, Node node, boolean includeMarker)
    • addBracket

      private void addBracket(Bracket bracket)
    • removeLastBracket

      private void removeLastBracket()
    • parseInlineDestinationTitle

      private static InlineParserImpl.DestinationTitle parseInlineDestinationTitle(Scanner scanner)
      Try to parse the destination and an optional title for an inline link/image.
    • parseLinkDestination

      private static String parseLinkDestination(Scanner scanner)
      Attempt to parse link destination, returning the string or null if no match.
    • parseLinkTitle

      private static String parseLinkTitle(Scanner scanner)
      Attempt to parse link title (sans quotes), returning the string or null if no match.
    • parseLinkLabel

      static String parseLinkLabel(Scanner scanner)
      Attempt to parse a link label, returning the label between the brackets or null.
    • parseLineBreak

      private Node parseLineBreak()
    • parseText

      private Node parseText()
      Parse the next character as plain text, and possibly more if the following characters are non-special.
    • scanDelimiters

      private InlineParserImpl.DelimiterData scanDelimiters(DelimiterProcessor delimiterProcessor, char delimiterChar)
      Scan a sequence of characters with code delimiterChar, and return information about the number of delimiters and whether they are positioned such that they can open and/or close emphasis or strong emphasis.
      Returns:
      information about delimiter run, or null
    • processDelimiters

      private void processDelimiters(Delimiter stackBottom)
    • removeDelimitersBetween

      private void removeDelimitersBetween(Delimiter opener, Delimiter closer)
    • removeDelimiterAndNodes

      private void removeDelimiterAndNodes(Delimiter delim)
      Remove the delimiter and the corresponding text node. For used delimiters, e.g. `*` in `*foo*`.
    • removeDelimiterKeepNode

      private void removeDelimiterKeepNode(Delimiter delim)
      Remove the delimiter but keep the corresponding node as text. For unused delimiters such as `_` in `foo_bar`.
    • removeDelimiter

      private void removeDelimiter(Delimiter delim)
    • mergeChildTextNodes

      private void mergeChildTextNodes(Node node)
    • mergeTextNodesInclusive

      private void mergeTextNodesInclusive(Node fromNode, Node toNode)
    • mergeIfNeeded

      private void mergeIfNeeded(Text first, Text last, int textLength)