Class InlineParserImpl

    • Field Detail

      • specialCharacters

        private final java.util.BitSet specialCharacters
      • delimiterProcessors

        private final java.util.Map<java.lang.Character,​DelimiterProcessor> delimiterProcessors
      • inlineParsers

        private final java.util.Map<java.lang.Character,​java.util.List<InlineContentParser>> inlineParsers
      • 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 Detail

    • Method Detail

      • calculateSpecialCharacters

        public static java.util.BitSet calculateSpecialCharacters​(java.util.Set<java.lang.Character> delimiterCharacters,
                                                                  java.util.Set<java.lang.Character> characters)
      • calculateDelimiterProcessors

        public static java.util.Map<java.lang.Character,​DelimiterProcessor> calculateDelimiterProcessors​(java.util.List<DelimiterProcessor> delimiterProcessors)
      • addDelimiterProcessors

        private static void addDelimiterProcessors​(java.lang.Iterable<DelimiterProcessor> delimiterProcessors,
                                                   java.util.Map<java.lang.Character,​DelimiterProcessor> map)
      • addDelimiterProcessorForChar

        private static void addDelimiterProcessorForChar​(char delimiterChar,
                                                         DelimiterProcessor toAdd,
                                                         java.util.Map<java.lang.Character,​DelimiterProcessor> delimiterProcessors)
      • 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)
      • parseInline

        private java.util.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 java.util.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.
      • parseBang

        private Node parseBang()
        If next character is [, and ! delimiter to delimiter stack and add a text node to block's children. Otherwise just add a text node.
      • 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.
      • addBracket

        private void addBracket​(Bracket bracket)
      • removeLastBracket

        private void removeLastBracket()
      • parseLinkDestination

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

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

        java.lang.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)