All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vladsch.flexmark.parser.LinkRefProcessor Maven / Gradle / Ivy

package com.vladsch.flexmark.parser;

import com.vladsch.flexmark.util.ast.Document;
import com.vladsch.flexmark.util.ast.Node;
import com.vladsch.flexmark.util.sequence.BasedSequence;
import org.jetbrains.annotations.NotNull;

/**
 * Processing of elements which are based on a link ref: [] or ![]
 * This includes footnote references [^...] and wiki links [[...]]
 */
public interface LinkRefProcessor {
    /**
     * Whether the image ref is desired, if not then ! will be stripped off the prefix and treated as plain text
     *
     * @return true if ! is part of the desired element, false otherwise
     */
    boolean getWantExclamationPrefix();

    /**
     * Whether the element consists of nested [] inside the link ref. For example Wiki link [[]] processor would return 1
     * Only immediately nested [] are considered. [[  ]] is nesting 1, [ [ ]] is not considered
     * 

* When {@code >0} then preview of next characters is used and if they will match then inner reference will not be created to * allow outer one to match the desired element * * @return desired nesting level for references, {@code >0} for nested, 0 for not nested */ int getBracketNestingLevel(); /** * Test whether the element matches desired one. For processors that allow nesting this will be called one additional. * time for each nesting level. Last call for the actual match, all others to pre-match to prevent a non-nested element from being * created. * * @param nodeChars text to match, including [] or ![] * @return true if it is a match */ boolean isMatch(@NotNull BasedSequence nodeChars); /** * Create the desired element that was previously matched with isMatch * * @param nodeChars char sequence from which to create the node * @return Node element to be inserted into the tree */ @NotNull Node createNode(@NotNull BasedSequence nodeChars); /** * Adjust child nodes' text as needed when some of the link ref text was used in the opening or closing sequence of the node * or if the children are not desired then removeIndex them. * * @param document document, can be used to get parsing options * @param node node whose inline text is to be adjusted to reflect some of the text having been used as part of the opener and/or closer sequence. * @return adjusted sequence to use for this node's child text */ @NotNull BasedSequence adjustInlineText(@NotNull Document document, @NotNull Node node); /** * Allows the delimiter processor to allow/disallow other delimiters in its inline text * * @param chars character sub-sequence to test * @param document document, can be used to get options * @param node delimited node created by this processor @return true if delimiters are allowed in this part of the node's text */ boolean allowDelimiters(@NotNull BasedSequence chars, @NotNull Document document, @NotNull Node node); /** * Allows the processor to adjust nodes' elements after all delimiters have been processed inside the inlined text * * @param document document, can be used to get parsing options * @param node node whose elements can be adjusted */ void updateNodeElements(@NotNull Document document, @NotNull Node node); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy