Class Formatter.MainNodeFormatter

java.lang.Object
com.vladsch.flexmark.formatter.NodeFormatterSubContext
com.vladsch.flexmark.formatter.Formatter.MainNodeFormatter
All Implemented Interfaces:
ExplicitAttributeIdProvider, NodeFormatterContext, TranslationContext, LinkResolverBasicContext, LinkResolverContext, NodeContext<Node,NodeFormatterContext>
Enclosing class:
Formatter

private class Formatter.MainNodeFormatter extends NodeFormatterSubContext
  • Field Details

  • Constructor Details

  • Method Details

    • encodeUrl

      @NotNull public @NotNull String encodeUrl(@NotNull @NotNull CharSequence url)
      Parameters:
      url - to be encoded
      Returns:
      an encoded URL (depending on the configuration)
    • resolveLink

      @NotNull public @NotNull ResolvedLink resolveLink(@NotNull @NotNull LinkType linkType, @NotNull @NotNull CharSequence url, Attributes attributes, Boolean urlEncode)
      Description copied from interface: LinkResolverContext
      Resolve link for rendering. Link Resolvers are going to be called until one returns ResolvedLink with getStatus() != LinkStatus.Unknown

      A resolver can replace the url but not change the status letting downstream resolvers handle the rest. This is useful when a resolver does partial processing like macro expansion but does not know how to handle the rest.

      Core processing will simply pass the link as is. It is up to extension LinkResolvers and AttributeProviders to make sense of the link and applicable attributes based on status.

      Parameters:
      linkType - type of link being rendered. Core defined links are Link, Image. Extensions can define their own
      url - link url text
      attributes - link attributes
      urlEncode - whether the link should be url encoded, if null then the value of HtmlRenderer.PERCENT_ENCODE_URLS will be used to determine whether the resolved URL is to be encoded.
      Returns:
      resolved link url for this link and its resolved status
    • resolveLink

      ResolvedLink resolveLink(NodeFormatterSubContext context, LinkType linkType, CharSequence url, Attributes attributes)
    • addExplicitId

      public void addExplicitId(@NotNull @NotNull Node node, @Nullable @Nullable String id, @NotNull @NotNull NodeFormatterContext context, @NotNull @NotNull MarkdownWriter markdown)
      Description copied from interface: ExplicitAttributeIdProvider
      Used by AttributesExtension to insert attributes for headings during merge
      Parameters:
      node - node
      id - explicit id
      context - context
      markdown - markdown writer
    • getRenderPurpose

      @NotNull public @NotNull RenderPurpose getRenderPurpose()
      Description copied from interface: TranslationContext
      Get the reason this format rendering is being performed
      Returns:
      RenderPurpose for current rendering
    • isTransformingText

      public boolean isTransformingText()
      Description copied from interface: TranslationContext
      Returns false if special translation functions are no-ops

      During RenderPurpose.TRANSLATION_SPANS this is true During RenderPurpose.TRANSLATED_SPANS this is true During RenderPurpose.TRANSLATED this is true

      Returns:
      true if need to call translation related functions
    • transformNonTranslating

      @NotNull public @NotNull CharSequence transformNonTranslating(CharSequence prefix, @NotNull @NotNull CharSequence nonTranslatingText, CharSequence suffix, CharSequence suffix2)
      Description copied from interface: TranslationContext
      Transform non-translating text

      During RenderPurpose.TRANSLATION_SPANS this converts text to non-translating placeholder based on ordinal id During RenderPurpose.TRANSLATED_SPANS this returns the non-translating placeholder based on ordinal id During RenderPurpose.TRANSLATED this returns the original non-translating text for the nonTranslatingText (placeholder)

      Parameters:
      prefix - prefix to use on non-translating placeholder so it is interpreted as a proper element during parsing
      nonTranslatingText - non-rendering text of the node (content will depend on translation phase)
      suffix - suffix to use on non-translating placeholder so it is interpreted as a proper element during parsing
      suffix2 - suffix to use on non-translating placeholder so it is interpreted as a proper element during parsing
      Returns:
      text to be used in rendering for this phase
    • transformTranslating

      @NotNull public @NotNull CharSequence transformTranslating(CharSequence prefix, @NotNull @NotNull CharSequence translatingText, CharSequence suffix, CharSequence suffix2)
      Description copied from interface: TranslationContext
      Transform translating text but which is contextually isolated from the text block in which it is located ie. link reference or image reference

      During RenderPurpose.TRANSLATION_SPANS this converts text to non-translating placeholder based on ordinal id and adds it to translation snippets During RenderPurpose.TRANSLATED_SPANS this returns the non-translating placeholder based on ordinal id During RenderPurpose.TRANSLATED this returns the translated text for the translatingText (placeholder)

      Parameters:
      prefix - prefix to use on non-translating placeholder so it is interpreted as a proper element during parsing
      translatingText - translating but isolated text of the node (content will depend on translation phase)
      suffix - suffix to use on non-translating placeholder so it is interpreted as a proper element during parsing
      suffix2 - suffix to use on non-translating placeholder so it is interpreted as a proper element during parsing
      Returns:
      text to be used in rendering for this phase
    • transformAnchorRef

      @NotNull public @NotNull CharSequence transformAnchorRef(@NotNull @NotNull CharSequence pageRef, @NotNull @NotNull CharSequence anchorRef)
      Description copied from interface: TranslationContext
      During RenderPurpose.TRANSLATION_SPANS this converts anchorRef to ordinal placeholder id During RenderPurpose.TRANSLATED_SPANS this returns the ordinal placeholder During RenderPurpose.TRANSLATED this returns new anchorRef for the AnchorRefTarget original was referring to
      Parameters:
      pageRef - url part without the anchor ref to resolve reference
      anchorRef - anchor ref
      Returns:
      anchorRef for the phase to be used for rendering
    • postProcessNonTranslating

      public void postProcessNonTranslating(@NotNull @NotNull Function<String,CharSequence> postProcessor, @NotNull @NotNull Runnable scope)
      Parameters:
      postProcessor - id post processor for TRANSLATED purpose
      scope - code to which the post processor applies
    • postProcessNonTranslating

      @NotNull public <T> T postProcessNonTranslating(@NotNull @NotNull Function<String,CharSequence> postProcessor, @NotNull @NotNull Supplier<T> scope)
      Parameters:
      postProcessor - id post processor for TRANSLATED purpose
      scope - code to which the post processor applies
    • isPostProcessingNonTranslating

      public boolean isPostProcessingNonTranslating()
      Returns:
      true if non-translating post processor is set
    • getMergeContext

      public MergeContext getMergeContext()
    • getIdGenerator

      public HtmlIdGenerator getIdGenerator()
    • translatingSpan

      public void translatingSpan(@NotNull @NotNull TranslatingSpanRender render)
      Description copied from interface: TranslationContext
      Separate translation span. Will generate a paragraph of text which should be translated as one piece

      During RenderPurpose.TRANSLATION_SPANS this adds the generated output to translation spans During RenderPurpose.TRANSLATED_SPANS output from renderer is suppressed, instead outputs corresponding translated span During RenderPurpose.TRANSLATED calls render

    • nonTranslatingSpan

      public void nonTranslatingSpan(@NotNull @NotNull TranslatingSpanRender render)
      Description copied from interface: TranslationContext
      Separate non-translation span. Will generate a paragraph of text which will not be translated

      During RenderPurpose.TRANSLATION_SPANS this adds the generated output to translation spans During RenderPurpose.TRANSLATED_SPANS output from renderer is suppressed, instead outputs corresponding translated span During RenderPurpose.TRANSLATED calls render

    • translatingRefTargetSpan

      public void translatingRefTargetSpan(@Nullable @Nullable Node target, @NotNull @NotNull TranslatingSpanRender render)
      Description copied from interface: TranslationContext
      Separate translation span which is also a ref target
      Parameters:
      target - target node,
      render -
    • getTranslationStore

      @NotNull public @NotNull MutableDataHolder getTranslationStore()
      Description copied from interface: TranslationContext
      Get MutableDataHolder for storing this translation run values across render purpose phases
    • customPlaceholderFormat

      public void customPlaceholderFormat(@NotNull @NotNull TranslationPlaceholderGenerator generator, @NotNull @NotNull TranslatingSpanRender render)
      Description copied from interface: TranslationContext
      Temporarily change the format for placeholders
      Parameters:
      generator - placeholder generator
      render - render which will be used with the custom generator
    • getCurrentNode

      @NotNull public @NotNull Node getCurrentNode()
      Returns:
      the current node being rendered
    • getOptions

      @NotNull public @NotNull DataHolder getOptions()
      Description copied from interface: NodeFormatterContext
      Get the current rendering context DataHolder. These are the options passed or set on the Formatter.builder() or passed to Formatter.builder(DataHolder). To get the document options you should use NodeFormatterContext.getDocument() as the data holder.
      Returns:
      the current renderer options DataHolder
    • getFormatterOptions

      @NotNull public @NotNull FormatterOptions getFormatterOptions()
      Returns:
      the FormatterOptions for the context.
    • getDocument

      @NotNull public @NotNull Document getDocument()
      Returns:
      the Document node of the current context
    • getBlockQuoteLikePrefixPredicate

      @NotNull public @NotNull CharPredicate getBlockQuoteLikePrefixPredicate()
      Returns:
      predicate for prefix chars which compact like block quote prefix char
    • getBlockQuoteLikePrefixChars

      @NotNull public @NotNull BasedSequence getBlockQuoteLikePrefixChars()
      Returns:
      char sequence of all prefix chars which compact like block quote prefix char
    • getTrackedOffsets

      @NotNull public @NotNull TrackedOffsetList getTrackedOffsets()
      Returns:
      tracked offset list
    • isRestoreTrackedSpaces

      public boolean isRestoreTrackedSpaces()
    • getTrackedSequence

      @NotNull public @NotNull BasedSequence getTrackedSequence()
      Description copied from interface: NodeFormatterContext
      NOTE: parser can only use a contiguous sequence, not segmented. Therefore, the AST offsets and base sequence from AST nodes has always an index into sequence equal to the offset. This sequence is set to not BasedSequence.NULL when the format sequence used for tracked offsets is not contiguous and TrackedOffset.offset is an offset from this sequence and need to be converted to index into this sequence to be used as an offset into AST sequence for offset conversion
      Returns:
      original sequence used for tracked offsets.
    • getFormattingPhase

      @NotNull public @NotNull FormattingPhase getFormattingPhase()
      Returns:
      current rendering phase
    • render

      public void render(@NotNull @NotNull Node node)
      Description copied from interface: NodeFormatterContext
      Render the specified node and its children using the configured renderers. This should be used to render child nodes; be careful not to pass the node that is being rendered, that would result in an endless loop.
      Parameters:
      node - the node to render
    • nodesOfType

      @NotNull public final @NotNull Iterable<? extends Node> nodesOfType(@NotNull @NotNull Class<?>[] classes)
      Description copied from interface: NodeFormatterContext
      Get iterable of nodes of given types, in order of their appearance in the document tree, depth first traversal. Only node classes returned by NodeFormatter.getNodeClasses() of all loaded extensions will be available to formatters.

      CoreNodeFormatter registers RefNode if Formatter.REFERENCE_SORT is set to ElementPlacementSort.SORT_UNUSED_LAST so that

      Parameters:
      classes - node classes to return
      Returns:
      iterable
    • nodesOfType

      @NotNull public final @NotNull Iterable<? extends Node> nodesOfType(@NotNull @NotNull Collection<Class<?>> classes)
    • reversedNodesOfType

      @NotNull public final @NotNull Iterable<? extends Node> reversedNodesOfType(@NotNull @NotNull Class<?>[] classes)
      Description copied from interface: NodeFormatterContext
      Get iterable of nodes of given types, in reverse order of their appearance in the document tree, depth first traversal. Only node classes returned by NodeFormatter.getNodeClasses() of all loaded extensions will be available to formatters.

      CoreNodeFormatter registers RefNode if Formatter.REFERENCE_SORT is set to ElementPlacementSort.SORT_UNUSED_LAST so that

      Parameters:
      classes - node classes to return
      Returns:
      iterable
    • reversedNodesOfType

      @NotNull public final @NotNull Iterable<? extends Node> reversedNodesOfType(@NotNull @NotNull Collection<Class<?>> classes)
    • getSubContext

      @NotNull public @NotNull NodeFormatterContext getSubContext()
      Description copied from interface: NodeContext
      Creates a child rendering context that can be used to collect rendered html text. The child context inherits everything but the HtmlRenderer and doNotRenderLinksNesting from the parent.
      Returns:
      a new rendering context with a given appendable for its output
    • getSubContext

      @NotNull public @NotNull NodeFormatterContext getSubContext(@Nullable @Nullable DataHolder options)
      Description copied from interface: NodeContext
      Creates a child rendering context that can be used to collect rendered html text. The child context inherits everything but the HtmlRenderer and doNotRenderLinksNesting from the parent.
      Parameters:
      options - options to use for the context (only options which do not affect the context construction will be used)
      Returns:
      a new rendering context with a given appendable for its output
    • getSubContext

      @NotNull public @NotNull NodeFormatterContext getSubContext(@Nullable @Nullable DataHolder options, @NotNull @NotNull ISequenceBuilder<?,?> builder)
      Description copied from interface: NodeContext
      Creates a child rendering context that can be used to collect rendered html text. The child context inherits everything but the HtmlRenderer and doNotRenderLinksNesting from the parent.
      Parameters:
      options - options to use for the context (only options which do not affect the context construction will be used)
      builder - sequence builder to user for appended text for tracking original base offsets
      Returns:
      a new rendering context with a given appendable for its output
    • getSubContextRaw

      NodeFormatterContext getSubContextRaw(@Nullable @Nullable DataHolder options, @NotNull @NotNull ISequenceBuilder<?,?> builder)
    • renderNode

      void renderNode(Node node, NodeFormatterSubContext subContext)
    • renderChildren

      public void renderChildren(@NotNull @NotNull Node parent)
      Description copied from interface: NodeFormatterContext
      Render the children of the node, used by custom renderers
      Parameters:
      parent - node the children of which are to be rendered
    • delegateRender

      public void delegateRender()
      Description copied from interface: NodeFormatterContext
      pass node rendering to previously registered handler
    • delegateRender

      protected void delegateRender(NodeFormatterSubContext subContext)
    • renderChildrenNode

      protected void renderChildrenNode(Node parent, NodeFormatterSubContext subContext)