+
+
\ No newline at end of file
diff --git a/.idea/markdown-navigator/GitHub_Templates.xml b/.idea/markdown-navigator/GitHub_Templates.xml
new file mode 100644
index 000000000..268cdffb4
--- /dev/null
+++ b/.idea/markdown-navigator/GitHub_Templates.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/markdown-navigator/OVERVIEW.xml b/.idea/markdown-navigator/OVERVIEW.xml
index cadf4cb56..bdc1025a5 100644
--- a/.idea/markdown-navigator/OVERVIEW.xml
+++ b/.idea/markdown-navigator/OVERVIEW.xml
@@ -1,33 +1,27 @@
-
\ No newline at end of file
diff --git a/.idea/markdown-navigator/Wiki.xml b/.idea/markdown-navigator/Wiki.xml
new file mode 100644
index 000000000..def7aae72
--- /dev/null
+++ b/.idea/markdown-navigator/Wiki.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/All_Tests.xml b/.idea/runConfigurations/All_Tests.xml
index cba0d11a7..67235ad9e 100644
--- a/.idea/runConfigurations/All_Tests.xml
+++ b/.idea/runConfigurations/All_Tests.xml
@@ -1,27 +1,27 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
-
-
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/All_Tests_No_Docx.xml b/.idea/runConfigurations/All_Tests_No_Docx.xml
new file mode 100644
index 000000000..80b5e8be4
--- /dev/null
+++ b/.idea/runConfigurations/All_Tests_No_Docx.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/AttributeTest.xml b/.idea/runConfigurations/AttributeTest.xml
deleted file mode 100644
index df161659e..000000000
--- a/.idea/runConfigurations/AttributeTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/AttributesTest.xml b/.idea/runConfigurations/AttributesTest.xml
deleted file mode 100644
index 1673378f4..000000000
--- a/.idea/runConfigurations/AttributesTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ClassificationBagTest.xml b/.idea/runConfigurations/ClassificationBagTest.xml
deleted file mode 100644
index 89edbe1da..000000000
--- a/.idea/runConfigurations/ClassificationBagTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/CollectStats.xml b/.idea/runConfigurations/CollectStats.xml
new file mode 100644
index 000000000..e787214d9
--- /dev/null
+++ b/.idea/runConfigurations/CollectStats.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboAbbreviationFormatterSpecTest.xml b/.idea/runConfigurations/ComboAbbreviationFormatterSpecTest.xml
index 0487a320a..19cab730d 100644
--- a/.idea/runConfigurations/ComboAbbreviationFormatterSpecTest.xml
+++ b/.idea/runConfigurations/ComboAbbreviationFormatterSpecTest.xml
@@ -1,28 +1,21 @@
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboAdmonitionSpecTest.xml b/.idea/runConfigurations/ComboAdmonitionSpecTest.xml
deleted file mode 100644
index e0790b4a1..000000000
--- a/.idea/runConfigurations/ComboAdmonitionSpecTest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboAnchorLinkSpecTest.xml b/.idea/runConfigurations/ComboAnchorLinkSpecTest.xml
deleted file mode 100644
index 390907a7e..000000000
--- a/.idea/runConfigurations/ComboAnchorLinkSpecTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboCoreFormatterSpecTest.xml b/.idea/runConfigurations/ComboCoreFormatterSpecTest.xml
new file mode 100644
index 000000000..9f94dc637
--- /dev/null
+++ b/.idea/runConfigurations/ComboCoreFormatterSpecTest.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboCoreTranslationFormatterSpecTest.xml b/.idea/runConfigurations/ComboCoreTranslationFormatterSpecTest.xml
index 76af1e63c..9b23d102b 100644
--- a/.idea/runConfigurations/ComboCoreTranslationFormatterSpecTest.xml
+++ b/.idea/runConfigurations/ComboCoreTranslationFormatterSpecTest.xml
@@ -3,13 +3,14 @@
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboDefinitionFormatterSpecTest.xml b/.idea/runConfigurations/ComboDefinitionFormatterSpecTest.xml
index c68bd5d7b..45df2baad 100644
--- a/.idea/runConfigurations/ComboDefinitionFormatterSpecTest.xml
+++ b/.idea/runConfigurations/ComboDefinitionFormatterSpecTest.xml
@@ -1,28 +1,21 @@
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboDocxConverterSpecTest.xml b/.idea/runConfigurations/ComboDocxConverterSpecTest.xml
index b01f53cbf..61365e6ae 100644
--- a/.idea/runConfigurations/ComboDocxConverterSpecTest.xml
+++ b/.idea/runConfigurations/ComboDocxConverterSpecTest.xml
@@ -1,28 +1,21 @@
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboDocxUserSpecDisabled.xml b/.idea/runConfigurations/ComboDocxUserSpecDisabled.xml
deleted file mode 100644
index b1d767f61..000000000
--- a/.idea/runConfigurations/ComboDocxUserSpecDisabled.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboExtraSpecTest.xml b/.idea/runConfigurations/ComboExtraSpecTest.xml
deleted file mode 100644
index a35e74141..000000000
--- a/.idea/runConfigurations/ComboExtraSpecTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboGfmTaskListFormatterSpecTest.xml b/.idea/runConfigurations/ComboGfmTaskListFormatterSpecTest.xml
index b7f22535d..e3aa4a60b 100644
--- a/.idea/runConfigurations/ComboGfmTaskListFormatterSpecTest.xml
+++ b/.idea/runConfigurations/ComboGfmTaskListFormatterSpecTest.xml
@@ -1,28 +1,21 @@
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboGfmTaskListSpecTest.xml b/.idea/runConfigurations/ComboGfmTaskListSpecTest.xml
deleted file mode 100644
index c583b8a54..000000000
--- a/.idea/runConfigurations/ComboGfmTaskListSpecTest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboGitHubCompatibilitySpecTest.xml b/.idea/runConfigurations/ComboGitHubCompatibilitySpecTest.xml
index d3589b56a..2c8736ab6 100644
--- a/.idea/runConfigurations/ComboGitHubCompatibilitySpecTest.xml
+++ b/.idea/runConfigurations/ComboGitHubCompatibilitySpecTest.xml
@@ -1,28 +1,20 @@
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboIssuesSpecTest.xml b/.idea/runConfigurations/ComboIssuesSpecTest.xml
deleted file mode 100644
index 00fb81c0e..000000000
--- a/.idea/runConfigurations/ComboIssuesSpecTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboJekyllFrontMatterFormatterSpecTest.xml b/.idea/runConfigurations/ComboJekyllFrontMatterFormatterSpecTest.xml
index df68abf62..7436b5ffe 100644
--- a/.idea/runConfigurations/ComboJekyllFrontMatterFormatterSpecTest.xml
+++ b/.idea/runConfigurations/ComboJekyllFrontMatterFormatterSpecTest.xml
@@ -1,28 +1,21 @@
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboKramdownCompatibilitySpecTest.xml b/.idea/runConfigurations/ComboKramdownCompatibilitySpecTest.xml
index 55f9c4346..001266c46 100644
--- a/.idea/runConfigurations/ComboKramdownCompatibilitySpecTest.xml
+++ b/.idea/runConfigurations/ComboKramdownCompatibilitySpecTest.xml
@@ -1,28 +1,21 @@
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboMacrosSpecTest.xml b/.idea/runConfigurations/ComboMacrosSpecTest.xml
deleted file mode 100644
index a3fd24715..000000000
--- a/.idea/runConfigurations/ComboMacrosSpecTest.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboParagraphFormatterSpecTest.xml b/.idea/runConfigurations/ComboParagraphFormatterSpecTest.xml
new file mode 100644
index 000000000..b0ed58c2b
--- /dev/null
+++ b/.idea/runConfigurations/ComboParagraphFormatterSpecTest.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboTableFormatterSpecTest.xml b/.idea/runConfigurations/ComboTableFormatterSpecTest.xml
index 442be0155..e260736ae 100644
--- a/.idea/runConfigurations/ComboTableFormatterSpecTest.xml
+++ b/.idea/runConfigurations/ComboTableFormatterSpecTest.xml
@@ -1,28 +1,21 @@
-
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/ComboTableTranslationFormatterSpecTest.xml b/.idea/runConfigurations/ComboTableTranslationFormatterSpecTest.xml
index df58a92ac..2020ba601 100644
--- a/.idea/runConfigurations/ComboTableTranslationFormatterSpecTest.xml
+++ b/.idea/runConfigurations/ComboTableTranslationFormatterSpecTest.xml
@@ -3,13 +3,14 @@
-
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/FlexmarkHtmlParserTestSuite.xml b/.idea/runConfigurations/FlexmarkHtmlParserTestSuite.xml
deleted file mode 100644
index ee9088389..000000000
--- a/.idea/runConfigurations/FlexmarkHtmlParserTestSuite.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/FormattingAppendableImplTest.xml b/.idea/runConfigurations/FormattingAppendableImplTest.xml
deleted file mode 100644
index b9274a051..000000000
--- a/.idea/runConfigurations/FormattingAppendableImplTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/JiraConverterTestSuite.xml b/.idea/runConfigurations/JiraConverterTestSuite.xml
deleted file mode 100644
index d1287348a..000000000
--- a/.idea/runConfigurations/JiraConverterTestSuite.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/LineAppendableImplTest.xml b/.idea/runConfigurations/LineAppendableImplTest.xml
new file mode 100644
index 000000000..76686c18f
--- /dev/null
+++ b/.idea/runConfigurations/LineAppendableImplTest.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/MutableAttributeTest.xml b/.idea/runConfigurations/MutableAttributeTest.xml
deleted file mode 100644
index d690771f5..000000000
--- a/.idea/runConfigurations/MutableAttributeTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/OrderedSetTest.xml b/.idea/runConfigurations/OrderedSetTest.xml
deleted file mode 100644
index 17198a856..000000000
--- a/.idea/runConfigurations/OrderedSetTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/RepeatedCharSequenceTest.xml b/.idea/runConfigurations/RepeatedCharSequenceTest.xml
deleted file mode 100644
index c0910e054..000000000
--- a/.idea/runConfigurations/RepeatedCharSequenceTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/ReversedCharSequenceTest.xml b/.idea/runConfigurations/ReversedCharSequenceTest.xml
deleted file mode 100644
index 674408e2a..000000000
--- a/.idea/runConfigurations/ReversedCharSequenceTest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/TableCellOffsetInfoTest.xml b/.idea/runConfigurations/TableCellOffsetInfoTest.xml
new file mode 100644
index 000000000..12c484d00
--- /dev/null
+++ b/.idea/runConfigurations/TableCellOffsetInfoTest.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/TaskListAttributeProviderSample.xml b/.idea/runConfigurations/TaskListAttributeProviderSample.xml
deleted file mode 100644
index c4a3d63fd..000000000
--- a/.idea/runConfigurations/TaskListAttributeProviderSample.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/UtilTestSuite.xml b/.idea/runConfigurations/UtilTestSuite.xml
new file mode 100644
index 000000000..774164007
--- /dev/null
+++ b/.idea/runConfigurations/UtilTestSuite.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/UtilsTestSuite.xml b/.idea/runConfigurations/UtilsTestSuite.xml
deleted file mode 100644
index 4a43b15eb..000000000
--- a/.idea/runConfigurations/UtilsTestSuite.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/YouTrackConverterTestSuite.xml b/.idea/runConfigurations/YouTrackConverterTestSuite.xml
deleted file mode 100644
index b20f3f660..000000000
--- a/.idea/runConfigurations/YouTrackConverterTestSuite.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/scopes/CommonMark_Spec.xml b/.idea/scopes/CommonMark_Spec.xml
new file mode 100644
index 000000000..b33e7e96d
--- /dev/null
+++ b/.idea/scopes/CommonMark_Spec.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/Comms.xml b/.idea/scopes/Comms.xml
new file mode 100644
index 000000000..db32843ca
--- /dev/null
+++ b/.idea/scopes/Comms.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/Extension_Modules.xml b/.idea/scopes/Extension_Modules.xml
new file mode 100644
index 000000000..a8bf8f6b3
--- /dev/null
+++ b/.idea/scopes/Extension_Modules.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/Flexmark_Ext_Overview.xml b/.idea/scopes/Flexmark_Ext_Overview.xml
index 68de90bf9..540b8bb1f 100644
--- a/.idea/scopes/Flexmark_Ext_Overview.xml
+++ b/.idea/scopes/Flexmark_Ext_Overview.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/.idea/scopes/GitHub_Templates.xml b/.idea/scopes/GitHub_Templates.xml
new file mode 100644
index 000000000..e139b49e7
--- /dev/null
+++ b/.idea/scopes/GitHub_Templates.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/Markdown_Version_Update.xml b/.idea/scopes/Markdown_Version_Update.xml
new file mode 100644
index 000000000..3cbbe3c93
--- /dev/null
+++ b/.idea/scopes/Markdown_Version_Update.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/NonMarkdown.xml b/.idea/scopes/NonMarkdown.xml
new file mode 100644
index 000000000..d02637606
--- /dev/null
+++ b/.idea/scopes/NonMarkdown.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/PlainTextCompletions.xml b/.idea/scopes/PlainTextCompletions.xml
new file mode 100644
index 000000000..c4a27f254
--- /dev/null
+++ b/.idea/scopes/PlainTextCompletions.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/Version.xml b/.idea/scopes/Version.xml
new file mode 100644
index 000000000..678c66a1d
--- /dev/null
+++ b/.idea/scopes/Version.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/Wiki.xml b/.idea/scopes/Wiki.xml
new file mode 100644
index 000000000..d5eb14697
--- /dev/null
+++ b/.idea/scopes/Wiki.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/statistic.xml b/.idea/statistic.xml
index b972a3708..a30e05ea5 100644
--- a/.idea/statistic.xml
+++ b/.idea/statistic.xml
@@ -1,6 +1,8 @@
+
@@ -265,9 +269,9 @@ accumulate thinking no one is affected by what is already fixed.
#### Extension points in the API are many and numerous
There are many extension options in the API with their intended use. A good soft-start is the
-[`flexmark-java-samples`](https://github.com/vsch/flexmark-java/tree/master/flexmark-java-samples)
-module which has simple samples for asked for extensions. The next best place is the source of
-an existing extension that has similar syntax to what you want to add.
+[`flexmark-java-samples`](flexmark-java-samples) module which has simple samples for asked for
+extensions. The next best place is the source of an existing extension that has similar syntax
+to what you want to add.
If your extension lines up with the right API, the task is usually very short and sweet. If your
extension uses the API in an unintended fashion or does not follow expected housekeeping
@@ -306,7 +310,7 @@ effort.
If you have a commercial application and don't want to write the extension(s) yourself or want
to reduce the time and effort of implementing extensions and integrating flexmark-java, feel
-free to contact me. I am available on a consulting/contracting basis, [All about me].
+free to contact me. I am available on a consulting/contracting basis.
### Markdown Processor Emulation
@@ -341,14 +345,14 @@ If you find a discrepancy please open an issue so it can be addressed.
Major processor families are implemented and some family members also:
+* [ ] [Jekyll]
* [CommonMark] for latest implemented spec, currently [CommonMark (spec 0.28)]
- * [ ] [League/CommonMark]
+ * [ ] [League/CommonMark]
* [CommonMark (spec 0.27)] for specific version compatibility
* [CommonMark (spec 0.28)] for specific version compatibility
* [GitHub] Comments
-* [ ] [Jekyll]
* [Markdown.pl][Markdown]
- * [ ] [Php Markdown Extra]
+ * [ ] [Php Markdown Extra]
* [GitHub] Docs (old GitHub markdown parser)
* [Kramdown]
* FixedIndent
@@ -390,9 +394,8 @@ The goal was to ensure that adding source position tracking in the AST would not
of parsing and generating the AST more than absolutely necessary.
Reasons for choosing [commonmark-java] as the parser are: speed, ease of understanding, ease of
-extending and speed. More detailed description in
-[Pegdown - Achilles heel of the Markdown Navigator plugin]. Now that I have reworked the core
-and added a few extensions I am extremely satisfied with my choice.
+extending and speed. Now that I have reworked the core and added a few extensions I am extremely
+satisfied with my choice.
Another goal was to improve the ability of extensions to modify parser behavior so that any
dialect of markdown could be implemented through the extension mechanism. An extensible options
@@ -583,7 +586,7 @@ Contributing
Pull requests, issues and comments welcome :smile:. For pull requests:
* Add tests for new features and bug fixes, preferably in the
- [ast_spec.md](flexmark-test-util/src/main/resources/ast_spec.md) format
+ [ast_spec.md](flexmark-core-test/src/test/resources/ast_spec.md) format
* Follow the existing style to make merging easier, as much as possible: 4 space indent,
trailing spaces trimmed.
@@ -594,40 +597,40 @@ License
Copyright (c) 2015-2016 Atlassian and others.
-Copyright (c) 2016-2018, Vladimir Schneider,
+Copyright (c) 2016-2023, Vladimir Schneider,
BSD (2-clause) licensed, see [LICENSE.txt] file.
-[Admonition Extension, Material for MkDocs]: https://squidfunk.github.io/mkdocs-material/extensions/admonition/
-[All about me]: https://vladsch.com/about
+[Admonition Extension, Material for MkDocs]: https://squidfunk.github.io/mkdocs-material/reference/admonitions/
[CommonMark]: https://commonmark.org
[CommonMark (spec 0.27)]: https://spec.commonmark.org/0.27
[CommonMark (spec 0.28)]: https://spec.commonmark.org/0.28
-[commonmark-java]: https://github.com/atlassian/commonmark-java
-[commonMarkSpec.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test/data/performance/commonMarkSpec.md
-[docx4j]: https://www.docx4java.org/trac/docx4j
-[DocxConverter Sample]: https://github.com/vsch/flexmark-java/blob/master/flexmark-java-samples/src/com/vladsch/flexmark/samples/DocxConverterCommonMark.java
-[Extensions.java]: flexmark-profile-pegdown/src/main/java/com/vladsch/flexmark/profiles/pegdown/Extensions.java
-[flexmark-java]: https://github.com/vsch/flexmark-java
+[DocxConverter Sample]: flexmark-java-samples/src/com/vladsch/flexmark/java/samples/DocxConverterCommonMark.java
+[Extensions.java]: flexmark-profile-pegdown/src/main/java/com/vladsch/flexmark/profile/pegdown/Extensions.java
[GitHub]: https://github.com/vsch/laravel-translation-manager
[GitHub Issues page]: ../../issues
-[hang-pegdown.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test/data/performance/hang-pegdown.md
-[hang-pegdown2.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test/data/performance/hang-pegdown2.md
+[HtmlToMarkdownCustomizedSample.java]: flexmark-java-samples/src/com/vladsch/flexmark/java/samples/HtmlToMarkdownCustomizedSample.java
[Include Markdown and HTML File Content]: ../../wiki/Usage#include-markdown-and-html-file-content
-[intellij-markdown]: https://github.com/valich/intellij-markdown
[Jekyll]: https://jekyllrb.com
[Kramdown]: https://kramdown.gettalong.org
-[League/CommonMark]: https://github.com/thephpleague/commonmark
[LICENSE.txt]: LICENSE.txt
+[League/CommonMark]: https://github.com/thephpleague/commonmark
[Markdown]: https://daringfireball.net/projects/markdown/
-[Markdown Navigator]: http://vladsch.com/product/markdown-navigator
-[MultiMarkdown]: http://fletcherpenney.net/multimarkdown/
+[Markdown Navigator]: https://github.com/vsch/idea-multimarkdown
+[MultiMarkdown]: https://fletcherpenney.net/multimarkdown
[Open HTML To PDF]: https://github.com/danfickle/openhtmltopdf
-[pegdown]: http://pegdown.org
-[Pegdown - Achilles heel of the Markdown Navigator plugin]: http://vladsch.com/blog/15
-[PegdownOptionsAdapter.java]: flexmark-profile-pegdown/src/main/java/com/vladsch/flexmark/profiles/pegdown/PegdownOptionsAdapter.java
[PHP Markdown Extra]: https://michelf.ca/projects/php-markdown/extra/#abbr
-[spec.txt]: https://github.com/vsch/idea-multimarkdown/blob/master/test/data/performance/spec.md
-[VERSION.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test/data/performance/VERSION.md
-[wrap.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test/data/performance/wrap.md
+[PegdownOptionsAdapter.java]: flexmark-profile-pegdown/src/main/java/com/vladsch/flexmark/profile/pegdown/PegdownOptionsAdapter.java
+[VERSION.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test-data/performance/VERSION.md
+[commonmark-java]: https://github.com/atlassian/commonmark-java
+[commonMarkSpec.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test-data/performance/commonMarkSpec.md
+[custom link resolver]: flexmark-java-samples/src/com/vladsch/flexmark/java/samples/PegdownCustomLinkResolverOptions.java
+[docx4j]: https://www.docx4java.org/trac/docx4j
+[flexmark-java]: https://github.com/vsch/flexmark-java
+[hang-pegdown.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test-data/performance/hang-pegdown.md
+[hang-pegdown2.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test-data/performance/hang-pegdown2.md
+[intellij-markdown]: https://github.com/valich/intellij-markdown
+[pegdown]: https://github.com/sirthias/pegdown
+[spec.txt]: https://github.com/vsch/idea-multimarkdown/blob/master/test-data/performance/spec.md
+[wrap.md]: https://github.com/vsch/idea-multimarkdown/blob/master/test-data/performance/wrap.md
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000..8d04f4137
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,21 @@
+# Security Policy
+
+## Supported Versions
+
+The following versions are supported. The current version is 0.64.x and is actively developed and maintained.
+Version 0.42.x is still widely used and vulnerabilities can be addressed
+in this version if they are critical.
+
+| Version | Supported |
+| ------- | ------------------ |
+| 0.64.x | :white_check_mark: |
+| 0.50.x | :x: |
+| 0.42.x | :white_check_mark: |
+| < 0.42.x | :x: |
+
+## Reporting a Vulnerability
+
+Please report vulnerabilities by opening an issue. You can additionally report vulnerabilities
+by e-mail on the GitHub account.
+
+I will do my best to address vulnerabilities as soon as possible with a new patch release.
diff --git a/VERSION-TODO.md b/VERSION-TODO.md
new file mode 100644
index 000000000..137a1eda6
--- /dev/null
+++ b/VERSION-TODO.md
@@ -0,0 +1,2565 @@
+# flexmark-java
+
+ **Version History**
+
+[TOC]: # ""
+
+- [Release 0.60.0](#release-0600)
+ - [API Refactoring](#api-refactoring)
+- [Next 0.61.xx](#next-061xx)
+- [0.62.2](#0622)
+- [0.62.0](#0620)
+- [0.61.34](#06134)
+- [0.61.32](#06132)
+- [0.61.30](#06130)
+- [0.61.28](#06128)
+- [0.61.26](#06126)
+- [0.61.24](#06124)
+- [0.61.22](#06122)
+- [0.61.20](#06120)
+- [0.61.18](#06118)
+- [0.61.16](#06116)
+- [0.61.14](#06114)
+- [0.61.12](#06112)
+- [0.61.10](#06110)
+- [0.61.8](#0618)
+- [0.61.6](#0616)
+- [0.61.4](#0614)
+- [0.61.2](#0612)
+- [0.61.0](#0610)
+- [0.60.2](#0602)
+- [0.60.0](#0600)
+- [0.59.124](#059124)
+- [0.59.122](#059122)
+- [0.59.120](#059120)
+- [0.59.118](#059118)
+- [0.59.116](#059116)
+- [0.59.114](#059114)
+- [0.59.112](#059112)
+- [0.59.110](#059110)
+- [0.59.108](#059108)
+- [0.59.106](#059106)
+- [0.59.104](#059104)
+- [0.59.102](#059102)
+- [0.59.100](#059100)
+- [0.59.98](#05998)
+- [0.59.96](#05996)
+- [0.59.94](#05994)
+- [0.59.92](#05992)
+- [0.59.90](#05990)
+- [0.59.88](#05988)
+- [0.59.86](#05986)
+- [0.59.84](#05984)
+- [0.59.82](#05982)
+- [0.59.80](#05980)
+- [0.59.78](#05978)
+- [0.59.76](#05976)
+- [0.59.74](#05974)
+- [0.59.72](#05972)
+- [0.59.70](#05970)
+- [0.59.68](#05968)
+- [0.59.66](#05966)
+- [0.59.64](#05964)
+- [0.59.62](#05962)
+- [0.59.60](#05960)
+- [0.59.58](#05958)
+- [0.59.56](#05956)
+- [0.59.54](#05954)
+- [0.59.52](#05952)
+- [0.59.50](#05950)
+- [0.59.48](#05948)
+- [0.59.46](#05946)
+- [0.59.44](#05944)
+- [0.59.42](#05942)
+- [0.59.40](#05940)
+- [0.59.38](#05938)
+- [0.59.36](#05936)
+- [0.59.34](#05934)
+- [0.59.32](#05932)
+- [0.59.30](#05930)
+- [0.59.28](#05928)
+- [0.59.27](#05927)
+- [0.59.25](#05925)
+- [0.59.23](#05923)
+- [0.59.21](#05921)
+- [0.59.19](#05919)
+- [0.59.17](#05917)
+- [0.59.15](#05915)
+- [0.59.13](#05913)
+- [0.59.11](#05911)
+- [0.59.9](#0599)
+- [0.59.7](#0597)
+- [0.59.5](#0595)
+- [0.59.1](#0591)
+- [0.50.48](#05048)
+- [0.50.46](#05046)
+- [0.50.44](#05044)
+- [0.50.42](#05042)
+- [0.50.40](#05040)
+- [0.50.38](#05038)
+- [0.50.36](#05036)
+- [0.50.34](#05034)
+- [0.50.32](#05032)
+- [0.50.30](#05030)
+- [0.50.28](#05028)
+- [0.50.26](#05026)
+- [0.50.24](#05024)
+- [0.50.22](#05022)
+- [0.50.20](#05020)
+- [0.50.18](#05018)
+- [0.50.16](#05016)
+- [0.42.14](#04214)
+- [0.42.12](#04212)
+- [0.42.10](#04210)
+- [0.42.8](#0428)
+- [0.42.6](#0426)
+- [0.42.4](#0424)
+- [0.42.2](#0422)
+- [0.42.0](#0420)
+- [0.40.34](#04034)
+- [0.40.32](#04032)
+- [0.40.30](#04030)
+- [0.40.28](#04028)
+- [0.40.26](#04026)
+- [0.40.24](#04024)
+- [0.40.22](#04022)
+- [0.40.20](#04020)
+- [0.40.18](#04018)
+- [0.40.16](#04016)
+- [0.40.14](#04014)
+- [0.40.12](#04012)
+- [0.40.10](#04010)
+- [0.40.8](#0408)
+- [0.40.6](#0406)
+- [0.40.4](#0404)
+- [0.40.2](#0402)
+- [0.40.0](#0400)
+
+
+
+## Release 0.60.0
+
+### API Refactoring
+
+:warning: Upcoming release of 0.60.0 will have some breaking changes due to re-organization,
+renaming and clean up of some implementation classes.
+
+Please give feedback on the upcoming changes if you have concerns about breaking your code:
+
+* Break: split out generic AST utilities from `flexmark-util` module into separate smaller
+ modules. IntelliJ IDEA migration to help with migration from 0.50.40 will be provided where
+ needed if the package or class is changed. `com.vladsch.flexmark.util` will no longer contain
+ any files but will contain the separate utilities modules with `flexmark-utils` module being
+ an aggregate of all utilities modules, similar to `flexmark-all`
+ * `ast/` classes to `flexmark-util-ast`
+ * `builder/` classes to `flexmark-util-builder`
+ * `collection/` classes to `flexmark-util-collection`
+ * `data/` classes to `flexmark-util-data`
+ * `dependency/` classes to `flexmark-util-dependency`
+ * `format/` classes to `flexmark-util-format`
+ * `html/` classes to `flexmark-util-html`
+ * `mappers/` classes to `flexmark-util-sequence`
+ * `options/` classes to `flexmark-util-options`
+ * `sequence/` classes to `flexmark-util-sequence`
+ * `visitor/` classes to `flexmark-util-visitor`
+* Convert anonymous classes to lambda where possible.
+* refactor `flexmark-util` to eliminate dependency cycles between classes in different
+ subdirectories.
+* Break: delete deprecated properties, methods and classes
+* Add: `org.jetbrains:annotations:15.0` dependency to have `@Nullable`/`@NotNull` annotations
+ added for all parameters. I use IntelliJ IDEA for development and it helps to have these
+ annotations for analysis of potential problems and use with Kotlin.
+* Break: refactor and cleanup tests to eliminate duplicated code and allow easier reuse of test
+ cases with spec example data.
+* Break: move formatter tests to `flexmark-core-test` module to allow sharing of formatter base
+ classes in extensions without causing dependency cycles in formatter module.
+* Break: move formatter module into `flexmark` core. 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.spec` and `com.vladsch.flexmark.util` in
+ `flexmark-test-util` to `com.vladsch.flexmark.test.spec` and `com.vladsch.flexmark.test.util`
+ respectively to respect the naming convention between modules and their packages.
+* Break: `NodeVisitor` implementation details have changed. If you were overriding
+ `NodeVisitor.visit(Node)` in the previous version it is now `final` to ensure compile time
+ error is generated. You will need to change your implementation. See comment in the class for
+ instructions.
+
+ :information_source: `com.vladsch.flexmark.util.ast.Visitor` is only needed for implementation
+ of `NodeVisitor` and `VisitHandler`. If you convert all anonymous implementations of
+ `VisitHandler` to lambdas you can remove all imports for `Visitor`.
+ * Fix: remove old visitor like adapters and implement ones based on generic classes not linked
+ to flexmark AST node.
+ * Deprecate old base classes:
+ * `com.vladsch.flexmark.util.ast.NodeAdaptedVisitor` see javadoc for class
+ * `com.vladsch.flexmark.util.ast.NodeAdaptingVisitHandler`
+ * `com.vladsch.flexmark.util.ast.NodeAdaptingVisitor`
+
+## Next 0.61.xx
+
++ [ ] Fix: replace `PrefixedSubSequence` and `SegmentedSequence.create()` with non builder
+ arguments to use `SequenceBuilder` throughout library code, except where
+ `PrefixedSubSequence` is used as is without immediately wrapping in `SegmentedSequence`.
+ This happens anyway in `SegmentedSequence.create` for non-builder arg, should make it
+ explicit.
++ [ ] Fix: rewrite `LineAppendableImpl` to be compatible with `SequenceBuilder`
+ + [ ] optimize by not processing one char at a time. Split the sequence into regions of
+ interest and process the regions as one piece which the `SequenceBuilder` can optimize
+ to base sequence quicker.
+ + [x] do not construct temporary `StringBuilder` but only keep the last line under
+ construction temporary, with all previously constructed lines used for prior content.
+ + [x] use separate instance of sequence builder for the line under construction.
+ `SegmentedSequence` construction is fast enough to not need a parallel string builder
+ for context tests.
++ [ ] Add: dependency resolution for Node Renderer Factories to make them independent of
+ extension add order
+* [ ] Fix: Change spec example to variable number of sections
+* [ ] Add: yaml front matter configurator for modules. See:
+ [Yaml Front Matter Configuration](../../wiki/Yaml-Front-Matter-Configuration)
+* [ ] Fix: table formatting caret position tracking affects alignment even when not inserting,
+ just formatting. Need to keep track of whether format after typing or just format. Then
+ caret position should only track but not force spaces behind it to be preserved. See
+ failed tests in `com.vladsch.flexmark.ext.tables.MarkdownTableTest`
+* Add: spec example language per section options and rendering in HTML.
+ * [ ] Add: Tests for section name options
+* [ ] Fix: Document docx form controls in wiki.
+* [ ] Add: table recovery utility to restore table after it was wrapped as plain text paragraph.
+ Needed when formatting is applied without a table extension. If not noticed will result in
+ a table which is tedious to recover manually. Handle only tables with leading and trailing
+ `|` for each line that was wrapped. Otherwise, it is impossible to tell where each line
+ ends and another begins.
+* [ ] Fix: Html converter to not add spaces between end of inline marker and next punctuation:
+ `.,:;`
+
+## 0.62.2
+
+* Fix: merge `Parsing` optimization by using static patterns
+* Fix: add a few more `Parsing` optimization by using static patterns for flag based dynamic
+ values.
+* Fix: add cache for dynamic `Parsing` patterns based on dependent options.
+
+## 0.62.0
+
+* Fix: HTML to Md converter to convert empty a tags to empty link text links. ie. `` to `[](#abc)`, except when contained in heading elements.
+* Break: rename `Attributes` to `MutableAttributes` and create new immutable `Attributes` class.
+* Fix: do not remove `title` attribute provided by `LinkResolver` when link has no title. Allow
+ link resolver titles to be used.
+
+## 0.61.34
+
+* Fix: add `DocxRenderer.PAGE_SIZE` and `DocxRenderer.PAGE_LANDSCAPE` properties to allow simple
+ changes to page setup for rendered document which is different from one in the template.
+
+## 0.61.32
+
+* Fix: optimized TOC levels from erroneous `#,#` to `#-#` for single level TOC.
+
+## 0.61.30
+
+* Fix: [#402, When using PegdownOptionsAdapter indented code blocks does not work for lists]
+
+## 0.61.28
+
+* Fix: Toc and SimToc `levels` parsing to properly handle levels as per documentation.
+ * single numeric >2 is 2-level, ie. `levels=4` should be interpreted as `levels=2-4` but was
+ `levels=4,4`.
+ * `levels=x-` to be same as `levels=x-6`, was handled as `levels=x,x`
+
+ `levels=levelList` where 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=1` include level 1 only, same as `levels=1,1`
+ * `levels=2` include level 2 only, same as `levels=2,2`
+ * `levels=3` include levels 2 and 3
+ * `levels=4` include levels 2,3 and 4
+ * `levels=2-4` include levels 2,3 and 4. same as `levels=4`
+ * `levels=2-4,5` include levels 2,3,4 and 5
+ * `levels=1,3` include levels 1 and 3
+ * `levels=-3` include levels 1 to 3
+ * `levels=3-` include levels 3 to 6
+
+## 0.61.26
+
+* Fix: `SequenceBuilder.toString()` not to add space between sequence parts.
+* Break: `TextCollectingVisitor` needs `TextContainer.F_ADD_SPACES_BETWEEN_NODES` to 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 the `getAndCollect` functions
+ taking options flags and pass `TextContainer.F_ADD_SPACES_BETWEEN_NODES`.
+* Fix: `MarkdownParagraph` wrapping 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: `LinkRendered` interface to identify link rendering elements derived from link/image
+ ref syntax identified by implementation of `LinkRefDerived` interface
+ * Fix: `WikiNode` to implement `LinkRefDerived`
+ * Fix: `WikiLink` to implement `LinkRendered`
+ * Fix: `Footnote` to implement `LinkRendered`
+
+ :information_source: 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.
+
+## 0.61.24
+
+* Fix: link refs in link text should be collapsed.
+ * Add: `Parser.LINK_TEXT_PRIORITY_OVER_LINK_REF`, default `false`, commonmark spec does not
+ specify how to parse:
+
+ [[moon]](/uri)
+
+ [moon]: moon.jpg
+
+ with default implementation priority given to contained ref, renders as:
+
+
+
+ :information_source: Undefined reference links are always treated as text when in a link
+ text element.
+
+## 0.61.22
+
+* 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.
+
+## 0.61.20
+
+* Fix: `JekyllTagExtension` handling 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 the `p` tag of including element.
+
+ Break: :information_source: when include tag embedding is enabled, the included file elements
+ will be added as child nodes of the `JekyllTag` node, not `JekyllTagBlock` node as was done in
+ previous versions.
+
+## 0.61.18
+
+* Break: remove from `TocOptions` confusing and error prone `rawTitle` and `rawTitleLevel`. Now
+ mutable toc options have to set `title` and `titleLevel` then call
+ `TocOptions.AsMutable.normalizeTitle()`
+* Fix: add more debug trace information to markdown wrap tracked offset mismatch.
+* Add: `UriContentResolver` extension for unified content handling in parser and renderers by
+ extensions.
+ * Add: `JekyllTagExtension.CONTENT_RESOLVER_FACTORIES`, default `Collections.emptyList()`. If
+ this option is an empty list then a singleton list of `FileUriContentResolver.Factory`
+ instance will be used.
+ * Fix: `IncludeNodePostProcessor` to use content resolvers for getting file content instead of
+ getting file directly.
+ * Add: `DocxRenderer.DEFAULT_CONTENT_RESOLVER`, default `true`, set to `false` not to add
+ `FileUriContentResolver` to content resolvers factories.
+ * Add: `DocxRendererContext.resolvedContent(ResolvedLink)` to allow generic URI to content
+ resolution.
+ * Fix: `CoreNodeDocxRenderer` to use content resolvers for resolving image links, only
+ resolving `http://` and `https://` links if content is not resolved.
+
+## 0.61.16
+
+* Fix: add range limit to `Escaping.replaceAll(Pattern, BasedSequence, List, Replacer,
+ ReplacedTextMapper)` when setting matcher range.
+* Add: `DocxRenderer.CUSTOM_PROPERTIES`, default `Collections.emptyMap()`, if present then
+ custom properties of the document will be set.
+
+## 0.61.14
+
+* Fix: [#398, Autolinks get cut off if they contain \`&\` (escaped query params)] for
+ multiple html entities per link.
+
+## 0.61.12
+
+* Fix: update docx4j to 8.1.6
+* Fix: docx rendering tests for full spec example
+* Add: `JekyllTagExtension.EMBED_INCLUDED_CONTENT`, default `false`. Set to `true` to 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)]
+
+## 0.61.10
+
+* 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`, default `new HashMap()`, to provide
+ individual language to class mapping string. If language string is not in the map then
+ `HtmlRenderer.FENCED_CODE_LANGUAGE_CLASS_PREFIX` + language will be used. Intended to allow
+ creating alias mapping and per-language class configuration.
+
+## 0.61.8
+
+* 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
+
+## 0.61.6
+
+* Add: `HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_LEADING_SPACES` default `true` and
+ `HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_TRAILING_SPACES` default `true`. When `false` then
+ corresponding reference link text in heading text used for generating heading id is not
+ trimmed.
+* Add: `HtmlRenderer.HEADER_ID_ADD_EMOJI_SHORTCUT` default `false` When `true` then emjoi nodes
+ add emoji shortcut to collected text for heading id.
+* Fix: `ParserEmulationProfile.GITHUB`
+ * Set `HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_TRAILING_SPACES` to `false` because GitHub does
+ not trim trailing spaces for generating heading ids.
+ * `Emoji` node to generate text for heading id consisting of the emoji shortcut, for GitHub
+ compatibility.
+ * Fix: `ImageRef` not to add text to heading text for heading id generation
+* Fix: add more information to `MarkdownParagraph.resolveTrackedOffsetsEdit` assert failures to
+ allow better diagnostics in reported stack traces.
+* Fix: disable wrapping of multiline URL image links
+* Fix: `Paragraph` content 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: `TablesExtension` to accept non-indenting leading spaces on all table rows. This
+ results in previously non-table text as valid table texts:
+
+ ```markdown
+ Abc|Def
+ |---|---
+ ```
+* Fix: `LinkRef` and `ImageRef` changing spaces to ` ` for wrap formatting when not part of
+ a `Paragraph`, ie. in heading text.
+
+## 0.61.4
+
+* Fix: merge [#397, PR: Add base64 image support with docx rendering] thanks to [@Xaelis]
+ * Add: test for base64 encoded docx conversion
+* Break: `WikiLinkLinkResolver` to take `WikiLinkExtension.ALLOW_ANCHORS` and
+ `WikiLinkExtension.ALLOW_ANCHOR_ESCAPE` into account when extracting page ref from link.
+ * Fix: `#` or `\` included in the URL of the resolved link are now URL encoded.
+ * Fix: default `WikiLinkLinkResolver` handles 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: `PegdownOptionsAdapter` to set `WikiLinkExtension.ALLOW_ANCHORS` to `true` for pegdown
+ compatibility
+* Fix: deprecate `CoreNodeFormatter.ATTRIBUTE_UNIQUIFICATION_ID_MAP` and move declaration to
+ `Formatter.ATTRIBUTE_UNIQUIFICATION_ID_MAP`
+* Fix: deprecate `CoreNodeFormatter.UNIQUIFICATION_ID_MAP` and move declaration to
+ `Formatter.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
+
+## 0.61.2
+
+* Fix: `ScopedDataSet.getAll()` and `ScopedDataSet.getKeys()` would not return keys from parent
+ scope.
+* Fix: [#396, DocumentParser stops reading too early resulting in the document being cut off]
+
+## 0.61.0
+
+* 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 `HtmlIdGenerator` when scanning a document.
+* Add: add `LinkResolverBasicContext` as base interface of `LinkResolverContext` to allow simple
+ context to pass to `LinkResolver` when resolving links without needing to implement all unused
+ methods of `LinkResolverContext`.
+* Break: change argument to `LinkResolver` and `LinkResolverFactory` to
+ `LinkResolverBasicContext`. Except for `JekyllTagExtension`, the argument is still
+ `LinkResolverContext` and passed value can be cast to this if required.
+* Add: support for `JekyllTagBlock` with `include` directive to `DocxRenderer`
+
+ Use `{% include includeFile %}` to include the file into the source document. `includeFile` is
+ resolved relative to `DocxRenderer.DOC_RELATIVE_URL` or `DocxRenderer.DOC_ROOT_URL`. The
+ latter is used if `includeFile` starts with `/`
+
+ Will only include files if `JekyllTagExtension.LINK_RESOLVER_FACTORIES` is not empty, in which
+ case the link resolvers will be used to resolve `includeFile` to full file path. Use singleton
+ list of `DocxLinkResolver.Factory` instance to resolve using doc relative and root url paths.
+* Fix: `MergeLinkResolver` and `DocxLinkResolver`
+
+## 0.60.2
+
+* Fix: change formatter sub-context rendering node to nullable
+
+## 0.60.0
+
+* Fix: rename `BaseSequence.extendToAny` to `BaseSequence.extendByAnyNot` which better reflects
+ the operation of the method.
+* Deprecate: `BaseSequence.extendToAny`
+* Add: `FlexmarkHtmlConverter` `div` to table options to allow converting `div` based table code
+ to markdown tables.
+* Fix: move `BaseSequenceManager` and related to `flexmark-util-experimental` since these are
+ not used.
+
+## 0.59.124
+
+* Add: `migrate flexmark-java 0_50_x to 0_60_0.xml` IntelliJ Migration
+* Fix: rename abbreviation `FormatOptions` `AbbreviationFormatOptions`
+* Fix: rename definition `FormatOptions` `DefinitionFormatOptions`
+* Fix: rename task list `FormatOptions` `TaskListFormatOptions`
+* Fix: formatter core test for invalid indentation
+* Fix: formatter `EqualizeTrailingMarker.EQUALIZE` adding marker when there is none.
+* Fix: missing `TextContainer` implementation by `TypographicSmarts`
+* Fix: restore `IRenderBase.NullRenderer` and `IRenderBase.TextRenderer` static classes
+
+## 0.59.122
+
+* Fix: cleanup and simplify dependency handler use. Too convoluted in the current
+ implementation.
+
+## 0.59.120
+
+* Fix: `Formatter` not inserting blank line after paragraph when followed by list sub-item in
+ tighten mode.
+
+## 0.59.118
+
+* Fix: split `flexmark-util` module sub-directories into separate modules
+ * `ast/` classes to `flexmark-util-ast`
+ * `builder/` classes to `flexmark-util-builder`
+ * `collection/` classes to `flexmark-util-collection`
+ * `data/` classes to `flexmark-util-data`
+ * `dependency/` classes to `flexmark-util-dependency`
+ * `format/` classes to `flexmark-util-format`
+ * `html/` classes to `flexmark-util-html`
+ * `mappers/` classes to `flexmark-util-sequence`
+ * `options/` classes to `flexmark-util-options`
+ * `sequence/` classes to `flexmark-util-sequence`
+ * `visitor/` classes to `flexmark-util-visitor`
+
+## 0.59.116
+
+* Fix: add missing semi in convert to visual test functions HTML entities.
+* Fix: remove static char predicate fields from `SequenceUtils`
+* Deprecate: static char predicate fields in `SequenceUtils`
+
+## 0.59.114
+
+* Fix: change docx converter to not include `<>` around auto and mail links in generated code.
+* Fix: [#384, Markdown parser produces invalid HTML]
+* Fix: render ref link and image as text if link resolved to empty URL
+* Fix: formatter to not output tail blank line after fenced code if it is last child of list
+ item and current list spacing is not LOOSE.
+* Fix: data key `toString()` to use `Class.getSimpleName()`
+
+## 0.59.112
+
+* Fix: `MarkdownTable` not prefixing caption line with requested line prefix.
+
+## 0.59.110
+
+* Add: `IRichSequence.padding` to return the required padding sequence.
+* Fix: `IRichSequence.padStart` was not padding the sequence but only returned the required
+ padding.
+
+## 0.59.108
+
+* Fix: Change the meaning of `ListSpacing.LOOSEN` and `ListSpacing.TIGHTEN` for formatter with
+ `Parser.BLANK_LINES_IN_AST` set to true:
+ * `ListSpacing.LOOSEN` adds blank lines only if list is loose because it has items in the list
+ followed by blank lines.
+
+ :warning: This will work as expected only if `Parser.LISTS_AUTO_LOOSE` is `true`. Otherwise,
+ a blank line will only be inserted if there is already a blank line after the item, same as
+ selecting `ListSpacing.AS_IS`.
+ * `ListSpacing.TIGHTEN` removes blank lines which are not significant in determining whether
+ the list is loose so as to make the list as tight as possible.
+* Add: `ParagraphItemContainer.isParagraphInTightListItem(Paragraph)` to allow testing for
+ paragraph items not wrapped without having list options.
+* Fix: remove debug exception in `MarkdownTable` when an offset is not found in tracked offsets.
+* Fix: clean up output to stdout in tests for `MarkdownParagraph`
+
+## 0.59.106
+
+* Fix: `LineAppendableImpl.getLines()` when requested with `maxTrailingBlankLines` of -1 then
+ last line should not have and EOL.
+* Fix: `SimToc` formatting:
+ * allow empty title string in parser
+ * blank title should not add TOC heading
+ * empty title string should be converted to empty string and not removed
+ * change no title `TocOptions` to be empty title and if an empty title string is specified
+ then title string will be blank (`" "`).
+* Break: `TocUtils.renderMarkdownToc(MarkdownWriter, List, List, TocOptions)`
+ and `TocUtils.renderTocContent(MarkdownWriter, TocOptions, TocOptions, List,
+ List)` to not have `Heading` arguments but only relevant heading information to allow
+ reuse.
+
+## 0.59.104
+
+* Fix: [#382, Is there an option for number of whitespaces needed to create sub-lists?]
+ * `FIXED_INDENT` list parser did not convert list item looking text with >= 4 spaces to lazy
+ continuation.
+
+## 0.59.102
+
+* Break: Add validation to parser that passed `BasedSequence` is contiguous with no out of base
+ parts and throw descriptive `IllegalArgumentException` if it is not. Otherwise, it is possible
+ to provide sequences which will cause exceptions during parser.
+* Fix: re-implement markdown paragraph tracked offset resolution by scanning the unwrapped and
+ wrapped text segments and mapping them to original sequence offsets while analyzing text
+ context and keeping track of: start of line, first non-blank, last non-blank, end of line.
+ * Fix: implement generic code for resolving index in wrapped sequence based on tracking offset
+ in base sequence without inexplicable fudge factor adjustments.
+* Fix: validate that `MarkdownParagraph` can properly compute spaces before/after at offset from
+ `altSeq.getBaseSequence()` and remove these fields from `TrackedOffset.create`.
+* Fix: `LineAppendableImpl.appendTo` would trim spaces on blank lines. Lines should be appended
+ as is since formatting is done during accumulation not when output to sequence or appendable.
+* Break: invert `LineAppendable.F_ALLOW_LEADING_EOL` to `LineAppendable.F_TRIM_LEADING_EOL` to
+ ensure that flags of 0 do no trimming.
+ * Fix: `Formatter.FORMAT_FLAGS` to add `LineAppendable.F_TRIM_LEADING_EOL` to defaults used
+ for formatting if none specified.
+* Fix: `LineAppendableImpl` empty forward iterator had next instead of none.
+* Add: `TrackedOffset` spaces before/after the offset. This is impossible to determine from
+ segmented sequence in edge cases. Best to have it provided from original sequence where it is
+ easy to determine and combined with what is in the final sequence since some spaces could have
+ been removed when parent prefixes are removed.
+* Fix: removal of all prefixes messes up format tracked offset resolution
+* Fix: `SegmentTree.getSegmentRange(int, int, int, int, BasedSequence, Segment)` was not
+ computing startOffset correctly if first segment was text and had no previous `ANCHOR`
+ segment.
+ * Fix: `SegmentedSequenceTree.subSequence()` was not computing correct start offset due to
+ `SegmentTree` bug.
+* Add: `Formatter.DOCUMENT_FIRST_PREFIX` and `Formatter.DOCUMENT_PREFIX` to allow setting
+ prefixes for the whole document.
+* Add: `SequenceBuilder` treating of any based sequence whose base is equal in characters to its
+ own as equivalent since offsets will match.
+* Fix: `LineAppendable.isEmpty()` return true only if no lines or pending lines
+* Fix: `SubSequence` constructor to only use the base `CharSequence` hash code if it is `String`
+* Add: `Formatter.TRACKED_SEQUENCE` option to allow formatting of document based on
+ `SegmentedSequence` which cannot be used for parsing without converting to contiguous
+ sequence. Used to construct offset tracker for tracked offset resolution.
+ * Fix: `Formatter` paragraph wrapping to use trackedSequence.
+ * Fix: tracked offset resolution to use trackedSequence.
+
+## 0.59.100
+
+* Fix: make all reference nodes `compareTo()` not case sensitive
+* Fix: change back to `jetbrains.annotations:15.0`
+* Fix: formatter to not change HTML block indentations by
+* Break: rename `HtmlFormattingAppendable` to `HtmlAppendable`
+* Break: rename `HtmlFormattingAppendableBase` to `HtmlAppendableBase`
+* Add: `LineInfo` to have the line `CharSequence`
+* Add: to `LineAppendable`
+ * extend `Iterable`
+ * Add: `LineAppendable.append(LineAppendable, int, int, boolean)` to append another line
+ appendable without prefixes
+ * Add: `LineAppendable.copyAppendable(LineAppendable, int, int, boolean)` to make a copy and
+ append selected content with or without prefixes
+ * Add: `LineAppendable.insertLine(int, CharSequence, CharSequence)` to insert lines
+
+## 0.59.98
+
+* Fix: create `TestSuite` for each util module subdirectory
+* Fix: change `UtilTestSuite` to run other module test suites.
+* Fix: refactor `flexmark-util` to allow separate modules:
+ * `visitor` has no dependencies
+ * `misc`: classes contained in `util` directory to `misc`, has no dependencies
+ * `collection` depends on `misc` only
+ * `dependency` depends on `misc`, `collection`
+ * `data` depends on `misc` only
+ * `builder` depends on `misc`, `data`
+ * `sequence` depends on `misc`, `collection`, `data`
+ * `options` depends on `misc`, `sequence`
+ * `html` depends on `misc`, `sequence`
+ * `ast` depends on `misc`, `collection`, `data`, `sequence`
+ * `format` depends on `misc`, `collection`, `data`, `sequence`, `html`, `ast`
+* Fix: refactor `flexmark-util` to eliminate cyclic dependencies between future util modules
+ * Break: delete deprecated classes contained in `mappers`
+ * `LowerCaseMapper`
+ * `UpperCaseMapper`
+ * Break: move classes contained in `mappers` directory to `sequence/mappers` subdirectory
+ * Break: move classes contained in `util` directory:
+ * `SharedDataKeys` to `data`
+ * the rest to `misc`
+ * Break: move from `html` to `sequence` to eliminate dependency cycle
+ * `Escaping`
+ * `Html5Entities`
+ * `LineAppendable`
+ * `LineAppendableImpl`
+ * Break: move from `builder` to `misc` to eliminate dependency cycle
+ * `Extension`
+ * Break: move `from `sequence` to `misc` to eliminate dependency cycle
+ * `CharPredicate`
+ * Break: move from `Utils` to `BasedUtils` to eliminate dependency cycle
+ * `asBased`
+ * Break: move from `Utils` to `SharedDataKeys` to eliminate dependency cycle
+ * `runningTests`
+ * Break: move from `Utils` to `SequenceUtils` to eliminate dependency cycle
+ * `parseUnsignedIntOrNull`
+ * `parseUnsignedIntOrNull`
+ * `parseIntOrNull`
+ * `parseIntOrNull`
+ * `parseLongOrNull`
+ * `parseLongOrNull`
+ * `parseUnsignedIntOrDefault`
+ * `parseUnsignedIntOrDefault`
+ * `parseIntOrDefault`
+ * `parseIntOrDefault`
+ * `parseNumberOrNull`
+ * `parseNumberPrefixOrNull`
+* Fix: `MarkdownParagraph` tracked offset correction when deleting first non-blank char
+ surrounded by spaces, index would be 0 instead of at first non-blank of wrapped with space
+ inserted after index.
+
+## 0.59.96
+
+* Fix: disable wrapping of link and image text if wrapping enabled.
+* Break: remove unused `ContinuationIndent`
+* Break: remove `Formatter.BLOCK_QUOTE_CONTINUATION_MARKERS` and related. It was never properly
+ implemented and even if it would be it can mess up the document for compound prefixes
+ depending on selected settings.
+* Fix: `AttributesNodeFormatter` adding quotes around implicit attribute values: `#` and `.`
+ prefixed ones.
+* Fix: `FormatterUtils` using `node.getDocument()` instead of `context.getDocument()`
+* Add: `TrackedOffsetUtils` for common tracked offset resolving code
+* Add: tracked offset option to `HtmlRenderer`, NOT TESTED, Experimental
+* Break: remove kludged `Formatter.render` builder arguments and only use `Appendable`, pass
+ builder since builder interface is extending appendable.
+* Fix: `LineAppendable`
+ * Break: replace `ISequenceBuilder` arguments with `Appendable`, if `LineAppendable` or
+ `ISequenceBuilder` then will use its builder, otherwise will use `StringSequenceBuilder`
+ * Add: `LineAppendable.setPrefixLength(int, int)` to change prefix/line content split for
+ lines
+ * Add: `LineAppendable.setLine(int, CharSequence, CharSequence)` to change prefix/line content
+ split for lines
+ * Add: appendTo without prefixes to allow extracting content only.
+ * Add: `LineAppendable.setLine(int, CharSequence, CharSequence)` to set prefix and text of
+ line.
+ * Add: `LineAppendable.setPrefixLength(int, int)` to change the prefix/text index for the line
+ without changing actual line content.
+ * Break: `LineAppendable.append(LineAppendable, int, int)` does not add a `line()` call before
+ appending, which means if there is an unterminated line, the first line of appended
+ appendable will be added to it. This allows adding text before the first line of appendable.
+ * Break: `LineAppendable.line()` and variants no longer allow adding a blank line at the top
+ of the text if allow leading EOL is enabled. Use `blankLine()` for this.
+ * Break: `LineAppendable.blankLine()` and variants no longer allow adding a blank line at the
+ top of the text if allow leading EOL is not enabled.
+* Break: clean up `BitFieldSet`:
+ * method names, ones adding/removing enum fields are now `add`/`remove`, ones taking bit mask
+ are `orMask`/`andNotMask`.
+ * add `getUnsigned()` versions for int, short, byte `getUInt()`, `getUShort()` and
+ `getUByte()` to get unsigned values of fields when they are shorter than the storage type.
+ `setUnsignedField()` versions for all field types, signed ones are a PITA to deal with when
+ encoding bit mask values. For signed values use the `setBitField` and `getLong()`,
+ `getInt()`, `getShort()`, `getByte()`.
+
+## 0.59.94
+
+* Fix: task bullet marker would not be changed if complete task changed to non-task during
+ formatting.
+* Fix: Spec test file formatting
+ * not incrementing example count
+ * Fix: `TestUtils.addSpecExample()` to add EOL after ast if not already terminated. This was
+ causing spec example formatting to mess up.
+ * Fix: add extra blank line after spec example
+ * Fix: parser to not remove trailing EOLs in spec example sections
+ * Fix: formatter to preserve all whitespace in spec examples
+ * Fix: format options by spacing commas and removing any repeated commas
+* Fix: `Formatter` tracked offset at EOL resolving for any offsets not handled by elements.
+
+## 0.59.92
+
+* Break: rename `SpecReader.TYPE_TEST_BREAK` and `SpecReader.TYPE_BREAK` to
+ `SpecReader.SECTION_TEST_BREAK` and `SpecReader.SECTION_BREAK` respectively.
+* Fix: `LineAppendableImpl.appendTo` and all context rendering methods `flushTo()` now take a
+ separate arguments for `maxBlankLines` which applies to body of text. `maxTrailingBlankLines`
+ which applies to trailing blank lines in appendable.
+* Fix: `LineAppendableImpl` re-implement and clean up using a more consistent model for
+ accumulating and manipulating lines of output.
+ * Add: separate arguments for `maxBlankLines` which applies to body of text and
+ `maxTrailingBlankLines` which applies to trailing blank lines in appendable.
+ * Change: accumulation now done as full lines with information on prefix, and eol
+* Add: `TrackedOffsetList` for efficient tracked offset location
+* Fix: add formatter tracking when formatting first block element child of an empty list item to
+ allow having block element on same line as list item prefix.
+* Add: `AsideExtension` custom formatter
+* Fix: formatter tracking offset adjustment when tracking offset is not in table or paragraph,
+ ie. not resolved after formatting then resolve in Formatter.render when using builder.
+* Add: `SpecExampleExtension` formatting for spec test files.
+* Add: `NodeFormatterContext.delegateRender()` method to delegate to format handler registered
+ after the current one. If none then will delegate to `Node` renderer, with
+ `CoreNodeFormatter.render(Node)` being the last in line.
+* Add: separate `TextContainer.F_LINK_NODE_TEXT` collection type to allow link element text to
+ be collected separate from `TextContainer.F_NODE_TEXT` flag.
+* Add: `SpaceInsertingSequenceBuilder` to track intervening spaces between nodes and insert on
+ non-space.
+* Fix: `TextCollectingVisitor` to add intervening spaces to match old implementation.
+* Add: `Formatter.TRACKED_OFFSETS` default empty list, to provide which offsets into the base
+ sequence being formatted should be tracked so their index can be resolved in the formatted
+ result.
+ * Add: tracked offset use to `Paragraph` formatting wrapping code
+ * Add: tracked offset use to `TableBlock` formatting code
+
+## 0.59.90
+
+* Add: `MarkdownTable.sorted(ColumnSort[], int, Predicate)` suffix testing predicate to
+ allow sorting of columns with numeric prefix by numeric then by suffix if numeric part is
+ equal.
+* Add: `MarkdownTable` constructor param for character sequence of the table. Can be any
+ sequence. For use by applications if they need access to original table character sequence.
+
+## 0.59.88
+
+* Fix: change `RefNode` text collection to resolve reference if link url collection is
+ requested.
+
+## 0.59.86
+
+* Fix: replace old `TextCollectingVisitor` implementation with new one independent of specific
+ nodes.
+* Add: `TextContainer` interface to allow text collection without knowing implementation node
+ class.
+* Add: `TextCollectingVisitor` to utils which does not require specific node classes. Takes
+ option flags:
+ * `F_LINK_TEXT` - link text or image alt for link/image nodes
+ * `F_LINK_PAGE_REF` - link page ref for link/image nodes
+ * `F_LINK_ANCHOR` - link anchor for link/image nodes
+ * `F_LINK_URL` - link url for link/image nodes
+ * `F_NODE_TEXT` - collect node text without unescaping or percent url decoding
+* Add: `MarkdownTable.transposed(int)` to get a transposed version of the table
+* Add: `MarkdownTable.sorted(ColumnSort[], int flags))` to get a sorted version of a table by
+ given columns/sort type. Columns sorted by text extracted by `TextCollectingVisitor` using
+ given collection `flags`
+* Add: `TableFormatOptions.FORMAT_TABLE_FILL_MISSING_MIN_COLUMN`, default `null`, to control min
+ column where filling of missing columns begins when formatting table.
+
+## 0.59.84
+
+* Fix: convert `MarkdownTable` to use common `TrackedOffset` for offset tracking API
+* Fix: convert `MarkdownParagraph` to use common `TrackedOffset` for offset tracking API
+* Fix: deprecate old `addTrackedOffset` methods.
+* Fix: rename formatter `HEADER` options to `HEADING`
+* Fix: deprecate old header named options
+* Fix: delete unused formatter option `KEEP_TRAILING_SPACES`
+* Fix: delete unused formatter option `CODE_KEEP_TRAILING_SPACES`
+
+## 0.59.82
+
+* Add: missing formatter options:
+ * `HeadingStyle`
+ * `BLOCK_QUOTE_CONTINUATION_MARKERS`
+ * `LIST_RESET_FIRST_ITEM_NUMBER` applies if renumbering items
+ * `LIST_ALIGN_NUMERIC`
+ * `flexmark-ext-attributes` formatting of individual attributes instead of dumping the
+ attributes node text.
+ * `FORMAT_ATTRIBUTES_COMBINE_CONSECUTIVE`
+ * `FORMAT_SORT_ATTRIBUTES`
+ * `FORMAT_ID_ATTRIBUTE`, `AttributeImplicitName` enum, as is, implicit preferred, explicit
+ preferred
+ * `FORMAT_CLASS_ATTRIBUTE`, `AttributeImplicitName` enum, as is, implicit preferred,
+ explicit preferred
+ * `FORMAT_ATTRIBUTES_SPACES`
+ * `FORMAT_ATTRIBUTE_EQUAL_SPACE`
+ * `FORMAT_ATTRIBUTE_VALUE_QUOTES`
+ * prioritized task items: `flexmark-ext-gfm-tasklist`
+ * `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_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 to `LISTS_ITEM_PREFIX_CHARS` used 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.
+ * `ElementPlacementSort`
+ * `SORT_DELETE_UNUSED`
+ * `DELETE_UNUSED`
+ * `LINK_MARKER_COMMENT_PATTERN`
+ * `CONTINUATION_ALIGNMENT`
+ * Add: Formatter control for controlling non-formatting regions.
+ * `` and `` tags
+ * `FORMAT_CONTROL_ON`: `String`
+ * `FORMAT_CONTROL_OFF`: `String`
+ * `FORMAT_CONTROL_REGEX`: `Boolean` to treat control on/off strings as regex pattern.
+ * implement `SimTocExtension.FORMAT_UPDATE_ON_FORMAT` option
+* Break: rename `CharWidthProvider` methods and change `zeroWidth` argument to `CharPredicate`
+* Fix: `TestUtils.getOptions(SpecExample, String, Function)` to return
+ immutable data holder to prevent leak of options between spec examples
+* Fix: escape of plain `.` at start of continuation.
+* Fix: `ListBlockParser` escape/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 `Paired` extend `Map.Entry`
+* Fix:
+ [#381, StackOverflowError with long base64 image and LINKS\_ALLOW\_MATCHED\_PARENTHESES disabled],
+ `USE_HARDCODED_LINK_ADDRESS_PARSER` was not used if matched parentheses were disabled causing
+ stack overflow in regex evaluation. szxvalsdfj lasdf jffdddd
+
+## 0.59.80
+
+* Fix: erroneous not-null annotation on nullable return in
+ `InlineParser.parseCustom(BasedSequence, Node, BitSet, Map)`
+
+## 0.59.78
+
+* Fix: `MarkdownParagraph` wrap 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 `LS` ahead of position.
+ * on typing space after non-space at start of continuation line with `LS` ahead of position.
+ * on typing space after end of paragraph after the right margin.
+
+## 0.59.76
+
+* 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 `LS` to 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 `CharSequence` for indent properties instead of `int` for number of spaces to
+ allow arbitrary indentation characters.
+* Fix: `SegmentOffsetTree` aggregated length replacement to contain `startOffset` of next
+ segment instead of `endOffset` of segment at position, to mimic equivalent aggregated length
+ of `SegmentTree`.
+* Fix: `BasedOffsetTracker` to handle 0 span and 1 span offset ranges and return info for the
+ requested offset.
+
+## 0.59.74
+
+* Fix: `MarkdownParagraph` line 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
+
+## 0.59.72
+
+* Add: `Formatter` Paragraph wrapping options and code.
+ * Add: `Formatter.RIGHT_MARGIN`, default `0`, if >0 then text will be wrapped to given margin
+ * Add: `Formatter.APPLY_SPECIAL_LEAD_IN_HANDLERS`, default `true`, 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: `CustomBlockParserFactory.getLeadInHandler(DataHolder)` and handle escaping/unescaping
+ special lead in characters for the block elements. Add escape/unescape to:
+ * `BlockQuoteParser`
+ * `ListBlockParser`
+ * `HeadingParser`
+ * `AdmonitionBlockParser`
+ * `AsideBlockParser`
+ * `DefinitionItemBlockParser`
+* 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: `SegmentOffsetTree` for 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: `BasedOffsetTracker` to take `BasedSequence` result (could be segmented, offset in based
+ sequence, `PositionAnchor` and return index of this offset in the resulting based sequence.
+
+## 0.59.70
+
+* Fix: convert `BitEnumSet` to `BitFieldSet` to allow bit fields of more than 1 bit.
+ * Add: Optional `BitField` interface, if implemented by Enum for use by `BitFieldSet` then bit
+ fields can be 1 to 64 bits in size, with manipulation of bit packed values and iteration
+ over non-zero valued elements.
+
+## 0.59.68
+
+* Fix: rename `LineFormattingAppendable` to `LineAppendable`
+* Fix: remove unused overloads and methods from `LineFormattingAppendable`
+* Add: new methods to `LineFormattingAppendable` for prefix changes and combined prefix/line
+ manipulation.
+* Break: rename `LineAppendable.SUPPRESS_TRAILING_WHITESPACE` to
+ `LineAppendable.F_TRIM_TRAILING_WHITESPACE`
+* Break: rename and **invert** `LineAppendable.ALLOW_LEADING_WHITESPACE` to
+ `LineAppendable.F_TRIM_LEADING_WHITESPACE`
+* Deprecate: convenience copies of `LineAppendable` flags in `Formatter` and `HtmlRenderer`. Use
+ `LineAppendable` directly.
+* Break: `Formatter.FORMAT_FLAGS` default changed from `0` to
+ `LineAppendable.F_TRIM_LEADING_WHITESPACE` to reflect inversion of option flag and preserve
+ behavior
+* Break: `HtmlRenderer.FORMAT_FLAGS` default changed from `0` to
+ `LineAppendable.F_TRIM_LEADING_WHITESPACE` to reflect inversion of option flag and preserve
+ behavior
+* Fix: remove `my` prefix from fields in `flexmark-utils` to keep consistent naming convention
+ in module.
+* Add: `BitEnumSet` to expose the bit mask of elements to use as efficient and convenient bit
+ masked options
+* Add: `ArrayUtils.toArray(BitSet)` to return an `int[]` of all bit numbers that are set.
+* Break: make constructor `Range(int, int)` protected. Use `Range.of` to create instances.
+
+## 0.59.66
+
+* Fix: move experimental concept classes out of the library. Too much clutter of unused old
+ experimental stuff.
+ * Fix: move `PositionList` related classes to `flexmark-util-experimental`
+ * Fix: move unused classes from utils to experimental
+* Fix: rename `BasedSequenceBuilder` to `SequenceBuilder`
+* Fix: `MarkdownParagraph`
+ * use `SegmentBuilder` for accumulating wrapped text.
+ * Fix: remove any position tracking code from paragraph formatter
+
+## 0.59.64
+
+* Fix: `SoftBreakNode` in link ref would be trimmed and loose contained EOL as a result.
+* Fix: `SegmentedSequence` to take `SegmentBuilder` parts 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 `SegmentBuilder` from `SegmentTree`
+ * Add: code to extract `startOffset`/`endOffset` and `treeData` range for `subSequence` of
+ `SegmentedSequenceTree`
+ * Add: `SegmentTree` binary search tree for segmented sequence segments
+ * Add: `SegmentedSequenceTree` binary tree based segmented sequences with option to use old
+ `SegmentedSequenceFull` if desired.
+ * Add: build `SegmentTree` from `SegmentBuilder` segments
+* 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 `TEXT` segments from `String` content to start/end being the -ve of start+1/end+1 of
+ the subsequence for this `TEXT` in `StringBuilder`
+ * Change `Seg` to remove `myText` field and require `CharSequence` argument for to be passed
+ to all methods which returned `myText` in previous implementation. Returned value should be
+ `CharSequence` which is the `subSequence` representing the `TEXT` content.
+ * `TEXT` segments no longer have a start/end offset of prev/next `BASE` since their start/end
+ offsets represent offset in `StringBuilder` for their character sequence. Their base start
+ offset is `endOffset` of previous `BASE` or `startOffset` of `SegmentBuilder` if first
+ segment. Their `endOffset` is `startOffset` of next `BASE` or `endOffset` of
+ `SegmentBuilder` if it is a dangling `TEXT` segment.
+ * `TEXT` segments to be accumulated in `StringBuilder` so a single char sequence for out of
+ base characters is available.
+ * `SegmentBuilder` tracks last `immutableOffset` in its `StringBuilder` to reflect the
+ accumulated, immutable out of base `TEXT` segments in the segment builder.
+ * `immutableOffset` and `StringBuilder.length()` represents the start/end offsets of dangling
+ `TEXT` segment.
+ * dangling `TEXT` segment is mutable **until** a `BASE` segment is added after it which
+ results in `SegmentBuilder` `endOffset` change and after `optimizeText` method has been
+ invoked. If `TEXT` segment becomes immutable then `immutableOffset` is changed to the
+ `endOffset` of the `TEXT` segment's subSequence end.
+ * adding an `ANCHOR` after dangling `TEXT` with an `offset` equal to `StringBuilder`
+ `endOffset` will invoke `optimizeText` to allow extending previous `BASE` range and reducing
+ dangling `TEXT` content. It will not change the dangling `TEXT` to immutable `TEXT` to allow
+ appending more text after the call.
+ * appending `TEXT` to `SegmentBuilder` appends the text to `StringBuilder` and updates out of
+ base stats for appended `TEXT` content. Out of base stats **always** reflect the current
+ content of `SegmentBuilder`
+ * methods:
+ * `handleOverlap` is invoked when an overlapping, `BASE` segment is added. It may result in
+ calling `optimizeText` if the resolution of overlap causes a `BASE` segment to be appended
+ after a dangling `TEXT` segment.
+ * 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]`: last `BASE` range, optional dangling `TEXT` and new `BASE`
+ range passed as `Object[]` with `Range` and `CharSequence` representing `BASE` and
+ `TEXT` segments.
+ * `StringBuilder` content is truncated to `immutableOffset` and out of base statistics are
+ updated to remove the `TEXT` content 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 because `optimizeText` will be called if needed as the
+ resulting segments are appended to the `SegmentBuilder`
+ * `SegmentBuilder` will replace last range and append the rest of the returned segments
+ and update all internal structures, eliminating the concern for these in
+ `handleOverlap`.
+ * `optimizeText` called when a `BASE` or `ANCHOR` segment is added after dangling `TEXT`
+ segment.
+ * 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]`: last `BASE` range or `Range.NULL`, dangling `TEXT` and new
+ `BASE`/`ANCHOR` range or `Range.NULL` are passed as `Object[]` with `Range` and `String`
+ representing `BASE`/`ANCHOR` and `TEXT` segments respectively.
+ * `StringBuilder` content is truncated to `immutableOffset` and out of base statistics are
+ updated to remove the `TEXT` content 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, with `Range` representing
+ `BASE`/`ANCHOR` segments and `CharSequence` representing `TEXT` segments.
+ * `SegmentBuilder` will replace last range and append the rest of the returned segments
+ and update all internal structures, eliminating the concern for these in `optimizeText`.
+
+## 0.59.62
+
+* 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)` and
+ `TestUtils.customStringOption(String, String, Function)` to ease creating
+ `CUSTOM_OPTION` option types.
+
+## 0.59.60
+
+* Add: `SettableInstance` and `SettableExtractedInstance` classes to facilitate implementation
+ of settings which can be changed through spec example options.
+* Break: move `SpecReader.getSpecInputStream(ResourceLocation)` and
+ `SpecReader.getReadSpec(ResourceLocation)` to
+ `ResourceLocation.getResourceInputStream(ResourceLocation)` and
+ `ResourceLocation.getResourceText(ResourceLocation)`
+* Add: `ResourceLocation.getResourceInputStream()` and `ResourceLocation.getResourceText()`
+* Add: static `BuilderBase.removeExtensions(DataHolder, Collection>)`
+ for removing extension classes from `SharedDataKeys.EXTENSIONS`.
+
+## 0.59.58
+
+* Add: `SequenceUtils.equals(CharSequence, Object)` to consolidate char sequence equals
+* Fix: `SegmentedBuilder` if anchor position is less than current `endOffset` then ignore
+ anchor.
+* Deprecate: `TestUtils.showTabs(String)` and `TestUtils.unShowTabs(String)` in favour of
+ `TestUtils.toVisibleSpecText(String)` and `TestUtils.fromVisibleSpecText(String)` because
+ these convert more than tabs.
+
+## 0.59.56
+
+* Fix: bug causing duplicated text in segmented sequences
+* Fix: optimize `SegmentedSequence`, non base characters are now stored in base offsets as
+ `-(char+1)`, this eliminates `nonBasedChars` completely.
+* Add: segmented sequence stats collection
+* Add: options to based sequences which are not used unless a sequence passed to
+ `BasedSequence.of` is first wrapped in `BasedOptionsSequence`. Then all sequences created from
+ this base will have int bit options testable with `BasedSequence.isOption(int)` and get
+ arbitrary options with `BasedSequence.getOption(DataKeyBase)` or just get the whole
+ `DataHolder` options via `BasedSequence.getOptions()` for more sophisticated needs. If the
+ `DataHolder` passed to `BasedOptionsSequence` is mutable then
+
+ Makes adding customized behavior and features easy and transparent to implementation with no
+ overhead since `SubSequence` delegates to its `baseSeq` if it is a `BasedOptionsHolder` for
+ these methods but otherwise does no checking. The overhead is one level of delegation of
+ `CharSequence` methods for sequences with options with no impact on the rest.
+
+## 0.59.54
+
+* Fix: rework `PositionList` and `Position`
+ * 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: `IPreviewPositionListener` to `PositionList` so changes can be previewed and changed.
+ Useful for `SegmentBuilder` to keep invariants and tracked counts updated when these are
+ changed by optimizers so optimizers do not need to concern themselves about these.
+* Add: `SegmentBuilder` option flags for tracking unique non-based characters and including
+ anchors (0 span ranges) in the segment list.
+
+## 0.59.52
+
+* Add: `BasedSequence.addSegments(BasedSegmentBuilder)` so each sequence adds its own optimized
+ segment list without requiring by character scanning ofg of
+ `BasedSequence.getIndexOffset(int)` and building the segments the hard way.
+ * Fix: `BasedSequenceBuilder` to use `BasedSequence.addSegments`
+ * `ReplacedBasedSequence` it has no use other than to test if sequence replaces base
+ * Fix: Change segment parts to `EditOp` which 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: rename `BasedCharsRecoverySegmentOptimizer` to `CharRecoveryOptimizer`
+* Fix: `SegmentBuilder` change `append...()` to plain `append()`
+* Fix: `SegmentBuilder` to 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 or `String`. The rest are history.
+ * Test: cached start/end/length/last range index.
+* Add: `BasedSegmentBuilder` to convert overlap in added ranges to out of base text
+* Fix: change `BasedSequenceBuilder` to use `BasedSegmentBuilder` for segment accumulation
+ instead of its own implementation.
+ * Add: construction with optional `BasedSegmentOptimizer` list 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
+ `CharSequence` and add/append for start/end offsets. The rest are gone.
+* Add: Common char sets:
+ * `DECIMAL_DIGITS`
+ * `HEXADECIMAL_DIGITS`
+ * `OCTAL_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 as `SegmentedSequence` is
+ migrated to segment builder sequence part list.
+
+## 0.59.50
+
+* Fix: move spec resource files to `flexmark-test-specs` resources. Any modules needing the spec
+ have to add a test dependency on this module.
+* Break: try to reduce footprint of `IRichSequence` and `IRichSequenceBase` by making getting
+ rid off some overloads with default params.
+ * Add: factor out bulk of `IRichSequenceBase` to `SequenceUtils` so functionality could be
+ used on any `CharSequence`.
+ * Fix: change all character inclusion based functions to use `CharPredicate`
+* Add: `CharPredicate` to consolidate all character inclusion testing via predicates.
+* Fix: make `BaseSequence.of` use 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: `PositionList` and `Position` classes 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 `PositionList` and `Position` instead of
+ hand rolled code.
+ * Fix: make `Position` handle insert/delete index change invalidation instead of
+ `PositionList`
+ * 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.
+
+## 0.59.48
+
+* Fix: `SegmentBuilder` to not add empty text.
+
+* Add: `SegmentOptimizer` for `SegmentBuilder` segment optimization
+
+* Add: `CharMatchingSegmentOptimizer` to 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 of
+ `getBaseSequence()`. It is the underlying base object that is important not the based sequence
+ used to wrap it.
+
+* Add: `BasedSequenceManager` to allow re-use of equivalent base sequences to eliminate the
+ problem of having different base sequences for the same text content. Only implemented for
+ `SubSequence` not `CharSubSequence`
+
+ Uses 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)` will return an existing based sequence for the passed object.
+
+ Uses fast fail on `length()` and `hashCode()` 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 `SubSequence` to create a `String` if passed sequence implements `Appendable` to
+ eliminate use of mutable sequences as bases the same way `CharSubSequence` did for
+ `StringBuilder`. It is important not to use mutable `CharSequences` for `BasedSequence.of()`
+ argument. If not sure `toString()` on the argument is the best option.
+
+* Fix: change all possible uses of `CharSubSequence` to `SubSequence`
+
+* Add: `SegmentBuilder` to track offset ranges in original or base sequence and inserted out of
+
+* Fix: `BasedSequenceBuilder.add(CharSequence)` now does not complain when adding a
+ `BasedSequence` which 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
+ extending `CharSequence`
+
+* 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 like `CharSubSequence` and `SubSequence` the rest should rely on
+ `BasedSequenceImpl`.
+
+## 0.59.46
+
+* 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 in `RichSequence`
+* 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()` use `DocxContext.addText(String)`
+* Deprecate: `DocxContext.text(String)` use `DocxContext.addTextCreateR(String)`
+* Fix: `IRichSequenceBase.split` and `IRichSequenceBase.splitList` some combinations would pass
+ parameters out of place causing wrong operation.
+* Fix: `MarkdownParagraph` wrapping to use simplified left aligned wrapping with no trailing
+ spaces
+
+## 0.59.44
+
+* Add: docx renderer form fields via `[name]{.class attributes}` where name is given by
+ `DocxRenderer.FORM_CONTROLS` and 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 `.dropdown` attributes:
+ * `name` - name for the form field
+ * `default` - 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 options
+ * `help` - text to show in status bar and on hitting F1
+ * `options` - list of options separated by `|`, individual options will be trimmed but
+ otherwise left as is
+ * checkbox, class name `.checkbox` attributes:
+ * `name` - name for the form field
+ * `checked` - default will be checked, otherwise unchecked
+ * `help` - text to show in status bar and on hitting F1
+ * text, class name `.text` attributes:
+ * `name` - name for the form field
+ * `default` - default value
+ * `help` - text to show in status bar and on hitting F1
+ * `max-length` - number or leave out for unlimited
+ * `type` - gives the type of text field
+ * `regular` - default if type not provided, regular text
+ * `format` - `UPPERCASE`, `LOWERCASE`, `FIRST CAPITAL`, `TITLE CASE`, not case
+ sensitive, space between words can be eliminated or replaced by `-`
+ * `date` - date
+ * `format` - word date format
+ * `number` - number
+ * `format` - word number format
+ * `current-date` - current date
+ * `format` - word date format
+ * `current-time` - current time
+ * `format` - word time format
+
+## 0.59.42
+
+* Break: `BasedSequence.append(CharSequence[])` now constructs as segmented sequence so proper
+ ordering of segments is enforced. This means `IllegalArgumentException` will be thrown when
+ this condition is not met. To get old functionality you need to create an appended string of
+ all sequences and `BasedSequence.of()` on that string.
+* Break: rename `MappedSequence` to `MappedBasedSequence` to allow for `MappedRichSequence`
+* Break: rename `RichCharSequence` to `IRichSequence` to separate base interfaces for rich and
+ based sequences and allow for `RichSequence` to be the base interface for rich sequences
+ similar to `BasedSequence` for based sequences
+* Break: rename `RichCharSequenceBase` to `IRichSequenceBase`
+* Break: rename `RichCharSequenceImpl` to `RichSequenceImpl`
+* Break: rename `RepeatedCharSequence` to `RepeatedSequence`
+* Add: `RichSequence.of` for creating `RichSequence` instances
+* Add: `BasedSequence.of` for creating `BasedSequence` instances
+* Deprecate: `RichSequenceImpl.of`, use `RichSequence.of` instead
+* Deprecate: `BasedSequenceImpl.of`, use `BasedSequence.of` instead
+* Deprecate: `SubSequence.of`, use `BasedSequence.of` instead
+* Deprecate: `UpperCaseMapper` and `LowerCaseMapper` use `ChangeCase.toUpperCase` and
+ `ChangeCase.toLowerCase`
+* Deprecate: all static factory method named `of` to more specific so that errors are less
+ likely. `repeatOf`, `prefixOf` otherwise it is possible to have the wrong factory method
+ called and not see it.
+* Break: move
+ * `com.vladsch.flexmark.tree.iteration.ArrayIterable` to
+ `com.vladsch.flexmark.util.collection.iteration.ArrayIterable`
+ * `com.vladsch.flexmark.util.html.CellAlignment` to
+ `com.vladsch.flexmark.util.collection.iteration.ArrayIterable`
+ * `com.vladsch.flexmark.ast.DelimitedNode` to `com.vladsch.flexmark.util.ast.DelimitedNode`
+* Fix: `IRichSequence` and by extension `RichSequence` and `BasedSequence`
+
+ * 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 between `fromIndex` and `endIndex` excluding 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 index
+ * `IRichSequence.delete(int, int)` delete range in this sequence
+ * `IRichSequence.replace(CharSequence, CharSequence)` one char sequence in this sequence with another
+ * `IRichSequence.replace(int, int, CharSequence)` range in this sequence with char sequence
+
+* 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 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 baseLineColumnAtStart();`
+ * `@NotNull Pair baseLineColumnAtEnd();`
+ * `int baseEndOfLine();`
+ * `int baseEndOfLineAnyEOL();`
+ * `int baseStartOfLine();`
+ * `int baseStartOfLineAnyEOL();`
+ * `@NotNull Range baseLineRangeAtStart();`
+ * `@NotNull Range baseLineRangeAtEnd();`
+ * `int baseColumnAtEnd();`
+ * `int baseColumnAtStart();`
+* Add: to `Node` convenience methods delegated to `getChars()`
+ * `int getStartOffset()` to `getStartOffset()`
+ * `int getEndOffset()` to `getEndOffset()`
+ * `int getTextLength()` to `length()`
+ * `BasedSequence getBaseSequence()` to `getBaseSequence()`
+ * `Range getSourceRange()` to `etSourceRange()`
+ * `BasedSequence baseSubSequence(int startIndex, int endIndex)` to
+ `baseSubSequence(startIndex, endIndex)`
+ * `BasedSequence baseSubSequence(int startIndex)` to `baseSubSequence(startIndex)`
+ * `BasedSequence getEmptyPrefix()` to `getEmptyPrefix()`
+ * `BasedSequence getEmptySuffix()` to `getEmptySuffix()`
+ * `int getStartOfLine()` to `baseStartOfLine()`
+ * `int getEndOfLine()` to `baseEndOfLine()`
+ * `int startOfLine(int index)` to `baseStartOfLine(index)`
+ * `int endOfLine(int index)` to `baseEndOfLine(index)`
+ * `Pair lineColumnAtIndex(int index)` to `baseLineColumnAtIndex(index)`
+ * `Pair lineColumnAtStart()` to `baseLineColumnAtStart()`
+ * `Pair getLineColumnAtEnd()` to `baseLineColumnAtEnd()`
+* Add: `ArrayUtils` for searching arrays of `` on value or predicate
+ * `indexOf()` variations for forward search
+ * `lastIndexOf()` variations for backward search
+ * `firstOf()` variations for forward search returning matched element or `null`
+ * `lastOf()` variations for backward search returning matched element or `null`
+* Break: `RichCharSequence` all `trim`, `trimStart`, `trimEnd` `keepLength` argument is now
+ `keep` with 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 of `keep` characters.
+* Fix: reformat tests for compound sections
+* Deprecate: `Range.subSequence(CharSequence)` use `Range.basedSubSequence(CharSequence)`,
+ `Range.richSubSequence(CharSequence)` or for plain sequences
+ `Range.charSubSequence(CharSequence)`
+* Fix: rename `Range.subSequence()` to `Range.basedSubSequence()`
+* Fix: rename `Range.safeSubSequence()` to `Range.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
+
+## 0.59.40
+
+* Break: remove example option parsing related `TestUtils` methods.
+* Add: spec example language per section options and rendering in HTML.
+* Add: `ExampleOption` to 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.
+
+## 0.59.38
+
+* Fix: remove unnecessary type param from `MutableDataHolder.remove(DataKeyBase>)`
+* Fix: `Parser.HEADING_NO_EMPTY_HEADING_WITHOUT_SPACE` had wrong regex. Did not allow non-empty
+ headings without space either.
+
+## 0.59.36
+
+* 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.
+
+## 0.59.34
+
+* Add: synchronized around `HashMap` modification to ensure thread safety. Elimination of
+ nullable keys would allow using `ConcurrentHashMap` in `DataSet` but 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.
+
+## 0.59.32
+
+* Fix: add nullable annotations to `DataSet` and `DataKey` classes
+* Break: `DataKey` now represents not null data values, use `NullableDataKey` if using nullable
+ values, for processing of either type of data key, use `DataKeyBase` super class which does
+ not specify nullability for the data value.
+* Break: `DataValueFactory` now has non-nullable dataHolder argument and nullable result. Use:
+ * `DataNotNullValueFactory` for nullable result and non nullable dataHolder
+ * `DataValueNullableFactory` for nullable result and nullable dataHolder
+ * `DataNotNullValueNullableFactory` for non-nullable result and non-nullable dataHolder
+* Add: `DataKey` 3 argument constructor with pre-computed non null default value to be used for
+ null dataHolder defaults. This way the factory is `DataNotNullValueFactory` which takes a
+ non-null data holder and returns a computed value.
+* Add: `NullableDataKey` 3 argument constructor with pre-computed nullable default value to be
+ used for null dataHolder defaults. This way the factory is `DataValueFactory` which takes a
+ non-null data holder and returns a computed value.
+* Fix: add `DataKey.get(DataHolder)` to replace `DataKey.getFrom(DataHolder)`, shorter and
+ compatible with Kotlin array access syntax, also handles nullability of data.
+* Fix: deprecate `DataKey.getFrom()`
+* Fix: replace all `DataHolder.get()` by `DataKey.get()`
+* Fix: add nullability annotations to a boat load of classes.
+* Add: `MutableDataHolder.set(@NotNull DataKey, @NotNull T)` and
+ `MutableDataHolder.set(@NotNull NullableDataKey, @Nullable T)` to respect nullability of
+ key's data value.
+* Add: `DataKey.set(@NotNull MutableDataHolder, @NotNull T)` and `NullableDataKey.set(@NotNull
+ MutableDataHolder, @Nullable T)` to allow setting data values via keys, if needed.
+
+## 0.59.30
+
+* Fix: change all test case construction param from `Map` to `Map` to allow for any type implementing the right map.
+
+## 0.59.28
+
+* Fix: pass through opening line of spec example to `DumpSpecReader` so it can construct an
+ accurate full spec version of expected text.
+* Fix: add `ResourceResolverManager` to handle `ResourceUrlResolver` registration.
+
+## 0.59.27
+
+* Add: parameterized test case options, ones that have option name followed by `[` and
+ terminated by `]`. Used for custom handling variations of option. These should set
+ `TestUtils.CUSTOM_OPTION` to a `BiFunction` where
+ `option` is the option name (`type` in example), `text` is 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 `DataHolder` with `TestUtils.CUSTOM_OPTION` set then it will be
+ invoked even when no `[]` present to allow handling of empty params, which will be `null` in
+ 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 if `TestUtils.CUSTOM_OPTION` is
+ present.
+
+* Add: `ResourceUrlResolver`, registered via
+ `ResourceLocation.registerUrlResolver(Function)` 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 of `ResourceLocation` since 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.
+
+## 0.59.25
+
+* Fix: remove moved test class from core to utils module.
+
+## 0.59.23
+
+* Fix: change all tests to use static const `ResourceLocation` instead of creating a new
+ instance.
+* Fix: make `ComboSpecTestCase.getSpecResourceLocation()` final and remove it from all
+ subclasses.
+
+## 0.59.21
+
+* Fix: move flexmark modules test classes out of `test.util` package which is for
+ `flexmark-test-util` module's test classes
+* Add: `DataSet.registerDataKeyAggregator(DataKeyAggregator)` to allow for aggregation action
+ keys and aggregation for combining keys which require this. Only applied in
+ * `DataSet.aggregate()`
+ * `DataSet.aggregate(DataHolder, DataHolder)`
+ * `DataSet.aggregateActions(DataHolder, DataHolder)`
+
+## 0.59.19
+
+* Fix: convert all resource info to `ResourceLocation`
+* Add: class location resolution via file under test `resources` named for the root package of
+ the module and containing directory path(s) from parent of `resources` directory to get source
+ root for test files. for maven builds it is `java/`. This allows resolving absolute file path
+ for class files in tests for generating the location `file:///`
+ * Fix: package for some modules did not follow module/package naming convention
+ * Fix: move `flexmark-ext-superscript` to proper package by naming convention
+ `com.vladsch.flexmark.ext.superscript`
+ * Fix: move `flexmark-profile-pegdown` to proper package by naming convention
+ `com.vladsch.flexmark.profile.pegdown`
+ * Fix: move `flexmark-test-util` `spec` package under `com.vladsch.flexmark.test.util`
+ package
+ * Add: test class location helpers to all modules:
+ * `flexmark-core-test/src/test/resources/com.vladsch.flexmark.core.test.txt`
+ * `flexmark-docx-converter/src/test/resources/com.vladsch.flexmark.docx.converter.txt`
+ * `flexmark-ext-abbreviation/src/test/resources/com.vladsch.flexmark.ext.abbreviation.txt`
+ * `flexmark-ext-admonition/src/test/resources/com.vladsch.flexmark.ext.admonition.txt`
+ * `flexmark-ext-anchorlink/src/test/resources/com.vladsch.flexmark.ext.anchorlink.txt`
+ * `flexmark-ext-aside/src/test/resources/com.vladsch.flexmark.ext.aside.txt`
+ * `flexmark-ext-attributes/src/test/resources/com.vladsch.flexmark.ext.attributes.txt`
+ * `flexmark-ext-autolink/src/test/resources/com.vladsch.flexmark.ext.autolink.txt`
+ * `flexmark-ext-definition/src/test/resources/com.vladsch.flexmark.ext.definition.txt`
+ * `flexmark-ext-emoji/src/test/resources/com.vladsch.flexmark.ext.emoji.txt`
+ * `flexmark-ext-enumerated-reference/src/test/resources/com.vladsch.flexmark.ext.enumerated.reference.txt`
+ * `flexmark-ext-escaped-character/src/test/resources/com.vladsch.flexmark.ext.escaped.character.txt`
+ * `flexmark-ext-footnotes/src/test/resources/com.vladsch.flexmark.ext.footnotes.txt`
+ * `flexmark-ext-gfm-issues/src/test/resources/com.vladsch.flexmark.ext.gfm.issues.txt`
+ * `flexmark-ext-gfm-strikethrough/src/test/resources/com.vladsch.flexmark.ext.gfm.strikethrough.txt`
+ * `flexmark-ext-gfm-tasklist/src/test/resources/com.vladsch.flexmark.ext.gfm.tasklist.txt`
+ * `flexmark-ext-gfm-users/src/test/resources/com.vladsch.flexmark.ext.gfm.users.txt`
+ * `flexmark-ext-gitlab/src/test/resources/com.vladsch.flexmark.ext.gitlab.txt`
+ * `flexmark-ext-ins/src/test/resources/com.vladsch.flexmark.ext.ins.txt`
+ * `flexmark-ext-jekyll-front-matter/src/test/resources/com.vladsch.flexmark.ext.jekyll.front.matter.txt`
+ * `flexmark-ext-jekyll-tag/src/test/resources/com.vladsch.flexmark.ext.jekyll.tag.txt`
+ * `flexmark-ext-macros/src/test/resources/com.vladsch.flexmark.ext.macros.txt`
+ * `flexmark-ext-media-tags/src/test/resources/com.vladsch.flexmark.ext.media.tags.txt`
+ * `flexmark-ext-resizable-image/src/test/resources/com.vladsch.flexmark.ext.resizable.image.txt`
+ * `flexmark-ext-spec-example/src/test/resources/com.vladsch.flexmark.ext.spec.example.txt`
+ * `flexmark-ext-superscript/src/test/resources/com.vladsch.flexmark.ext.superscript.txt`
+ * `flexmark-ext-tables/src/test/resources/com.vladsch.flexmark.ext.tables.txt`
+ * `flexmark-ext-toc/src/test/resources/com.vladsch.flexmark.ext.toc.txt`
+ * `flexmark-ext-typographic/src/test/resources/com.vladsch.flexmark.ext.typographic.txt`
+ * `flexmark-ext-wikilink/src/test/resources/com.vladsch.flexmark.ext.wikilink.txt`
+ * `flexmark-ext-xwiki-macros/src/test/resources/com.vladsch.flexmark.ext.xwiki.macros.txt`
+ * `flexmark-ext-yaml-front-matter/src/test/resources/com.vladsch.flexmark.ext.yaml.front.matter.txt`
+ * `flexmark-ext-youtube-embedded/src/test/resources/com.vladsch.flexmark.ext.youtube.embedded.txt`
+ * `flexmark-ext-zzzzzz/src/test/resources/com.vladsch.flexmark.ext.zzzzzz.txt`
+ * `flexmark-formatter-test-suite/src/test/resources/com.vladsch.flexmark.formatter.test.suite.txt`
+ * `flexmark-html2md-converter/src/test/resources/com.vladsch.flexmark.html2md.converter.txt`
+ * `flexmark-integration-test/src/test/resources/com.vladsch.flexmark.integration.test.txt`
+ * `flexmark-java.wiki/src/test/resources/com.vladsch.flexmark-java.wiki.txt`
+ * `flexmark-jira-converter/src/test/resources/com.vladsch.flexmark.jira.converter.txt`
+ * `flexmark-pdf-converter/src/test/resources/com.vladsch.flexmark.pdf.converter.txt`
+ * `flexmark-profile-pegdown/src/test/resources/com.vladsch.flexmark.profile.pegdown.txt`
+ * `flexmark-tree-iteration/src/test/resources/com.vladsch.flexmark.tree.iteration.txt`
+ * `flexmark-util/src/test/resources/com.vladsch.flexmark.util.txt`
+ * `flexmark-youtrack-converter/src/test/resources/com.vladsch.flexmark.youtrack.converter.txt`
+ * `flexmark/src/test/resources/com.vladsch.flexmark.txt`
+* Add: creation of `SpecExample` instance based on caller information with correct file/line of
+ the source calling `RenderingTestCase.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.
+
+## 0.59.17
+
+* Fix: make `SpecExampleRendererBase` reusable by moving any references to flexmark parsing
+ rendering specifics to `FlexmarkSpecExampleRenderer` and 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.
+
+## 0.59.15
+
+* Fix: delete deprecated methods, classes, fields.
+* Fix: delete deprecated flexmark-ext-gfm-tables
+* Fix: format code
+
+## 0.59.13
+
+* Break: move formatter tests and html renderer to `flexmark-core-test` module to allow sharing
+ of test base classes in extensions without causing dependency cycles in formatter module.
+* Break: move formatter module into `flexmark` core. 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.spec` and `com.vladsch.flexmark.util` in
+ `flexmark-test-util` to `com.vladsch.flexmark.test.spec` and `com.vladsch.flexmark.test.util`
+ respectively to respect the naming convention between modules and their packages.
+* Break: remove `flexmark-html-parser`, `flexmark-html2md-converter` is a replacement
+* Fix: revert back to `MutableDataSet.set(DataKey, 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 |
+
+## 0.59.11
+
+* Fix: remove need to load/unload extensions. Properly handle removal from `EXTENSIONS` property
+ for those tests that need it by implementing `LOAD_EXTENSIONS` property and
+ `UNLOAD_EXTENSIONS` property handling in `RenderingTestCase.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 `EXTENSIONS` from `Iterable` to `Collection`, 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 `AdmonitionBlock` would 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.
+
+## 0.59.9
+
+* Fix: `NO_EOL` option for tests was applied inconsistently.
+* Fix: add `SpecExample` argument to `getSpecExampleRenderer`
+* Fix: add `SpecExampleParse` argument to `addSpecExample`
+* Fix: regression bug #372
+ [#372, \[Regression?\] Attributes extension not applied to \`code\` tag of code blocks]
+ * Add: `AttributesExtension.FENCED_CODE_ADD_ATTRIBUTES`, default
+ `FencedCodeAddType.ADD_TO_PRE_CODE` for backward compatibility with 0.42, but if this is
+ option is not set and `AttributesExtension.FENCED_CODE_INFO_ATTRIBUTES` is set to `true`,
+ default will change to `FencedCodeAddType.ADD_TO_PRE` since attributes after info are used
+ to add to the `code` tag.
+
+## 0.59.7
+
+* Add: `SpecExampleRenderer.finalizeRender()` to allow tests and others to clean up after each
+ rendering
+* Add: ability to combine data sets with `DataKey>` 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`
+
+## 0.59.5
+
+* Fix: change `AttributesExtension.FENCED_CODE_INFO_ATTRIBUTES` to default `false` to match
+ previous versions.
+
+## 0.59.1
+
+* Fix: MarkdownTable index out of bounds in some functions when table has no rows
+* Fix: `DataSet` copy constructors to accept `null`
+* Fix: change `DataSet.keySet()` to `DataSet.getKeys()`
+ * Deprecate: `DataSet.keySet()`
+* 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 in `charSet`. Variations include `BasedSequence.extendByAny(CharSequence)` for
+ unlimited count and `BasedSequence.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 in `charSet`. Variations include `BasedSequence.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 include
+ `BasedSequence.prefixWithIndent()` for unlimited indent.
+* Break: make `NodeAdaptedVisitor.myCustomHandlersMap` private. Use
+ `NodeAdaptedVisitor.getHandler(Node)`, `NodeAdaptedVisitor.getHandler(Class>)`, and
+ `NodeAdaptedVisitor.getNodeClasses()` to get access to contained data.
+
+## 0.50.48
+
+* Fix: [#382, Is there an option for number of whitespaces needed to create sub-lists?]
+ * `FIXED_INDENT` list parser did not convert list item looking text with >= 4 spaces to lazy
+ continuation.
+
+## 0.50.46
+
+* Fix:
+ [#381, StackOverflowError with long base64 image and LINKS\_ALLOW\_MATCHED\_PARENTHESES disabled],
+ `USE_HARDCODED_LINK_ADDRESS_PARSER` was not used if matched parentheses were disabled causing
+ stack overflow in regex evaluation.
+* Fix: docx conversion renders mail link text with `mailto:` prefix
+
+## 0.50.44
+
+* Fix: [#376, convert markdown to html], delimiters are not allowed to span table cells.
+
+## 0.50.42
+
+* Fix: regression bug
+ [#372, \[Regression?\] Attributes extension not applied to \`code\` tag of code blocks]
+ * Add: `AttributesExtension.FENCED_CODE_ADD_ATTRIBUTES`, default
+ `FencedCodeAddType.ADD_TO_PRE_CODE` for backward compatibility with 0.42, but if this is
+ option is not set and `AttributesExtension.FENCED_CODE_INFO_ATTRIBUTES` is set to `true`,
+ default will change to `FencedCodeAddType.ADD_TO_PRE` since attributes after info are used
+ to add to the `code` tag.
+* Fix: data set copy constructors to accept `null`
+* Fix: change `DataSet.keySet()` to `DataSet.getKeys()`
+ * Deprecate: `DataSet.keySet()`
+* 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 in `charSet`. Variations include `BasedSequence.extendByAny(CharSequence)` for
+ unlimited count and `BasedSequence.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 in `charSet`. Variations include `BasedSequence.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 include
+ `BasedSequence.prefixWithIndent()` for unlimited indent.
+* Break: make `NodeAdaptedVisitor.myCustomHandlersMap` private. Use
+ `NodeAdaptedVisitor.getHandler(Node)`, `NodeAdaptedVisitor.getHandler(Class>)`, and
+ `NodeAdaptedVisitor.getNodeClasses()` to get access to contained data.
+
+## 0.50.40
+
+* Add: `BasedSequence.emptyPrefix()` and `BasedSequence.emptySuffix()` to return empty sequence
+ at start or end of the current sequence. Useful for `PrefixedSubSequence.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.
+
+## 0.50.38
+
+* Fix: real fix for Stack Overflow when parsing long URLs, by hand rolling parsing of link
+ destination.
+ * Add: `Parser.USE_HARDCODED_LINK_ADDRESS_PARSER`, default `true`, setting to `false` will use
+ regex parsing for link destination address. May cause `StackOverflowError` exception on long
+ input but does allow customizing the regex if needed.
+* Add: `BasedSequence.safeCharAt(int)` will return `\0` if 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 `\0` if out of base sequence range.
+
+## 0.50.36
+
+* Fix: `SegmentedSequence` would return sequence with start > end if ending with
+ `PrefixedSubSequence` whose position was > end of real sequences before.
+* Add: `BitIntegerSet.toArray(int[], int)` for easy `int[]` creation from bit set.
+* Add: `BitIntegerSet.addAll(int[], int, int)` for setting from `int[]`
+
+## 0.50.34
+
+* Add: source `Node` to `com.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.
+
+## 0.50.32
+
+* Add: `DocxRenderer` image max-width tests
+* Add: `DocxRenderer` image max-height attribute processing and tests
+* Fix: refactor `DocxRenderer` tests to extract common code to base class
+* Fix: heading rendering to work with styles using numbering
+
+## 0.50.30
+
+* 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 right
+ * `right` - right align, wrap text to left
+ * `center` - center align, wrap text to left and right
+ * else no wrapping around image
+ * Add: handling of `font-size` attribute, expects float of font size in pt, rounds to nearest
+ 1/2 pt
+ * Add: image size attribute handling for `in` and `cm` for inch and cm dimensions. Can be
+ given in:
+ * `%` for percent of page width
+ * `pt` points
+ * `cm` cm
+ * `in` inches
+ * 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_STYLE` for unordered lists
+ and `DocxRenderer.PARAGRAPH_NUMBERED_LIST_STYLE` for ordered lists, while still using
+ `DocxRenderer.BULLET_LIST_STYLE` and `DocxRenderer.NUMBERED_LIST_STYLE` for the numbering
+ style. Tight/loose is now uses paragraph settings from `DocxRenderer.TIGHT_PARAGRAPH_STYLE`
+ and `DocxRenderer.LOOSE_PARAGRAPH_STYLE` respectively 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.
+* Fix: `Formatter` translation and merge rendering
+
+## 0.50.28
+
+* Fix: [#362, ArrayIndexOutOfBoundsException in BasedSequence.indexOfAll]
+* Add: `DocxRenderer.BULLET_LIST_STYLE` default `"BulletList"`, numbering style to use for
+ bullet list item paragraph.
+* Add: `DocxRenderer.NUMBERED_LIST_STYLE` default `"NumberedList"`, numbering style to use for
+ numbered list item paragraph.
+* Add: Simple `Attributes` processing to docx conversion:
+ * `.className` on paragraph elements will set the docx styleId to `className` if the style id
+ is found.
+ * Use `{style=""}` to set attributes on text or block elements. Only the following are
+ processed:
+ * `color` - text color
+ * `background-color` - shade fill color, pattern always solid.
+ * `font-family` - not implemented
+ * `font-size` - not implemented
+ * `font-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-attributes` extension.
+ * Added to `Formatter` module 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-formatter` core rendering of anchors and headings.
+ * `flexmark-ext-abbreviation`, by default making references unique is disabled. Enable by
+ setting `AbbreviationExtension.MAKE_MERGED_ABBREVIATIONS_UNIQUE` to `true` for the
+ formatter options used to merge documents.
+ * `flexmark-ext-attributes`
+ * `flexmark-ext-enumerated-reference`
+ * `flexmark-ext-footnotes`
+ * `flexmark-ext-macros`
+ * Add: link mapping based on document's `Formatter.DOC_RELATIVE_URL` and
+ `Formatter.DOC_ROOT_URL` properties.
+* Fix: `Formatter` attributes would eliminate separator space before or after following text
+ possibly changing the applicable node for the attribute.
+
+## 0.50.26
+
+* Fix: docx converter to use `BulletList` and `NumberedList` numbering list styles for list
+ conversions to allow easy list item styling for multi-level lists
+ * Add: `DocxConverterEmpty` to samples for generating `flexmark-empty-template.docx` from
+ `empty.md` and `empty.xml`
+
+## 0.50.24
+
+* Fix: update docx4j to version 8.1.2
+* Fix: update jsoup to version 1.11.3
+
+## 0.50.22
+
+* Fix: Attributes with spaces after `{` generated wrong previous text offsets
+
+## 0.50.20
+
+* Fix: [#357, HTML to markdown and removed nested list]
+* Remove: `FlexmarkHtmlConverter.EXT_TABLES` unused conversion option.
+* Add: allow attributes after fenced code info string as last non-blank text after the info
+ string.
+ * Add: `AttributesExtension.FENCED_CODE_INFO_ATTRIBUTES` default `true`, if false will not
+ parse attributes after the fenced code info string
+
+## 0.50.18
+
+* Add: `flexmark-html2md-converter` module which implements HTML to Markdown conversion with an
+ extension API to allow customizing the conversion process. Sample:
+ [HtmlToMarkdownCustomizedSample.java]
+ * Fix: [#313, Ability to override tags processing in FlexmarkHtmlParser]
+* Fix: deprecate the old `flexmark-html-parser` classes
+
+## 0.50.16
+
+* 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_LINKS` default 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 `migration` subdirectory
+ * 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`
+ * Remove classes from utils which are implemented in Java 8
+ * replace `RunnableValue` with `Supplier`, requires changing `run()` with `get()`
+ * replace `ValueRunnable` with `Consumer`, requires changing `run()` with `accept()`
+ * replace `Factory` with `Supplier`, requires changing `create()` with `get()`
+ * replace `Computable` with `Function`, requires changing `compute()` with `apply()` and
+ reversing template parameters.
+ * replace `ComputableFactory` with `Function`, requires changing `create()` with `apply()` and
+ reversing template parameters.
+ * replace `ComputeFactory` with `Function`, requires changing `create()` with `apply()` and
+ reversing template parameters.
+ * replace all factory interfaces to be compatible with `Function` interface and change
+ `create()` with `apply()`
+ * replace `com.vladsch.flexmark.util.collection.Consumer` with `java.util.function.Consumer`
+ * clean up `DataKey` and `DataHolder` related classes
+ * move `com.vladsch.flexmark.util.collection.DataValueFactory` to
+ `com.vladsch.flexmark.util.DataValueFactory`
+ * replace `com.vladsch.flexmark.util.collection.DynamicDefaultKey` with
+ `com.vladsch.flexmark.util.options.DataKey`
+ * change `MutableDataHolder.getOrCompute(DataKey, DataValueFactory)` to
+ `MutableDataHolder.getOrCompute(DataKey)` with the data value factory taken from they
+ key.
+ * remove unused `ItemIndexSetMap`, use `IndexedItemSetMap` instead
+ * move `flexmark-util` Node related classes and interfaces to `com.vladsch.flexmark.util.ast`
+ * move `com.vladsch.flexmark.util.NodeTracker` to
+ `com.vladsch.flexmark.util.ast.NodeTracker`
+ * move `com.vladsch.flexmark.util.BlockTracker` to
+ `com.vladsch.flexmark.util.ast.BlockTracker`
+ * move `com.vladsch.flexmark.util.KeepType` to `com.vladsch.flexmark.util.ast.KeepType`
+ * move `com.vladsch.flexmark.util.IParse` to `com.vladsch.flexmark.util.ast.IParse`
+ * move `com.vladsch.flexmark.util.IRender` to `com.vladsch.flexmark.util.ast.IRender`
+ * move `com.vladsch.flexmark.util.collection.NodeClassifierVisitor` to
+ `com.vladsch.flexmark.util.ast.NodeClassifierVisitor`
+ * move `com.vladsch.flexmark.util.collection.NodeCollectingVisitor` to
+ `com.vladsch.flexmark.util.ast.NodeCollectingVisitor`
+ * move `com.vladsch.flexmark.util.collection.ClassifyingNodeTracker` to
+ `com.vladsch.flexmark.util.ast.ClassifyingNodeTracker`
+ * move `com.vladsch.flexmark.util.mappers.NodeClassifier` to
+ `com.vladsch.flexmark.util.ast.NodeClassifier`
+ * move data key/set/holder classes to `flexmark.util.data` package from
+ `flexmark.util.options` package
+ * move `com.vladsch.flexmark.util.options.DataHolder` to
+ `com.vladsch.flexmark.util.data.DataHolder`
+ * move `com.vladsch.flexmark.util.options.MutableDataSet` to
+ `com.vladsch.flexmark.util.data.MutableDataSet`
+ * move `com.vladsch.flexmark.util.options.MutableScopedDataSet` to
+ `com.vladsch.flexmark.util.data.MutableScopedDataSet`
+ * move `com.vladsch.flexmark.util.options.ScopedDataSet` to
+ `com.vladsch.flexmark.util.data.ScopedDataSet`
+ * move `com.vladsch.flexmark.util.options.DataValueFactory` to
+ `com.vladsch.flexmark.util.data.DataValueFactory`
+ * move `com.vladsch.flexmark.util.options.MutableDataHolder` to
+ `com.vladsch.flexmark.util.data.MutableDataHolder`
+ * move `com.vladsch.flexmark.util.options.DataSet` to
+ `com.vladsch.flexmark.util.data.DataSet`
+ * move `com.vladsch.flexmark.util.options.MutableDataSetter` to
+ `com.vladsch.flexmark.util.data.MutableDataSetter`
+ * move `com.vladsch.flexmark.util.options.DataKey` to
+ `com.vladsch.flexmark.util.data.DataKey`
+* Add: `LineFormattingAppendable` and `LineFormattingAppendableImpl`
+ * Fix: deprecate `FormattingAppendable` to be replaced by `LineFormattingAppendable`
+ * Fix: deprecate `FormattingAppendableImpl` to be replaced by `LineFormattingAppendableImpl`
+ * Fix: replace all uses of `FormattingAppendable` by `LineFormattingAppendable`
+ * Fix: replace all uses of `FormattingAppendableImpl` by `LineFormattingAppendableImpl`
+ * Delete: `FormattingAppendable` and `FormattingAppendableImpl`
+* Fix: Factor out BasedSequenceImpl functionality that does not depend on `BasedSequence` and
+ can be applied to any CharSequence into its own `RichCharSequence` interface with default
+ abstract implementation in `RichCharSequenceBase` and implementation in
+ `RichCharSequenceImpl`.
+
+## 0.42.14
+
+* Fix: [#351, Is there any special format requirement for processing html data to markdown]
+* Fix: HTML parser converts `a` tags in preformatted text to links, should convert to URL only
+
+## 0.42.12
+
+* Fix: [#349, Translation Helper bugs], mix-up between anchors and other non-translating
+ elements after translation.
+
+## 0.42.10
+
+* Fix: [#349, Translation Helper bugs]
+* Fix: [#348, WRAP_AUTO_LINKS defaults to false, Markdown loses a potential useful link]
+
+## 0.42.8
+
+* 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.US` to `String.format()` when using `%d` for integers to prevent
+ conversion to arabic on Java 11.
+
+## 0.42.6
+
+* Fix: [#338, getLineNumber incorrect with Windows end of line separators]
+ * merge: [#339, PR: Fix to line number when using Windows EOL characters.] thanks to
+
+## 0.42.4
+
+* Fix: Trailing URI prefix only auto-links do not get parsed
+
+## 0.42.2
+
+* Fix: [#334, CR line separators don't produce line break nodes],
+ * merge: [#335, PR: Fix CR-only line separator handling] thanks to **[Kijimuna]**
+
+## 0.42.0
+
+* Fix: [#332, withOptions forgets about old link resolvers]
+ * Break: move `com.vladsch.flexmark.Extension` to
+ `com.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 `migration` subdirectory
+ * 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`
+ * Add: common builder base to handle unloading extensions
+ * Add: `BuilderBase.RELOAD_EXTENSIONS` default `true`, if `true` then will unload loaded
+ extension from the builder when `withOptions()` is used on: `Parser`, `HtmlRenderer`,
+ `Formatter` or `DocxRenderer`. If `false` then 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.Builder` constructor with options does not preserve all already loaded
+ extensions and custom api factories
+ * Fix: `Parser.Builder` constructor with options does not preserve all already loaded
+ extensions and custom api factories
+ * Fix: `Formatter.Builder` constructor with options does not preserve all already loaded
+ extensions and custom api factories
+ * Fix: `DocxRenderer.Builder` constructor with options does not preserve all already loaded
+ extensions and custom api factories
+ * Add: `BuilderBase.UNLOAD_EXTENSIONS`, default `Extension.EMPTY_LIST`, all extensions in the
+ list will be removed. Used only when using `withOptions()` and providing new options with
+ this key set. Used during testing to remove default extensions.
+
+## 0.40.34
+
+* Fix: [#328, Html2mark - missing newline when paragraph followed by div]
+* Fix: [#331, Ability to replace empty \
with \ during html2mark conversion]
+* Fix: NPE in `TableParagraphPreProcessor`
+* Fix: `AutolinkNodePostProcessor` processing links out of order causing sequence end/start
+ reversal.
+
+## 0.40.32
+
+* Fix: compound enumerated references in attributes ids and outside of headings to output with
+ last enumerated reference ordinal.
+
+## 0.40.30
+
+* Fix: limit `EnumeratedReferenceBlock` to single line of text without processing other block
+ elements.
+* Fix: change `Abbreviations` to custom block parser from paragraph pre-processor. Allows
+ abbreviation definitions without preceding blank line.
+
+## 0.40.28
+
+* 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.
+
+## 0.40.26
+
+* Fix: upgrade dependencies
+ * OpenHtmlToPdf -> 0.0.1-RC19
+ * docx4j -> 6.1.2
+* Add: parse int or default to `Utils.java`
+
+## 0.40.24
+
+* 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 \ inside \
bug]
+
+* Fix: `EscapedCharacterExtension` disabled for `DoNotLinkDecorate` nodes if another extension
+ specified its `NodePostProcessorFactory` as dependent on `Text` with `DoNotDecorate` and
+ `DoNotLinkDecorate` and the extension was added after `EscapedCharacterExtension`
+
+* Add: `Parser.WWW_AUTO_LINK_ELEMENT`, default `false`. If `true` then strings of the form
+ `` will be parsed as auto-links
+
+* Fix: copy `Extensions` from `flexmark-profile-pegdown` module to `PegdownExtensions` in core
+ parser. Old class still available and extends the new named class.
+
+* Add: `ParserEmulationProfile.getOptions(DataHolder)` to `ParserEmulationProfile` to allow
+ using current option values in deciding what the settings should be for the profile. Used by
+ `ParserEmulationProfile.PEGDOWN`
+
+* Fix: [#323, TOC generation improvement], profile setting HeaderId generation to `false` even
+ though `PegdownExtensions.ANCHORLINKS` is not used
+
+* Add: css option to PDF export and use as default css from [#323, TOC generation improvement],
+ thanks to @jvdvegt
+ * Add: `PdfConverterExtension.DEFAULT_CSS` data key with default value of embedded CSS.
+ * Add: `PdfConverterExtension.embedCss(String html, String css)` will embed the css in html by
+ inserting it between `` and `` wrapped in ``. Does its
+ best to generate valid HTML, use it if your don't want to bother creating your own HTML
+ document with embedded CSS.
+
+ :information_source: 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.
+
+* 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 `NONE` for `FlexmarkHtmlParser.EXT_INLINE_LINK` and
+ `FlexmarkHtmlParser.EXT_INLINE_IMAGE` options
+
+* 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 repository
+ `KeepType` selected copying behaviour for references already defined in the destination
+ document.
+
+* Deprecate: `IParse.transferReferences(Document, Document)`, in favour of
+ `IParse.transferReferences(Document, Document, Boolean)`
+
+## 0.40.22
+
+* Fix: merge util tests from [@James-Adam](https://github.com/James-Adam) and fix bugs
+* Fix: change to `MutableDataSet.set(DataKey extends T>, T)`
+
+## 0.40.20
+
+* Fix: [#316, Github user extension incorrectly formats some text]
+ * Add: test to make sure previous character to `@` is not `isUnicodeIdentifierPart()`, `-` nor
+ `.`
+* Add: `FlexmarkHtmlParser` options:
+ * Fix: [#318, Ability to disable table caption in FlexmarkHtmlParser],
+ * Add: `TABLE_CAPTION` option as a convenience alias for `Formatter.FORMAT_TABLE_CAPTION`.
+ Add documentation to [Extensions: Html To
+ Markdown](../../wiki/Extensions#html-to-markdown)
+ * Fix: [#314, Ability to override character replacements map in FlexmarkHtmlParser],
+ * Add: `TYPOGRAPHIC_REPLACEMENT_MAP` option key taking a `Map`, 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.
+ * Fix:
+ [#317, FlexmarkHtmlParser outputs extra newline when converting nested \, \
lists]
+ * Fix: when rendering raw HTML for inline elements, have to escape contained special markdown
+ characters.
+ * Add: `FOR_DOCUMENT` option 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_LINK` and `EXT_INLINE_IMAGE` option default `LinkConversion.MARKDOWN_EXPLICIT`,
+ specifies type of link and image conversion to apply: `NONE`, `MARKDOWN_EXPLICIT`,
+ `MARKDOWN_REFERENCE`, `TEXT`, `HTML`
+* Add: Remove reliance on [YouTrack: IDEA-207453] and instead change resource file URL to path
+ in `SpecReader` and add a message to all example tests with the file URL with `:xxx` where
+ `xxx` is 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.
+
+## 0.40.18
+
+* Add: `EmbeddedAttributeProvider` documentation and add it to the provider's list by default
+ unless `HtmlRenderer.EMBEDDED_NODE_PROVIDER` is set to false. Add attributes to nodes in the
+ AST by inserting a `EmbeddedAttributeProvider.EmbeddedNodeAttributes` node with the desired
+ attributes. See: [NodeInsertingPostProcessorSample.java] for example.
+
+* Add: document that `DocxRenderer` emoji with GitHub preferred is not able to download images,
+ compiling `ImageUtils` library with Java 8 eliminates the problem.
+
+* Add: resource file URL to `SpecReader` and add a message to all example tests with the file
+ URL with `:xxx` where `xxx` is 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: `AsideExtension` option keys to be dynamic data keys dependent on corresponding Parser
+ block quote options for their defaults.
+
+* :warning: This can potentially break code relying on versions of the extension before
+ `0.40.18` because 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 mnemonic
+ `Parser.BLOCK_QUOTE_EXTEND_TO_BLANK_LINE`
+
+* Deprecate: `CustomNode` and `CustomBlock`. `Block` and `Node` should 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: `DefinitionExtension` does not correctly set the child parse column, causing list items
+ to be expecting 1 extra space for child item recognition.
+
+* Add: `ExtensionConversion.NONE` to suppress any output from corresponding element
+
+* Add: `FlexmarkHtmlParser.EXT_MATH`, default `ExtensionConversion.HTML`, for selecting `
element]
+
+## 0.40.6
+
+* Fix: `MarkdownTable.appendTable(FormattingAppendable)` to set
+ `FormattingAppendable.ALLOW_LEADING_WHITESPACE` so indentation prefix is not eliminated.
+* Fix: `FormattingAppendableImpl` to not skip pending spaces if
+ `FormattingAppendable.ALLOW_LEADING_WHITESPACE` is selected, these will be prefixed before
+ indent.
+* Add: `FlexmarkHtmlParser.SKIP_LINKS`, default `false`. When true links are converted to text
+ part of the link.
+* Add: `DoNotAttributeDecorate` interface to be implemented by all text nodes which do not
+ result in span-like rendering of their text, such as `TypographicSmarts`, `TypographicQuotes`
+ and `SoftLineBreak` but will erroneously create a break in the text and mess up attribute
+ assignment to text spans.
+* Add: `AttributesExtension.WRAP_NON_ATTRIBUTE_TEXT`, default `true`. When `false` does not wrap
+ nodes marked as `DoNotAttributeDecorate` in `TextBase`. When `true`, will allow intuitive
+ attribute processing for text containing `DoNotAttributeDecorate` as single text span instead
+ of one interrupted by the typographic smarts nodes.
+* Fix: `AttributesExtension` incorrectly parsed invalid empty sequences and absorbed the text
+ instead of skipping it. ie. `{}`, `{ }`, `{#}` and `{.}`
+* Add: `AttributesExtension.USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER`, default `false`. When set to
+ `true` will 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.
+
+## 0.40.4
+
+* Fix: [#295, CoreNodeFormatter does not descend into children on Link nodes]
+ * `Link`, `LinkRef`, `Image` and `ImageRef` node formatter renderer now descends into child
+ nodes during all formatting, not just translation formatting.
+* Add: `Formatter.OPTIMIZED_INLINE_RENDERING` default `false`. When set to `true` will use
+ previous rendering for links and images which appends the node characters without descending
+ into child nodes.
+
+## 0.40.2
+
+* Fix: [#294, BlankLine nodes within BlockQuote change in behaviour]
+ * remove blank lines from AST for `BlockQuote` and `AsideBlock` nodes if
+ `Parser.BLANK_LINES_IN_AST` is not set.
+* Fix: [#292, 0.40.0: JUnit is in the compile scope]
+ * remove unnecessary ast collecting visitor in `DocumentParser`
+ * add test scope to flexmark pom
+* Fix: [#293, YamlFrontMatterBlock rendered as markdown does not preserve nested lists]
+ * Add: `YamlFrontMatterValue` node containing yaml value(s) inserted as children of
+ `YamlFrontMatterNode`
+ * Fix: change stored key as `BasedSequence` instead of string, can be retrieved as
+ `YamlFrontMatterNode.getKeySequence()`
+ * Add: code to return `List` from child nodes of `YamlFrontMatterNode`
+ * Fix: resolve offsets in `YamlFrontMatterNode` and `YamlFrontMatterValue` nodes.
+
+## 0.40.0
+
+* Fix: Java9+ Compatibility, IntelliJ Migration contained in [migrate 0_35_x to 0_40_0.xml], to
+ use:
+ * copy to IntelliJ application settings to `migrations` subdirectory
+ * 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`
+* :warning: 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 projects `Document`, `Node` and
+ `Formatter` were the problem classes:
+ * `com.vladsch.flexmark.ast.Document` to `com.vladsch.flexmark.util.ast.Document`
+ * `com.vladsch.flexmark.ast.Node` to `com.vladsch.flexmark.util.ast.Node`
+ * `com.vladsch.flexmark.formatter.internal.Formatter` to
+ `com.vladsch.flexmark.formatter.Formatter`
+* :warning: `flexmark-docx-converter` and `flexmark-pdf-converter` cannot 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.AllNodesVisitor` to `com.vladsch.flexmark.util.ast.AllNodesVisitor`
+* `com.vladsch.flexmark.ast.BlankLine` to `com.vladsch.flexmark.util.ast.BlankLine`
+* `com.vladsch.flexmark.ast.BlankLineContainer` to `com.vladsch.flexmark.util.ast.BlankLineContainer`
+* `com.vladsch.flexmark.ast.Block` to `com.vladsch.flexmark.util.ast.Block`
+* `com.vladsch.flexmark.ast.BlockContent` to `com.vladsch.flexmark.util.ast.BlockContent`
+* `com.vladsch.flexmark.ast.BlockNodeVisitor` to `com.vladsch.flexmark.util.ast.BlockNodeVisitor`
+* `com.vladsch.flexmark.ast.Content` to `com.vladsch.flexmark.util.ast.Content`
+* `com.vladsch.flexmark.ast.ContentNode` to `com.vladsch.flexmark.util.ast.ContentNode`
+* `com.vladsch.flexmark.ast.CustomBlock` to `com.vladsch.flexmark.util.ast.CustomBlock`
+* `com.vladsch.flexmark.ast.CustomNode` to `com.vladsch.flexmark.util.ast.CustomNode`
+* `com.vladsch.flexmark.ast.DescendantNodeIterable` to `com.vladsch.flexmark.util.ast.DescendantNodeIterable`
+* `com.vladsch.flexmark.ast.DescendantNodeIterator` to `com.vladsch.flexmark.util.ast.DescendantNodeIterator`
+* `com.vladsch.flexmark.ast.Node` to `com.vladsch.flexmark.util.ast.Node`
+* `com.vladsch.flexmark.ast.Document` to `com.vladsch.flexmark.util.ast.Document`
+* `com.vladsch.flexmark.ast.DoNotCollectText` to `com.vladsch.flexmark.util.ast.DoNotCollectText`
+* `com.vladsch.flexmark.ast.DoNotDecorate` to `com.vladsch.flexmark.util.ast.DoNotDecorate`
+* `com.vladsch.flexmark.ast.DoNotLinkDecorate` to `com.vladsch.flexmark.util.ast.DoNotLinkDecorate`
+* `com.vladsch.flexmark.ast.KeepTrailingBlankLineContainer` to `com.vladsch.flexmark.util.ast.KeepTrailingBlankLineContainer`
+* `com.vladsch.flexmark.ast.NodeAdaptedVisitor` to `com.vladsch.flexmark.util.ast.NodeAdaptedVisitor`
+* `com.vladsch.flexmark.ast.NodeAdaptingVisitHandler` to `com.vladsch.flexmark.util.ast.NodeAdaptingVisitHandler`
+* `com.vladsch.flexmark.ast.NodeAdaptingVisitor` to `com.vladsch.flexmark.util.ast.NodeAdaptingVisitor`
+* `com.vladsch.flexmark.ast.NodeIterable` to `com.vladsch.flexmark.util.ast.NodeIterable`
+* `com.vladsch.flexmark.ast.NodeIterator` to `com.vladsch.flexmark.util.ast.NodeIterator`
+* `com.vladsch.flexmark.ast.NodeRepository` to `com.vladsch.flexmark.util.ast.NodeRepository`
+* `com.vladsch.flexmark.ast.NodeVisitor` to `com.vladsch.flexmark.util.ast.NodeVisitor`
+* `com.vladsch.flexmark.ast.NodeVisitorBase` to `com.vladsch.flexmark.util.ast.NodeVisitorBase`
+* `com.vladsch.flexmark.ast.NonRenderingInline` to `com.vladsch.flexmark.util.ast.NonRenderingInline`
+* `com.vladsch.flexmark.ast.Package` to `com.vladsch.flexmark.util.ast.Package`
+* `com.vladsch.flexmark.ast.ReferenceNode` to `com.vladsch.flexmark.util.ast.ReferenceNode`
+* `com.vladsch.flexmark.ast.ReferencingNode` to `com.vladsch.flexmark.util.ast.ReferencingNode`
+* `com.vladsch.flexmark.ast.VisitHandler` to `com.vladsch.flexmark.util.ast.VisitHandler`
+* `com.vladsch.flexmark.ast.Visitor` to `com.vladsch.flexmark.util.ast.Visitor`
+* `com.vladsch.flexmark.IParse` to `com.vladsch.flexmark.util.IParse`
+* `com.vladsch.flexmark.IRender` to `com.vladsch.flexmark.util.IRender`
+
+* Fix: API classes under `internal` package:
+* `flexmark`:
+* `com.vladsch.flexmark.internal.inline.AsteriskDelimiterProcessor` to `com.vladsch.flexmark.parser.core.delimiter.AsteriskDelimiterProcessor`
+* `com.vladsch.flexmark.internal.inline.EmphasisDelimiterProcessor` to `com.vladsch.flexmark.parser.core.delimiter.EmphasisDelimiterProcessor`
+* `com.vladsch.flexmark.internal.Bracket` to `com.vladsch.flexmark.parser.core.delimiter.Bracket`
+* `com.vladsch.flexmark.internal.Delimiter` to `com.vladsch.flexmark.parser.core.delimiter.Delimiter`
+* `com.vladsch.flexmark.internal.ThematicBreakOptions` to `com.vladsch.flexmark.internal.ThematicBreakParser.ThematicBreakOptions`
+* `com.vladsch.flexmark.internal.HeadingOptions` to `com.vladsch.flexmark.internal.HeadingParser.HeadingOptions`
+* `com.vladsch.flexmark.internal.BlockParserTracker` to `com.vladsch.flexmark.parser.block.BlockParserTracker`
+* `com.vladsch.flexmark.internal.BlockQuoteParser` to `com.vladsch.flexmark.parser.core.BlockQuoteParser`
+* `com.vladsch.flexmark.internal.DocumentBlockParser` to `com.vladsch.flexmark.parser.core.DocumentBlockParser`
+* `com.vladsch.flexmark.internal.FencedCodeBlockParser` to `com.vladsch.flexmark.parser.core.FencedCodeBlockParser`
+* `com.vladsch.flexmark.internal.HeadingParser` to `com.vladsch.flexmark.parser.core.HeadingParser`
+* `com.vladsch.flexmark.internal.IndentedCodeBlockParser` to `com.vladsch.flexmark.parser.core.IndentedCodeBlockParser`
+* `com.vladsch.flexmark.internal.ListBlockParser` to `com.vladsch.flexmark.parser.core.ListBlockParser`
+* `com.vladsch.flexmark.internal.ListItemParser` to `com.vladsch.flexmark.parser.core.ListItemParser`
+* `com.vladsch.flexmark.internal.ParagraphParser` to `com.vladsch.flexmark.parser.core.ParagraphParser`
+* `com.vladsch.flexmark.internal.ThematicBreakParser` to `com.vladsch.flexmark.parser.core.ThematicBreakParser`
+* `com.vladsch.flexmark.internal.HtmlBlockParser` to `com.vladsch.flexmark.parser.core.HtmlBlockParser`
+* `com.vladsch.flexmark.internal.ReferencePreProcessorFactory` to `com.vladsch.flexmark.parser.core.ReferencePreProcessorFactory`
+* `com.vladsch.flexmark.internal.InlineParserImpl` to `com.vladsch.flexmark.parser.internal.InlineParserImpl`
+* `com.vladsch.flexmark.internal.BlockStartImpl` to `com.vladsch.flexmark.parser.internal.BlockStartImpl`
+* `com.vladsch.flexmark.internal.BlockContinueImpl` to `com.vladsch.flexmark.parser.internal.BlockContinueImpl`
+* `com.vladsch.flexmark.internal.LinkRefProcessorData` to `com.vladsch.flexmark.parser.internal.LinkRefProcessorData`
+* `com.vladsch.flexmark.internal.CommonmarkInlineParser` to `com.vladsch.flexmark.parser.internal.CommonmarkInlineParser`
+* `com.vladsch.flexmark.internal.MatchedBlockParserImpl` to `com.vladsch.flexmark.parser.internal.MatchedBlockParserImpl`
+* `com.vladsch.flexmark.internal.PostProcessorManager` to `com.vladsch.flexmark.parser.internal.PostProcessorManager`
+* `com.vladsch.flexmark.internal.DocumentParser` to `com.vladsch.flexmark.parser.internal.DocumentParser`
+* `com.vladsch.flexmark.internal.HtmlDeepParser` to `com.vladsch.flexmark.parser.internal.HtmlDeepParser`
+
+* resource `/com/vladsch/flexmark/internal/util/entities.properties` to `/com/vladsch/flexmark/util/html/entities.properties` in `flexmark-util` module
+
+* `flexmark-docx-converter`
+* `com.vladsch.flexmark.docx.converter.internal.DocxRenderer` to `com.vladsch.flexmark.docx.converter.DocxRenderer`
+* `com.vladsch.flexmark.docx.converter.internal.DocxRendererPhase` to `com.vladsch.flexmark.docx.converter.DocxRendererPhase`
+* `com.vladsch.flexmark.docx.converter.internal.NodeDocxRendererHandler` to `com.vladsch.flexmark.docx.converter.NodeDocxRendererHandler`
+* `com.vladsch.flexmark.docx.converter.internal.DocxRendererOptions` to `com.vladsch.flexmark.docx.converter.DocxRendererOptions`
+
+* `flexmark-formatter`
+* `com.vladsch.flexmark.formatter.internal.Formatter` to `com.vladsch.flexmark.formatter.Formatter`
+* `com.vladsch.flexmark.formatter.internal.FormattingPhase` to `com.vladsch.flexmark.formatter.FormattingPhase`
+* `com.vladsch.flexmark.formatter.internal.MarkdownWriter` to `com.vladsch.flexmark.formatter.MarkdownWriter`
+* `com.vladsch.flexmark.formatter.internal.NodeFormatter` to `com.vladsch.flexmark.formatter.NodeFormatter`
+* `com.vladsch.flexmark.formatter.internal.NodeFormatterContext` to `com.vladsch.flexmark.formatter.NodeFormatterContext`
+* `com.vladsch.flexmark.formatter.internal.NodeFormatterFactory` to `com.vladsch.flexmark.formatter.NodeFormatterFactory`
+* `com.vladsch.flexmark.formatter.internal.NodeFormattingHandler` to `com.vladsch.flexmark.formatter.NodeFormattingHandler`
+* `com.vladsch.flexmark.formatter.internal.NodeRepositoryFormatter` to `com.vladsch.flexmark.formatter.NodeRepositoryFormatter`
+* `com.vladsch.flexmark.formatter.internal.PhasedNodeFormatter` to `com.vladsch.flexmark.formatter.PhasedNodeFormatter`
+* `com.vladsch.flexmark.formatter.internal.NodeFormatterSubContext` to `com.vladsch.flexmark.formatter.NodeFormatterSubContext`
+
+
+
+
+[#292, 0.40.0: JUnit is in the compile scope]: https://github.com/vsch/flexmark-java/issues/292
+[#293, YamlFrontMatterBlock rendered as markdown does not preserve nested lists]: https://github.com/vsch/flexmark-java/issues/293
+[#294, BlankLine nodes within BlockQuote change in behaviour]: https://github.com/vsch/flexmark-java/issues/294
+[#295, CoreNodeFormatter does not descend into children on Link nodes]: https://github.com/vsch/flexmark-java/issues/295
+[#299, FlexmarkHtmlParser produces extra empty list item for eclosing \ element]: https://github.com/vsch/flexmark-java/issues/299
+[#300, Typography extension breaks some auto links]: https://github.com/vsch/flexmark-java/issues/300
+[#305, PR: add new youtube link style support to flexmark-ext-youtube-embedded for youtu.be/xyz(?t=123)]: https://github.com/vsch/flexmark-java/pull/305
+[#306, PR: Add password protection support]: https://github.com/vsch/flexmark-java/pull/306
+[#310, PR: Change URL of GitHub CDN]: https://github.com/vsch/flexmark-java/pull/310
+[#313, Ability to override tags processing in FlexmarkHtmlParser]: https://github.com/vsch/flexmark-java/issues/313
+[#314, Ability to override character replacements map in FlexmarkHtmlParser]: https://github.com/vsch/flexmark-java/issues/314
+[#316, Github user extension incorrectly formats some text]: https://github.com/vsch/flexmark-java/issues/316
+[#317, FlexmarkHtmlParser outputs extra newline when converting nested \, \
bug]: https://github.com/vsch/flexmark-java/issues/326
+[#328, Html2mark - missing newline when paragraph followed by div]: https://github.com/vsch/flexmark-java/issues/328
+[#331, Ability to replace empty \
with \ during html2mark conversion]: https://github.com/vsch/flexmark-java/issues/331
+[#332, withOptions forgets about old link resolvers]: https://github.com/vsch/flexmark-java/issues/332
+[#334, CR line separators don't produce line break nodes]: https://github.com/vsch/flexmark-java/issues/334
+[#335, PR: Fix CR-only line separator handling]: https://github.com/vsch/flexmark-java/pull/335
+[#338, getLineNumber incorrect with Windows end of line separators]: https://github.com/vsch/flexmark-java/issues/338
+[#339, PR: Fix to line number when using Windows EOL characters.]: https://github.com/vsch/flexmark-java/pull/339
+[#348, WRAP_AUTO_LINKS defaults to false, Markdown loses a potential useful link]: https://github.com/vsch/flexmark-java/issues/348
+[#349, Translation Helper bugs]: https://github.com/vsch/flexmark-java/issues/349
+[#351, Is there any special format requirement for processing html data to markdown]: https://github.com/vsch/flexmark-java/issues/351
+[#357, HTML to markdown and removed nested list]: https://github.com/vsch/flexmark-java/issues/357
+[#362, ArrayIndexOutOfBoundsException in BasedSequence.indexOfAll]: https://github.com/vsch/flexmark-java/issues/362
+[#372, \[Regression?\] Attributes extension not applied to \`code\` tag of code blocks]: https://github.com/vsch/flexmark-java/issues/372
+[#376, convert markdown to html]: https://github.com/vsch/flexmark-java/issues/376
+[#381, StackOverflowError with long base64 image and LINKS\_ALLOW\_MATCHED\_PARENTHESES disabled]: https://github.com/vsch/flexmark-java/issues/381
+[#382, Is there an option for number of whitespaces needed to create sub-lists?]: https://github.com/vsch/flexmark-java/issues/382
+[#384, Markdown parser produces invalid HTML]: https://github.com/vsch/flexmark-java/issues/384
+[#387, JUnit is in the compile scope]: https://github.com/vsch/flexmark-java/pull/387
+[#391, PR: Fix: CRLF line separator in fenced code blocks produce redundant CR.]: https://github.com/vsch/flexmark-java/pull/391
+[#396, DocumentParser stops reading too early resulting in the document being cut off]: https://github.com/vsch/flexmark-java/issues/396
+[#397, PR: Add base64 image support with docx rendering]: https://github.com/vsch/flexmark-java/pull/397
+[#398, Autolinks get cut off if they contain \`&\` (escaped query params)]: https://github.com/vsch/flexmark-java/issues/398
+[#407, Link text inline content fails to parse image references]: https://github.com/vsch/flexmark-java/issues/407
+[@Xaelis]: https://github.com/Xaelis
+[Awesome Console]: https://plugins.jetbrains.com/plugin/7677-awesome-console "Awesome Console"
+[HtmlToMarkdownCustomizedSample.java]: https://github.com/vsch/flexmark-java/blob/master/flexmark-java-samples/src/com/vladsch/flexmark/java/samples/HtmlToMarkdownCustomizedSample.java
+[Kijimuna]: https://github.com/Kijimuna
+[NodeInsertingPostProcessorSample.java]: https://github.com/vsch/flexmark-java/blob/master/flexmark-java-samples/src/com/vladsch/flexmark/java/samples/NodeInsertingPostProcessorSample.java
+[PdfLandscapeConverter.java]: https://github.com/vsch/flexmark-java/blob/master/flexmark-java-samples/src/com/vladsch/flexmark/java/samples/PdfLandscapeConverter.java
+[YouTrack: IDEA-207453]: https://youtrack.jetbrains.com/issue/IDEA-207453 "Add Conversion of ref anchor to UrlFilter for file line navigation"
+[migrate 0_35_x to 0_40_0.xml]: https://github.com/vsch/flexmark-java/blob/master/assets/migrations/migrate%20flexmark-java%200_35_x%20to%200_40_0.xml
+
+[migrate flexmark-java 0_40_x to 0_42_0]: https://github.com/vsch/flexmark-java/blob/master/assets/migrations/migrate%20flexmark-java%200_40_x%20to%200_42_0.xml
+
+[migrate flexmark-java 0_42_x to 0_50_0.xml]: https://github.com/vsch/flexmark-java/blob/master/assets/migrations/migrate%20flexmark-java%200_42_x%20to%200_50_0.xml
+[#402, When using PegdownOptionsAdapter indented code blocks does not work for lists]: https://github.com/vsch/flexmark-java/issues/402
+
+
diff --git a/VERSION.md b/VERSION.md
index fbfa15e11..5719fdf45 100644
--- a/VERSION.md
+++ b/VERSION.md
@@ -1,3575 +1,2205 @@
-flexmark-java
-=============
-
- **Version History**
-
-[TOC]: # " "
-
-- [To Do](#to-do)
- - [Docx Converter](#docx-converter)
-- [0.34.48](#03448)
-- [0.34.46](#03446)
-- [0.34.44](#03444)
-- [0.34.42](#03442)
-- [0.34.40](#03440)
-- [0.34.38](#03438)
-- [0.34.36](#03436)
-- [0.34.34](#03434)
-- [0.34.32](#03432)
-- [0.34.30](#03430)
-- [0.34.28](#03428)
-- [0.34.26](#03426)
-- [0.34.24](#03424)
-- [0.34.22](#03422)
-- [0.34.20](#03420)
-- [0.34.18](#03418)
-- [0.34.16](#03416)
-- [0.34.14](#03414)
-- [0.34.12](#03412)
-- [0.34.10](#03410)
-- [0.34.8](#0348)
-- [0.34.6](#0346)
-- [0.34.4](#0344)
-- [0.34.2](#0342)
-- [0.34.0](#0340)
-- [0.32.24](#03224)
-- [0.32.22](#03222)
-- [0.32.20](#03220)
-- [0.32.18](#03218)
-- [0.32.16](#03216)
-- [0.32.14](#03214)
-- [0.32.12](#03212)
-- [0.32.10](#03210)
-- [0.32.8](#0328)
-- [0.32.6](#0326)
-- [0.32.4](#0324)
-- [0.32.2](#0322)
-- [0.32.0](#0320)
-- [0.30.0](#0300)
-- [0.28.38](#02838)
-- [0.28.36](#02836)
-- [0.28.34](#02834)
-- [0.28.32](#02832)
-- [0.28.30](#02830)
-- [0.28.28](#02828)
-- [0.28.26](#02826)
-- [0.28.24](#02824)
-- [0.28.22](#02822)
-- [0.28.20](#02820)
-- [0.28.18](#02818)
-- [0.28.16](#02816)
-- [0.28.14](#02814)
-- [0.28.12](#02812)
-- [0.28.10](#02810)
-- [0.28.8](#0288)
-- [0.28.6](#0286)
-- [0.28.4](#0284)
-- [0.28.2](#0282)
-- [0.28.0](#0280)
-- [0.27.4](#0274)
-- [0.27.2](#0272)
-- [0.27.0](#0270)
-- [0.26.6](#0266)
-- [0.26.4](#0264)
-- [0.26.2](#0262)
-- [0.26.0](#0260)
-- [0.24.0](#0240)
-- [0.22.24](#02224)
-- [0.22.22](#02222)
-- [0.22.20](#02220)
-- [0.22.18](#02218)
-- [0.22.16](#02216)
-- [0.22.14](#02214)
-- [0.22.12](#02212)
-- [0.22.10](#02210)
-- [0.22.8](#0228)
-- [0.22.6](#0226)
-- [0.22.4](#0224)
-- [0.22.2](#0222)
-- [0.22.0](#0220)
-- [0.21.0](#0210)
-- [0.20.2](#0202)
-- [0.20.0](#0200)
-- [0.19.8](#0198)
-- [0.19.6](#0196)
-- [0.19.5](#0195)
-- [0.19.4](#0194)
-- [0.19.3](#0193)
-- [0.19.2](#0192)
-- [0.19.1](#0191)
-- [0.19.0](#0190)
-- [0.18.9](#0189)
-- [0.18.8](#0188)
-- [0.18.7](#0187)
-- [0.18.6](#0186)
-- [0.18.5](#0185)
-- [0.18.4](#0184)
-- [0.18.3](#0183)
-- [0.18.2](#0182)
-- [0.18.1](#0181)
-- [0.18.0](#0180)
-- [0.17.4](#0174)
-- [0.17.3](#0173)
-- [0.17.2](#0172)
-- [0.17.1](#0171)
-- [0.17.0](#0170)
-- [0.16.1](#0161)
-- [0.16.0](#0160)
-- [0.15.4](#0154)
-- [0.15.3](#0153)
-- [0.15.2](#0152)
-- [0.15.1](#0151)
-- [0.15.0](#0150)
-- [0.14.0](#0140)
-- [0.13.7](#0137)
-- [0.13.6](#0136)
-- [0.13.5](#0135)
-- [0.13.4](#0134)
-- [0.13.3](#0133)
-- [0.13.2](#0132)
-- [0.13.1](#0131)
-- [0.13.0](#0130)
-- [0.12.3](#0123)
-- [0.12.2](#0122)
-- [0.12.1](#0121)
-- [0.12.0](#0120)
-- [0.11.10](#01110)
-- [0.11.9](#0119)
-- [0.11.8](#0118)
-- [0.11.7](#0117)
-- [0.11.6](#0116)
-- [0.11.5](#0115)
-- [0.11.4](#0114)
-- [0.11.3](#0113)
-- [0.11.2](#0112)
-- [0.11.1](#0111)
-- [0.11.0](#0110)
-- [0.10.3](#0103)
-- [0.10.2](#0102)
-- [0.10.1](#0101)
-- [0.10.0](#0100)
-- [0.9.4](#094)
-- [0.9.3](#093)
-- [0.9.2](#092)
-- [0.9.1](#091)
-- [0.9.0](#090)
-- [0.8.0](#080)
-- [0.7.0](#070)
-- [0.6.1](#061)
-- [0.6.0](#060)
-- [0.5.0](#050)
-- [0.4.17](#0417)
-- [0.4.16](#0416)
-- [0.4.15](#0415)
-- [0.4.14](#0414)
-- [0.4.13](#0413)
-- [0.4.12](#0412)
-- [0.4.11](#0411)
-- [0.4.10](#0410)
-- [0.4.9](#049)
-- [0.4.8](#048)
-- [0.4.7](#047)
-- [0.4.6](#046)
-- [0.4.5](#045)
-- [0.4.4](#044)
-- [0.4.3](#043)
-- [0.4.2](#042)
-- [0.4.1](#041)
-- [0.4.0](#040)
-- [0.3.2](#032)
-- [0.3.1](#031)
-- [0.3.0](#030)
-- [0.2.9](#029)
-- [0.2.8](#028)
-- [0.2.7](#027)
-- [0.2.6](#026)
-- [0.2.5](#025)
-- [0.2.4](#024)
-- [0.2.3](#023)
-- [0.2.2](#022)
-- [0.2.1](#021)
-- [0.2.0](#020)
-- [0.1.9](#019)
-- [0.1.8](#018)
-- [0.1.7](#017)
-- [0.1.6](#016)
-- [0.1.5](#015)
-- [0.1.4](#014)
-- [0.1.3](#013)
-- [0.1.2](#012)
-- [0.1.1](#011)
-- [0.1.0](#010)
-
-
- **To Do**
-
-## To Do
-
-* [ ] Change: Extensions wiki from table format for options to list, easier to maintain and read
- when descriptions can benefit form complex formatting
-
-* [ ] Fix: clean up and verify the Extensions wiki options lists for name changes, missing or
- extra entries. Update description for better understanding
-
-* [ ] Add: generated HTML element positions to `TagRanges` to allow mapping from source offset
- to HTML offset for the element(s). This is needed to allow synchronization with source
- when using an attribute to hold the source information is not an option.
-
-* [ ] Fix: regex can go into infinite loop
-
-* Change: complete parser profiles for variations within a family
- [Markdown Parser Emulation](MarkdownProcessorsEmulation.md).
- * [ ] League/CommonMark
- * [ ] Jekyll
- * [ ] Php Markdown Extra
- * CommonMark (default for family): `ParserEmulationProfile.COMMONMARK`
- * FixedIndent (default for family): `ParserEmulationProfile.FIXED_INDENT`
- * GitHub Comments (just CommonMark): `ParserEmulationProfile.COMMONMARK`
- * GitHub Docs: (Now CommonMark): `ParserEmulationProfile.COMMONMARK`, old parsing was
- `ParserEmulationProfile.GITHUB_DOC`
- * Kramdown (default for family): `ParserEmulationProfile.KRAMDOWN`
- * Markdown.pl (default for family): `ParserEmulationProfile.MARKDOWN`
- * MultiMarkdown: `ParserEmulationProfile.MULTI_MARKDOWN`
- * Pegdown, with pegdown extensions use `PegdownOptionsAdapter` in `flexmark-profile-pegdown`
- * Pegdown, without pegdown extensions `ParserEmulationProfile.PEGDOWN`
-
-* [ ] Add hierarchical anchor id generation for headings: will splice parent heading id with
- child id to create unique ids based on header hierarchy.
-
-* [ ] Add macro module that would allow inserting arbitrary markdown into table cells. This
- would be less readable but would give complete flexibility to generate tables with complex
- content without changing the table syntax because the macro expansion would be done during
- rendering not parsing.
-
-### Docx Converter
-
-* [ ] Add: `DocxRenderer` options:
- * [ ] `TABLE_WIDTH_TYPE` and `TABLE_WIDTH_VALUE` for table width control
-
-* [ ] Add: Base64 image embedding in `HtmlRenderer` as an option with images processed by a
- handler.
-
-* [ ] Fix: #99, YamlFrontMatterBlockParser ignores multi-key list items
-
-
-
-0.34.48
--------
-
-* Add: `Macros` extension handling to docx converter. Macros allow nesting of block elements
- inside tables.
-
-0.34.46
--------
-
-* Add: `flexmark-ext-macros` extension to allow macro definition and inclusion in inline
- contexts. [Extensions: Macros](../../wiki/Extensions#macros)
-* Fix: `Link.setTextChars(BasedSequence)` was trimming the string before setting `Link.text`.
- Now the full untrimmed text is used.
-
-0.34.44
--------
-
-* Fix: #271, Regression? Comments are presereved in 0.26.4 but removed in 0.34.40
- * Fix: formatter HTML comments in non-translating mode did not output comment markers
-* Fix: treat protocol prefix at the end of line as a valid link.
-
-0.34.42
--------
-
-* Add: url parsing to `AutoLink` to set other link parts of the node like: pageref, anchor
- marker and anchor
-
-0.34.40
--------
-
-* Fix: add `HtmlRenderer.HEADER_ID_GENERATOR_NON_ASCII_TO_LOWERCASE`, default `true`. When set
- to `false` changes the default header id generator to not convert non-ascii alphabetic
- characters to lowercase. Needed for `GitHub` id compatibility.
-* Fix: add `HtmlRenderer.HEADER_ID_GENERATOR_NON_ASCII_TO_LOWERCASE` set to `false` to `GitHub`
- and `GitHubDoc` parser profiles.
-
-0.34.38
--------
-
-* Fix: docx conversion of hyperlinks did not take relationship part into account when optimizing
- rel references causing invalid rel ids to be used if the same link was included in multiple
- contexts.
-
-0.34.36
--------
-
-* Fix: docx conversion of footnote refs in tables to footnotes which contained links generated
- invalid docx.
-
-0.34.34
--------
-
-* Change: docx4j library version to 6.0.1
-
-0.34.32
--------
-
-* Fix: change anonymous classes to static classes in `CoreNodeDocxRenderer`
-* Add: test case for `Parser.SPACE_IN_LINK_URLS` to validate allowing spaces in URLs
-* Fix: Docx Converter to use style names instead of style ids because Word localizes ids and
- leaves the names common to all locales. Completely opposite to intuition but that is Word.
-* Fix: Docx Converter remove hardcoded "CENTER" alignment for table headings overriding the
- `Table Heading` style provided alignment.
-
-0.34.30
--------
-
-* Fix: #268, Pipe characters are not escaped in Table (FlexmarkHtmlParser)
- * Fix: escape pipe characters in text (to avoid accidental use as table or other markup) when
- not inline code nor fenced code
- * Fix: escape back ticks when inside code
- * Fix: disable escaping of `[]` when inside code
- * Fix: disable escaping of `\` when inside code
- * Fix: replace non-break space with space when inside code
-* Fix: `FlexmarkHtmlParser.BR_AS_EXTRA_BLANK_LINES` now adds ` ` followed by blank line
-* Add: `GitLab` extension handling to docx converter. For now `math` and `mermaid` blocks are
- not converted.
-* Add: `GitLab` extension formatter to properly handle block quote formatting
-* Add: `ParagraphContainer` interface to allow container nodes to control how their paragraphs
- are output for formatting/rendering with respect to blank line before/after control.
-* Fix: `GitLab` block quote parser bug for terminating sequence.
-
-0.34.28
--------
-
-* Add: html parser options to specify how to generate some markdown formatting elements, default
- for all is `ExtensionConversion.MARKDOWN`:
- * `EXT_INLINE_STRONG` - strong
- * `EXT_INLINE_EMPHASIS` - emphasis
- * `EXT_INLINE_CODE` - code
- * `EXT_INLINE_DEL` - del
- * `EXT_INLINE_INS` - ins
- * `EXT_INLINE_SUB` - sub
- * `EXT_INLINE_SUP` - sup
-
- Available settings:
-
- * `ExtensionConversion.MARKDOWN` - convert to markdown
- * `ExtensionConversion.TEXT` - convert to inner text
- * `ExtensionConversion.HTML` - leave HTML as is
-
- Corresponding `SKIP_` options have been deprecated since their function is duplicated by new
- options.
-
-0.34.26
--------
-
-* Fix: Add `DoNotLinkDecorate` to `Code` for preventing AutoLink extension from decorating
- inline code with autolinks.
-* Fix: `BasedSequenceImpl.lastIndexOfAny(CharSequence)` and
- `BasedSequenceImpl.lastIndexOfAnyNot(CharSequence)` were using `indexOf...` instead of
- `lastIndexOf...`
-
-0.34.24
--------
-
-* Fix: `BasedSequenceImpl.countCharsReversed(char, int, int)` and
- `BasedSequenceImpl.countNotCharsReversed(char, int, int)` to not return -1, should return 0
-* Fix: `BasedSequenceImpl.spliceAtEnd()` not to fail if this or other is empty
-* Add: `GitLabExtension`, Documented in
- [Gitlab Flavoured Markdown Extensions](../../wiki/Extensions#gitlab-flavoured-markdown)
-
-0.34.22
--------
-
-* Add: OSGi module support thanks to [@klcodanr](https://github.com/klcodanr)
-
-0.34.20
--------
-
-* Add: renderer type equivalences for allowing new renderer types which override existing ones.
- Now "YOUTRACK" is defined as an override of "JIRA" by `YouTrackConverterExtension`
- * use `HtmlRenderer.Builder.isRendererType(String)` to test for recognizing renderer type
- instead of `rendererType.equals("...")` make sure renderer type checking is done with most
- specific one, otherwise the wrong match will occur. For example, test for "YOUTRACK" before
- "JIRA" because "JIRA" matches "YOUTRACK".
- * `HtmlRenderer.isCompatibleRendererType(MutableDataHolder, String)`
- * `HtmlRenderer.isCompatibleRendererType(MutableDataHolder, String, String)`
- * `HtmlRenderer.addRenderTypeEquivalence(MutableDataHolder, String, String)` add new to old
- renderer type mapping.
-
-0.34.18
--------
-
-* Add: html parser options to suppress generating some markdown formatting elements, default for
- all is false:
- * `SKIP_INLINE_STRONG` - strong
- * `SKIP_INLINE_EMPHASIS` - emphasis
- * `SKIP_INLINE_CODE` - code
- * `SKIP_INLINE_DEL` - del
- * `SKIP_INLINE_INS` - ins
- * `SKIP_INLINE_SUB` - sub
- * `SKIP_INLINE_SUP` - sup
- * `SKIP_HEADING_1` - heading 1
- * `SKIP_HEADING_2` - heading 2
- * `SKIP_HEADING_3` - heading 3
- * `SKIP_HEADING_4` - heading 4
- * `SKIP_HEADING_5` - heading 5
- * `SKIP_HEADING_6` - heading 6
- * `SKIP_ATTRIBUTES` - attribute extension formatting
-* Add: html parser option `ADD_TRAILING_EOL`, default `false`. Will add trailing EOL to
- generated markdown text.
-* Fix: html parser did not add a blank line before first list item of the first list
-
-0.34.16
--------
-
-* Fix: #254, customized HTML_BLOCK_TAGS Parser option seems not taken into account
-
-0.34.14
--------
-
-* Fix: #252, GfmUser and GfmIssue are not recognized if immediately followed by non-space
- character, change regex to allow word break after user and issue
-
-0.34.12
--------
-
-* Fix: merge #249, support Jira links titles thanks to [@qwazer](https://github.com/qwazer)
-
-0.34.10
--------
-
-* Fix: #247, Admonition Expression may lack a part of the text.
-* Add: `TocExtension.TOC_CONTENT`, `TocExtension.TOC_LIST`, `SimTocExtension.TOC_CONTENT`,
- `SimTocExtension.TOC_LIST` attributable parts for `div` and `ul`/`ol` HTML tags. Documented in
- [Table-of-Contents-Extension](../../wiki/Table-of-Contents-Extension)
- * Fix: `TOC` element to use `TITLE` option if one is defined. Default for `TOC` is `""`, for
- sim `TOC` it is `"Table of Contents"`
-* Fix: #248, Request to add CSS class of TOC
- * Add: `TocExtension.DIV_CLASS` default `""`, class attribute to use on table of content `div`
- wrapper, duplicated as `SimTocExtension.DIV_CLASS`
- * Add: `TocExtension.LIST_CLASS` default `""`, class attribute to use on table of content `ul`
- or `ol` element, duplicated as `SimTocExtension.LIST_CLASS`
-
-0.34.8
-------
-
-* Fix: #220, Jekyll Tag "include"
-* Fix: #245, Markdown output of multiple Definition Lists has a problem that list items merge.
- Blank lines were removed if `Parser.BLANK_LINES_IN_AST` is `false`
-
-0.34.6
-------
-
-* Fix: #243, Markdown output of ImageRef syntax referencing ID is incorrect
-* Fix: #244, Duplicate footnotes have the problem of HTML ID collision conflict. Now each
- footnote reference adds a back references and the id of the back reference has `-#` suffix
- added except for the first back-reference, where `#` is an integer from 1..N
-
-0.34.4
-------
-
-* Add: media tags extension thanks to Cornelia Schultz (GitHub @CorneliaXaos)
-* Change: convert class methods to static when possible
-* Fix: #239, flexmark-ext-youtube-embedded missing test case for `@` usage.
-* Fix: add ability to escape `@` for youtube links.
-
-0.34.2
-------
-
-* Fix: update nexus staging plugin to 1.6.7
-* Fix: move nexus-staging plugin to deploy profile so it is not needed for ci test build
-* Fix: gfm tables extension to only require a single separator dash
-* Fix: for matched parenthesis destination link parsing, only treat backslash as escape if
- followed by characters which can be escaped.
-
-0.34.0
-------
-
-* Fix: table formatter for translations to insert a space if the translated text is empty.
-* Add: changed regex for parsing unquoted HTML attribute value to exclude `{}`.
-* Add: translation formatting awareness to: abbreviation, admonition, attributes, emoji,
- enumerated reference footnotes and tables extensions
-* Add: translation API sample:
- [TranslationSample.java](https://github.com/vsch/flexmark-java/blob/master/flexmark-java-samples/src/com/vladsch/flexmark/samples/TranslationSample.java)
-* Fix: `AttributesExtension` incorrectly parsed consecutive attributes as a single element
-* Add: `TranslationHandlerFactory` to allow format options to be passed for custom handler
- creation.
-* Add: `RenderPurpose` arg to `Formatter.translationRender` eliminating the need for separate
- render purpose to be set in translation handler instance.
-* Add: Translation helper API to Formatter module. A bit of a kludge but has the potential to
- work. Preserves non-translatable entities, uses a single translation for all occurrences of
- text snippets such as ref text. Leaves inline emphasis in, Yandex has no issues with it.
- Replaces all element text which needs to be preserved with _#_ where is unique integer. Will
- replace anchor refs to headings in file if the heading text is translated.
-* Add: to html parser recognition that `` is an emoji
- shortcut generated by flexmark-java emoji extension and convert it to such.
-
-0.32.24
--------
-
-* Fix: #232, List continuation, add `Formatter.LIST_REMOVE_EMPTY_ITEMS`, default `false`. If
- `true` then empty list items or list items which only contain a `BlankLine` node are removed
- from the output.
-* Fix: formatter output of empty list items
-* Fix: formatter output of empty loose task list items
-
-0.32.22
--------
-
-* Fix: #229, gfm-tasklist extension - add state class to list item
- * Add: `TaskListExtension.ITEM_DONE_CLASS` and `TaskListExtension.ITEM_NOT_DONE_CLASS` `li`
- tag classes to use for done and not done items.
- * Add: `TaskListExtension.TIGHT_ITEM_CLASS` to complement the
- `TaskListExtension.LOOSE_ITEM_CLASS` to replace generically named
- `TaskListExtension.ITEM_CLASS`
- * Add: depreciation of `TaskListExtension.ITEM_CLASS` in favour of
- `TaskListExtension.TIGHT_ITEM_CLASS`
-* Fix: merge #231, Fix two small bugs in ext-toc, thanks to
- [@BlueBoxWare](https://github.com/BlueBoxWare)
-* Add: `TaskListAttributeProviderSample` to `flexmark-java-samples` module.
-* Add: `GitHubParsingSample` to `flexmark-java-samples` module to show GitHub compatible parser
- setup.
-* Add: `ParserEmulationProfile.GITHUB` to reflect current GitHub profile, effectively it is
- `ParserEmulationProfile.COMMONMARK_0_28` with GitHub compatible id generator settings.
-* Fix: #221, XSS: Javascript execution through links, add `HtmlRenderer.SUPPRESSED_LINKS`
- default `"javascript:.*"`, a regular expression to suppress any links that match. The test
- occurs before the link is resolved using a link resolver. Therefore any link matching will be
- suppressed before it is resolved. Likewise, a link resolver returning a suppressed link will
- not be suppressed since this is up to the custom link resolver to handle.
-
- Suppressed links will render only the child nodes, effectively `[Something
- New](javascript:alert(1))` will render as if it was `Something New`.
-
- Link suppression based on URL prefixes does not apply to HTML inline or block elements. Use
- HTML suppression options for this.
-* Add: `AutolinkExtension.IGNORE_LINKS` default `""`, a regex expression to match link text
- which should not be auto-linked. This can include full urls like `www.google.com` or parts by
- including wildcard match patterns. Any recognized auto-link which matches the expression will
- be rendered as text.
-
-0.32.20
--------
-
-* Fix: #225, BlankLine nodes within IndentedCodeBlock, also within fenced code block
-
-0.32.18
--------
-
-* Fix: #216, Wrong source positions for Tables with empty TableHead/TableBody
-
-0.32.16
--------
-
-* Fix: change all javadoc/overview.html to be generated from javadoc/overview.md files.
-* Fix: admonition.css remove non-existent `horiz-align` property.
-* Add:
- [HtmlToMarkdownSample.java](https://github.com/vsch/flexmark-java/blob/master/flexmark-java-samples/src/com/vladsch/flexmark/samples/HtmlToMarkdownSample.java)
-* Add: `HtmlRenderer.HEADER_ID_GENERATOR_NON_DASH_CHARS`, default `""`. Any characters in the
- string will be preserved and passed through to the heading ID.
-* Fix: `ParserEmulationProfile.GITHUB_DOC` now sets
- `HtmlRenderer.HEADER_ID_GENERATOR_NO_DUPED_DASHES` to `" -"` and
- `HtmlRenderer.HEADER_ID_GENERATOR_NON_DASH_CHARS` to `"_"` to match current GitHub heading id
- generation rules.
-
-0.32.14
--------
-
-* Change: `AdmonitionExtension.WITH_LEAD_SPACES_INTERRUPTS_ITEM_PARAGRAPH` to
- `AdmonitionExtension.WITH_SPACES_INTERRUPTS_ITEM_PARAGRAPH`
-* Fix: Formatter for Tables now treats header column alignment as centered if no alignment
- marker is given for the column, body cells remain left aligned. This is default browser
- rendered table appearance.
-* Fix: #213, Attributes element does not allow spaces before closing }
-* Fix: update to open html to pdf 0.0.1-RC12
-
-0.32.12
--------
-
-* Add: `DocxRenderer.TABLE_PREFERRED_WIDTH_PCT` default `0`, if `0` then table width is `auto`,
- otherwise specifies percent of page width.
-* Add: `DocxRenderer.TABLE_LEFT_INDENT` default `120`, in twips
-* Add: `DocxRenderer.TABLE_STYLE` default `""`, if not empty then table then table style will be
- set to this value and default cell borders will not be generated.
-
-0.32.10
--------
-
-* Add: `AdmonitionBlock` getters/setters for `titleOpeningMarker`, `title`, `titleClosingMarker`
-* Fix: `AdmonitionNodeRenderer` remove erroneous, extra ``
-* Add: `AdmonitionNodeRenderer` attributable parts:
- * ADMONITION_SVG_OBJECT_PART - svg object at top of body, part is on `Document` node
- * ADMONITION_HEADING_PART - heading div
- * ADMONITION_ICON_PART - heading icon svg
- * ADMONITION_TITLE_PART - heading title span
- * ADMONITION_BODY_PART - admonition body div
-
-0.32.8
-------
-
-* Add: [Admonition Extension](https://github.com/vsch/flexmark-java/wiki/Extensions#admonition)
- To create block-styled side content. For complete documentation please see the
- [Admonition Extension, Material for MkDocs] documentation.
-
-0.32.6
-------
-
-* Add: `DocxRenderer.PREFIX_WWW_LINKS`, default `true`, when true adds `http://` to link
- addresses which start with `www.`
-
-* Fix: `DocxRenderer` some images would not be embedded and generate a CRC Error when loaded via
- URL vs file.
-
-0.32.4
-------
-
-* Fix: #207, Issue extension does not support windows new lines, same for Gfm User extension.
-
-0.32.2
-------
-
-* Add: `EmojiExtension.ATTR_IMAGE_CLASS`, default `""`, if not empty will set the image tag
- class attribute to this value.
-
-* Fix: when image type was set to unicode then unicode char would be used for a shortcut even
- when that shortcut was not defined for requested shortcut type: github or ecs.
-
-* Fix: update to docx4j version 3.3.6
-
-0.32.0
-------
-
-* **API Change**: removed `EmojiCheatSheet` class to replace with `EmojiShortcuts` which has
- better referencing for GitHub shortcuts and unicode chars for all emojis from
- [emoji-cross-reference](https://github.com/vsch/emoji-cross-reference)
-
- * Removed: `EmojiExtension.USE_IMAGE_URL`
- * Add: `EmojiExtension.USE_SHORTCUT_TYPE`, default `EmojiShortcutType.EMOJI_CHEAT_SHEET`,
- select type of shortcuts:
- * `EmojiShortcutType.EMOJI_CHEAT_SHEET`
- * `EmojiShortcutType.GITHUB`
- * `EmojiShortcutType.ANY_EMOJI_CHEAT_SHEET_PREFERRED` use any shortcut from any source. If
- image type options is not `UNICODE_ONLY`, will generate links to Emoji Cheat Sheet files
- or GitHub URL, with preference given to Emoji Cheat Sheet files.
- * `EmojiShortcutType.ANY_GITHUB_PREFERRED` - use any shortcut from any source. If image type
- options is not `UNICODE_ONLY`, will generate links to Emoji Cheat Sheet files or GitHub
- URL, with preference given to GitHub URL.
- * Add: `EmojiExtension.USE_IMAGE_TYPE`, default `EmojiImageType.IMAGE_ONLY`, to select what
- type of images are allowed.
- * `EmojiImageType.IMAGE_ONLY`, only use image link
- * `EmojiImageType.UNICODE_ONLY` convert to unicode and if there is no unicode treat as
- invalid emoji shortcut
- * `EmojiImageType.UNICODE_FALLBACK_TO_IMAGE` convert to unicode and if no unicode use image.
-
-* **API Change**: removed `HtmlRenderer.WRAP_TIGHT_ITEM_PARAGRAPH_IN_SPAN`, it was only needed
- to have somewhere to set attributes for tight item text for `Attributes` which now implement
- intelligent span wrapping of text.
-
-* **Change**: `AttributesExtension.ASSIGN_TEXT_ATTRIBUTES`, default `true`. Set to `false` for
- backward compatibility.
-
- When `true` attribute assignment rules to nodes are changed to allow text elements to get
- attributes. If an attribute element is spaced from the previous plain text element `some text
- {attributes}` then attributes are for the parent of the text. If they are attached to the text
- element `some text{attributes}` then they are assigned to the immediately preceding plain text
- span. Within an inline element same rules apply: `**bold text {attr}**` are for the strong
- emphasis span, while `**bold text{attr}**` will wrap the text between the strong emphasis
- tags, in a span with given attributes.
-
- If a plain text span is interrupted by an HTML comment then it is considered as two separate
- plain text spans. ie. `some text{attr}` will result in `some text` rendering.
-
- Full spec:
- [ext_attributes_ast_spec](flexmark-ext-attributes/src/test/resources/ext_attributes_ast_spec.md)
-
-* Fix: Attributes, when they are first child then delete leading spaces of following node first
- rendered child will have leading spaces.
-
-* Add: Attribute syntax option allows `Attributes` on reference definition so that all elements
- referencing it, inherit the attributes.
-
- To assign attributes to a reference definition you need to leave a blank line between the
- reference definition and the attributes element, placed by itself and followed by a blank
- line.
-
- ![reference 1][ref]
-
- ![reference 2][ref]
-
- [ref]: http://example.com/image.png
-
- {width=20 height=20}
-
-* Fix: HTML Parser:
- * image alt text should escape markdown special characters which can affect parsing of image
- link text like: `[]`
- * convert `
` to indented code
- * add attribute extraction
- * id : if `FlexmarkHtmlParser.OUTPUT_ATTRIBUTES_ID` is `true`, default `true`
- * `FlexmarkHtmlParser.OUTPUT_ATTRIBUTES_NAMES_REGEX` default `""`, if not empty then will
- output attributes extension syntax for attribute names that are matched by the regex.
- * did not output a line end at start of `
`, this tended to splice text in div to previous
- element.
-
-* Add: Emoji Extension support to DocxRenderer.
- * Add: Emoji Cheat Sheet images to resources in DocxRender jar, default configuration will
- resolve emoji image files to the files in the jar.
- * Add: `DocxRenderer.DOC_EMOJI_IMAGE_VERT_OFFSET`, default `-0.1`, vertical offset of emoji
- image as a factor of line height at point of insertion. The final value is rounded to
- nearest pt so jumps of 1 pt for small changes of this value can occur.
- * Add: `DocxRenderer.DOC_EMOJI_IMAGE_VERT_SIZE`, default `1.05`, size of emoji image as a
- factor of line height at point of insertion.
-
-0.30.0
-------
-
-* Fix: #198, StringIndexOutOfBoundsException, in `AbbreviationExtension` if abbreviation
- definition had an empty abbreviation.
-
-* API Change: Refactoring of Interfaces to allow extensions only providing link resolver,
- attribute provider and html id generator to be re-used by the `DocxRenderer` and
- `HtmlRenderer` without modifications other than changing the `implemented` extension from
- `HtmlRenderer.HtmlRendererExtension` to `RendererExtension`
-
- * `AttributesProviderFactory` pass only `LinkResolverContext` instead of
- `NodeRenderingContext` to allow for attribute provider extensions to be re-used with
- `DocxRender`
- * `HeadIdGenerator` pass only `LinkResolverContext` instead of `NodeRenderingContext` to allow
- for header id generator provider extensions to be re-used with `DocxRender`
- * new `RendererExtension` with only ability to register html id generator, link resolver and
- attribute provider. Such an extension can be used as is with `HtmlRenderer` and
- `DocxRenderer`
-
- `RendererExtension.extend(RendererBuilder, String)` method of these gets passed
- `RendererBuilder` instead of `HtmlRenderer.Builder`
-
- extensions that implement both `RendererExtension` and `HtmlRendererExtension` will have
- only have the html renderer extension `extend` method called.
-
-* Add: `flexmark-ext-aside` handling to DocxConverter
-
-* Fix: DocxConverter formatting around footnote reference would be applied to footnote text
-
-* Add: `DocxRenderer.LOCAL_HYPERLINK_MISSING_HIGHLIGHT`, default `"red"` to highlight in
- document hyperlinks with missing targets. Set to `""` to disable this. NOTE: must be one of
- the 8 named colors used by Word or it might complain.
-
-* Add: `DocxRenderer.LOCAL_HYPERLINK_MISSING_FORMAT`, default `"Missing target id: #%s"` to
- change the tooltip text of the missing hyperlink. `%s` will be replaced with the reference id
- of the link.
-
-* Fix: DocxConverter self referencing ref anchors should be converted to bookmark references in
- the docx
-
-* Add: DocxConverter now supports `AttributesExtension` and `EnumeratedReferenceExtension` by
- converting id attributes to bookmarks and enumerated reference links to hyperlinks to
- bookmarks.
-
-* Change: Enumerated references which are missing the definition for their type now default to
- `type #` where # is the reference ordinal instead of just `#`.
-
-* Add: Enumerated links now have title set to the text value of the reference.
-
-* Add: DocxConverter options to control heading id generation to resolve anchor refs to document
- anchors
- * `DocxRenderer.HTML_ID_GENERATOR`, default `HtmlIdGenerator instance`, the id generator to
- use for generating heading ids.
-
- * `DocxRenderer.LOCAL_HYPERLINK_SUFFIX`, default `""`, used to add a suffix to hyperlink
- bookmark names, except ones linking to first heading in a document. Only needed if you have
- some post processor on the docx adding suffixes to bookmark names.
-
-
-
-For convenience these `HtmlRenderer` keys are aliased through `DocxRenderer`, keep in mind that
-setting either will affect both keys. For information on these keys see
-[`HtmlRenderer` options](https://github.com/vsch/flexmark-java/wiki/Extensions#renderer)
-
-* `DocxRenderer.HEADER_ID_GENERATOR_RESOLVE_DUPES`, default `true`,
-
-* `DocxRenderer.HEADER_ID_GENERATOR_TO_DASH_CHARS`, default `" -_"`
-
-* `DocxRenderer.HEADER_ID_GENERATOR_NO_DUPED_DASHES`, default `false`
-
-* Add: DocxConverter options to re-map standard style names to user defined ones.
- * `DocxRenderer.DEFAULT_STYLE`, default "Normal"
- * `DocxRenderer.LOOSE_PARAGRAPH_STYLE`, default "ParagraphTextBody"
- * `DocxRenderer.TIGHT_PARAGRAPH_STYLE`, default "BodyText"
- * `DocxRenderer.PREFORMATTED_TEXT_STYLE`, default "PreformattedText"
- * `DocxRenderer.BLOCK_QUOTE_STYLE`, default "Quotations"
- * `DocxRenderer.ASIDE_BLOCK_STYLE`, default "AsideBlock"
- * `DocxRenderer.HORIZONTAL_LINE_STYLE`, default "HorizontalLine"
- * `DocxRenderer.TABLE_CAPTION`, default "TableCaption"
- * `DocxRenderer.TABLE_CONTENTS`, default "TableContents"
- * `DocxRenderer.TABLE_HEADING`, default "TableHeading"
- * `DocxRenderer.FOOTNOTE_STYLE`, default "Footnote"
-
-
-
-* `DocxRenderer.BOLD_STYLE`, default "StrongEmphasis"
-* `DocxRenderer.ITALIC_STYLE`, default "Emphasis"
-* `DocxRenderer.STRIKE_THROUGH_STYLE`, default "Strikethrough"
-* `DocxRenderer.SUBSCRIPT_STYLE`, default "Subscript"
-* `DocxRenderer.SUPERSCRIPT_STYLE`, default "Superscript"
-* `DocxRenderer.INS_STYLE`, default "Underlined"
-* `DocxRenderer.INLINE_CODE_STYLE`, default "SourceText"
-* `DocxRenderer.HYPERLINK_STYLE`, default "Hyperlink"
-
-0.28.38
--------
-
-* Fix: DocxConverter images and hyperlinks in footnotes would create invalid document.
-
-* Fix: DocxConverter changed style for footnote ref from `FootnoteAnchor` to `FootnoteReference`
-
-0.28.36
--------
-
-* Fix: NPE in docx converter block quotes if `Quotations` style is missing from templates.
-
-* Fix: do not render empty table tbody/thead tags.
-
-0.28.34
--------
-
-* Fix: core node renderer renderLineBreak could cause NPE
-
-* Fix: #193, Support `