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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
Formatter.MainNodeFormatter.SubNodeFormatter
-
Field Summary
-
Fields inherited from class com.vladsch.flexmark.formatter.NodeFormatterSubContext
markdown, rendererIndex, rendererList, renderingNode
-
-
Constructor Summary
Constructors Constructor Description MainNodeFormatter(DataHolder options, MarkdownWriter out, Document document, TranslationHandler translationHandler)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addExplicitId(@NotNull Node node, @Nullable java.lang.String id, @NotNull NodeFormatterContext context, @NotNull MarkdownWriter markdown)
Used by AttributesExtension to insert attributes for headings during mergevoid
customPlaceholderFormat(@NotNull TranslationPlaceholderGenerator generator, @NotNull TranslatingSpanRender render)
Temporarily change the format for placeholdersvoid
delegateRender()
pass node rendering to previously registered handlerprotected void
delegateRender(NodeFormatterSubContext subContext)
@NotNull java.lang.String
encodeUrl(@NotNull java.lang.CharSequence url)
@NotNull BasedSequence
getBlockQuoteLikePrefixChars()
@NotNull CharPredicate
getBlockQuoteLikePrefixPredicate()
@NotNull Node
getCurrentNode()
@NotNull Document
getDocument()
@NotNull FormatterOptions
getFormatterOptions()
@NotNull FormattingPhase
getFormattingPhase()
HtmlIdGenerator
getIdGenerator()
MergeContext
getMergeContext()
@NotNull DataHolder
getOptions()
Get the current rendering contextDataHolder
.@NotNull RenderPurpose
getRenderPurpose()
Get the reason this format rendering is being performed@NotNull NodeFormatterContext
getSubContext()
Creates a child rendering context that can be used to collect rendered html text.@NotNull NodeFormatterContext
getSubContext(@Nullable DataHolder options)
Creates a child rendering context that can be used to collect rendered html text.@NotNull NodeFormatterContext
getSubContext(@Nullable DataHolder options, @NotNull ISequenceBuilder<?,?> builder)
Creates a child rendering context that can be used to collect rendered html text.(package private) NodeFormatterContext
getSubContextRaw(@Nullable DataHolder options, @NotNull ISequenceBuilder<?,?> builder)
@NotNull TrackedOffsetList
getTrackedOffsets()
@NotNull BasedSequence
getTrackedSequence()
NOTE: parser can only use a contiguous sequence, not segmented.@NotNull MutableDataHolder
getTranslationStore()
Get MutableDataHolder for storing this translation run values across render purpose phasesboolean
isPostProcessingNonTranslating()
boolean
isRestoreTrackedSpaces()
boolean
isTransformingText()
Returns false if special translation functions are no-ops@NotNull java.lang.Iterable<? extends Node>
nodesOfType(@NotNull java.lang.Class<?>[] classes)
Get iterable of nodes of given types, in order of their appearance in the document tree, depth first traversal.@NotNull java.lang.Iterable<? extends Node>
nodesOfType(@NotNull java.util.Collection<java.lang.Class<?>> classes)
void
nonTranslatingSpan(@NotNull TranslatingSpanRender render)
Separate non-translation span.void
postProcessNonTranslating(@NotNull java.util.function.Function<java.lang.String,java.lang.CharSequence> postProcessor, @NotNull java.lang.Runnable scope)
<T> T
postProcessNonTranslating(@NotNull java.util.function.Function<java.lang.String,java.lang.CharSequence> postProcessor, @NotNull java.util.function.Supplier<T> scope)
void
render(@NotNull Node node)
Render the specified node and its children using the configured renderers.void
renderChildren(@NotNull Node parent)
Render the children of the node, used by custom renderersprotected void
renderChildrenNode(Node parent, NodeFormatterSubContext subContext)
(package private) void
renderNode(Node node, NodeFormatterSubContext subContext)
@NotNull ResolvedLink
resolveLink(@NotNull LinkType linkType, @NotNull java.lang.CharSequence url, Attributes attributes, java.lang.Boolean urlEncode)
Resolve link for rendering.(package private) ResolvedLink
resolveLink(NodeFormatterSubContext context, LinkType linkType, java.lang.CharSequence url, Attributes attributes)
@NotNull java.lang.Iterable<? extends Node>
reversedNodesOfType(@NotNull java.lang.Class<?>[] classes)
Get iterable of nodes of given types, in reverse order of their appearance in the document tree, depth first traversal.@NotNull java.lang.Iterable<? extends Node>
reversedNodesOfType(@NotNull java.util.Collection<java.lang.Class<?>> classes)
@NotNull java.lang.CharSequence
transformAnchorRef(@NotNull java.lang.CharSequence pageRef, @NotNull java.lang.CharSequence anchorRef)
DuringRenderPurpose.TRANSLATION_SPANS
this converts anchorRef to ordinal placeholder id DuringRenderPurpose.TRANSLATED_SPANS
this returns the ordinal placeholder DuringRenderPurpose.TRANSLATED
this returns new anchorRef for the AnchorRefTarget original was referring to@NotNull java.lang.CharSequence
transformNonTranslating(java.lang.CharSequence prefix, @NotNull java.lang.CharSequence nonTranslatingText, java.lang.CharSequence suffix, java.lang.CharSequence suffix2)
Transform non-translating text@NotNull java.lang.CharSequence
transformTranslating(java.lang.CharSequence prefix, @NotNull java.lang.CharSequence translatingText, java.lang.CharSequence suffix, java.lang.CharSequence suffix2)
Transform translating text but which is contextually isolated from the text block in which it is located ie.void
translatingRefTargetSpan(@Nullable Node target, @NotNull TranslatingSpanRender render)
Separate translation span which is also a ref targetvoid
translatingSpan(@NotNull TranslatingSpanRender render)
Separate translation span.-
Methods inherited from class com.vladsch.flexmark.formatter.NodeFormatterSubContext
flushTo, flushTo, getMarkdown, getRenderingNode, setRenderingNode
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.vladsch.flexmark.html.renderer.LinkResolverContext
resolveLink
-
-
-
-
Field Detail
-
document
private final Document document
-
renderers
private final java.util.Map<java.lang.Class<?>,java.util.List<NodeFormattingHandler<?>>> renderers
-
collectedNodes
private final SubClassingBag<Node> collectedNodes
-
phasedFormatters
private final java.util.List<PhasedNodeFormatter> phasedFormatters
-
renderingPhases
private final java.util.Set<FormattingPhase> renderingPhases
-
options
private final DataHolder options
-
isFormatControlEnabled
@NotNull private final @NotNull java.lang.Boolean isFormatControlEnabled
-
phase
private FormattingPhase phase
-
translationHandler
final TranslationHandler translationHandler
-
linkResolvers
private final LinkResolver[] linkResolvers
-
resolvedLinkMap
private final java.util.HashMap<LinkType,java.util.HashMap<java.lang.String,ResolvedLink>> resolvedLinkMap
-
explicitAttributeIdProvider
private final ExplicitAttributeIdProvider explicitAttributeIdProvider
-
idGenerator
private final HtmlIdGenerator idGenerator
-
controlProcessor
@Nullable private @Nullable FormatControlProcessor controlProcessor
-
blockQuoteLikePredicate
private final CharPredicate blockQuoteLikePredicate
-
blockQuoteLikeChars
private final BasedSequence blockQuoteLikeChars
-
trackedOffsets
final TrackedOffsetList trackedOffsets
-
trackedSequence
final BasedSequence trackedSequence
-
restoreTrackedSpaces
final boolean restoreTrackedSpaces
-
formatterOptions
final FormatterOptions formatterOptions
-
-
Constructor Detail
-
MainNodeFormatter
MainNodeFormatter(DataHolder options, MarkdownWriter out, Document document, TranslationHandler translationHandler)
-
-
Method Detail
-
encodeUrl
@NotNull public @NotNull java.lang.String encodeUrl(@NotNull @NotNull java.lang.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 java.lang.CharSequence url, Attributes attributes, java.lang.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.UnknownA 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 ownurl
- link url textattributes
- link attributesurlEncode
- whether the link should be url encoded, if null then the value ofHtmlRenderer.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, java.lang.CharSequence url, Attributes attributes)
-
addExplicitId
public void addExplicitId(@NotNull @NotNull Node node, @Nullable @Nullable java.lang.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
- nodeid
- explicit idcontext
- contextmarkdown
- 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-opsDuring
RenderPurpose.TRANSLATION_SPANS
this is true DuringRenderPurpose.TRANSLATED_SPANS
this is true DuringRenderPurpose.TRANSLATED
this is true- Returns:
- true if need to call translation related functions
-
transformNonTranslating
@NotNull public @NotNull java.lang.CharSequence transformNonTranslating(java.lang.CharSequence prefix, @NotNull @NotNull java.lang.CharSequence nonTranslatingText, java.lang.CharSequence suffix, java.lang.CharSequence suffix2)
Description copied from interface:TranslationContext
Transform non-translating textDuring
RenderPurpose.TRANSLATION_SPANS
this converts text to non-translating placeholder based on ordinal id DuringRenderPurpose.TRANSLATED_SPANS
this returns the non-translating placeholder based on ordinal id DuringRenderPurpose.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 parsingnonTranslatingText
- 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 parsingsuffix2
- 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 java.lang.CharSequence transformTranslating(java.lang.CharSequence prefix, @NotNull @NotNull java.lang.CharSequence translatingText, java.lang.CharSequence suffix, java.lang.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 referenceDuring
RenderPurpose.TRANSLATION_SPANS
this converts text to non-translating placeholder based on ordinal id and adds it to translation snippets DuringRenderPurpose.TRANSLATED_SPANS
this returns the non-translating placeholder based on ordinal id DuringRenderPurpose.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 parsingtranslatingText
- 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 parsingsuffix2
- 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 java.lang.CharSequence transformAnchorRef(@NotNull @NotNull java.lang.CharSequence pageRef, @NotNull @NotNull java.lang.CharSequence anchorRef)
Description copied from interface:TranslationContext
DuringRenderPurpose.TRANSLATION_SPANS
this converts anchorRef to ordinal placeholder id DuringRenderPurpose.TRANSLATED_SPANS
this returns the ordinal placeholder DuringRenderPurpose.TRANSLATED
this returns new anchorRef for the AnchorRefTarget original was referring to- Parameters:
pageRef
- url part without the anchor ref to resolve referenceanchorRef
- anchor ref- Returns:
- anchorRef for the phase to be used for rendering
-
postProcessNonTranslating
public void postProcessNonTranslating(@NotNull @NotNull java.util.function.Function<java.lang.String,java.lang.CharSequence> postProcessor, @NotNull @NotNull java.lang.Runnable scope)
- Parameters:
postProcessor
- id post processor for TRANSLATED purposescope
- code to which the post processor applies
-
postProcessNonTranslating
@NotNull public <T> T postProcessNonTranslating(@NotNull @NotNull java.util.function.Function<java.lang.String,java.lang.CharSequence> postProcessor, @NotNull @NotNull java.util.function.Supplier<T> scope)
- Parameters:
postProcessor
- id post processor for TRANSLATED purposescope
- 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 pieceDuring
RenderPurpose.TRANSLATION_SPANS
this adds the generated output to translation spans DuringRenderPurpose.TRANSLATED_SPANS
output from renderer is suppressed, instead outputs corresponding translated span DuringRenderPurpose.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 translatedDuring
RenderPurpose.TRANSLATION_SPANS
this adds the generated output to translation spans DuringRenderPurpose.TRANSLATED_SPANS
output from renderer is suppressed, instead outputs corresponding translated span DuringRenderPurpose.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,
-
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 generatorrender
- 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 contextDataHolder
. These are the options passed or set on theFormatter.builder()
or passed toFormatter.builder(DataHolder)
. To get the document options you should useNodeFormatterContext.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 notBasedSequence.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 java.lang.Iterable<? extends Node> nodesOfType(@NotNull @NotNull java.lang.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 byNodeFormatter.getNodeClasses()
of all loaded extensions will be available to formatters.CoreNodeFormatter
registersRefNode
ifFormatter.REFERENCE_SORT
is set toElementPlacementSort.SORT_UNUSED_LAST
so that- Parameters:
classes
- node classes to return- Returns:
- iterable
-
nodesOfType
@NotNull public final @NotNull java.lang.Iterable<? extends Node> nodesOfType(@NotNull @NotNull java.util.Collection<java.lang.Class<?>> classes)
-
reversedNodesOfType
@NotNull public final @NotNull java.lang.Iterable<? extends Node> reversedNodesOfType(@NotNull @NotNull java.lang.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 byNodeFormatter.getNodeClasses()
of all loaded extensions will be available to formatters.CoreNodeFormatter
registersRefNode
ifFormatter.REFERENCE_SORT
is set toElementPlacementSort.SORT_UNUSED_LAST
so that- Parameters:
classes
- node classes to return- Returns:
- iterable
-
reversedNodesOfType
@NotNull public final @NotNull java.lang.Iterable<? extends Node> reversedNodesOfType(@NotNull @NotNull java.util.Collection<java.lang.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)
-
-