- 0.64.8
- 0.64.6
- 0.64.4
- 0.64.2
- 0.64.0
- 0.62.4
- 0.62.2
- 0.62.0
- 0.61.34
- 0.61.32
- 0.61.30
- 0.61.28
- 0.61.26
- 0.61.24
- 0.61.22
- 0.61.20
- 0.61.18
- 0.61.16
- 0.61.14
- 0.61.12
- 0.61.10
- 0.61.8
- 0.61.6
- 0.61.4
- 0.61.2
- 0.61.0
- 0.60.2
- 0.60.0
- 0.59.84
- 0.59.82
- 0.59.80
- 0.59.78
- 0.59.76
- 0.59.74
- 0.59.72
- 0.59.70
- 0.59.68
- 0.59.66
- 0.59.64
- 0.59.62
- 0.59.60
- 0.59.58
- 0.59.56
- 0.59.54
- 0.59.52
- 0.59.50
- 0.59.48
- 0.59.46
- 0.59.44
- 0.59.42
- 0.59.40
- 0.59.38
- 0.59.36
- 0.59.34
- 0.59.32
- 0.59.30
- 0.59.28
- 0.59.27
- 0.59.25
- 0.59.23
- 0.59.21
- 0.59.19
- 0.59.17
- 0.59.15
- 0.59.13
- 0.59.11
- 0.59.9
- 0.59.7
- 0.59.5
- 0.59.1
- 0.50.50
- 0.50.48
- 0.50.46
- 0.50.44
- 0.50.42
- 0.50.40
- 0.50.38
- 0.50.36
- 0.50.34
- 0.50.32
- 0.50.30
- 0.50.28
- 0.50.26
- 0.50.24
- 0.50.22
- 0.50.20
- 0.50.18
- 0.50.16
- 0.42.14
- 0.42.12
- 0.42.10
- 0.42.8
- 0.42.6
- 0.42.4
- 0.42.2
- 0.42.0
- 0.40.34
- 0.40.32
- 0.40.30
- 0.40.28
- 0.40.26
- 0.40.24
- 0.40.22
- 0.40.20
- 0.40.18
- 0.40.16
- 0.40.14
- 0.40.12
- 0.40.10
- 0.40.8
- 0.40.6
- 0.40.4
- 0.40.2
- 0.40.0
- Update:
flexmark-ext-emojito latest references from emoji-cross-reference based on latest Emoji-Cheat-Sheet.com, GitHub Emoji API, Unicode Emoji List, v15.0 and Unicode Emoji Modifiers List, v15.0. Some emoji categories have changed because in the latest references the categories are taken from Unicode Emoji List, v15.0 and Unicode Emoji Modifiers List, v15.0, instead of Emoji-Cheat-Sheet.com. - Change: update
flexmark-docx-converteremoji images to latest from Emoji-Cheat-Sheet.com. - Change:
flexmark-html2md-converterto ignore image alt emoji category when trying to match emoji shortcut. - Add:
USE_UNICODE_FILE_NAMESoption toEmojiExtension, defaultfalse. When true will useunicodeSampleFilefield forEmoji Cheat Sheetimage file name. This is to support implementations which rely on the file renaming done by emoji-cross-reference when copying emoji cheat sheet images to commonemoji_images/emojisdirectory. - Fix: reference links in html to md conversion use the same ref id when link text is the same,
even when the URLs differ. Now the reference id will be generated by adding
_xxxsuffix, wherexxxis an increasing integer, starting at 1, and incremented until a unique reference id is generated.- Add:
UNIQUE_LINK_REF_ID_GENERATOR, default(refId, index) -> String.format("%s_%d", refId, index), aBiFunction<String, Integer, String>taking refId string and integer index and returning a string for the "uniquified" ref id to use for a reference link.
- Add:
- Merge: TextCollectingVisitor works better with code blocks by roxspring · Pull Request #575 · vsch/flexmark-java · GitHub
- Add: gradle build resource url resolver, mapping
/build/resources/test/to/src/test/resources/ - Add: a bit more documentation to
ResourceResolverManager
- Change: update to
org.docx4j:docx4j-JAXB-ReferenceImpl:11.4.9, if you have code usingjavax.xml.bindpackage from the dependency, you will need to change it tojakarta.xml.bind. Global search/replace across the project will do it. - Add:
ResizableImageExtensiondocumentation that it does not play with the rest of the library renderers and is an unsupported extension. - Fix: update
log4j:log4j:1.2.17toorg.apache.logging.log4j:log4j-xxx:2.20.0 - Fix: exclude
com.ibm.icu:icu4j:59.1dependency, replace withcom.ibm.icu:icu4j:72.1 - Fix: exclude
commons-io:commons-io:1.3.1dependency, replace withcommons-io:commons-io:2.11.0
- Add:
containsSomeIn(CharPredicate),containsSomeNotIn(CharPredicate),containsOnlyIn(CharPredicate),containsOnlyNotIn(CharPredicate)methods toBasedSequence - Change: bump jsoup version to 1.15.4
- Change: bump jetbrains.annotations version to 24.0.1
- Change: remove
openhtmltopdf-jsoup-dom-converterdependency fromflexmark-pdf-converter. - Merge: outstanding PRs.
- Add OSGi metadata to Manifest to enable deployment to OSGi environments by benfortuna · Pull Request #521 · vsch/flexmark-java · GitHub
- fix issue #448 by protogenes · Pull Request #510 · vsch/flexmark-java · GitHub
- update plugins and configure for Reproducible Builds by hboutemy · Pull Request #507 · vsch/flexmark-java · GitHub
- Prevent StringIndexOutOfBounds in ext-resizable-image by MiniDigger · Pull Request #503 · vsch/flexmark-java · GitHub
- Fix typo in issue template by MiniDigger · Pull Request #502 · vsch/flexmark-java · GitHub
- test parsing long sequence of underscores by niklasf · Pull Request #495 · vsch/flexmark-java · GitHub
- Update to latest maven bundle plugin. Fix for #529 by cziegeler · Pull Request #530 · vsch/flexmark-java · GitHub
- ext-resizable-image: fix images inside links by e-im · Pull Request #543 · vsch/flexmark-java · GitHub
- Dependency update for jsoup by viglu · Pull Request #544 · vsch/flexmark-java · GitHub
- Fix vsch#545, do not escape special characters in
<pre><code>block by MekhailS · Pull Request #546 · vsch/flexmark-java · GitHub - Fix #548: Converting html images fails if the image refers to an emoji without a shortcut by DamnedElric · Pull Request #562 · vsch/flexmark-java · GitHub
- Fix generation of header IDs by travkin79 · Pull Request #566 · vsch/flexmark-java · GitHub
- Break: Change minimum Java requirement to 11.
- Fix: update OpenHtmlToPDF to 1.0.10
- Fix: update jsoup to 1.14.3
- Fix: update junit to 4.13.2
- Fix: update Docx4j to 11.3.2
- Fix: Remove deprecated
of()sequence methods. - Fix: #452, JiraConverter: Mixed lists rendered incorrectly, thanks to znerd
- Fix: merge #489, add flexmark-ext-resizable-image thanks to sparksparrow
- Fix: #482, Namespaces in embedded HTML blocks not supported?
- Add
Parser.HTML_ALLOW_NAME_SPACE, defaultfalseto allow recognizing HTML elements with namespace prefix. ❗ HTML deep parser always allows namespaces and ignores this option.
- Add
- Fix: allow exceptions in
ExceptionMatcherto have null cause, then use object.toString() for text.
- Fix: merge
Parsingoptimization by using static patterns - Fix: add a few more
Parsingoptimization by using static patterns for flag based dynamic values. - Fix: add cache for dynamic
Parsingpatterns based on dependent options.
- Fix: HTML to Md converter to convert empty a tags to empty link text links. ie.
<a href="#abc"></a>to[](#abc), except when contained in heading elements. - Break: rename
AttributestoMutableAttributesand create new immutableAttributesclass. - Fix: do not remove
titleattribute provided byLinkResolverwhen link has no title. Allow link resolver titles to be used.
- Fix: add
DocxRenderer.PAGE_SIZEandDocxRenderer.PAGE_LANDSCAPEproperties to allow simple changes to page setup for rendered document which is different from one in the template.
- Fix: optimized TOC levels from erroneous
#,#to#-#for single level TOC.
-
Fix: Toc and SimToc
levelsparsing to properly handle levels as per documentation.- single numeric >2 is 2-level, ie.
levels=4should be interpreted aslevels=2-4but waslevels=4,4. levels=x-to be same aslevels=x-6, was handled aslevels=x,x
levels=levelListwhere level list is a comma separated list of levels or ranges. Default is to include heading levels 2 and 3. If a range is specified using-as separator between numeric values then the included range is from first numeric to last numeric inclusive. If first numeric is missing then 1 will be used in its place. If last numeric is missing then 6 will be used in its place.Examples:
levels=1include level 1 only, same aslevels=1,1levels=2include level 2 only, same aslevels=2,2levels=3include levels 2 and 3levels=4include levels 2,3 and 4levels=2-4include levels 2,3 and 4. same aslevels=4levels=2-4,5include levels 2,3,4 and 5levels=1,3include levels 1 and 3levels=-3include levels 1 to 3levels=3-include levels 3 to 6
- single numeric >2 is 2-level, ie.
-
Fix:
SequenceBuilder.toString()not to add space between sequence parts. -
Break:
TextCollectingVisitorneedsTextContainer.F_ADD_SPACES_BETWEEN_NODESto ensure there is at least one space between texts of different nodes in collected text. Previously this was added automatically by sequence builder. Use one of thegetAndCollectfunctions taking options flags and passTextContainer.F_ADD_SPACES_BETWEEN_NODES. -
Fix:
MarkdownParagraphwrapping with preserving tracked offsets with spaces to preserve spaces right before last non-blank character. -
Fix: unify handling of link generating inline element handling in link text elements.
- Add:
LinkRenderedinterface to identify link rendering elements derived from link/image ref syntax identified by implementation ofLinkRefDerivedinterface - Fix:
WikiNodeto implementLinkRefDerived - Fix:
WikiLinkto implementLinkRendered - Fix:
Footnoteto implementLinkRendered
ℹ️ nested link ref derived elements in link ref text have priority and cannot be used to embed into link ref text using
[link ref text][ref id]syntax. - Add:
- Fix: link refs in link text should be collapsed.
-
Add:
Parser.LINK_TEXT_PRIORITY_OVER_LINK_REF, defaultfalse, commonmark spec does not specify how to parse:[[moon]](/uri) [moon]: moon.jpgwith default implementation priority given to contained ref, renders as:
<p>[<a href="moon.jpg">moon</a>](/uri)</p>when set to
true, priority given to outer link and will render as:<p><a href="/uri">[][moon]</a></p>ℹ️ Undefined reference links are always treated as text when in a link text element.
-
- Fix: #407, Link text inline content fails to parse image references, link and image refs in link text would be collapsed even when they are not tentative but defined.
-
Fix:
JekyllTagExtensionhandling of inline include tag. If included file contains a single paragraph then the paragraph is unwrapped so only the text is included. Otherwise, the included file AST is included as is, which may result in invalid HTML if included file has block elements since these will be included in theptag of including element.Break: ℹ️ when include tag embedding is enabled, the included file elements will be added as child nodes of the
JekyllTagnode, notJekyllTagBlocknode as was done in previous versions.
- Break: remove from
TocOptionsconfusing and error pronerawTitleandrawTitleLevel. Now mutable toc options have to settitleandtitleLevelthen callTocOptions.AsMutable.normalizeTitle() - Fix: add more debug trace information to markdown wrap tracked offset mismatch.
- Add:
UriContentResolverextension for unified content handling in parser and renderers by extensions.- Add:
JekyllTagExtension.CONTENT_RESOLVER_FACTORIES, defaultCollections.emptyList(). If this option is an empty list then a singleton list ofFileUriContentResolver.Factoryinstance will be used. - Fix:
IncludeNodePostProcessorto use content resolvers for getting file content instead of getting file directly. - Add:
DocxRenderer.DEFAULT_CONTENT_RESOLVER, defaulttrue, set tofalsenot to addFileUriContentResolverto content resolvers factories. - Add:
DocxRendererContext.resolvedContent(ResolvedLink)to allow generic URI to content resolution. - Fix:
CoreNodeDocxRendererto use content resolvers for resolving image links, only resolvinghttp://andhttps://links if content is not resolved.
- Add:
- Fix: add range limit to
Escaping.replaceAll(Pattern, BasedSequence, List<Range>, Replacer, ReplacedTextMapper)when setting matcher range. - Add:
DocxRenderer.CUSTOM_PROPERTIES, defaultCollections.emptyMap(), if present then custom properties of the document will be set.
- Fix: #398, Autolinks get cut off if they contain `&` (escaped query params) for multiple html entities per link.
- Fix: update docx4j to 8.1.6
- Fix: docx rendering tests for full spec example
- Add:
JekyllTagExtension.EMBED_INCLUDED_CONTENT, defaultfalse. Set totrueto embed included markdown content. - Fix: tracked paragraph wrapping when inserting space before EOL on a line when the word before caret will be wrapped to the next line. ie. the EOL will be removed.
- Deprecate:
JekyllTagExtension.ENABLE_RENDERING, not used nor needed. - Fix: #398, Autolinks get cut off if they contain `&` (escaped query params)
- Add:
HtmlRenderer.FENCED_CODE_LANGUAGE_DELIMITERS, default" \t", to configure which chars terminate the language part of info string - Add:
HtmlRenderer.FENCED_CODE_LANGUAGE_CLASS_MAP, defaultnew HashMap(), to provide individual language to class mapping string. If language string is not in the map thenHtmlRenderer.FENCED_CODE_LANGUAGE_CLASS_PREFIX+ language will be used. Intended to allow creating alias mapping and per-language class configuration.
- Fix: wrong assert conditions in
LineAppendableImpl.setPrefixLength(int, int) - Fix: assert condition for
MarkdownParagraph.resolveTrackedOffsetsEdit, space and non-break space should be considered a match. - Fix:
MarkdownParagraph.resolveTrackedOffsetsEdit, space and non-break space should be considered a match. - Add: details to assert for
SegmentTree.findSegmentPos(int, int[], int, int)to allow diagnostics in reports
- Add:
HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_LEADING_SPACESdefaulttrueandHtmlRenderer.HEADER_ID_REF_TEXT_TRIM_TRAILING_SPACESdefaulttrue. Whenfalsethen corresponding reference link text in heading text used for generating heading id is not trimmed. - Add:
HtmlRenderer.HEADER_ID_ADD_EMOJI_SHORTCUTdefaultfalseWhentruethen emjoi nodes add emoji shortcut to collected text for heading id. - Fix:
ParserEmulationProfile.GITHUB- Set
HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_TRAILING_SPACEStofalsebecause GitHub does not trim trailing spaces for generating heading ids. Emojinode to generate text for heading id consisting of the emoji shortcut, for GitHub compatibility.- Fix:
ImageRefnot to add text to heading text for heading id generation
- Set
- Fix: add more information to
MarkdownParagraph.resolveTrackedOffsetsEditassert failures to allow better diagnostics in reported stack traces. - Fix: disable wrapping of multiline URL image links
- Fix:
Paragraphcontent node to preserve leading spaces on lines. Otherwise, multiline URL image content would loose indents since these were stripped from paragraph content during parsing.-
Fix:
TablesExtensionto accept non-indenting leading spaces on all table rows. This results in previously non-table text as valid table texts:Abc|Def |---|---
-
- Fix:
LinkRefandImageRefchanging spaces to for wrap formatting when not part of aParagraph, ie. in heading text.
- Fix: merge #397, PR: Add base64 image support with docx rendering thanks to @Xaelis
- Add: test for base64 encoded docx conversion
- Break:
WikiLinkLinkResolverto takeWikiLinkExtension.ALLOW_ANCHORSandWikiLinkExtension.ALLOW_ANCHOR_ESCAPEinto account when extracting page ref from link.- Fix:
#or\included in the URL of the resolved link are now URL encoded. - Fix: default
WikiLinkLinkResolverhandles its own text unescaping. When resolving wiki
link with default resolver do not unescape. If replacing default resolver ensure you unescape the text. This is needed to properly handle anchor escaping. - Fix:
PegdownOptionsAdapterto setWikiLinkExtension.ALLOW_ANCHORStotruefor pegdown compatibility
- Fix:
- Fix: deprecate
CoreNodeFormatter.ATTRIBUTE_UNIQUIFICATION_ID_MAPand move declaration toFormatter.ATTRIBUTE_UNIQUIFICATION_ID_MAP - Fix: deprecate
CoreNodeFormatter.UNIQUIFICATION_ID_MAPand move declaration toFormatter.UNIQUIFICATION_ID_MAP - Fix: wiki links should not be wrapped during formatting.
- Add: WikiLink formatter extension and tests
- Add: WikiLink translating formatter functionality and tests
- Fix:
ScopedDataSet.getAll()andScopedDataSet.getKeys()would not return keys from parent scope. - Fix: #396, DocumentParser stops reading too early resulting in the document being cut off
-
Fix: enable original spec tests
-
Fix: merge #391, PR: Fix: CRLF line separator in fenced code blocks produce redundant CR.
-
Fix: merge #387, JUnit is in the compile scope
-
Add: ability to insert anchor ref targets to
HtmlIdGeneratorwhen scanning a document. -
Add: add
LinkResolverBasicContextas base interface ofLinkResolverContextto allow simple context to pass toLinkResolverwhen resolving links without needing to implement all unused methods ofLinkResolverContext. -
Break: change argument to
LinkResolverandLinkResolverFactorytoLinkResolverBasicContext. Except forJekyllTagExtension, the argument is stillLinkResolverContextand passed value can be cast to this if required. -
Add: support for
JekyllTagBlockwithincludedirective toDocxRendererUse
{% include includeFile %}to include the file into the source document.includeFileis resolved relative toDocxRenderer.DOC_RELATIVE_URLorDocxRenderer.DOC_ROOT_URL. The latter is used ifincludeFilestarts with/Will only include files if
JekyllTagExtension.LINK_RESOLVER_FACTORIESis not empty, in which case the link resolvers will be used to resolveincludeFileto full file path. Use singleton list ofDocxLinkResolver.Factoryinstance to resolve using doc relative and root url paths. -
Fix:
MergeLinkResolverandDocxLinkResolver
- Fix: change formatter sub-context rendering node to nullable
- Fix: rename
BaseSequence.extendToAnytoBaseSequence.extendByAnyNotwhich better reflects the operation of the method. - Deprecate:
BaseSequence.extendToAny - Add:
FlexmarkHtmlConverterdivto table options to allow convertingdivbased table code to markdown tables. - Fix: move
BaseSequenceManagerand related toflexmark-util-experimentalsince these are not used.
- Fix: convert
MarkdownTableto use commonTrackedOffsetfor offset tracking API - Fix: convert
MarkdownParagraphto use commonTrackedOffsetfor offset tracking API - Fix: deprecate old
addTrackedOffsetmethods. - Fix: rename formatter
HEADERoptions toHEADING - Fix: deprecate old header named options
- Fix: delete unused formatter option
KEEP_TRAILING_SPACES - Fix: delete unused formatter option
CODE_KEEP_TRAILING_SPACES
- Add: missing formatter options:
HeadingStyleBLOCK_QUOTE_CONTINUATION_MARKERSLIST_RESET_FIRST_ITEM_NUMBERapplies if renumbering itemsLIST_ALIGN_NUMERICflexmark-ext-attributesformatting of individual attributes instead of dumping the attributes node text.FORMAT_ATTRIBUTES_COMBINE_CONSECUTIVEFORMAT_SORT_ATTRIBUTESFORMAT_ID_ATTRIBUTE,AttributeImplicitNameenum, as is, implicit preferred, explicit preferredFORMAT_CLASS_ATTRIBUTE,AttributeImplicitNameenum, as is, implicit preferred, explicit preferredFORMAT_ATTRIBUTES_SPACESFORMAT_ATTRIBUTE_EQUAL_SPACEFORMAT_ATTRIBUTE_VALUE_QUOTES
- prioritized task items:
flexmark-ext-gfm-tasklistFORMAT_ORDERED_TASK_ITEM_PRIORITY:Integer, priority to use for parent item. Ordered task items do not not sort on priority since they are already ordered by number.FORMAT_ORDERED_TASK_ITEM_PRIORITY:Integer, priority to use for parent item. Ordered task items do not not sort on priority since they are already ordered by number.FORMAT_TASK_ITEM_PRIORITIES:int[], specifies integer priority for item marker characters corresponding toLISTS_ITEM_PREFIX_CHARSused for list items. Higher number is higher priority. A parent item's priority is the max priority of itself and any of its descendant task items. Non-task items do not have their own priority, only priority derived from their descendant items.
ElementPlacementSortSORT_DELETE_UNUSEDDELETE_UNUSED
LINK_MARKER_COMMENT_PATTERNCONTINUATION_ALIGNMENT- Add: Formatter control for controlling non-formatting regions.
<!-- @formatter:on -->and<!-- @formatter:off -->tagsFORMAT_CONTROL_ON:StringFORMAT_CONTROL_OFF:StringFORMAT_CONTROL_REGEX:Booleanto treat control on/off strings as regex pattern.
- implement
SimTocExtension.FORMAT_UPDATE_ON_FORMAToption
- Break: rename
CharWidthProvidermethods and changezeroWidthargument toCharPredicate - Fix:
TestUtils.getOptions(SpecExample, String, Function<String, DataHolder>)to return immutable data holder to prevent leak of options between spec examples - Fix: escape of plain
.at start of continuation. - Fix:
ListBlockParserescape/unEscape handler not checking if returned index == -1 and not handling empty char sequence. - Fix:
MarkdownParagraph- not checking if passed sequence is empty before invoking special lead-in escape/unEscape handlers, which is not part of the API contract.
- backspace after typing a char should not remove spaces which surrounded the char
- Fix: make
PairedextendMap.Entry - Fix:
#381, StackOverflowError with long base64 image and LINKS_ALLOW_MATCHED_PARENTHESES disabled,
USE_HARDCODED_LINK_ADDRESS_PARSERwas not used if matched parentheses were disabled causing stack overflow in regex evaluation. szxvalsdfj lasdf jffdddd
- Fix: erroneous not-null annotation on nullable return in
InlineParser.parseCustom(BasedSequence, Node, BitSet, Map<Character, CharacterNodeFactory>)
- Fix:
MarkdownParagraphwrap tracked offset adjustment:- on typing space in middle of word with second word becoming first non blank on a continuation line.
- on typing space at start of continuation line with
LSahead of position. - on typing space after non-space at start of continuation line with
LSahead of position. - on typing space after end of paragraph after the right margin.
- Fix:
MarkdownParagraph- Add: tracked offsets handling to prepare and resolve tracked offsets in wrapped text
- handle inserting a space when tracked offset is followed by a space to allow two spaces at tracked offset
- handle tracked offset followed by
LSto resolve offset to end of previous line - handle backspace on first character of continuation line to splice word to last word of previous line.
- Fix: To take
CharSequencefor indent properties instead ofintfor number of spaces to allow arbitrary indentation characters.
- Add: tracked offsets handling to prepare and resolve tracked offsets in wrapped text
- Fix:
SegmentOffsetTreeaggregated length replacement to containstartOffsetof next segment instead ofendOffsetof segment at position, to mimic equivalent aggregated length ofSegmentTree. - Fix:
BasedOffsetTrackerto handle 0 span and 1 span offset ranges and return info for the requested offset.
- Fix:
MarkdownParagraphline break getter/setter names. - Fix:
BasedOffsetTracker- if segment end offset equals offset and no segment containing offset is found, then use segment for index calculation.
- assertion conditions when search returns null, offset can be >= end offset
- Add:
FormatterParagraph wrapping options and code.- Add:
Formatter.RIGHT_MARGIN, default0, if >0 then text will be wrapped to given margin - Add:
Formatter.APPLY_SPECIAL_LEAD_IN_HANDLERS, defaulttrue, when true will escape special lead-in characters which wrap to beginning of line and un-escape any which wrap from beginning of line. Used to prevent special characters inside paragraph body from starting a new element when wrapped to beginning of line.
- Add:
- Add:
CustomBlockParserFactory.getLeadInHandler(DataHolder)and handle escaping/unescaping special lead in characters for the block elements. Add escape/unescape to:BlockQuoteParserListBlockParserHeadingParserAdmonitionBlockParserAsideBlockParserDefinitionItemBlockParser
- Add:
Parser.Builder.specialLeadInHandler(SpecialLeadInHandler)to allow parser extensions to register special lead in escaper/unescaper handlers for parser extension block elements if they do not have any custom block parser factories but do create extensions. - Add: special lead-in escape/unescape handlers during text wrapping
- Add:
SegmentOffsetTreefor binary search on offset in base sequence for conversion to index in result sequence. - Fix:
BitFieldSet.toString()to output field values when fields are more than one bit long. - Add:
BasedOffsetTrackerto takeBasedSequenceresult (could be segmented, offset in based sequence,PositionAnchorand return index of this offset in the resulting based sequence.
- Fix: convert
BitEnumSettoBitFieldSetto allow bit fields of more than 1 bit.- Add: Optional
BitFieldinterface, if implemented by Enum for use byBitFieldSetthen bit fields can be 1 to 64 bits in size, with manipulation of bit packed values and iteration over non-zero valued elements.
- Add: Optional
- Fix: rename
LineFormattingAppendabletoLineAppendable - Fix: remove unused overloads and methods from
LineFormattingAppendable - Add: new methods to
LineFormattingAppendablefor prefix changes and combined prefix/line manipulation. - Break: rename
LineAppendable.F_SUPPRESS_TRAILING_WHITESPACEtoLineAppendable.F_TRIM_TRAILING_WHITESPACE - Break: rename and invert
LineAppendable.F_ALLOW_LEADING_WHITESPACEtoLineAppendable.F_TRIM_LEADING_WHITESPACE - Deprecate: convenience copies of
LineAppendableflags inFormatterandHtmlRenderer. UseLineAppendabledirectly. - Break:
Formatter.FORMAT_FLAGSdefault changed from0toLineAppendable.F_TRIM_LEADING_WHITESPACEto reflect inversion of option flag and preserve behavior - Break:
HtmlRenderer.FORMAT_FLAGSdefault changed from0toLineAppendable.F_TRIM_LEADING_WHITESPACEto reflect inversion of option flag and preserve behavior - Fix: remove
myprefix from fields inflexmark-utilsto keep consistent naming convention in module. - Add:
BitEnumSetto expose the bit mask of elements to use as efficient and convenient bit masked options - Add:
ArrayUtils.toArray(BitSet)to return anint[]of all bit numbers that are set. - Break: make constructor
Range(int, int)protected. UseRange.ofto create instances.
- Fix: move experimental concept classes out of the library. Too much clutter of unused old
experimental stuff.
- Fix: move
PositionListrelated classes toflexmark-util-experimental - Fix: move unused classes from utils to experimental
- Fix: move
- Fix: rename
BasedSequenceBuildertoSequenceBuilder - Fix:
MarkdownParagraph- use
SegmentBuilderfor accumulating wrapped text. - Fix: remove any position tracking code from paragraph formatter
- use
- Fix:
SoftBreakNodein link ref would be trimmed and loose contained EOL as a result. - Fix:
SegmentedSequenceto takeSegmentBuilderparts for sequence generation instead of list of based sequences. The parts are already resolved by builder, based sequences duplicates useless work on both ends.- Fix: optimize storage by implementing binary search with segments serialized to byte array.
- Add: build
SegmentBuilderfromSegmentTree - Add: code to extract
startOffset/endOffsetandtreeDatarange forsubSequenceofSegmentedSequenceTree - Add:
SegmentTreebinary search tree for segmented sequence segments
- Add: build
- Add:
SegmentedSequenceTreebinary tree based segmented sequences with option to use oldSegmentedSequenceFullif desired. - Add: build
SegmentTreefromSegmentBuildersegments
- Fix: optimize storage by implementing binary search with segments serialized to byte array.
- Add: segment builder text part stats for first256 and repeatedText, former if all chars in part < 256, latter if all chars are the same. In preparation for storage optimized segmented sequence impl.
- Fix: optimized
SegmentBuilder- Change
TEXTsegments fromStringcontent to start/end being the -ve of start+1/end+1 of the subsequence for thisTEXTinStringBuilder - Change
Segto removemyTextfield and requireCharSequenceargument for to be passed to all methods which returnedmyTextin previous implementation. Returned value should beCharSequencewhich is thesubSequencerepresenting theTEXTcontent. TEXTsegments no longer have a start/end offset of prev/nextBASEsince their start/end offsets represent offset inStringBuilderfor their character sequence. Their base start offset isendOffsetof previousBASEorstartOffsetofSegmentBuilderif first segment. TheirendOffsetisstartOffsetof nextBASEorendOffsetofSegmentBuilderif it is a danglingTEXTsegment.TEXTsegments to be accumulated inStringBuilderso a single char sequence for out of base characters is available.SegmentBuildertracks lastimmutableOffsetin itsStringBuilderto reflect the accumulated, immutable out of baseTEXTsegments in the segment builder.immutableOffsetandStringBuilder.length()represents the start/end offsets of danglingTEXTsegment.- dangling
TEXTsegment is mutable until aBASEsegment is added after it which results inSegmentBuilderendOffsetchange and afteroptimizeTextmethod has been invoked. IfTEXTsegment becomes immutable thenimmutableOffsetis changed to theendOffsetof theTEXTsegment's subSequence end. - adding an
ANCHORafter danglingTEXTwith anoffsetequal toStringBuilderendOffsetwill invokeoptimizeTextto allow extending previousBASErange and reducing danglingTEXTcontent. It will not change the danglingTEXTto immutableTEXTto allow appending more text after the call. - appending
TEXTtoSegmentBuilderappends the text toStringBuilderand updates out of base stats for appendedTEXTcontent. Out of base stats always reflect the current content ofSegmentBuilder - methods:
handleOverlapis invoked when an overlapping,BASEsegment is added. It may result in callingoptimizeTextif the resolution of overlap causes aBASEsegment to be appended after a danglingTEXTsegment.- An exception is thrown if:
- an overlap is found in returned segments
- text length of returned segments does not equal the text length of original sequence.
- Arguments are
Object[3]: lastBASErange, optional danglingTEXTand newBASErange passed asObject[]withRangeandCharSequencerepresentingBASEandTEXTsegments. StringBuildercontent is truncated toimmutableOffsetand out of base statistics are updated to remove theTEXTcontent character information before method invocation because they will be updated for changed segments returned by the method.- It must return an
Object[]of segments that resolve the overlap. No optimization needs to be done at this point becauseoptimizeTextwill be called if needed as the resulting segments are appended to theSegmentBuilder SegmentBuilderwill replace last range and append the rest of the returned segments and update all internal structures, eliminating the concern for these inhandleOverlap.
- An exception is thrown if:
optimizeTextcalled when aBASEorANCHORsegment is added after danglingTEXTsegment.- An exception is thrown if:
- an overlap is found in returned segments
- text length of returned segments does not equal the text length of original arguments.
- Arguments are
Object[3]: lastBASErange orRange.NULL, danglingTEXTand newBASE/ANCHORrange orRange.NULLare passed asObject[]withRangeandStringrepresentingBASE/ANCHORandTEXTsegments respectively. StringBuildercontent is truncated toimmutableOffsetand out of base statistics are updated to remove theTEXTcontent character information before method invocation because they will be updated for changed segments returned by the method.- Method to return an
Object[]of optimized segments, withRangerepresentingBASE/ANCHORsegments andCharSequencerepresentingTEXTsegments. SegmentBuilderwill replace last range and append the rest of the returned segments and update all internal structures, eliminating the concern for these inoptimizeText.
- An exception is thrown if:
- Change
- Fix: remove space to
conversion of spec example first line. Was done to allow GitHub to display spec examples as fenced code. No longer needed since GitHub switched to CommonMark parser. - Fix: update all spec files to have no non-break spaces in example opener.
- Add:
TestUtils.customIntOption(String, String, Function<Integer, DataHolder>)andTestUtils.customStringOption(String, String, Function<String, DataHolder>)to ease creatingCUSTOM_OPTIONoption types.
- Add:
SettableInstanceandSettableExtractedInstanceclasses to facilitate implementation of settings which can be changed through spec example options. - Break: move
SpecReader.getSpecInputStream(ResourceLocation)andSpecReader.getReadSpec(ResourceLocation)toResourceLocation.getResourceInputStream(ResourceLocation)andResourceLocation.getResourceText(ResourceLocation) - Add:
ResourceLocation.getResourceInputStream()andResourceLocation.getResourceText() - Add: static
BuilderBase.removeExtensions(DataHolder, Collection<Class<? extends Extension>>)for removing extension classes fromSharedDataKeys.EXTENSIONS.
- Add:
SequenceUtils.equals(CharSequence, Object)to consolidate char sequence equals - Fix:
SegmentedBuilderif anchor position is less than currentendOffsetthen ignore anchor. - Deprecate:
TestUtils.showTabs(String)andTestUtils.unShowTabs(String)in favour ofTestUtils.toVisibleSpecText(String)andTestUtils.fromVisibleSpecText(String)because these convert more than tabs.
-
Fix: bug causing duplicated text in segmented sequences
-
Fix: optimize
SegmentedSequence, non base characters are now stored in base offsets as-(char+1), this eliminatesnonBasedCharscompletely. -
Add: segmented sequence stats collection
-
Add: options to based sequences which are not used unless a sequence passed to
BasedSequence.ofis first wrapped inBasedOptionsSequence. Then all sequences created from this base will have int bit options testable withBasedSequence.isOption(int)and get arbitrary options withBasedSequence.getOption(DataKeyBase<T>)or just get the wholeDataHolderoptions viaBasedSequence.getOptions()for more sophisticated needs. If theDataHolderpassed toBasedOptionsSequenceis mutable thenMakes adding customized behavior and features easy and transparent to implementation with no overhead since
SubSequencedelegates to itsbaseSeqif it is aBasedOptionsHolderfor these methods but otherwise does no checking. The overhead is one level of delegation ofCharSequencemethods for sequences with options with no impact on the rest.
- Fix: rework
PositionListandPosition-
Add: concept of scope framing to invalidate all position created in the frame and not taken out via
Position.unframed(), will also take out listeners and preview listeners added in the frame. This optimizes removal of positions from notifications. Otherwise the update list grows fast and with every iteration, until gc is run, which may be a while. Problem becomes worse if the position list is long lived and accumulates positions which were not detached over its lifetime, between gc runs. Every iteration should be scoped. Iterating 10x over a 10 item list without scoping has max 110 listener updates, scoping inner loop only 10 max listeners, scoping inner loop 1.Usage is:
Object frame = openFrame(); try { ... } finally { closeFrame(frame); }with all positions created between open/close frame being detached. Frames can be nested and are validated for double closing, unclosed nested, and other common errors. Positions will throw an exception if used after frame is closed. -
Add:
IPreviewPositionListenertoPositionListso changes can be previewed and changed. Useful forSegmentBuilderto keep invariants and tracked counts updated when these are changed by optimizers so optimizers do not need to concern themselves about these.
-
- Add:
SegmentBuilderoption flags for tracking unique non-based characters and including anchors (0 span ranges) in the segment list.
- Add:
BasedSequence.addSegments(BasedSegmentBuilder)so each sequence adds its own optimized segment list without requiring by character scanning ofg ofBasedSequence.getIndexOffset(int)and building the segments the hard way.- Fix:
BasedSequenceBuilderto useBasedSequence.addSegmentsReplacedBasedSequenceit has no use other than to test if sequence replaces base
- Fix: Change segment parts to
EditOpwhich extends range and holds an nullable string. This will allow keeping track of replaced parts of base sequence.- if string is null then it is a range from base
- range is empty then string is not null and is an insert at position in base
- range not empty and string not empty then it is a replacement of base segment.
- Fix:
- Fix: rename
BasedCharsRecoverySegmentOptimizertoCharRecoveryOptimizer - Fix:
SegmentBuilderchangeappend...()to plainappend() - Fix:
SegmentBuilderto keep track of start and end range in the list based on first/last range added.- Test: need to test this more thoroughly
- Fix: simplify overlap by passing index to last range in list and the range overlapping it. No position.
- Fix: simplify optimization by passing the full list to optimizer. No position list.
- Fix: eliminate multiple methods for the same functionality, append:
EditOp, start/end offsets orString. The rest are history. - Test: cached start/end/length/last range index.
- Add:
BasedSegmentBuilderto convert overlap in added ranges to out of base text - Fix: change
BasedSequenceBuilderto useBasedSegmentBuilderfor segment accumulation instead of its own implementation.- Add: construction with optional
BasedSegmentOptimizerlist and apply optimizers to segment list before generating sequence or string. - Fix: if there is an overlap in appended sequence with previous segments, add the overlap as out of base text instead of throwing an exception.
- Fix: optimize and simplify for speed, too many methods. Keep only add/append of
CharSequenceand add/append for start/end offsets. The rest are gone.
- Add: construction with optional
- Add: Common char sets:
DECIMAL_DIGITSHEXADECIMAL_DIGITSOCTAL_DIGITS
- Fix: infinite recursion in deprecated
SubSequence.of - Break: delete
BasedSequence.getIndexRange(int, int)does not do the intended job and is complicated and useless at the same time for its purpose. - Deprecate: to be delete
BasedSequence.getIndexOffset(int)as soon asSegmentedSequenceis migrated to segment builder sequence part list.
- Fix: move spec resource files to
flexmark-test-specsresources. Any modules needing the spec have to add a test dependency on this module. - Break: try to reduce footprint of
IRichSequenceandIRichSequenceBaseby making getting rid off some overloads with default params.- Add: factor out bulk of
IRichSequenceBasetoSequenceUtilsso functionality could be used on anyCharSequence. - Fix: change all character inclusion based functions to use
CharPredicate
- Add: factor out bulk of
- Add:
CharPredicateto consolidate all character inclusion testing via predicates. - Fix: make
BaseSequence.ofuse plain based sequences and not managed for now. Issues when mutable sequences are passed as parameters make it unstable. Have to use or immutable char sequence or char backed sequence for managed and that will create too much overhead if used for all cases. - Add:
PositionListandPositionclasses to represent list and position in that list which allow modification, deletion, insertions while iterating over the list. Multiple position instances to different indexed elements can be created and all will be updated to reflect changes in their element's position.- Fix: cleanup naming conventions in new classes.
- Fix: rewrite implementation and optimizer using
PositionListandPositioninstead of hand rolled code. - Fix: make
Positionhandle insert/delete index change invalidation instead ofPositionList - Add: add anchor for position to allow next/prev anchoring
- Add: positions are now have iterable from position to end/start of list, or from next to end/previous to start.
- Fix: replace flags and position anchor field with byte flags.
-
Fix:
SegmentBuilderto not add empty text. -
Add:
SegmentOptimizerforSegmentBuildersegment optimization -
Add:
CharMatchingSegmentOptimizerto change replaced text to range in sequence when the replacement text matches sequence characters. Eliminates out of base unnecessary characters. -
Fix: add quick fail/success test for equality of base object. base strings through delete range/insert string operations.
-
Fix: make all based sequence test for same base use
getBase()instead ofgetBaseSequence(). It is the underlying base object that is important not the based sequence used to wrap it. -
Add:
BasedSequenceManagerto allow re-use of equivalent base sequences to eliminate the problem of having different base sequences for the same text content. Only implemented forSubSequencenotCharSubSequenceUses weak refs and weak hash map so as long as there is a reference to previously created sequence base, requests to
BaseSequenceManager.INSTANCE.getBaseSequence(T, Function<T, BasedSequence>)will return an existing based sequence for the passed object.Uses fast fail on
length()andhashCode()differences with fallback on weak hash map for getting previously computed equality comparisons to minimize expensive duplicate content comparisons for previously determined equal/unequal sequence bases.Weak refs and maps ensure cache is cleared when last used reference to base or its subsequence is released and gc() has run.
-
Fix: change
SubSequenceto create aStringif passed sequence implementsAppendableto eliminate use of mutable sequences as bases the same wayCharSubSequencedid forStringBuilder. It is important not to use mutableCharSequencesforBasedSequence.of()argument. If not suretoString()on the argument is the best option. -
Fix: change all possible uses of
CharSubSequencetoSubSequence -
Add:
SegmentBuilderto track offset ranges in original or base sequence and inserted out of -
Fix:
BasedSequenceBuilder.add(CharSequence)now does not complain when adding aBasedSequencewhich is from a different base than the builder. It simply treats it as it does any other non-based sequence and adds it as out of base chars. -
Fix:
SequenceBuilder.addAll(Collection<? extends CharSequence>)now takes list of anything extendingCharSequence -
Add: javadoc to
BasedSequence.baseSubSequence(int, int)that it should return sequence equal to base sequence without any modifications or additions. This should really be implemented only in real base sequences likeCharSubSequenceandSubSequencethe rest should rely onBasedSequenceImpl.
- Fix: merge formatter always adding
<>around autolinks even when original did not have them. - Fix: docx conversion renders mail link text with
mailto:prefix - Fix: add
'\0'to'\uFFFD'conversion inRichSequence - Fix: #376, convert markdown to html, delimiters are not allowed to span table cells.
- Add:
Text addText(String value, boolean noProofRPr, boolean createR) - Add:
Text addTextCreateR(String value, boolean noProofRPr) - Add:
Text addTextCreateR(String value) - Add:
Text addText(String value, boolean noProofRPr) - Add:
Text addText(String value) - Add:
Text addInstrText(String value, boolean noProofRPr, boolean createR) - Add:
Text addInstrTextCreateR(String value, boolean noProofRPr) - Add:
Text addInstrTextCreateR(String value) - Add:
Text addInstrText(String value, boolean noProofRPr) - Add:
Text addInstrText(String value) - Add:
FldChar addFldChar(STFldCharType charType, boolean createR) - Add:
FldChar addFldCharCreateR(STFldCharType charType) - Add:
FldChar addFldChar(STFldCharType charType) - Deprecate:
DocxContext.addWrappedText()useDocxContext.addText(String) - Deprecate:
DocxContext.text(String)useDocxContext.addTextCreateR(String) - Fix:
IRichSequenceBase.splitandIRichSequenceBase.splitListsome combinations would pass parameters out of place causing wrong operation. - Fix:
MarkdownParagraphwrapping to use simplified left aligned wrapping with no trailing spaces
- Add: docx renderer form fields via
[name]{.class attributes}where name is given byDocxRenderer.FORM_CONTROLSand if not empty or blank then an unresolved reference link with that name will be converted to a word form input field with type and options given in teh attributes.- drop down list, class name
.dropdownattributes:name- name for the form fielddefault- default selection first item if no default provided. Can be option text (case sensitive tried first, if no match then case insensitive is tried), if text match fails then attempted to parse as an integer index 1..number of optionshelp- text to show in status bar and on hitting F1options- list of options separated by|, individual options will be trimmed but otherwise left as is
- checkbox, class name
.checkboxattributes:name- name for the form fieldchecked- default will be checked, otherwise uncheckedhelp- text to show in status bar and on hitting F1
- text, class name
.textattributes:name- name for the form fielddefault- default valuehelp- text to show in status bar and on hitting F1max-length- number or leave out for unlimitedtype- gives the type of text fieldregular- default if type not provided, regular textformat-UPPERCASE,LOWERCASE,FIRST CAPITAL,TITLE CASE, not case sensitive, space between words can be eliminated or replaced by-
date- dateformat- word date format
number- numberformat- word number format
current-date- current dateformat- word date format
current-time- current timeformat- word time format
- drop down list, class name
- Break:
BasedSequence.append(CharSequence[])now constructs as segmented sequence so proper ordering of segments is enforced. This meansIllegalArgumentExceptionwill be thrown when this condition is not met. To get old functionality you need to create an appended string of all sequences andBasedSequence.of()on that string. - Break: rename
MappedSequencetoMappedBasedSequenceto allow forMappedRichSequence - Break: rename
RichCharSequencetoIRichSequenceto separate base interfaces for rich and based sequences and allow forRichSequenceto be the base interface for rich sequences similar toBasedSequencefor based sequences - Break: rename
RichCharSequenceBasetoIRichSequenceBase - Break: rename
RichCharSequenceImpltoRichSequenceImpl - Break: rename
RepeatedCharSequencetoRepeatedSequence - Add:
RichSequence.offor creatingRichSequenceinstances - Add:
BasedSequence.offor creatingBasedSequenceinstances - Deprecate:
RichSequenceImpl.of, useRichSequence.ofinstead - Deprecate:
BasedSequenceImpl.of, useBasedSequence.ofinstead - Deprecate:
SubSequence.of, useBasedSequence.ofinstead - Deprecate:
UpperCaseMapperandLowerCaseMapperuseChangeCase.toUpperCaseandChangeCase.toLowerCase - Deprecate: all static factory method named
ofto more specific so that errors are less likely.repeatOf,prefixOfotherwise it is possible to have the wrong factory method called and not see it. - Break: move
com.vladsch.flexmark.tree.iteration.ArrayIterabletocom.vladsch.flexmark.util.collection.iteration.ArrayIterablecom.vladsch.flexmark.util.html.CellAlignmenttocom.vladsch.flexmark.util.collection.iteration.ArrayIterablecom.vladsch.flexmark.ast.DelimitedNodetocom.vladsch.flexmark.util.ast.DelimitedNode
- Fix:
IRichSequenceand by extensionRichSequenceandBasedSequence- Add:
IRichSequence.trimToEndOfLine(CharSequence eolChars, boolean includeEol, int index)- trim end to end of line at index - Add:
IRichSequence.trimToStartOfLine(CharSequence, boolean, int)- trimmed end after next EOL - Add:
IRichSequence.leadingBlankLinesRange(CharSequence eolChars, int fromIndex, int endIndex)- find next range of blank lines - Add:
IRichSequence.trailingBlankLinesRange(CharSequence eolChars, int startIndex, int fromIndex)- find previous range of blank lines - Add:
IRichSequence.blankLinesRemovedRanges(CharSequence eolChars, int fromIndex, int endIndex)- list of ranges in sequence betweenfromIndexandendIndexexcluding all blank lines - Add: range based methods:
IRichSequence.subSequence(Range)IRichSequence.subSequenceAfter(Range)IRichSequence.subSequenceBefore(Range)- Add: editing methods:
IRichSequence.insert(CharSequence, int)insert another char sequence at indexIRichSequence.delete(int, int)delete range in this sequenceIRichSequence.replace(CharSequence, CharSequence)one char sequence in this sequence with anotherIRichSequence.replace(int, int, CharSequence)range in this sequence with char sequence
- Add:
- Add: to
BasedSequence- Add:
BasedSequence.extendToEndOfLine(CharSequence eolChars, boolean includeEol)- extend end to end of line in basedSequence - Add:
BasedSequence.extendToStartOfLine(CharSequence eolChars, boolean includeEol)- extend start to start of line in basedSequence
- Convenience methods returning coordinates from the base sequence
@NotNull Pair<Integer, Integer> baseLineColumnAtIndex(int index);@NotNull Range baseLineRangeAtIndex(int index);int baseEndOfLine(int index);int baseEndOfLineAnyEOL(int index);int baseStartOfLine(int index);int baseStartOfLineAnyEOL(int index);int baseColumnAtIndex(int index);@NotNull Pair<Integer, Integer> baseLineColumnAtStart();@NotNull Pair<Integer, Integer> baseLineColumnAtEnd();int baseEndOfLine();int baseEndOfLineAnyEOL();int baseStartOfLine();int baseStartOfLineAnyEOL();@NotNull Range baseLineRangeAtStart();@NotNull Range baseLineRangeAtEnd();int baseColumnAtEnd();int baseColumnAtStart();
- Add:
- Add: to
Nodeconvenience methods delegated togetChars()int getStartOffset()togetStartOffset()int getEndOffset()togetEndOffset()int getTextLength()tolength()BasedSequence getBaseSequence()togetBaseSequence()Range getSourceRange()toetSourceRange()BasedSequence baseSubSequence(int startIndex, int endIndex)tobaseSubSequence(startIndex, endIndex)BasedSequence baseSubSequence(int startIndex)tobaseSubSequence(startIndex)BasedSequence getEmptyPrefix()togetEmptyPrefix()BasedSequence getEmptySuffix()togetEmptySuffix()int getStartOfLine()tobaseStartOfLine()int getEndOfLine()tobaseEndOfLine()int startOfLine(int index)tobaseStartOfLine(index)int endOfLine(int index)tobaseEndOfLine(index)Pair<Integer, Integer> lineColumnAtIndex(int index)tobaseLineColumnAtIndex(index)Pair<Integer, Integer> lineColumnAtStart()tobaseLineColumnAtStart()Pair<Integer, Integer> getLineColumnAtEnd()tobaseLineColumnAtEnd()
- Add:
ArrayUtilsfor searching arrays of<T>on value or predicateindexOf()variations for forward searchlastIndexOf()variations for backward searchfirstOf()variations for forward search returning matched element ornulllastOf()variations for backward search returning matched element ornull
- Break:
RichCharSequencealltrim,trimStart,trimEndkeepLengthargument is nowkeepwith different meaning. Instead of min length of string to keep, it is min number of trimmable characters to keep, which is more useful but does break compatibility. Now it can be used to leave whitespace padding up to a maximum ofkeepcharacters. - Fix: reformat tests for compound sections
- Deprecate:
Range.subSequence(CharSequence)useRange.basedSubSequence(CharSequence),Range.richSubSequence(CharSequence)or for plain sequencesRange.charSubSequence(CharSequence) - Fix: rename
Range.subSequence()toRange.basedSubSequence() - Fix: rename
Range.safeSubSequence()toRange.safeBasedSubSequence()which limit the subsequence within 0 to length - Add:
Range.richSubSequence() - Add:
Range.safeRichBasedSubSequence()which limit the subsequence within 0 to length - Add:
Range.charSubSequence() - Add:
Range.safeCharBasedSubSequence()which limit the subsequence within 0 to length
- Break: remove example option parsing related
TestUtilsmethods. - Add: spec example language per section options and rendering in HTML.
- Add:
ExampleOptionto parse and provide information about - Add: compound spec-example sections, to combine previous lower level headings via
splice(" - ")for better organization of tests and to allow hierarchical structure view for spec files in Markdown Navigator - Fix: remove all file url prefix for tests. Either provide the file url for the spec or default resolution will be used.
- Fix: remove unnecessary type param from
MutableDataHolder.remove(DataKeyBase<?>) - Fix:
Parser.HEADING_NO_EMPTY_HEADING_WITHOUT_SPACEhad wrong regex. Did not allow non-empty headings without space either.
- Fix: remove synchronization. The issue was with using
HashMap.computeIfAbsent()and passing the factory, which could and would access and create other keys. This caused concurrent modification, not threading. Now computing value with factory then adding it to the dataSet.
- Add: synchronized around
HashMapmodification to ensure thread safety. Elimination of nullable keys would allow usingConcurrentHashMapinDataSetbut access and modification to options is done at start of parse as extensions and core load their options, afterwards the data set is mostly not modified or accessed.
- Fix: add nullable annotations to
DataSetandDataKeyclasses - Break:
DataKeynow represents not null data values, useNullableDataKeyif using nullable values, for processing of either type of data key, useDataKeyBasesuper class which does not specify nullability for the data value. - Break:
DataValueFactorynow has non-nullable dataHolder argument and nullable result. Use:DataNotNullValueFactoryfor nullable result and non nullable dataHolderDataValueNullableFactoryfor nullable result and nullable dataHolderDataNotNullValueNullableFactoryfor non-nullable result and non-nullable dataHolder
- Add:
DataKey3 argument constructor with pre-computed non null default value to be used for null dataHolder defaults. This way the factory isDataNotNullValueFactorywhich takes a non-null data holder and returns a computed value. - Add:
NullableDataKey3 argument constructor with pre-computed nullable default value to be used for null dataHolder defaults. This way the factory isDataValueFactorywhich takes a non-null data holder and returns a computed value. - Fix: add
DataKey.get(DataHolder)to replaceDataKey.getFrom(DataHolder), shorter and compatible with Kotlin array access syntax, also handles nullability of data. - Fix: deprecate
DataKey.getFrom() - Fix: replace all
DataHolder.get()byDataKey.get() - Fix: add nullability annotations to a boat load of classes.
- Add:
MutableDataHolder.set(@NotNull DataKey<T>, @NotNull T)andMutableDataHolder.set(@NotNull NullableDataKey<T>, @Nullable T)to respect nullability of key's data value. - Add:
DataKey.set(@NotNull MutableDataHolder, @NotNull T)andNullableDataKey.set(@NotNull MutableDataHolder, @Nullable T)to allow setting data values via keys, if needed.
- Fix: change all test case construction param from
Map<String, DataHolder>toMap<String, ? extends DataHolder>to allow for any type implementing the right map.
- Fix: pass through opening line of spec example to
DumpSpecReaderso it can construct an accurate full spec version of expected text. - Fix: add
ResourceResolverManagerto handleResourceUrlResolverregistration.
-
Add: parameterized test case options, ones that have option name followed by
[and terminated by]. Used for custom handling variations of option. These should setTestUtils.CUSTOM_OPTIONto aBiFunction<String option, String text, DataHolder>whereoptionis the option name (typein example),textis the text between[].optionsMap.put("type", new MutableDataSet().set(CUSTOM_OPTION, ActionSpecTestCase::typeOption));public static DataHolder typeOption(String option, String params) { // allow escape String text = params .replace("\\\\", "\\") .replace("\\]", "]") .replace("\\t", "\t") .replace("\\n", "\n") .replace("\\r", "\r") .replace("\\b", "\b"); return new MutableDataSet().set(ACTION_NAME, TYPE_ACTION).set(TYPE_ACTION_TEXT, text); } -
Add: now if test option
DataHolderwithTestUtils.CUSTOM_OPTIONset then it will be invoked even when no[]present to allow handling of empty params, which will benullin this case. -
Add: before checking for parameterized option the full option with params and
[]is tried. If present then its results are used, but also checked ifTestUtils.CUSTOM_OPTIONis present. -
Add:
ResourceUrlResolver, registered viaResourceLocation.registerUrlResolver(Function<String, String>)to allow resource URL conversion to URL used in example messages to be adjusted by project. Must register resolvers before trying to get an instance ofResourceLocationsince resolution of file url is done in constructor. -
Add: example's URL in exceptions when processing undefined example option.
-
Add: HTML comment handling to
SpecReader, start/end comment tags must be the first non-blank on the line and outside of spec example.
- Fix: remove moved test class from core to utils module.
- Fix: change all tests to use static const
ResourceLocationinstead of creating a new instance. - Fix: make
ComboSpecTestCase.getSpecResourceLocation()final and remove it from all subclasses.
- Fix: move flexmark modules test classes out of
test.utilpackage which is forflexmark-test-utilmodule's test classes - Add:
DataSet.registerDataKeyAggregator(DataKeyAggregator)to allow for aggregation action keys and aggregation for combining keys which require this. Only applied inDataSet.aggregate()DataSet.aggregate(DataHolder, DataHolder)DataSet.aggregateActions(DataHolder, DataHolder)
- Fix: convert all resource info to
ResourceLocation - Add: class location resolution via file under test
resourcesnamed for the root package of the module and containing directory path(s) from parent ofresourcesdirectory to get source root for test files. for maven builds it isjava/. This allows resolving absolute file path for class files in tests for generating the locationfile:///- Fix: package for some modules did not follow module/package naming convention
- Fix: move
flexmark-ext-superscriptto proper package by naming conventioncom.vladsch.flexmark.ext.superscript - Fix: move
flexmark-profile-pegdownto proper package by naming conventioncom.vladsch.flexmark.profile.pegdown - Fix: move
flexmark-test-utilspecpackage undercom.vladsch.flexmark.test.utilpackage
- Fix: move
- Add: test class location helpers to all modules:
flexmark-core-test/src/test/resources/com.vladsch.flexmark.core.test.txtflexmark-docx-converter/src/test/resources/com.vladsch.flexmark.docx.converter.txtflexmark-ext-abbreviation/src/test/resources/com.vladsch.flexmark.ext.abbreviation.txtflexmark-ext-admonition/src/test/resources/com.vladsch.flexmark.ext.admonition.txtflexmark-ext-anchorlink/src/test/resources/com.vladsch.flexmark.ext.anchorlink.txtflexmark-ext-aside/src/test/resources/com.vladsch.flexmark.ext.aside.txtflexmark-ext-attributes/src/test/resources/com.vladsch.flexmark.ext.attributes.txtflexmark-ext-autolink/src/test/resources/com.vladsch.flexmark.ext.autolink.txtflexmark-ext-definition/src/test/resources/com.vladsch.flexmark.ext.definition.txtflexmark-ext-emoji/src/test/resources/com.vladsch.flexmark.ext.emoji.txtflexmark-ext-enumerated-reference/src/test/resources/com.vladsch.flexmark.ext.enumerated.reference.txtflexmark-ext-escaped-character/src/test/resources/com.vladsch.flexmark.ext.escaped.character.txtflexmark-ext-footnotes/src/test/resources/com.vladsch.flexmark.ext.footnotes.txtflexmark-ext-gfm-issues/src/test/resources/com.vladsch.flexmark.ext.gfm.issues.txtflexmark-ext-gfm-strikethrough/src/test/resources/com.vladsch.flexmark.ext.gfm.strikethrough.txtflexmark-ext-gfm-tasklist/src/test/resources/com.vladsch.flexmark.ext.gfm.tasklist.txtflexmark-ext-gfm-users/src/test/resources/com.vladsch.flexmark.ext.gfm.users.txtflexmark-ext-gitlab/src/test/resources/com.vladsch.flexmark.ext.gitlab.txtflexmark-ext-ins/src/test/resources/com.vladsch.flexmark.ext.ins.txtflexmark-ext-jekyll-front-matter/src/test/resources/com.vladsch.flexmark.ext.jekyll.front.matter.txtflexmark-ext-jekyll-tag/src/test/resources/com.vladsch.flexmark.ext.jekyll.tag.txtflexmark-ext-macros/src/test/resources/com.vladsch.flexmark.ext.macros.txtflexmark-ext-media-tags/src/test/resources/com.vladsch.flexmark.ext.media.tags.txtflexmark-ext-resizable-image/src/test/resources/com.vladsch.flexmark.ext.resizable.image.txtflexmark-ext-spec-example/src/test/resources/com.vladsch.flexmark.ext.spec.example.txtflexmark-ext-superscript/src/test/resources/com.vladsch.flexmark.ext.superscript.txtflexmark-ext-tables/src/test/resources/com.vladsch.flexmark.ext.tables.txtflexmark-ext-toc/src/test/resources/com.vladsch.flexmark.ext.toc.txtflexmark-ext-typographic/src/test/resources/com.vladsch.flexmark.ext.typographic.txtflexmark-ext-wikilink/src/test/resources/com.vladsch.flexmark.ext.wikilink.txtflexmark-ext-xwiki-macros/src/test/resources/com.vladsch.flexmark.ext.xwiki.macros.txtflexmark-ext-yaml-front-matter/src/test/resources/com.vladsch.flexmark.ext.yaml.front.matter.txtflexmark-ext-youtube-embedded/src/test/resources/com.vladsch.flexmark.ext.youtube.embedded.txtflexmark-ext-zzzzzz/src/test/resources/com.vladsch.flexmark.ext.zzzzzz.txtflexmark-formatter-test-suite/src/test/resources/com.vladsch.flexmark.formatter.test.suite.txtflexmark-html2md-converter/src/test/resources/com.vladsch.flexmark.html2md.converter.txtflexmark-integration-test/src/test/resources/com.vladsch.flexmark.integration.test.txtflexmark-java.wiki/src/test/resources/com.vladsch.flexmark-java.wiki.txtflexmark-jira-converter/src/test/resources/com.vladsch.flexmark.jira.converter.txtflexmark-pdf-converter/src/test/resources/com.vladsch.flexmark.pdf.converter.txtflexmark-profile-pegdown/src/test/resources/com.vladsch.flexmark.profile.pegdown.txtflexmark-tree-iteration/src/test/resources/com.vladsch.flexmark.tree.iteration.txtflexmark-util/src/test/resources/com.vladsch.flexmark.util.txtflexmark-youtrack-converter/src/test/resources/com.vladsch.flexmark.youtrack.converter.txtflexmark/src/test/resources/com.vladsch.flexmark.txt
- Fix: package for some modules did not follow module/package naming convention
- Add: creation of
SpecExampleinstance based on caller information with correct file/line of the source callingRenderingTestCase.assertRendering(String, String, String)or its variants. - Fix: convert typographic smarts inline parser to match strings instead of using regex which sometimes takes long to execute for no apparent reason.
- Fix: make
SpecExampleRendererBasereusable by moving any references to flexmark parsing rendering specifics toFlexmarkSpecExampleRendererand moving up not related to flexmark parsing, like caching of generated HTML and AST. - Fix: consolidate full spec and individual example test case in to one method.
- Fix: delete deprecated methods, classes, fields.
- Fix: delete deprecated flexmark-ext-gfm-tables
- Fix: format code
-
Break: move formatter tests and html renderer to
flexmark-core-testmodule to allow sharing of test base classes in extensions without causing dependency cycles in formatter module. -
Break: move formatter module into
flexmarkcore. this module is almost always included anyway because most extension have a dependency on formatter for their custom formatting implementations. Having it as part of the core allows relying on its functionality in all modules. -
Break: move
com.vladsch.flexmark.specandcom.vladsch.flexmark.utilinflexmark-test-utiltocom.vladsch.flexmark.test.specandcom.vladsch.flexmark.test.utilrespectively to respect the naming convention between modules and their packages. -
Break: remove
flexmark-html-parser,flexmark-html2md-converteris a replacement -
Fix: revert back to
MutableDataSet.set(DataKey<T>, T)to enforce compile time type checking for typed class values -
Fix: clean up all tests to eliminate duplication and unnecessary interface methods.
Metric Before After Files 1264 1297 Lines 124,192 118,755 Source Lines 96,669 92,145 Comment Lines 9,878 9,597 Blank Lines 17,646 17,013
- Fix: remove need to load/unload extensions. Properly handle removal from
EXTENSIONSproperty for those tests that need it by implementingLOAD_EXTENSIONSproperty andUNLOAD_EXTENSIONSproperty handling inRenderingTestCase.combineOptions(DataHolder, DataHolder). - Fix: remove loading/unloading and other test support code from builder, no longer needed,
including
withOptions()and builder construction from another builder. - Fix: change
EXTENSIONSfromIterabletoCollection, which should not affect most code and easier to work with. - Fix: translation mode formatting would loose indented code blocks in items if these blocks were indented more than the minimum indent for the item.
- Fix: paragraphs in containers that have non-blank termination marker would be erroneously marked as isTrailingBlankLine when they were terminated because the container was closed not because of a blank line.
- Fix: First paragraph of
AdmonitionBlockwould always format with leading blank line. Now it formats as it was in original markdown to allow preserving format as is when it is not significant or confusing.
- Fix:
NO_EOLoption for tests was applied inconsistently. - Fix: add
SpecExampleargument togetSpecExampleRenderer - Fix: add
SpecExampleParseargument toaddSpecExample - Fix: regression bug #372
#372, [Regression?] Attributes extension not applied to `code` tag of code blocks
- Add:
AttributesExtension.FENCED_CODE_ADD_ATTRIBUTES, defaultFencedCodeAddType.ADD_TO_PRE_CODEfor backward compatibility with 0.42, but if this is option is not set andAttributesExtension.FENCED_CODE_INFO_ATTRIBUTESis set totrue, default will change toFencedCodeAddType.ADD_TO_PREsince attributes after info are used to add to thecodetag.
- Add:
- Add:
SpecExampleRenderer.finalizeRender()to allow tests and others to clean up after each rendering - Add: ability to combine data sets with
DataKey<Consumer<?>>keys in a custom way. Needed if some option values do not contain a single value but multiple values that are set with a consumer changing some values in a structure. In such cases overwriting of these values may not be correct and the consumers need to invoked so the results of second consumer get to apply changes to options. - Fix: add dual argument constructor to
MutableDataSet
- Fix: change
AttributesExtension.FENCED_CODE_INFO_ATTRIBUTESto defaultfalseto match previous versions.
- Fix: MarkdownTable index out of bounds in some functions when table has no rows
- Fix:
DataSetcopy constructors to acceptnull - Fix: change
DataSet.keySet()toDataSet.getKeys()- Deprecate:
DataSet.keySet()
- Deprecate:
- Add:
BasedSequence.extendByAny(CharSequence charSet, int maxCount)to extend the based sequence to include any following contiguous characters from the underlying based sequence that are incharSet. Variations includeBasedSequence.extendByAny(CharSequence)for unlimited count andBasedSequence.extendByOneOfAny(CharSequence)for max count of 1. - Add:
BasedSequence.extendToAny(CharSequence charSet, int maxCount)to extend the based sequence to include first of any following characters from the underlying based sequence that are incharSet. Variations includeBasedSequence.extendToAny(CharSequence)for unlimited count. - Add:
BasedSequence.prefixWithIndent(int maxColumns)to extend the based sequence to include leading indent from the underlying based sequence up to a maximum of given columns. Tabs are taken into account as set to 4 space columns. Variations includeBasedSequence.prefixWithIndent()for unlimited indent. - Break: make
NodeAdaptedVisitor.myCustomHandlersMapprivate. UseNodeAdaptedVisitor.getHandler(Node),NodeAdaptedVisitor.getHandler(Class<?>), andNodeAdaptedVisitor.getNodeClasses()to get access to contained data.
- Fix: change docx converter to not include
<>around auto and mail links in generated code. - Fix: #384, Markdown parser produces invalid HTML
- Fix: #382, Is there an option for number of whitespaces needed to create sub-lists?
FIXED_INDENTlist parser did not convert list item looking text with >= 4 spaces to lazy continuation.
- Fix:
#381, StackOverflowError with long base64 image and LINKS_ALLOW_MATCHED_PARENTHESES disabled,
USE_HARDCODED_LINK_ADDRESS_PARSERwas not used if matched parentheses were disabled causing stack overflow in regex evaluation. - Fix: docx conversion renders mail link text with
mailto:prefix
- Fix: #376, convert markdown to html, delimiters are not allowed to span table cells.
- Fix: regression bug
#372, [Regression?] Attributes extension not applied to `code` tag of code blocks
- Add:
AttributesExtension.FENCED_CODE_ADD_ATTRIBUTES, defaultFencedCodeAddType.ADD_TO_PRE_CODEfor backward compatibility with 0.42, but if this is option is not set andAttributesExtension.FENCED_CODE_INFO_ATTRIBUTESis set totrue, default will change toFencedCodeAddType.ADD_TO_PREsince attributes after info are used to add to thecodetag.
- Add:
- Fix: data set copy constructors to accept
null - Fix: change
DataSet.keySet()toDataSet.getKeys()- Deprecate:
DataSet.keySet()
- Deprecate:
- Add:
BasedSequence.extendByAny(CharSequence charSet, int maxCount)to extend the based sequence to include any following contiguous characters from the underlying based sequence that are incharSet. Variations includeBasedSequence.extendByAny(CharSequence)for unlimited count andBasedSequence.extendByOneOfAny(CharSequence)for max count of 1. - Add:
BasedSequence.extendToAny(CharSequence charSet, int maxCount)to extend the based sequence to include first of any following characters from the underlying based sequence that are incharSet. Variations includeBasedSequence.extendToAny(CharSequence)for unlimited count. - Add:
BasedSequence.prefixWithIndent(int maxColumns)to extend the based sequence to include leading indent from the underlying based sequence up to a maximum of given columns. Tabs are taken into account as set to 4 space columns. Variations includeBasedSequence.prefixWithIndent()for unlimited indent. - Break: make
NodeAdaptedVisitor.myCustomHandlersMapprivate. UseNodeAdaptedVisitor.getHandler(Node),NodeAdaptedVisitor.getHandler(Class<?>), andNodeAdaptedVisitor.getNodeClasses()to get access to contained data.
- Add:
BasedSequence.emptyPrefix()andBasedSequence.emptySuffix()to return empty sequence at start or end of the current sequence. Useful forPrefixedSubSequence.of(String, BasedSequence, int, int)variants without needing to extract the subsequence manually. - Fix: factor out link URL parser to separate class with own tests
- Fix: link URL parser not handling char escaping, nested parenthesis tracking and other edge cases in jekyll URL macro parsing.
- Fix: real fix for Stack Overflow when parsing long URLs, by hand rolling parsing of link
destination.
- Add:
Parser.USE_HARDCODED_LINK_ADDRESS_PARSER, defaulttrue, setting tofalsewill use regex parsing for link destination address. May causeStackOverflowErrorexception on long input but does allow customizing the regex if needed.
- Add:
- Add:
BasedSequence.safeCharAt(int)will return\0if index out of range for the sequence. - Add:
BasedSequence.safeBaseCharAt(int)will return character from the base sequence if index out of range for sequence or\0if out of base sequence range.
- Fix:
SegmentedSequencewould return sequence with start > end if ending withPrefixedSubSequencewhose position was > end of real sequences before. - Add:
BitIntegerSet.toArray(int[], int)for easyint[]creation from bit set. - Add:
BitIntegerSet.addAll(int[], int, int)for setting fromint[]
- Add: source
Nodetocom.vladsch.flexmark.util.format.TableCell - Fix: Stack overflow when parsing large embedded images with space in URL enabled. Now link
urls starting with
data:image/png;base64,do not allow spaces in the link.
- Add:
DocxRendererimage max-width tests - Add:
DocxRendererimage max-height attribute processing and tests - Fix: refactor
DocxRenderertests to extract common code to base class - Fix: heading rendering to work with styles using numbering
- Fix:
DocxRenderer- Add: page break via empty paragraph with only
{.pagebreak}attributes - Add: tab via
{.tab}attributes - Add: inline image alignment with
{align=}:left- left align, wrap text to rightright- right align, wrap text to leftcenter- center align, wrap text to left and right- else no wrapping around image
- Add: handling of
font-sizeattribute, expects float of font size in pt, rounds to nearest 1/2 pt - Add: image size attribute handling for
inandcmfor inch and cm dimensions. Can be given in:%for percent of page widthptpointscmcmininches- if no units given then pixels are assumed.
- Fix: if image size only given for one dimension, compute the other preserving aspect ratio
- Fix: change default emoji size to 0.9 of line height
- Fix: remove
<>wrapper from URL target - Fix: lists to set style id to
DocxRenderer.PARAGRAPH_BULLET_LIST_STYLEfor unordered lists andDocxRenderer.PARAGRAPH_NUMBERED_LIST_STYLEfor ordered lists, while still usingDocxRenderer.BULLET_LIST_STYLEandDocxRenderer.NUMBERED_LIST_STYLEfor the numbering style. Tight/loose is now uses paragraph settings fromDocxRenderer.TIGHT_PARAGRAPH_STYLEandDocxRenderer.LOOSE_PARAGRAPH_STYLErespectively as mods on list style. - Fix: start image ids at 100000 to avoid id conflicts with images already in the document being added. For example in footers/headers.
- Fix: for R tags, only add space="preserve" if contained text starts or ends with a space. Does not affect result but reduces xml noise.
- Add: page break via empty paragraph with only
- Fix:
Formattertranslation and merge rendering
- Fix: #362, ArrayIndexOutOfBoundsException in BasedSequence.indexOfAll
- Add:
DocxRenderer.BULLET_LIST_STYLEdefault"BulletList", numbering style to use for bullet list item paragraph. - Add:
DocxRenderer.NUMBERED_LIST_STYLEdefault"NumberedList", numbering style to use for numbered list item paragraph. - Add: Simple
Attributesprocessing to docx conversion:.classNameon paragraph elements will set the docx styleId toclassNameif the style id is found.- Use
{style=""}to set attributes on text or block elements. Only the following are processed:color- text colorbackground-color- shade fill color, pattern always solid.font-family- not implementedfont-size- not implementedfont-weight- set/clear bold (if using numeric weights then >= 550 sets bold, less clears it)font-style- set/clear italic
- Add: merge multiple markdown documents into single document functionality. Includes making
conflicting references between documents unique by adding an integer numeric suffix.
- Conflicting headings will get a unique explicit id attribute by the
flexmark-ext-attributesextension. - Added to
Formattermodule using modified translation API functionality.Formatter.mergeRender(Document[], Appendable, HtmlIdGeneratorFactory)Formatter.mergeRender(Document[], Appendable, int, HtmlIdGeneratorFactory)Formatter.mergeRender(Document[], int, HtmlIdGeneratorFactory)
- Add: merge tests and functionality to:
flexmark-formattercore rendering of anchors and headings.flexmark-ext-abbreviation, by default making references unique is disabled. Enable by settingAbbreviationExtension.MAKE_MERGED_ABBREVIATIONS_UNIQUEtotruefor the formatter options used to merge documents.flexmark-ext-attributesflexmark-ext-enumerated-referenceflexmark-ext-footnotesflexmark-ext-macros
- Add: link mapping based on document's
Formatter.DOC_RELATIVE_URLandFormatter.DOC_ROOT_URLproperties.
- Conflicting headings will get a unique explicit id attribute by the
- Fix:
Formatterattributes would eliminate separator space before or after following text possibly changing the applicable node for the attribute.
- Fix: docx converter to use
BulletListandNumberedListnumbering list styles for list conversions to allow easy list item styling for multi-level lists- Add:
DocxConverterEmptyto samples for generatingflexmark-empty-template.docxfromempty.mdandempty.xml
- Add:
- Fix: update docx4j to version 8.1.2
- Fix: update jsoup to version 1.11.3
- Fix: Attributes with spaces after
{generated wrong previous text offsets
- Fix: #357, HTML to markdown and removed nested list
- Remove:
FlexmarkHtmlConverter.EXT_TABLESunused conversion option. - Add: allow attributes after fenced code info string as last non-blank text after the info
string.
- Add:
AttributesExtension.FENCED_CODE_INFO_ATTRIBUTESdefaulttrue, if false will not parse attributes after the fenced code info string
- Add:
- Add:
flexmark-html2md-convertermodule which implements HTML to Markdown conversion with an extension API to allow customizing the conversion process. Sample: HtmlToMarkdownCustomizedSample.java - Fix: deprecate the old
flexmark-html-parserclasses
- Fix: GitLab block quotes should have
>>>as termination, not<<<, macros are still terminated by>>>to allow nested block quotes in macros. Affects:- HTML converter
- Formatter
- Fix: #351, Is there any special format requirement for processing html data to markdown
- Fix: #349, Translation Helper bugs, mix-up between anchors and other non-translating elements after translation.
- Fix: #349, Translation Helper bugs
- Fix: #348, WRAP_AUTO_LINKS defaults to false, Markdown loses a potential useful link
- Break: change
FlexmarkHtmlParser.WRAP_AUTO_LINKSdefault to true - Fix: add
SpecReader.readExamples(String, String)which takes resource name and file URL to allow for non-standard resource file locations. - Fix: html to markdown string not add EOL by default.
- Break: make Java 8 minimum version and use JDK 8 for compilation
- Fix: IntelliJ Migration contained in migrate flexmark-java 0_42_x to 0_50_0.xml, to use:
- copy to IntelliJ application settings to
migrationsubdirectory - if you have the project which you want to migrate open, then close it
- open the project in IntelliJ Ultimate or Community
- update the flexmark-java dependency version to 0.42.0 (or later) and make sure the new library is downloaded/updated in the project.
- use menu
Refactor>Migrate...or search everywhere (double shift activation) and search for migrate action. - select
migrate flexmark-java 0.42.x to 0.50.0 - press
Run - in the refactoring preview tool window that opens hit
Do Refactor
- copy to IntelliJ application settings to
- Remove classes from utils which are implemented in Java 8
- replace
RunnableValuewithSupplier, requires changingrun()withget() - replace
ValueRunnablewithConsumer, requires changingrun()withaccept() - replace
FactorywithSupplier, requires changingcreate()withget() - replace
ComputablewithFunction, requires changingcompute()withapply()and reversing template parameters. - replace
ComputableFactorywithFunction, requires changingcreate()withapply()and reversing template parameters. - replace
ComputeFactorywithFunction, requires changingcreate()withapply()and reversing template parameters. - replace all factory interfaces to be compatible with
Functioninterface and changecreate()withapply() - replace
com.vladsch.flexmark.util.collection.Consumerwithjava.util.function.Consumer - clean up
DataKeyandDataHolderrelated classes- move
com.vladsch.flexmark.util.collection.DataValueFactorytocom.vladsch.flexmark.util.DataValueFactory - replace
com.vladsch.flexmark.util.collection.DynamicDefaultKeywithcom.vladsch.flexmark.util.options.DataKey - change
MutableDataHolder.getOrCompute(DataKey<T>, DataValueFactory<T>)toMutableDataHolder.getOrCompute(DataKey<T>)with the data value factory taken from they key.
- move
- remove unused
ItemIndexSetMap, useIndexedItemSetMapinstead - move
flexmark-utilNode related classes and interfaces tocom.vladsch.flexmark.util.ast- move
com.vladsch.flexmark.util.NodeTrackertocom.vladsch.flexmark.util.ast.NodeTracker - move
com.vladsch.flexmark.util.BlockTrackertocom.vladsch.flexmark.util.ast.BlockTracker - move
com.vladsch.flexmark.util.KeepTypetocom.vladsch.flexmark.util.ast.KeepType - move
com.vladsch.flexmark.util.IParsetocom.vladsch.flexmark.util.ast.IParse - move
com.vladsch.flexmark.util.IRendertocom.vladsch.flexmark.util.ast.IRender - move
com.vladsch.flexmark.util.collection.NodeClassifierVisitortocom.vladsch.flexmark.util.ast.NodeClassifierVisitor - move
com.vladsch.flexmark.util.collection.NodeCollectingVisitortocom.vladsch.flexmark.util.ast.NodeCollectingVisitor - move
com.vladsch.flexmark.util.collection.ClassifyingNodeTrackertocom.vladsch.flexmark.util.ast.ClassifyingNodeTracker - move
com.vladsch.flexmark.util.mappers.NodeClassifiertocom.vladsch.flexmark.util.ast.NodeClassifier
- move
- move data key/set/holder classes to
flexmark.util.datapackage fromflexmark.util.optionspackage- move
com.vladsch.flexmark.util.options.DataHoldertocom.vladsch.flexmark.util.data.DataHolder - move
com.vladsch.flexmark.util.options.MutableDataSettocom.vladsch.flexmark.util.data.MutableDataSet - move
com.vladsch.flexmark.util.options.MutableScopedDataSettocom.vladsch.flexmark.util.data.MutableScopedDataSet - move
com.vladsch.flexmark.util.options.ScopedDataSettocom.vladsch.flexmark.util.data.ScopedDataSet - move
com.vladsch.flexmark.util.options.DataValueFactorytocom.vladsch.flexmark.util.data.DataValueFactory - move
com.vladsch.flexmark.util.options.MutableDataHoldertocom.vladsch.flexmark.util.data.MutableDataHolder - move
com.vladsch.flexmark.util.options.DataSettocom.vladsch.flexmark.util.data.DataSet - move
com.vladsch.flexmark.util.options.MutableDataSettertocom.vladsch.flexmark.util.data.MutableDataSetter - move
com.vladsch.flexmark.util.options.DataKeytocom.vladsch.flexmark.util.data.DataKey
- move
- Fix: IntelliJ Migration contained in migrate flexmark-java 0_42_x to 0_50_0.xml, to use:
- Add:
LineFormattingAppendableandLineFormattingAppendableImpl- Fix: deprecate
FormattingAppendableto be replaced byLineFormattingAppendable - Fix: deprecate
FormattingAppendableImplto be replaced byLineFormattingAppendableImpl - Fix: replace all uses of
FormattingAppendablebyLineFormattingAppendable - Fix: replace all uses of
FormattingAppendableImplbyLineFormattingAppendableImpl - Delete:
FormattingAppendableandFormattingAppendableImpl
- Fix: deprecate
- Fix: Factor out BasedSequenceImpl functionality that does not depend on
BasedSequenceand can be applied to any CharSequence into its ownRichCharSequenceinterface with default abstract implementation inRichCharSequenceBaseand implementation inRichCharSequenceImpl.
- Fix: HTML parser converts
atags in preformatted text to links, should convert to URL only - Fix: HTML deep parser to interrupt paragraph if HTML starts with a block tag
- Fix: Docx converter mail link conversion
- Fix: #351, Is there any special format requirement for processing html data to markdown
- Fix: #349, Translation Helper bugs, mix-up between anchors and other non-translating elements after translation.
- Fix: #349, Translation Helper bugs
- Fix: #348, WRAP_AUTO_LINKS defaults to false, Markdown loses a potential useful link
- Add: PDF converter landscape sample PdfLandscapeConverter.java
- Fix: revert to OpenHtmlToPDF version 0.0.1-RC15 which is the last Java 7 byte code version
- Fix: fill missing columns StringIndexOutOfBoundsException when prev cell consists of consecutive pipes without text
- Fix: add explicit
Locale.UStoString.format()when using%dfor integers to prevent conversion to arabic on Java 11.
- Fix: #338, getLineNumber incorrect with Windows end of line separators
- merge: #339, PR: Fix to line number when using Windows EOL characters. thanks to
- Fix: Trailing URI prefix only auto-links do not get parsed
- Fix: #334, CR line separators don't produce line break nodes,
- merge: #335, PR: Fix CR-only line separator handling thanks to Kijimuna
- Fix: #332, withOptions forgets about old link resolvers
- Break: move
com.vladsch.flexmark.Extensiontocom.vladsch.flexmark.util.builder.Extension - Fix: IntelliJ Migration contained in migrate flexmark-java 0_40_x to 0_42_0, to use:
- copy to IntelliJ application settings to
migrationsubdirectory - if you have the project which you want to migrate open, then close it
- open the project in IntelliJ Ultimate or Community
- update the flexmark-java dependency version to 0.42.0 (or later) and make sure the new library is downloaded/updated in the project.
- use menu
Refactor>Migrate... - select
migrate flexmark-java 0.42.x to 0.50.0 - press
Run - in the refactoring preview tool window that opens hit
Do Refactor
- copy to IntelliJ application settings to
- Add: common builder base to handle unloading extensions
- Add:
BuilderBase.RELOAD_EXTENSIONSdefaulttrue, iftruethen will unload loaded extension from the builder whenwithOptions()is used on:Parser,HtmlRenderer,FormatterorDocxRenderer. Iffalsethen will not reload extensions which are already loaded. The latter is slightly faster because loaded extensions are not re-loaded but will not change extension configuration for loaded extensions based on new options. - Fix:
HtmlParser.Builderconstructor with options does not preserve all already loaded extensions and custom api factories - Fix:
Parser.Builderconstructor with options does not preserve all already loaded extensions and custom api factories - Fix:
Formatter.Builderconstructor with options does not preserve all already loaded extensions and custom api factories - Fix:
DocxRenderer.Builderconstructor with options does not preserve all already loaded extensions and custom api factories - Add:
BuilderBase.UNLOAD_EXTENSIONS, defaultExtension.EMPTY_LIST, all extensions in the list will be removed. Used only when usingwithOptions()and providing new options with this key set. Used during testing to remove default extensions.
- Break: move
- Fix: #328, Html2mark - missing newline when paragraph followed by div
- Fix: #331, Ability to replace empty <p> with <br> during html2mark conversion
- Fix: NPE in
TableParagraphPreProcessor - Fix:
AutolinkNodePostProcessorprocessing links out of order causing sequence end/start reversal.
- Fix: compound enumerated references in attributes ids and outside of headings to output with last enumerated reference ordinal.
- Fix: limit
EnumeratedReferenceBlockto single line of text without processing other block elements. - Fix: change
Abbreviationsto custom block parser from paragraph pre-processor. Allows abbreviation definitions without preceding blank line.
- Add: enumerated reference text in heading to be used with only a format reference, the id is taken from the heading attributes.
- Add: compound enumerated references for creating legal numbering for enumerated references.
- Fix: upgrade dependencies
- OpenHtmlToPdf -> 0.0.1-RC19
- docx4j -> 6.1.2
- Add: parse int or default to
Utils.java
-
Break: test case related classes changed to allow providing URL string for the file resource used in the text instead of relying on heuristic conversion of resource URL to file path.
-
Fix: #326, flexmark-html-parser - multiple <code> inside <pre> bug
-
Fix:
EscapedCharacterExtensiondisabled forDoNotLinkDecoratenodes if another extension specified itsNodePostProcessorFactoryas dependent onTextwithDoNotDecorateandDoNotLinkDecorateand the extension was added afterEscapedCharacterExtension -
Add:
Parser.WWW_AUTO_LINK_ELEMENT, defaultfalse. Iftruethen strings of the form<www.someurl>will be parsed as auto-links -
Fix: copy
Extensionsfromflexmark-profile-pegdownmodule toPegdownExtensionsin core parser. Old class still available and extends the new named class. -
Add:
ParserEmulationProfile.getOptions(DataHolder)toParserEmulationProfileto allow using current option values in deciding what the settings should be for the profile. Used byParserEmulationProfile.PEGDOWN -
Fix: #323, TOC generation improvement, profile setting HeaderId generation to
falseeven thoughPegdownExtensions.ANCHORLINKSis not used -
Add: css option to PDF export and use as default css from #323, TOC generation improvement, thanks to @jvdvegt
- Add:
PdfConverterExtension.DEFAULT_CSSdata key with default value of embedded CSS. - Add:
PdfConverterExtension.embedCss(String html, String css)will embed the css in html by inserting it between<head>and</head>wrapped in<style>and</style>. Does its best to generate valid HTML, use it if your don't want to bother creating your own HTML document with embedded CSS.
ℹ️ Default CSS is only added if
PdfConverterExtension.exportToPdf(OutputStream, String, String, DataHolder)is used to provide options. For all other calls you need to embed the default css into your HTML string before exporting to PDF. - Add:
-
Fix: HTML parser link/image conversion to ref link and reference when cannot create a valid reference fallback to generating explicit link instead.
-
Fix: HTML parser ignoring
NONEforFlexmarkHtmlParser.EXT_INLINE_LINKandFlexmarkHtmlParser.EXT_INLINE_IMAGEoptions -
Fix: HTML parser to add blank line before block quote and aside if they are not the first child of their parent.
-
Fix: HTML parser, divs always generated line before and after, instead of before if not first child element and after if not last child element.
-
Add:
IParse.transferReferences(Document, Document, Boolean), to allow overriding repositoryKeepTypeselected copying behaviour for references already defined in the destination document. -
Deprecate:
IParse.transferReferences(Document, Document), in favour ofIParse.transferReferences(Document, Document, Boolean)
- Fix: merge util tests from @James-Adam and fix bugs
- Fix: change to
MutableDataSet.set(DataKey<? extends T>, T)
-
Fix: #316, Github user extension incorrectly formats some text
- Add: test to make sure previous character to
@is notisUnicodeIdentifierPart(),-nor.
- Add: test to make sure previous character to
-
Add:
FlexmarkHtmlParseroptions:- Fix: #318, Ability to disable table caption in FlexmarkHtmlParser,
- Add:
TABLE_CAPTIONoption as a convenience alias forFormatter.FORMAT_TABLE_CAPTION. Add documentation to Extensions: Html To Markdown
- Add:
- Fix: #314, Ability to override character replacements map in FlexmarkHtmlParser,
- Add:
TYPOGRAPHIC_REPLACEMENT_MAPoption key taking aMap<String,String>, if not empty will be used instead of the bundled map. Any typographic characters or HTML entities missing from the map will be output without conversion. If you want to suppress a typographic so it is not output add""to its mapped value.
- Add:
- Fix: #317, FlexmarkHtmlParser outputs extra newline when converting nested <ol>, <ul> lists
- Fix: when rendering raw HTML for inline elements, have to escape contained special markdown characters.
- Add:
FOR_DOCUMENToption to use as document into which the generated Markdown will be inserted. This is to allow re-use matching references generated from HTML instead of new ones. EXT_INLINE_LINKandEXT_INLINE_IMAGEoption defaultLinkConversion.MARKDOWN_EXPLICIT, specifies type of link and image conversion to apply:NONE,MARKDOWN_EXPLICIT,MARKDOWN_REFERENCE,TEXT,HTML
- Fix: #318, Ability to disable table caption in FlexmarkHtmlParser,
-
Add: Remove reliance on YouTrack: IDEA-207453 and instead change resource file URL to path in
SpecReaderand add a message to all example tests with the file URL with:xxxwherexxxis the line number of the spec example in the file. -
This will print the source location of the test in the console. Clicking the link goes right to the spec source file and line of the failed test if Awesome Console plugin is installed.
-
Add:
EmbeddedAttributeProviderdocumentation and add it to the provider's list by default unlessHtmlRenderer.EMBEDDED_NODE_PROVIDERis set to false. Add attributes to nodes in the AST by inserting aEmbeddedAttributeProvider.EmbeddedNodeAttributesnode with the desired attributes. See: NodeInsertingPostProcessorSample.java for example. -
Add: document that
DocxRendereremoji with GitHub preferred is not able to download images, compilingImageUtilslibrary with Java 8 eliminates the problem. -
Add: resource file URL to
SpecReaderand add a message to all example tests with the file URL with:xxxwherexxxis the line number of the spec example in the file. -
This will print the source location of the test in the console. Clicking the link goes right to the spec source file and line of the failed test. Unfortunately this URL will only work in IntelliJ when JetBrains add this to console to handle such
file://URLs: YouTrack: IDEA-207453 -
Fix: #310, PR: Change URL of GitHub CDN thanks to @benelog
-
Fix:
AsideExtensionoption keys to be dynamic data keys dependent on corresponding Parser block quote options for their defaults. -
⚠️ This can potentially break code relying on versions of the extension before0.40.18because parsing rules can change depending on which block quote options are changed from their default values. -
To ensure independent options for aside blocks and block quotes, set aside options explicitly. The following will set all aside options to default values, independent from block quote options:
.set(EXTEND_TO_BLANK_LINE, false) .set(IGNORE_BLANK_LINE, false) .set(ALLOW_LEADING_SPACE, true) .set(INTERRUPTS_PARAGRAPH, true) .set(INTERRUPTS_ITEM_PARAGRAPH, true) .set(WITH_LEAD_SPACES_INTERRUPTS_ITEM_PARAGRAPH, true) -
Deprecate:
Parser.BLOCK_QUOTE_TO_BLANK_LINE, use more mnemonicParser.BLOCK_QUOTE_EXTEND_TO_BLANK_LINE -
Deprecate:
CustomNodeandCustomBlock.BlockandNodeshould be used directly. The library aims to make no distinction between core and extension implementations, these classes add no useful information. -
Deprecate: BaseSequence had old named functions which were misleading and duplicated under proper names:
countChars()->countLeading()countCharsNot()->countLeadingNot()countCharsReversed()->countTrailing()countNotCharsReversed()->countTrailingNot()
-
First of all they only counted leading characters which the name did not imply. Second they were duplicated.
-
Add character counting functions:
countOfAny()countOfAnyNot()
-
Fix:
DefinitionExtensiondoes not correctly set the child parse column, causing list items to be expecting 1 extra space for child item recognition. -
Add:
ExtensionConversion.NONEto suppress any output from corresponding element -
Add:
FlexmarkHtmlParser.EXT_MATH, defaultExtensionConversion.HTML, for selecting<math>tag processing. For now onlyMARKDOWNdoes nothing useful. Later it will be used to convert math ml to GitLab math inline element.
- Fix:
EnumeratedReferenceExtensionwould process GitHub issue link text as enumerated reference. Now enumeratedreferencemust start with a non-digit character to be interpreted as enumerated reference. - Fix: Reference Text, Reference Id, Link Text and Image Alt Text child text was not trimmed in the AST causing the parent text range to be smaller than the contained children's text range.
- Add:
PdfConverterExtension.PROTECTION_POLICY, defaultnull. Set the protection policy for the generated PDF document.- Merge: #306, PR: Add password protection support, send appreciations to niksw7
- Add:
youtu.belink handling toYouTubeLinkExtension- Merge: #305, PR: add new youtube link style support to flexmark-ext-youtube-embedded for youtu.be/xyz(?t=123), send appreciations to jjYBdx4IL
- Fix:
AutolinkExtensionremoving leadingTypographicnodes when the first link occurs in text following the typographic node. - Add: PDF converter sample with non-latin character set rendering information.
- Fix: missing
simple_smileemoji cheat sheet shortcut
- Fix: #300, Typography extension breaks some auto links
- Add:
TypographicTextinterface to mark nodes which hold text which is replaced with typographic for rendering but treated as text for decoration processing. For nowAutolinkExtensionis the only one making use of it to prevent typographic smarts from breaking up a link and causing part of it to be left out of the URL.
- Fix: GitLab inline math parser to allow multi-line inline math elements
- Fix: #295, CoreNodeFormatter does not descend into children on Link nodes , more like
kludge,
Formatter.OPTIMIZED_INLINE_RENDERINGwhenfalseand not translating to always render children of link text.
- Fix: change
AttributeProviderFactoryextensions to eliminate duplicate registrations of factories. - Fix:
AttributesExtensionto assign attributes to explicit/refs links/images - Fix: #299, FlexmarkHtmlParser produces extra empty list item for eclosing </p> element
- Fix:
MarkdownTable.appendTable(FormattingAppendable)to setFormattingAppendable.ALLOW_LEADING_WHITESPACEso indentation prefix is not eliminated. - Fix:
FormattingAppendableImplto not skip pending spaces ifFormattingAppendable.ALLOW_LEADING_WHITESPACEis selected, these will be prefixed before indent. - Add:
FlexmarkHtmlParser.SKIP_LINKS, defaultfalse. When true links are converted to text part of the link. - Add:
DoNotAttributeDecorateinterface to be implemented by all text nodes which do not result in span-like rendering of their text, such asTypographicSmarts,TypographicQuotesandSoftLineBreakbut will erroneously create a break in the text and mess up attribute assignment to text spans. - Add:
AttributesExtension.WRAP_NON_ATTRIBUTE_TEXT, defaulttrue. Whenfalsedoes not wrap nodes marked asDoNotAttributeDecorateinTextBase. Whentrue, will allow intuitive attribute processing for text containingDoNotAttributeDecorateas single text span instead of one interrupted by the typographic smarts nodes. - Fix:
AttributesExtensionincorrectly parsed invalid empty sequences and absorbed the text instead of skipping it. ie.{},{ },{#}and{.} - Add:
AttributesExtension.USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER, defaultfalse. When set totruewill treat{#}or{.}, without embedded spaced, as start attribute span delimiter to mark start of attribute assignment to text between{.}or{#}and the matching attributes element.
- Fix: #295, CoreNodeFormatter does not descend into children on Link nodes
Link,LinkRef,ImageandImageRefnode formatter renderer now descends into child nodes during all formatting, not just translation formatting.
- Add:
Formatter.OPTIMIZED_INLINE_RENDERINGdefaultfalse. When set totruewill use previous rendering for links and images which appends the node characters without descending into child nodes.
- Fix: #294, BlankLine nodes within BlockQuote change in behaviour
- remove blank lines from AST for
BlockQuoteandAsideBlocknodes ifParser.BLANK_LINES_IN_ASTis not set.
- remove blank lines from AST for
- Fix: #292, 0.40.0: JUnit is in the compile scope
- remove unnecessary ast collecting visitor in
DocumentParser - add test scope to flexmark pom
- remove unnecessary ast collecting visitor in
- Fix: #293, YamlFrontMatterBlock rendered as markdown does not preserve nested lists
- Add:
YamlFrontMatterValuenode containing yaml value(s) inserted as children ofYamlFrontMatterNode - Fix: change stored key as
BasedSequenceinstead of string, can be retrieved asYamlFrontMatterNode.getKeySequence() - Add: code to return
List<String>from child nodes ofYamlFrontMatterNode - Fix: resolve offsets in
YamlFrontMatterNodeandYamlFrontMatterValuenodes.
- Add:
-
Fix: Java9+ Compatibility, IntelliJ Migration contained in migrate 0_35_x to 0_40_0.xml, to use:
- copy to IntelliJ application settings to
migrationssubdirectory - if you have the project which you want to migrate open, then close it
- open the project in IntelliJ Ultimate or Community
- update the flexmark-java dependency version to 0.40.0 (or later) and make sure the new library is downloaded/updated in the project.
- use menu
Refactor>Migrate... - select
migrate flexmark-java 0.35.x to 0.40.0 - press
Run - in the refactoring preview tool window that opens hit
Do Refactor
- copy to IntelliJ application settings to
-
⚠️ In my projects, the IDE can miss some class migrations, especially on files which are not open. Re-running the migration tends to apply the migration. In cases where migration is not applied manual editing will be needed. In my projectsDocument,NodeandFormatterwere the problem classes:com.vladsch.flexmark.ast.Documenttocom.vladsch.flexmark.util.ast.Documentcom.vladsch.flexmark.ast.Nodetocom.vladsch.flexmark.util.ast.Nodecom.vladsch.flexmark.formatter.internal.Formattertocom.vladsch.flexmark.formatter.Formatter
-
⚠️ flexmark-docx-converterandflexmark-pdf-convertercannot be used with Java 9+ modules because the underlying libraries used have package load conflicts that will be resolved in a later release.
-
Fix: overlapping packages in different modules, change:
-
com.vladsch.flexmark.ast.AllNodesVisitortocom.vladsch.flexmark.util.ast.AllNodesVisitor -
com.vladsch.flexmark.ast.BlankLinetocom.vladsch.flexmark.util.ast.BlankLine -
com.vladsch.flexmark.ast.BlankLineContainertocom.vladsch.flexmark.util.ast.BlankLineContainer -
com.vladsch.flexmark.ast.Blocktocom.vladsch.flexmark.util.ast.Block -
com.vladsch.flexmark.ast.BlockContenttocom.vladsch.flexmark.util.ast.BlockContent -
com.vladsch.flexmark.ast.BlockNodeVisitortocom.vladsch.flexmark.util.ast.BlockNodeVisitor -
com.vladsch.flexmark.ast.Contenttocom.vladsch.flexmark.util.ast.Content -
com.vladsch.flexmark.ast.ContentNodetocom.vladsch.flexmark.util.ast.ContentNode -
com.vladsch.flexmark.ast.CustomBlocktocom.vladsch.flexmark.util.ast.CustomBlock -
com.vladsch.flexmark.ast.CustomNodetocom.vladsch.flexmark.util.ast.CustomNode -
com.vladsch.flexmark.ast.DescendantNodeIterabletocom.vladsch.flexmark.util.ast.DescendantNodeIterable -
com.vladsch.flexmark.ast.DescendantNodeIteratortocom.vladsch.flexmark.util.ast.DescendantNodeIterator -
com.vladsch.flexmark.ast.Nodetocom.vladsch.flexmark.util.ast.Node -
com.vladsch.flexmark.ast.Documenttocom.vladsch.flexmark.util.ast.Document -
com.vladsch.flexmark.ast.DoNotCollectTexttocom.vladsch.flexmark.util.ast.DoNotCollectText -
com.vladsch.flexmark.ast.DoNotDecoratetocom.vladsch.flexmark.util.ast.DoNotDecorate -
com.vladsch.flexmark.ast.DoNotLinkDecoratetocom.vladsch.flexmark.util.ast.DoNotLinkDecorate -
com.vladsch.flexmark.ast.KeepTrailingBlankLineContainertocom.vladsch.flexmark.util.ast.KeepTrailingBlankLineContainer -
com.vladsch.flexmark.ast.NodeAdaptedVisitortocom.vladsch.flexmark.util.ast.NodeAdaptedVisitor -
com.vladsch.flexmark.ast.NodeAdaptingVisitHandlertocom.vladsch.flexmark.util.ast.NodeAdaptingVisitHandler -
com.vladsch.flexmark.ast.NodeAdaptingVisitortocom.vladsch.flexmark.util.ast.NodeAdaptingVisitor -
com.vladsch.flexmark.ast.NodeIterabletocom.vladsch.flexmark.util.ast.NodeIterable -
com.vladsch.flexmark.ast.NodeIteratortocom.vladsch.flexmark.util.ast.NodeIterator -
com.vladsch.flexmark.ast.NodeRepositorytocom.vladsch.flexmark.util.ast.NodeRepository -
com.vladsch.flexmark.ast.NodeVisitortocom.vladsch.flexmark.util.ast.NodeVisitor -
com.vladsch.flexmark.ast.NodeVisitorBasetocom.vladsch.flexmark.util.ast.NodeVisitorBase -
com.vladsch.flexmark.ast.NonRenderingInlinetocom.vladsch.flexmark.util.ast.NonRenderingInline -
com.vladsch.flexmark.ast.Packagetocom.vladsch.flexmark.util.ast.Package -
com.vladsch.flexmark.ast.ReferenceNodetocom.vladsch.flexmark.util.ast.ReferenceNode -
com.vladsch.flexmark.ast.ReferencingNodetocom.vladsch.flexmark.util.ast.ReferencingNode -
com.vladsch.flexmark.ast.VisitHandlertocom.vladsch.flexmark.util.ast.VisitHandler -
com.vladsch.flexmark.ast.Visitortocom.vladsch.flexmark.util.ast.Visitor -
com.vladsch.flexmark.IParsetocom.vladsch.flexmark.util.IParse -
com.vladsch.flexmark.IRendertocom.vladsch.flexmark.util.IRender -
Fix: API classes under
internalpackage: -
flexmark: -
com.vladsch.flexmark.internal.inline.AsteriskDelimiterProcessortocom.vladsch.flexmark.parser.core.delimiter.AsteriskDelimiterProcessor -
com.vladsch.flexmark.internal.inline.EmphasisDelimiterProcessortocom.vladsch.flexmark.parser.core.delimiter.EmphasisDelimiterProcessor -
com.vladsch.flexmark.internal.Brackettocom.vladsch.flexmark.parser.core.delimiter.Bracket -
com.vladsch.flexmark.internal.Delimitertocom.vladsch.flexmark.parser.core.delimiter.Delimiter -
com.vladsch.flexmark.internal.ThematicBreakOptionstocom.vladsch.flexmark.internal.ThematicBreakParser.ThematicBreakOptions -
com.vladsch.flexmark.internal.HeadingOptionstocom.vladsch.flexmark.internal.HeadingParser.HeadingOptions -
com.vladsch.flexmark.internal.BlockParserTrackertocom.vladsch.flexmark.parser.block.BlockParserTracker -
com.vladsch.flexmark.internal.BlockQuoteParsertocom.vladsch.flexmark.parser.core.BlockQuoteParser -
com.vladsch.flexmark.internal.DocumentBlockParsertocom.vladsch.flexmark.parser.core.DocumentBlockParser -
com.vladsch.flexmark.internal.FencedCodeBlockParsertocom.vladsch.flexmark.parser.core.FencedCodeBlockParser -
com.vladsch.flexmark.internal.HeadingParsertocom.vladsch.flexmark.parser.core.HeadingParser -
com.vladsch.flexmark.internal.IndentedCodeBlockParsertocom.vladsch.flexmark.parser.core.IndentedCodeBlockParser -
com.vladsch.flexmark.internal.ListBlockParsertocom.vladsch.flexmark.parser.core.ListBlockParser -
com.vladsch.flexmark.internal.ListItemParsertocom.vladsch.flexmark.parser.core.ListItemParser -
com.vladsch.flexmark.internal.ParagraphParsertocom.vladsch.flexmark.parser.core.ParagraphParser -
com.vladsch.flexmark.internal.ThematicBreakParsertocom.vladsch.flexmark.parser.core.ThematicBreakParser -
com.vladsch.flexmark.internal.HtmlBlockParsertocom.vladsch.flexmark.parser.core.HtmlBlockParser -
com.vladsch.flexmark.internal.ReferencePreProcessorFactorytocom.vladsch.flexmark.parser.core.ReferencePreProcessorFactory -
com.vladsch.flexmark.internal.InlineParserImpltocom.vladsch.flexmark.parser.internal.InlineParserImpl -
com.vladsch.flexmark.internal.BlockStartImpltocom.vladsch.flexmark.parser.internal.BlockStartImpl -
com.vladsch.flexmark.internal.BlockContinueImpltocom.vladsch.flexmark.parser.internal.BlockContinueImpl -
com.vladsch.flexmark.internal.LinkRefProcessorDatatocom.vladsch.flexmark.parser.internal.LinkRefProcessorData -
com.vladsch.flexmark.internal.CommonmarkInlineParsertocom.vladsch.flexmark.parser.internal.CommonmarkInlineParser -
com.vladsch.flexmark.internal.MatchedBlockParserImpltocom.vladsch.flexmark.parser.internal.MatchedBlockParserImpl -
com.vladsch.flexmark.internal.PostProcessorManagertocom.vladsch.flexmark.parser.internal.PostProcessorManager -
com.vladsch.flexmark.internal.DocumentParsertocom.vladsch.flexmark.parser.internal.DocumentParser -
com.vladsch.flexmark.internal.HtmlDeepParsertocom.vladsch.flexmark.parser.internal.HtmlDeepParser -
resource
/com/vladsch/flexmark/internal/util/entities.propertiesto/com/vladsch/flexmark/util/html/entities.propertiesinflexmark-utilmodule -
flexmark-docx-converter -
com.vladsch.flexmark.docx.converter.internal.DocxRenderertocom.vladsch.flexmark.docx.converter.DocxRenderer -
com.vladsch.flexmark.docx.converter.internal.DocxRendererPhasetocom.vladsch.flexmark.docx.converter.DocxRendererPhase -
com.vladsch.flexmark.docx.converter.internal.NodeDocxRendererHandlertocom.vladsch.flexmark.docx.converter.NodeDocxRendererHandler -
com.vladsch.flexmark.docx.converter.internal.DocxRendererOptionstocom.vladsch.flexmark.docx.converter.DocxRendererOptions -
flexmark-formatter -
com.vladsch.flexmark.formatter.internal.Formattertocom.vladsch.flexmark.formatter.Formatter -
com.vladsch.flexmark.formatter.internal.FormattingPhasetocom.vladsch.flexmark.formatter.FormattingPhase -
com.vladsch.flexmark.formatter.internal.MarkdownWritertocom.vladsch.flexmark.formatter.MarkdownWriter -
com.vladsch.flexmark.formatter.internal.NodeFormattertocom.vladsch.flexmark.formatter.NodeFormatter -
com.vladsch.flexmark.formatter.internal.NodeFormatterContexttocom.vladsch.flexmark.formatter.NodeFormatterContext -
com.vladsch.flexmark.formatter.internal.NodeFormatterFactorytocom.vladsch.flexmark.formatter.NodeFormatterFactory -
com.vladsch.flexmark.formatter.internal.NodeFormattingHandlertocom.vladsch.flexmark.formatter.NodeFormattingHandler -
com.vladsch.flexmark.formatter.internal.NodeRepositoryFormattertocom.vladsch.flexmark.formatter.NodeRepositoryFormatter -
com.vladsch.flexmark.formatter.internal.PhasedNodeFormattertocom.vladsch.flexmark.formatter.PhasedNodeFormatter -
com.vladsch.flexmark.formatter.internal.NodeFormatterSubContexttocom.vladsch.flexmark.formatter.NodeFormatterSubContext