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.
@@ -1726,15 +2179,20 @@ Please give feedback on the upcoming changes if you have concerns about breaking
* 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)`
@@ -1780,20 +2238,27 @@ Please give feedback on the upcoming changes if you have concerns about breaking
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:
@@ -1807,23 +2272,30 @@ Please give feedback on the upcoming changes if you have concerns about breaking
* 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 ``
tag processing. For now only `MARKDOWN` does nothing useful. Later it will be used to convert
math ml to GitLab math inline element.
@@ -2035,6 +2507,8 @@ Please give feedback on the upcoming changes if you have concerns about breaking
* `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
@@ -2066,13 +2540,26 @@ Please give feedback on the upcoming changes if you have concerns about breaking
[#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]: /assets/migrations/migrate%20flexmark-java%200_35_x%20to%200_40_0.xml
+[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 10949e305..5719fdf45 100644
--- a/VERSION.md
+++ b/VERSION.md
@@ -1,11 +1,35 @@
# flexmark-java
- **Version History**
-
-[TOC]: # " "
-
-- [Release 0.60.0 Changes](#release-0600-changes)
- - [API Refactoring](#api-refactoring)
+[TOC]: # ""
+
+- [0.64.8](#0648)
+- [0.64.6](#0646)
+- [0.64.4](#0644)
+- [0.64.2](#0642)
+- [0.64.0](#0640)
+- [0.62.4](#0624)
+- [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.84](#05984)
- [0.59.82](#05982)
- [0.59.80](#05980)
@@ -48,6 +72,8 @@
- [0.59.7](#0597)
- [0.59.5](#0595)
- [0.59.1](#0591)
+- [0.50.50](#05050)
+- [0.50.48](#05048)
- [0.50.46](#05046)
- [0.50.44](#05044)
- [0.50.42](#05042)
@@ -91,82 +117,353 @@
- [0.40.2](#0402)
- [0.40.0](#0400)
+## 0.64.8
+
+* Update: `flexmark-ext-emoji` to latest references from [emoji-cross-reference] based on latest
+ [Emoji-Cheat-Sheet.com], [GitHub Emoji API], [Unicode Emoji List, v15.0] and
+ [Unicode Emoji Modifiers List, v15.0]. Some emoji categories have changed because in the
+ latest references the categories are taken from [Unicode Emoji List, v15.0] and
+ [Unicode Emoji Modifiers List, v15.0], instead of [Emoji-Cheat-Sheet.com].
+* Change: update `flexmark-docx-converter` emoji images to latest from [Emoji-Cheat-Sheet.com].
+* Change: `flexmark-html2md-converter` to ignore image alt emoji category when trying to match
+ emoji shortcut.
+* Add: `USE_UNICODE_FILE_NAMES` option to `EmojiExtension`, default `false`. When true will use
+ `unicodeSampleFile` field for `Emoji Cheat Sheet` image file name. This is to support
+ implementations which rely on the file renaming done by [emoji-cross-reference] when copying
+ emoji cheat sheet images to common `emoji_images/emojis` directory.
+* Fix: reference links in html to md conversion use the same ref id when link text is the same,
+ even when the URLs differ. Now the reference id will be generated by adding `_xxx` suffix,
+ where `xxx` is an increasing integer, starting at 1, and incremented until a unique reference
+ id is generated.
+ * Add: `UNIQUE_LINK_REF_ID_GENERATOR`, default `(refId, index) -> String.format("%s_%d",
+ refId, index)`, a `BiFunction` taking refId string and integer
+ index and returning a string for the "uniquified" ref id to use for a reference link.
+
+## 0.64.6
+
+* Merge:
+ [TextCollectingVisitor works better with code blocks by roxspring · Pull Request #575 · vsch/flexmark-java · GitHub]
+* Add: gradle build resource url resolver, mapping `/build/resources/test/` to
+ `/src/test/resources/`
+* Add: a bit more documentation to `ResourceResolverManager`
+
+## 0.64.4
+
+* Change: update to `org.docx4j:docx4j-JAXB-ReferenceImpl:11.4.9`, if you have code using
+ `javax.xml.bind` package from the dependency, you will need to change it to
+ `jakarta.xml.bind`. Global search/replace across the project will do it.
+* Add: `ResizableImageExtension` documentation that it does not play with the rest of the
+ library renderers and is an unsupported extension.
+* Fix: update `log4j:log4j:1.2.17` to `org.apache.logging.log4j:log4j-xxx:2.20.0`
+* Fix: exclude `com.ibm.icu:icu4j:59.1` dependency, replace with `com.ibm.icu:icu4j:72.1`
+* Fix: exclude `commons-io:commons-io:1.3.1` dependency, replace with
+ `commons-io:commons-io:2.11.0`
+
+## 0.64.2
+
+* Add: `containsSomeIn(CharPredicate)`, `containsSomeNotIn(CharPredicate)`,
+ `containsOnlyIn(CharPredicate)`, `containsOnlyNotIn(CharPredicate)` methods to `BasedSequence`
+* Change: bump jsoup version to 1.15.4
+* Change: bump jetbrains.annotations version to 24.0.1
+* Change: remove `openhtmltopdf-jsoup-dom-converter` dependency from `flexmark-pdf-converter`.
+* Merge: outstanding PRs.
+ * [Add OSGi metadata to Manifest to enable deployment to OSGi environments by benfortuna · Pull Request #521 · vsch/flexmark-java · GitHub]
+ * [fix issue #448 by protogenes · Pull Request #510 · vsch/flexmark-java · GitHub]
+ * [update plugins and configure for Reproducible Builds by hboutemy · Pull Request #507 · vsch/flexmark-java · GitHub]
+ * [Prevent StringIndexOutOfBounds in ext-resizable-image by MiniDigger · Pull Request #503 · vsch/flexmark-java · GitHub]
+ * [Fix typo in issue template by MiniDigger · Pull Request #502 · vsch/flexmark-java · GitHub]
+ * [test parsing long sequence of underscores by niklasf · Pull Request #495 · vsch/flexmark-java · GitHub]
+ * [Update to latest maven bundle plugin. Fix for #529 by cziegeler · Pull Request #530 · vsch/flexmark-java · GitHub]
+ * [ext-resizable-image: fix images inside links by e-im · Pull Request #543 · vsch/flexmark-java · GitHub]
+ * [Dependency update for jsoup by viglu · Pull Request #544 · vsch/flexmark-java · GitHub]
+ * [Fix vsch#545, do not escape special characters in `` block by MekhailS · Pull Request #546 · vsch/flexmark-java · GitHub]
+ * [Fix #548: Converting html images fails if the image refers to an emoji without a shortcut by DamnedElric · Pull Request #562 · vsch/flexmark-java · GitHub]
+ * [Fix generation of header IDs by travkin79 · Pull Request #566 · vsch/flexmark-java · GitHub]
+
+## 0.64.0
+
+* Break: Change minimum Java requirement to 11.
+* Fix: update OpenHtmlToPDF to 1.0.10
+* Fix: update jsoup to 1.14.3
+* Fix: update junit to 4.13.2
+* Fix: update Docx4j to 11.3.2
+* Fix: Remove deprecated `of()` sequence methods.
+* Fix: [#452, JiraConverter: Mixed lists rendered incorrectly], thanks to
+ **[znerd](https://github.com/znerd)**
+* Fix: merge [#489, add flexmark-ext-resizable-image] thanks to
+ **[sparksparrow](https://github.com/sparksparrow)**
+* Fix: [#482, Namespaces in embedded HTML blocks not supported?]
+ * Add `Parser.HTML_ALLOW_NAME_SPACE`, default `false` to allow recognizing HTML elements with
+ namespace prefix. :exclamation: HTML deep parser always allows namespaces and ignores this
+ option.
+
+## 0.62.4
+
+* Fix: allow exceptions in `ExceptionMatcher` to have null cause, then use object.toString() for
+ text.
+
+## 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: [#452, JiraConverter: Mixed lists rendered incorrectly]
+
+## 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:
+
+ [moon ](/uri)
-
-
-## Release 0.60.0 Changes
-
-### 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 aggregation of all utilities modules, similar to
- `flexmark-all`
- * [ ] `ast/` classes to `flexmark-util-ast`, any other classes which depend on `Node` will
- most likely be moved here.
- * [ ] `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`, with dependency on `Node` changed to type
- parameter.
- * [ ] `html/` classes to `flexmark-util-html`
- * [ ] `mappers/` classes to `flexmark-util-mappers`, classes with dependency on `Node` will
- move to `flexmark-util-node`
- * [ ] `mappers/` classes to `flexmark-util-mappers`
- * [ ] `options/` classes to `flexmark-util-options`
- * [ ] `sequence/` classes to `flexmark-util-sequence`
- * [ ] `visitor/` classes to `flexmark-util-visitor`
- * Generic helper classes from module root:
- * [ ] `DelimitedBuilder.java` to `flexmark-util-misc`
- * [ ] `FileUtil.java` to `flexmark-util-misc`
- * [ ] `ImageUtils.java` to `flexmark-util-misc`
- * [ ] `Immutable.java` to `flexmark-util-misc`
- * [ ] `Mutable.java` to `flexmark-util-misc`
- * [ ] `Pair.java` to `flexmark-util-misc`
- * [ ] `Paired.java` to `flexmark-util-misc`
- * [ ] `Ref.java` to `flexmark-util-misc`
- * [ ] `TemplateUtil.java` to `flexmark-util-misc`
- * [ ] `Utils.java` to `flexmark-util-misc`
-* [ ] Break: delete deprecated properties, methods and classes
-* [ ] Convert anonymous classes to lambda where possible.
-* [x] Add: `org.jetbrains:annotations:18.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.
-* [x] Break: refactor and cleanup tests to eliminate duplicated code and allow easier reuse of
- test cases with spec example data.
-* [x] 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.
-* [x] 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.
-* [x] 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.
-* [x] 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`
+ when set to `true`, priority given to outer link and will render as:
+
+ [][moon]
+
+ :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.84
@@ -702,14 +999,14 @@ Please give feedback on the upcoming changes if you have concerns about breaking
* 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)`
+ * `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
+ * `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`
@@ -938,6 +1235,7 @@ Please give feedback on the upcoming changes if you have concerns about breaking
* `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`
@@ -1072,6 +1370,17 @@ Please give feedback on the upcoming changes if you have concerns about breaking
`NodeAdaptedVisitor.getHandler(Node)`, `NodeAdaptedVisitor.getHandler(Class>)`, and
`NodeAdaptedVisitor.getNodeClasses()` to get access to contained data.
+## 0.50.50
+
+* Fix: change docx converter to not include `<>` around auto and mail links in generated code.
+* Fix: [#384, Markdown parser produces invalid HTML]
+
+## 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:
@@ -1357,8 +1666,10 @@ Please give feedback on the upcoming changes if you have concerns about breaking
## 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
+* Fix: HTML deep parser to interrupt paragraph if HTML starts with a block tag
+* Fix: Docx converter mail link conversion
+* Fix: [#351, Is there any special format requirement for processing html data to markdown]
## 0.42.12
@@ -1597,7 +1908,6 @@ Please give feedback on the upcoming changes if you have concerns about breaking
were duplicated.
* Add character counting functions:
-
* `countOfAny()`
* `countOfAnyNot()`
@@ -1708,7 +2018,6 @@ Please give feedback on the upcoming changes if you have concerns about breaking
* 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
@@ -1723,7 +2032,6 @@ Please give feedback on the upcoming changes if you have concerns about breaking
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
@@ -1734,91 +2042,91 @@ Please give feedback on the upcoming changes if you have concerns about breaking
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`
+* 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
@@ -1852,13 +2160,46 @@ Please give feedback on the upcoming changes if you have concerns about breaking
[#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
+[#452, JiraConverter: Mixed lists rendered incorrectly]: https://github.com/vsch/flexmark-java/issues/452
+[#482, Namespaces in embedded HTML blocks not supported?]: https://github.com/vsch/flexmark-java/issues/482
+[#489, add flexmark-ext-resizable-image]: https://github.com/vsch/flexmark-java/issues/489
+[@Xaelis]: https://github.com/Xaelis
+[Add OSGi metadata to Manifest to enable deployment to OSGi environments by benfortuna · Pull Request #521 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/521 "Add OSGi metadata to Manifest to enable deployment to OSGi environments by benfortuna · Pull Request #521 · vsch/flexmark-java · GitHub"
[Awesome Console]: https://plugins.jetbrains.com/plugin/7677-awesome-console "Awesome Console"
+[Dependency update for jsoup by viglu · Pull Request #544 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/544 "Dependency update for jsoup by viglu · Pull Request #544 · vsch/flexmark-java · GitHub"
+[Emoji-Cheat-Sheet.com]: https://github.com/WebpageFX/emoji-cheat-sheet.com
+[Fix #548: Converting html images fails if the image refers to an emoji without a shortcut by DamnedElric · Pull Request #562 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/562 "Fix #548: Converting html images fails if the image refers to an emoji without a shortcut by DamnedElric · Pull Request #562 · vsch/flexmark-java · GitHub"
+[Fix generation of header IDs by travkin79 · Pull Request #566 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/566 "Fix generation of header IDs by travkin79 · Pull Request #566 · vsch/flexmark-java · GitHub"
+[Fix typo in issue template by MiniDigger · Pull Request #502 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/502 "Fix typo in issue template by MiniDigger · Pull Request #502 · vsch/flexmark-java · GitHub"
+[GitHub Emoji API]: https://api.github.com/emojis
[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
-[migrate 0_35_x to 0_40_0.xml]: /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
[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
+[Prevent StringIndexOutOfBounds in ext-resizable-image by MiniDigger · Pull Request #503 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/503 "Prevent StringIndexOutOfBounds in ext-resizable-image by MiniDigger · Pull Request #503 · vsch/flexmark-java · GitHub"
+[TextCollectingVisitor works better with code blocks by roxspring · Pull Request #575 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/575 "TextCollectingVisitor works better with code blocks by roxspring · Pull Request #575 · vsch/flexmark-java · GitHub"
+[`emoji-cheat-sheet.com/public/graphics/emojis/`]: https://github.com/WebpageFX/emoji-cheat-sheet.com/tree/master/public/graphics/emojis
+[Unicode Emoji List, v15.0]: https://unicode.org/emoji/charts/emoji-list.html
+
+[Unicode Emoji Modifiers List, v15.0]: https://unicode.org/emoji/charts/full-emoji-modifiers.html
+
+[Update to latest maven bundle plugin. Fix for #529 by cziegeler · Pull Request #530 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/530 "Update to latest maven bundle plugin. Fix for #529 by cziegeler · Pull Request #530 · vsch/flexmark-java · GitHub"
[YouTrack: IDEA-207453]: https://youtrack.jetbrains.com/issue/IDEA-207453 "Add Conversion of ref anchor to UrlFilter for file line navigation"
+[emoji-cross-reference]: https://github.com/vsch/emoji-cross-reference
+[ext-resizable-image: fix images inside links by e-im · Pull Request #543 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/543 "ext-resizable-image: fix images inside links by e-im · Pull Request #543 · vsch/flexmark-java · GitHub"
+[fix issue #448 by protogenes · Pull Request #510 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/510 "fix issue #448 by protogenes · Pull Request #510 · vsch/flexmark-java · GitHub"
+[Fix vsch#545, do not escape special characters in `` block by MekhailS · Pull Request #546 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/546 "Fix vsch#545, do not escape special characters in `` block by MekhailS · Pull Request #546 · vsch/flexmark-java · GitHub"
+[migrate 0_35_x to 0_40_0.xml]: /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
+[test parsing long sequence of underscores by niklasf · Pull Request #495 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/495 "test parsing long sequence of underscores by niklasf · Pull Request #495 · vsch/flexmark-java · GitHub"
+[update plugins and configure for Reproducible Builds by hboutemy · Pull Request #507 · vsch/flexmark-java · GitHub]: https://github.com/vsch/flexmark-java/pull/507 "update plugins and configure for Reproducible Builds by hboutemy · Pull Request #507 · vsch/flexmark-java · GitHub"
diff --git a/assets/incl_file.md b/assets/incl_file.md
new file mode 100644
index 000000000..69994c3ff
--- /dev/null
+++ b/assets/incl_file.md
@@ -0,0 +1 @@
+# Absolute Heading **some bold** 2
diff --git a/assets/migrations/migrate flexmark-java 0_35_x to 0_40_0.xml b/assets/migrations/migrate flexmark-java 0_35_x to 0_40_0.xml
index 47bbac568..5eec93a89 100644
--- a/assets/migrations/migrate flexmark-java 0_35_x to 0_40_0.xml
+++ b/assets/migrations/migrate flexmark-java 0_35_x to 0_40_0.xml
@@ -34,8 +34,8 @@
-
-
+
+
diff --git a/assets/migrations/migrate flexmark-java 0_42_x to 0_50_0.xml b/assets/migrations/migrate flexmark-java 0_42_x to 0_50_0.xml
index 8b1dcb162..9551f14e7 100644
--- a/assets/migrations/migrate flexmark-java 0_42_x to 0_50_0.xml
+++ b/assets/migrations/migrate flexmark-java 0_42_x to 0_50_0.xml
@@ -7,8 +7,8 @@
-
-
+
+
diff --git a/assets/migrations/migrate flexmark-java 0_50_x to 0_60_0.xml b/assets/migrations/migrate flexmark-java 0_50_x to 0_60_0.xml
new file mode 100644
index 000000000..c77800cec
--- /dev/null
+++ b/assets/migrations/migrate flexmark-java 0_50_x to 0_60_0.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/samples/sample-doc.html b/assets/samples/sample-doc.html
index 2905a4a12..f53c3f350 100644
--- a/assets/samples/sample-doc.html
+++ b/assets/samples/sample-doc.html
@@ -20,7 +20,7 @@ Heading 6
list 1
-
+
with some text
diff --git a/batch-search-replace.xml b/batch-search-replace.xml
index fb6cc1c76..aa6492997 100644
--- a/batch-search-replace.xml
+++ b/batch-search-replace.xml
@@ -1,2468 +1,4094 @@
-
-
-
- Flexmark Deprecated
-
-
-
- All
-
-
- approveProcessInstanceId
- approvedAt
- approveProcessTemplateId
- checkedAt
- checkedAt
- clientId
- conditionTypeId
- contentComponentId
- contentComponentId
- contentComponentInstanceId
- contentComponentId
- createdAt
- deadlineAt
- duration
- doneAt
- inputAt
- inputTypeId
- originStepTemplateId
- originProcessTemplateId
- previousVersionId
- processStepInstanceId
- processStepId
- processStepTemplateId
- processTemplateId
- processStepTemplateId
- processStepTemplateId
- processTemplateId
- processStepTemplateId
- taskInstanceId
- trainingProcessTemplateId
- updatedAt
- userUuid
- userUuid
-
-
-
- approveProcessInstance
- approvedat
- approveprocess
- checkedDate
- checkedat
- client
- conditiontype
- contentComponent
- contentComponentID
- contentComponentInstance
- contentComponent_id
- createdat
- deadline
- deadline_
- doneDate
- inputDate
- inputType
- origStepTemplateId
- originTemplate
- previousVersion
- processStepInstanceID
- processStep_id
- processStep_id_
- processTemplate_id
- processstep
- processsteptemplate
- processtemplate
- processteptemplate
- taskTemplateId
- trainingsprocess
- updatedat
- user
- username
-
-
-
-
-
- ProcessPostConditionProcessTemplate
-
-
- processPostConditionId
- processTemplateId
-
-
-
- id
- processtemplate
-
-
-
-
-
- Rename id and other columns (43-45)
-
-
- b
-
- # change to IS NOT NULL of date column
-
- # read as is, remove from update/insert
-
- # if date is needed add seconds in `duration` to startAt date
-
- # read as is, remove from update/insert
- # change to IS NOT NULL of date column
-
-
-
- processInstanceId
- stepId
- Accountable_Documents
- Consulted_Documents
- TriggeredProcess
- Documents
- Informed_Documents
- InputType.radioButton
- Responsible_Documents
- accountableList
- step_SubProcesses
- approvalProcessInstanceId
- approvalProcessInstanceId
- approvalProcess
- approvalProcessId
- approved
- backStepId
- checked
- optionState
- checkLists
- consultedList
- contentId
- contentInstanceId
- contentTypeId
- createdAt
- triggeredProcess
- step_TriggeredProcesses
- duration
- documentId
- processId
- processInstanceIds
- informedList
- negativePostConditionId
- originDocumentId
- originProcessId
- originStepId
- image
- images
- positivePostConditionId
- postConditionTypeId
- postConditionsArray
- step_PostConditions
- preConditionsArray
- preConditionTypeId
- step_PreConditions
- url
- processPreConditionId
- conditionTypeId
- stepId
- stepInstance
- stepInstanceId
- stepInstances
- step
- stepId
- steps
- stepPostConditionId
- stepPreConditionId
- process
- processId
- processIds
- optionList
- optionListInstanceId
- optionLists
- optionState
- step_responsibleList
- responsibleList
- stepTriggeredProcesses
- stepInstanceIds
- stepPostConditions
- stepPreConditions
- step_ResponsibleList
- stepTypeId
- stepInstances
- stepsData
- taskId
- trainingProcess
- trainingProcessId
- contentTypeId
- inputTypeId
- updatedAt
- text
- userInput.inputTypeId
- inputInstanceId
-
-
-
- -id
- -id
- Accountable_DocumentTemplates
- Consulted_DocumentTemplates
- DerivedProcess
- DocumentTemplates
- Informed_DocumentTemplates
- InputType.radioButton
- Responsible_DocumentTemplates
- accountable
- addProcessToProcessStepArray
- approveProcessInstance
- approveProcessInstanceId
- approveProcessTemplate
- approveProcessTemplateId
- approved
- backStepTemplateId
- checked
- checkedStatus
- checklists
- consulted
- contentComponentId
- contentComponentInstanceId
- contentComponentTypeId
- createdAt
- derivedProcess
- derivedProcesses
- duration
- id
- -id
- ids
- informed
- negativePostCondition
- originDocumentTemplateId
- originProcessTemplateId
- originStepTemplateId
- picture
- pictures
- positivePostCondition
- postConditionType
- postConditionsArray
- postconditions
- preConditionsArray
- prerequisiteType
- prerequisites
- preview
- processPrerequisiteId
- processStepConditionId
- processStepId
- processStepInstance
- processStepInstanceId
- processStepInstances
- processStepTemplate
- processStepTemplateId
- processStepTemplates
- processStepsPostConditionId
- processStepsPrerequisiteId
- processTemplate
- processTemplateId
- processTemplateIds
- radioButton
- radioButtonInstanceId
- radioButtons
- radioState
- responsible
- responsible
- stepDerivedProcesses
- stepIds
- stepPostconditions
- stepPrerequisites
- stepResponsible
- stepType
- steps
- stepsData
- taskTemplateId
- trainingProcessTemplate
- trainingProcessTemplateId
- typeOf
- typeOf
- updatedAt
- userInput
- userInput.typeOf
- userInputInstanceId
-
-
-
-
-
- ContentComponents
-
-
- createdAt
- contentComponentTypeId
- updatedAt
-
-
-
- createdat
- type
- updatedat
-
-
-
-
-
- Rename status column (46)
-
-
- w
- -
- -
- -
- -
- -
- -
- -
- -
- w
- w
-
-
-
- statusTypeId
- Option[Int]
- Option[Int]
-
- StatusTypes
- StatusTypes
- StatusTypes.OPEN
- StatusTypes.NEW
- StatusTypes.OPEN
- StatusTypes.NEW
- StatusTypes.done
-
-
-
- status
- -Option[String]
- -String
- -Documents
- -Processes
- -ProcessInstances
- -StepInstances
- -Tasks
- -TaskInstances
- InstanceStatusType
- StatusType
- "started"
- "offen"
- "in Bearbeitung"
- "new"
- "done"
-
-
-
- false
-
-
-
-
- ContentComponentVideoInstances
-
-
- contentComponentInstanceId
-
-
-
- contentComponentInstance
-
-
-
-
-
- Accountable_TaskTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- Rename Table id columns (43-45)
-
-
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
-
-
-
- AuditLogs
- ChangeHistories
- ChangeLogs
- Clients
- ConditionTypes
- ContentCheckListInstances
- ContentCheckLists
- ContentInputInstances
- ContentInputs
- ContentInstances
- ContentOptionListInstances
- ContentOptionLists
- Contents
- ContentTypes
- InputTypes
- Processes
- ProcessInstances
- ProcessPostConditions
- ProcessPreConditions
- StepInstances
- StepPostConditions
- StepPreConditions
- Steps
- TaskInstances
- Tasks
- AuditLog
- ChangeHistory
- ChangeLog
- Client
- ConditionType
- ContentCheckListInstance
- ContentCheckList
- ContentInputInstance
- ContentInput
- ContentInstance
- ContentOptionListInstance
- ContentOptionList
- Content
- ContentType
- InputType
- Process
- ProcessInstance
- ProcessPostCondition
- ProcessPreCondition
- StepInstance
- StepPostCondition
- StepPreCondition
- Step
- TaskInstance
- Task
-
-
-
- AuditLogs
- ChangeHistories
- ChangeLogs
- Clients
- ConditionTypes
- ContentCheckListInstances
- ContentCheckLists
- ContentInputInstances
- ContentInputs
- ContentInstances
- ContentOptionListInstances
- ContentOptionLists
- Contents
- ContentTypes
- InputTypes
- Processes
- ProcessInstances
- ProcessPostConditions
- ProcessPreConditions
- StepInstances
- StepPostConditions
- StepPreConditions
- Steps
- TaskInstances
- Tasks
- AuditLog
- ChangeHistory
- ChangeLog
- Client
- ConditionType
- ContentCheckListInstance
- ContentCheckList
- ContentInputInstance
- ContentInput
- ContentInstance
- ContentOptionListInstance
- ContentOptionList
- Content
- ContentType
- InputType
- Process
- ProcessInstance
- ProcessPostCondition
- ProcessPreCondition
- StepInstance
- StepPostCondition
- StepPreCondition
- Step
- TaskInstance
- Task
-
-
-
- false
-
-
-
-
- Rename approve to approval
-
-
- approvalProcessId
- approvalProcessInstanceId
-
-
-
- checked
- approved
- approveProcessId
- approveProcessInstanceId
-
-
-
-
-
- ProcessPostConditions
-
-
- conditionTypeId
- processTemplateId
- processTemplateId
-
-
-
- conditiontype
- processtemplate
- processTemplate_id
-
-
-
-
-
- ProcessStepsPostConditionProcessTemplate
-
-
- processStepsPostConditionId
- processTemplateId
- processTemplateId
-
-
-
- id
- processtemplate
- processTemplate_id
-
-
-
-
-
- ProcessStepsPrerequisites
-
-
- conditionTypeId
- processStepTemplateId
- processTemplateId
-
-
-
- conditiontype
- processteptemplate
- processTemplate_id
-
-
-
-
-
- ProcessStepsTemplates_ProcessTemplates
-
-
- processStepTemplateId
- processTemplateId
-
-
-
- processStep_id
- processTemplate_id
-
-
-
-
-
- ProcessStepsPrerequisiteProcessTemplate
-
-
- processStepsPrerequisiteId
- processTemplateId
- processTemplateId
-
-
-
- id
- processtemplate
- processTemplate_id
-
-
-
-
-
- ProcessPrerequisites
-
-
- conditionTypeId
- processTemplateId
- processTemplateId
-
-
-
- conditiontype
- processtemplate
- processTemplate_id
-
-
-
-
-
- Responsible_ProcessTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- ChangeHistory
-
-
- createdAt
- userUuid
-
-
-
- createdat
- user
-
-
-
-
-
- ContentComponentChecklistInstances
-
-
- checkedAt
- contentComponentInstanceId
- userUuid
-
-
-
- checkedDate
- contentComponentInstance
- user
-
-
-
-
-
- AAA
-
-
-
-
-
-
-
- FORMAT_TABLE_LEAD_TRAIL_PIPES
- FORMAT_TABLE_SPACE_AROUND_PIPES
- FORMAT_TABLE_ADJUST_COLUMN_WIDTH
- FORMAT_TABLE_APPLY_COLUMN_ALIGNMENT
- FORMAT_TABLE_FILL_MISSING_COLUMNS
- FORMAT_TABLE_LEFT_ALIGN_MARKER
- FORMAT_TABLE_MIN_SEPARATOR_COLUMN_WIDTH
- FORMAT_TABLE_MIN_SEPARATOR_DASHES
- FORMAT_TABLE_TRIM_CELL_WHITESPACE
- FORMAT_CHAR_WIDTH_PROVIDER
- FORMAT_TABLE_CAPTION
-
-
-
- LEAD_TRAIL_PIPES
- SPACE_AROUND_PIPES
- ADJUST_COLUMN_WIDTH
- APPLY_COLUMN_ALIGNMENT
- FILL_MISSING_COLUMNS
- LEFT_ALIGN_MARKER
- MIN_SEPARATOR_COLUMN_WIDTH
- MIN_SEPARATOR_DASHES
- TRIM_CELL_WHITESPACE
- CHAR_WIDTH_PROVIDER
- REMOVE_CAPTION
-
-
-
-
-
- Informed_TaskTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- Refactoring Name Changes
-
-
- approveProcessInstanceId
- approvedAt
- approveProcessTemplateId
- checkedAt
- checkedAt
- clientId
- conditionTypeId
- contentComponentId
- contentComponentId
- contentComponentInstanceId
- contentComponentId
- createdAt
- deadlineAt
- duration
- doneAt
- inputAt
- inputTypeId
- originStepTemplateId
- originProcessTemplateId
- previousVersionId
- processStepInstanceId
- processStepId
- processStepTemplateId
- processTemplateId
- processStepTemplateId
- processStepTemplateId
- processTemplateId
- processStepTemplateId
- taskInstanceId
- trainingProcessTemplateId
- updatedAt
- userUuid
- userUuid
-
-
-
- approveProcessInstance
- approvedat
- approveprocess
- checkedDate
- checkedat
- client
- conditiontype
- contentComponent
- contentComponentID
- contentComponentInstance
- contentComponent_id
- createdat
- deadline
- deadline_
- doneDate
- inputDate
- inputType
- origStepTemplateId
- originTemplate
- previousVersion
- processStepInstanceID
- processStep_id
- processStep_id_
- processTemplate_id
- processstep
- processsteptemplate
- processtemplate
- processteptemplate
- taskTemplateId
- trainingsprocess
- updatedat
- user
- username
-
-
-
-
-
- ContentComponentVideo
-
-
- contentComponentId
-
-
-
- contentComponent
-
-
-
-
-
- ProcessStepInstances
-
-
- deadlineAt
- doneAt
- updatedAt
- userUuid
-
-
-
- deadline
- doneDate
- updatedat
- user
-
-
-
-
-
- ProcessStepsPostConditions
-
-
- conditionTypeId
- processStepTemplateId
- processTemplateId
-
-
-
- conditiontype
- processsteptemplate
- processTemplate_id
-
-
-
-
-
- Rename Table id and other columns (43-45)
-
-
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- b
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- b
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w # change to IS NOT NULL of date column
- w # change to IS NOT NULL of date column
- w # read as is, remove from update/insert
- w # if date is needed add seconds in `duration` to startAt date
- w # read as is, remove from update/insert
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
- w
-
-
-
- AuditLogs
- ChangeHistories
- ChangeLogs
- Clients
- ConditionTypes
- ContentCheckListInstances
- ContentCheckLists
- ContentInputInstances
- ContentInputs
- ContentInstances
- ContentOptionListInstances
- ContentOptionLists
- Contents
- ContentTypes
- InputTypes
- Processes
- ProcessInstances
- ProcessPostConditions
- ProcessPreConditions
- StepInstances
- StepPostConditions
- StepPreConditions
- Steps
- TaskInstances
- Tasks
- AuditLog
- ChangeHistory
- ChangeLog
- Client
- ConditionType
- ContentCheckListInstance
- ContentCheckList
- ContentInputInstance
- ContentInput
- ContentInstance
- ContentOptionListInstance
- ContentOptionList
- Content
- ContentType
- InputType
- Process
- ProcessInstance
- ProcessPostCondition
- ProcessPreCondition
- StepInstance
- StepPostCondition
- StepPreCondition
- Step
- TaskInstance
- Task
- approvalProcessInstanceId
- approvalProcessId
- backStepId
- contentId
- contentInstanceId
- contentTypeId
- negativePostConditionId
- originProcessId
- originStepId
- positivePostConditionId
- processPreConditionId
- stepInstanceId
- stepPostConditionId
- stepPreConditionId
- stepId
- processId
- optionState
- taskId
- trainingProcessId
- text
- id
- Accountable_Processes
- Accountable_Tasks
- ChangeHistories
- ChangeLogs
- Consulted_ProcessInstances
- Consulted_Processes
- Consulted_Tasks
- ContentCheckLists
- ContentCheckListInstances
- ContentInstances
- ContentImages
- ContentImageInstances
- ContentOptionLists
- ContentOptionListInstances
- ContentTables
- ContentTableInstances
- ContentTexts
- ContentTextInstances
- ContentTypes
- ContentInputs
- ContentInputInstances
- ContentVideos
- ContentVideoInstances
- Content_Steps
- Contents
- Step_TriggeredProcess
- Step_TriggeredProcesses
- Informed_ProcessInstances
- Informed_Processes
- Informed_Tasks
- Process_PostConditions
- Process_PreConditions
- ProcessPreConditions
- StepInstances
- Steps
- StepPostCondition_Processes
- StepPostConditions
- StepPreCondition_Processes
- StepPreConditions
- Step_SubProcesses
- Processes
- Responsible_ProcessInstances
- Responsible_Steps
- Responsible_Processes
- Responsible_Tasks
- Tasks
- approved
- checked
- createdAt
- duration
- updatedAt
- step_PreConditions
- step_PostConditions
- stepPreConditions
- stepPostConditions
- step_TriggeredProcesses
- stepTriggeredProcesses
- step_SubProcesses
- responsibleList
- accountableList
- consultedList
- informedList
- step_ResponsibleList
- step
- triggeredProcess
- TriggeredProcess
- process
-
-
-
- AuditLogs
- ChangeHistories
- ChangeLogs
- Clients
- ConditionTypes
- ContentCheckListInstances
- ContentCheckLists
- ContentInputInstances
- ContentInputs
- ContentInstances
- ContentOptionListInstances
- ContentOptionLists
- Contents
- ContentTypes
- InputTypes
- Processes
- ProcessInstances
- ProcessPostConditions
- ProcessPreConditions
- StepInstances
- StepPostConditions
- StepPreConditions
- Steps
- TaskInstances
- Tasks
- AuditLog
- ChangeHistory
- ChangeLog
- Client
- ConditionType
- ContentCheckListInstance
- ContentCheckList
- ContentInputInstance
- ContentInput
- ContentInstance
- ContentOptionListInstance
- ContentOptionList
- Content
- ContentType
- InputType
- Process
- ProcessInstance
- ProcessPostCondition
- ProcessPreCondition
- StepInstance
- StepPostCondition
- StepPreCondition
- Step
- TaskInstance
- Task
- approveProcessInstanceId
- approveProcessTemplateId
- backStepTemplateId
- contentComponentId
- contentComponentInstanceId
- contentComponentTypeId
- negativePostCondition
- originProcessTemplateId
- originStepTemplateId
- positivePostCondition
- processPrerequisiteId
- processStepInstanceId
- processStepsPostConditionId
- processStepsPrerequisiteId
- processStepTemplateId
- processTemplateId
- radioState
- taskTemplateId
- trainingProcessTemplateId
- userInput
- id
- Accountable_ProcessTemplates
- Accountable_TaskTemplates
- ChangeHistory
- Changelog
- Consulted_ProcessInstance
- Consulted_ProcessTemplates
- Consulted_TaskTemplates
- ContentComponentChecklist
- ContentComponentChecklistInstances
- ContentComponentInstances
- ContentComponentPicture
- ContentComponentPictureInstances
- ContentComponentRadioButton
- ContentComponentRadioButtonInstances
- ContentComponentTable
- ContentComponentTableInstances
- ContentComponentText
- ContentComponentTextInstances
- ContentComponentTypes
- ContentComponentUserInput
- ContentComponentUserInputInstances
- ContentComponentVideo
- ContentComponentVideoInstances
- ContentComponent_ProcessStepTemplate
- ContentComponents
- Step_DerivedProcess
- DerivedProcesses
- Informed_ProcessInstance
- Informed_ProcessTemplates
- Informed_TaskTemplates
- ProcessPostConditionProcessTemplate
- ProcessPrerequisiteProcessTemplate
- ProcessPrerequisites
- ProcessStepInstances
- ProcessStepTemplates
- ProcessStepsPostConditionProcessTemplate
- ProcessStepsPostConditions
- ProcessStepsPrerequisiteProcessTemplate
- ProcessStepsPrerequisites
- ProcessStepsTemplates_ProcessTemplates
- ProcessTemplates
- Responsible_ProcessInstance
- Responsible_ProcessStepTemplates
- Responsible_ProcessTemplates
- Responsible_TaskTemplates
- TaskTemplates
- approved
- checked
- createdAt
- duration
- updatedAt
- prerequisites
- postconditions
- stepPrerequisites
- stepPostconditions
- derivedProcesses
- stepDerivedProcesses
- addProcessToProcessStepArray
- responsible
- accountable
- consulted
- informed
- stepResponsible
- processStepTemplate
- derivedProcess
- DerivedProcess
- processTemplate
-
-
-
- false
-
-
-
-
- Table columns changes (43-45)
-
-
- # change to IS NOT NULL of date column
- # change to IS NOT NULL of date column
- # read as is, remove from update/insert
- # if date is needed add seconds in `duration` to startAt date
- # read as is, remove from update/insert
-
-
-
- approved
- checked
- createdAt
- duration
- updatedAt
-
-
-
- approved
- checked
- createdAt
- duration
- updatedAt
-
-
-
-
-
- ProcessTemplates
-
-
- approvedAt
- approveProcessTemplateId
- approveProcessInstanceId
- checkedAt
- clientId
- createdAt
- duration
- originProcessTemplateId
- previousVersionId
- trainingProcessTemplateId
- updatedAt
-
-
-
- approvedat
- approveprocess
- approveProcessInstance
- checkedat
- client
- createdat
- deadline
- originTemplate
- previousVersion
- trainingsprocess
- updatedat
-
-
-
-
-
- Rename Table columns (43-45)
-
-
- approvalProcessInstanceId
- approvalProcessId
- backStepId
- contentId
- contentInstanceId
- contentTypeId
- negativePostConditionId
- originProcessId
- originStepId
- positivePostConditionId
- processPreConditionId
- stepInstanceId
- stepsPostConditionId
- stepPreConditionId
- stepId
- processId
- optionState
- taskId
- trainingProcessId
- text
-
-
-
- approveProcessInstanceId
- approveProcessTemplateId
- backStepTemplateId
- contentComponentId
- contentComponentInstanceId
- contentComponentTypeId
- negativePostCondition
- originProcessTemplateId
- originStepTemplateId
- positivePostCondition
- processPrerequisiteId
- processStepInstanceId
- processStepsPostConditionId
- processStepsPrerequisiteId
- processStepTemplateId
- processTemplateId
- radioState
- taskTemplateId
- trainingProcessTemplateId
- userInput
-
-
-
-
-
- ContentComponentTableInstances
-
-
- contentComponentInstanceId
-
-
-
- contentComponentInstance
-
-
-
-
-
- ContentComponentTextInstances
-
-
- contentComponentInstanceId
-
-
-
- contentComponentInstance
-
-
-
-
-
- DerivedProcesses
-
-
- processStepTemplateId
- processTemplateId
- processTemplateId
-
-
-
- processstep
- processtemplate
- processTemplate_id
-
-
-
-
-
- Responsible_TaskTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- TaskInstances
-
-
- clientId
- deadlineAt
- processStepInstanceId
- updatedAt
-
-
-
- client
- deadline
- processStepInstanceID
- updatedat
-
-
-
-
-
- ContentComponentUserInput
-
-
- contentComponentId
- inputTypeId
-
-
-
- contentComponent
- inputType
-
-
-
-
-
- ProcessStepTemplates
-
-
- createdAt
- duration
- originStepTemplateId
- processTemplateId
- updatedAt
- processTemplateId
-
-
-
- createdat
- deadline
- origStepTemplateId
- processtemplate
- updatedat
- processTemplate_id
-
-
-
-
-
- ContentComponentPictureInstances
-
-
- contentComponentInstanceId
-
-
-
- contentComponentInstance
-
-
-
-
-
- ContentComponentInstances
-
-
- clientId
- contentComponentId
- createdAt
- processStepInstanceId
- contentComponentTypeId
- updatedAt
-
-
-
- client
- contentComponentID
- createdat
- processStepInstanceID
- type
- updatedat
-
-
-
-
-
- Fix constraint case
-
-
- Accountable_ProcessInstance
- Accountable_TaskInstances
- AuditLogs
- ChangeHistory
- Changelog
- Clients
- ConditionTypes
- Consulted_ProcessInstance
- Consulted_ProcessTemplates
- Consulted_TaskInstances
- Consulted_TaskTemplates
- ContentComponent_ProcessStepTemplate
- ContentComponentChecklist
- ContentComponentChecklistInstances
- ContentComponentInstances
- ContentComponentPicture
- ContentComponentPictureInstances
- ContentComponentRadioButton
- ContentComponentRadioButtonInstances
- ContentComponents
- ContentComponentTable
- ContentComponentTableInstances
- ContentComponentText
- ContentComponentTextInstances
- ContentComponentTypes
- ContentComponentUserInput
- ContentComponentUserInputInstances
- ContentComponentVideo
- ContentComponentVideoInstances
- DerivedProcesses
- Informed_ProcessInstance
- Informed_ProcessTemplates
- Informed_TaskInstances
- Informed_TaskTemplates
- InputTypes
- ProcessInstances
- ProcessPostConditionProcessTemplate
- ProcessPostConditions
- ProcessPrerequisiteProcessTemplate
- ProcessPrerequisites
- ProcessStepInstances
- ProcessStepsPostConditionProcessTemplate
- ProcessStepsPostConditions
- ProcessStepsPrerequisiteProcessTemplate
- ProcessStepsPrerequisites
- ProcessStepsTemplates_ProcessTemplates
- ProcessStepTemplates
- ProcessTemplates
- Responsible_ProcessInstance
- Responsible_ProcessStepTemplates
- Responsible_ProcessTemplates
- Responsible_TaskInstances
- Responsible_TaskTemplates
- TaskInstances
- TaskTemplates
-
-
-
- accountable_processinstance
- accountable_taskinstances
- auditlogs
- changehistory
- changelog
- clients
- conditiontypes
- consulted_processinstance
- consulted_processtemplates
- consulted_taskinstances
- consulted_tasktemplates
- contentcomponent_processsteptemplate
- contentcomponentchecklist
- contentcomponentchecklistinstances
- contentcomponentinstances
- contentcomponentpicture
- contentcomponentpictureinstances
- contentcomponentradiobutton
- contentcomponentradiobuttoninstances
- contentcomponents
- contentcomponenttable
- contentcomponenttableinstances
- contentcomponenttext
- contentcomponenttextinstances
- contentcomponenttypes
- contentcomponentuserinput
- contentcomponentuserinputinstances
- contentcomponentvideo
- contentcomponentvideoinstances
- derivedprocesses
- informed_processinstance
- informed_processtemplates
- informed_taskinstances
- informed_tasktemplates
- inputtypes
- processinstances
- processpostconditionprocesstemplate
- processpostconditions
- processprerequisiteprocesstemplate
- processprerequisites
- processstepinstances
- processstepspostconditionprocesstemplate
- processstepspostconditions
- processstepsprerequisiteprocesstemplate
- processstepsprerequisites
- processstepstemplates_processtemplates
- processsteptemplates
- processtemplates
- responsible_processinstance
- responsible_processsteptemplates
- responsible_processtemplates
- responsible_taskinstances
- responsible_tasktemplates
- taskinstances
- tasktemplates
-
-
-
-
-
- Informed_TaskInstances
-
-
- taskInstanceId
- userUuid
-
-
-
- taskTemplateId
- username
-
-
-
-
-
- ContentComponentUsageSearchModel
-
-
- contentComponentId
- processStepId
-
-
-
- contentComponent_id
- processStep_id
-
-
-
-
-
- Consulted_TaskInstances
-
-
- taskInstanceId
- userUuid
-
-
-
- taskTemplateId
- username
-
-
-
-
-
- Responsible_TaskInstances
-
-
- taskInstanceId
- userUuid
-
-
-
- taskTemplateId
- username
-
-
-
-
-
- Rename Tables to Standard (43-45)
-
-
- Accountable_Processes
- Accountable_Tasks
- ChangeHistories
- ChangeLogs
- Consulted_ProcessInstances
- Consulted_Processes
- Consulted_Tasks
- ContentCheckLists
- ContentCheckListInstances
- ContentInstances
- ContentImages
- ContentImageInstances
- ContentOptionLists
- ContentOptionListInstances
- ContentTables
- ContentTableInstances
- ContentTexts
- ContentTextInstances
- ContentTypes
- ContentInputs
- ContentInputInstances
- ContentVideos
- ContentVideoInstances
- Content_Steps
- Contents
- Step_TriggeredProcesses
- Informed_ProcessInstances
- Informed_Processes
- Informed_Tasks
- Process_PostConditions
- Process_PreConditions
- ProcessPreConditions
- StepInstances
- Steps
- StepPostCondition_Processes
- StepPostConditions
- StepPreCondition_Processes
- StepPreConditions
- Step_Processes
- Processes
- Responsible_ProcessInstances
- Responsible_Steps
- Responsible_Processes
- Responsible_Tasks
- Tasks
-
-
-
- Accountable_ProcessTemplates
- Accountable_TaskTemplates
- ChangeHistory
- Changelog
- Consulted_ProcessInstance
- Consulted_ProcessTemplates
- Consulted_TaskTemplates
- ContentComponentChecklist
- ContentComponentChecklistInstances
- ContentComponentInstances
- ContentComponentPicture
- ContentComponentPictureInstances
- ContentComponentRadioButton
- ContentComponentRadioButtonInstances
- ContentComponentTable
- ContentComponentTableInstances
- ContentComponentText
- ContentComponentTextInstances
- ContentComponentTypes
- ContentComponentUserInput
- ContentComponentUserInputInstances
- ContentComponentVideo
- ContentComponentVideoInstances
- ContentComponent_ProcessStepTemplate
- ContentComponents
- DerivedProcesses
- Informed_ProcessInstance
- Informed_ProcessTemplates
- Informed_TaskTemplates
- ProcessPostConditionProcessTemplate
- ProcessPrerequisiteProcessTemplate
- ProcessPrerequisites
- ProcessStepInstances
- ProcessStepTemplates
- ProcessStepsPostConditionProcessTemplate
- ProcessStepsPostConditions
- ProcessStepsPrerequisiteProcessTemplate
- ProcessStepsPrerequisites
- ProcessStepsTemplates_ProcessTemplates
- ProcessTemplates
- Responsible_ProcessInstance
- Responsible_ProcessStepTemplates
- Responsible_ProcessTemplates
- Responsible_TaskTemplates
- TaskTemplates
-
-
-
-
-
- Responsible_ProcessStepTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- Accountable_ProcessInstance
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- ContentComponentRadioButton
-
-
- contentComponentId
-
-
-
- contentComponent
-
-
-
-
-
- Accountable_TaskInstances
-
-
- taskInstanceId
- userUuid
-
-
-
- taskTemplateId
- username
-
-
-
-
-
- ContentComponentPicture
-
-
- contentComponentId
-
-
-
- contentComponent
-
-
-
-
-
- Responsible_ProcessInstance
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- ContentComponent_ProcessStepTemplate
-
-
- contentComponentId
- processStepTemplateId
-
-
-
- contentComponent_id
- processStep_id
-
-
-
-
-
- Informed_ProcessTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- TaskTemplates
-
-
- approvedAt
- approveProcessTemplateId
- checkedAt
- clientId
- createdAt
- duration
- originProcessTemplateId
- previousVersionId
- trainingProcessTemplateId
- updatedAt
-
-
-
- approvedat
- approveprocess
- checkedat
- client
- createdat
- deadline
- originTemplate
- previousVersion
- trainingsprocess
- updatedat
-
-
-
-
-
- Changelog
-
-
- createdAt
-
-
-
- createdat
-
-
-
-
-
- Consulted_TaskTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- Rename Tables to Standard
-
-
- Accountable_Processes
- Accountable_Tasks
- ChangeHistories
- ChangeLogs
- Consulted_ProcessInstances
- Consulted_Processes
- Consulted_Tasks
- ContentCheckLists
- ContentCheckListInstances
- ContentInstances
- ContentPictures
- ContentPictureInstances
- ContentOptionLists
- ContentOptionListInstances
- ContentTables
- ContentTableInstances
- ContentTexts
- ContentTextInstances
- ContentTypes
- ContentInputs
- ContentInputInstances
- ContentVideos
- ContentVideoInstances
- Content_Steps
- Contents
- Step_TriggeredProcesses
- Informed_ProcessInstances
- Informed_Processes
- Informed_Tasks
- Process_PostConditions
- Process_PreConditions
- ProcessPreConditions
- StepInstances
- Steps
- StepPostCondition_Processes
- StepPostConditions
- StepPreCondition_Processes
- StepPreConditions
- Step_Processes
- Processes
- Responsible_ProcessInstances
- Responsible_ProcessSteps
- Responsible_Processes
- Responsible_Tasks
- Tasks
- ContentImages
- ContentImageInstances
- Accountable_ProcessInstances
-
-
-
- Accountable_ProcessTemplates
- Accountable_TaskTemplates
- ChangeHistory
- Changelog
- Consulted_ProcessInstance
- Consulted_ProcessTemplates
- Consulted_TaskTemplates
- ContentComponentChecklist
- ContentComponentChecklistInstances
- ContentComponentInstances
- ContentComponentPicture
- ContentComponentPictureInstances
- ContentComponentRadioButton
- ContentComponentRadioButtonInstances
- ContentComponentTable
- ContentComponentTableInstances
- ContentComponentText
- ContentComponentTextInstances
- ContentComponentTypes
- ContentComponentUserInput
- ContentComponentUserInputInstances
- ContentComponentVideo
- ContentComponentVideoInstances
- ContentComponent_ProcessStepTemplate
- ContentComponents
- DerivedProcesses
- Informed_ProcessInstance
- Informed_ProcessTemplates
- Informed_TaskTemplates
- ProcessPostConditionProcessTemplate
- ProcessPrerequisiteProcessTemplate
- ProcessPrerequisites
- ProcessStepInstances
- ProcessStepTemplates
- ProcessStepsPostConditionProcessTemplate
- ProcessStepsPostConditions
- ProcessStepsPrerequisiteProcessTemplate
- ProcessStepsPrerequisites
- ProcessStepsTemplates_ProcessTemplates
- ProcessTemplates
- Responsible_ProcessInstance
- Responsible_ProcessStepTemplates
- Responsible_ProcessTemplates
- Responsible_TaskTemplates
- TaskTemplates
- ContentPictures
- ContentPictureInstances
- Accountable_ProcessInstance
-
-
-
- false
-
-
-
-
- AuditLogs
-
-
- createdAt
- userUuid
-
-
-
- createdat
- user
-
-
-
-
-
- ContentComponentRadioButtonInstances
-
-
- checkedAt
- contentComponentInstanceId
- userUuid
-
-
-
- checkedDate
- contentComponentInstance
- user
-
-
-
-
-
- Accountable_ProcessTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- Clients
-
-
- createdAt
- updatedAt
-
-
-
- createdat
- updatedat
-
-
-
-
-
- Consulted_ProcessInstance
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- Informed_ProcessInstance
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- ProcessInstances
-
-
- deadlineAt
- doneAt
- updatedAt
- userUuid
-
-
-
- deadline
- doneDate
- updatedat
- user
-
-
-
-
-
- ContentComponentTable
-
-
- contentComponentId
-
-
-
- contentComponent
-
-
-
-
-
- ContentComponentChecklist
-
-
- contentComponentId
-
-
-
- contentComponent
-
-
-
-
-
- ProcessPrerequisiteProcessTemplate
-
-
- processPrerequisiteId
- processTemplateId
- processTemplateId
-
-
-
- id
- processtemplate
- processTemplate_id
-
-
-
-
-
- Flexmark Deprecated
-
-
-
-
- !
- !
-
- !
-
-
-
- FORMAT_TABLE_LEAD_TRAIL_PIPES
- FORMAT_TABLE_SPACE_AROUND_PIPES
- FORMAT_TABLE_ADJUST_COLUMN_WIDTH
- FORMAT_TABLE_APPLY_COLUMN_ALIGNMENT
- FORMAT_TABLE_FILL_MISSING_COLUMNS
- FORMAT_TABLE_LEFT_ALIGN_MARKER
- FORMAT_TABLE_MIN_SEPARATOR_COLUMN_WIDTH
- MIN_SEPARATOR_DASHES
- TRIM_CELL_WHITESPACE
- FORMAT_CHAR_WIDTH_PROVIDER
- FORMAT_TABLE_CAPTION
- FORMAT_TABLE_LEAD_TRAIL_PIPES
- FORMAT_TABLE_SPACE_AROUND_PIPES
- FORMAT_TABLE_ADJUST_COLUMN_WIDTH
- FORMAT_TABLE_APPLY_COLUMN_ALIGNMENT
- FORMAT_TABLE_FILL_MISSING_COLUMNS
- FORMAT_TABLE_CAPTION
- FORMAT_TABLE_LEFT_ALIGN_MARKER
- FORMAT_TABLE_MIN_SEPARATOR_COLUMN_WIDTH
- FORMAT_TABLE_MIN_SEPARATOR_DASHES
- TablesExtension.FORMAT_TABLE_CAPTION, TableCaptionHandling.REMOVE
- TablesExtension.FORMAT_TABLE_CAPTION, TableCaptionHandling.AS_IS
- MIN_SEPARATOR_DASHES
-
-
-
- LEAD_TRAIL_PIPES
- SPACE_AROUND_PIPES
- ADJUST_COLUMN_WIDTH
- APPLY_COLUMN_ALIGNMENT
- FILL_MISSING_COLUMNS
- LEFT_ALIGN_MARKER
- MIN_SEPARATOR_COLUMN_WIDTH
- MIN_SEPARATOR_DASHES
- TRIM_CELL_WHITESPACE
- CHAR_WIDTH_PROVIDER
- REMOVE_CAPTION
- FORMAT_LEAD_TRAIL_PIPES
- FORMAT_SPACE_AROUND_PIPES
- FORMAT_ADJUST_COLUMN_WIDTH
- FORMAT_APPLY_COLUMN_ALIGNMENT
- FORMAT_FILL_MISSING_COLUMNS
- FORMAT_REMOVE_CAPTION
- FORMAT_LEFT_ALIGN_MARKER
- FORMAT_MIN_SEPARATOR_COLUMN_WIDTH
- FORMAT_MIN_SEPARATOR_DASHES
- TablesExtension.FORMAT_REMOVE_CAPTION, true
- TablesExtension.FORMAT_REMOVE_CAPTION, false
- FORMAT_TABLE_MIN_SEPARATOR_DASHES
-
-
-
-
-
- ContentComponentText
-
-
- contentComponentId
-
-
-
- contentComponent
-
-
-
-
-
- Consulted_ProcessTemplates
-
-
- userUuid
-
-
-
- username
-
-
-
-
-
- ContentComponentUserInputInstances
-
-
- contentComponentInstanceId
- inputAt
- inputTypeId
- userUuid
-
-
-
- contentComponentInstance
- inputDate
- inputType
- user
-
-
-
-
-
-
-
-
-
- !
- !
-
- !
-
-
-
- FORMAT_TABLE_LEAD_TRAIL_PIPES
- FORMAT_TABLE_SPACE_AROUND_PIPES
- FORMAT_TABLE_ADJUST_COLUMN_WIDTH
- FORMAT_TABLE_APPLY_COLUMN_ALIGNMENT
- FORMAT_TABLE_FILL_MISSING_COLUMNS
- FORMAT_TABLE_LEFT_ALIGN_MARKER
- FORMAT_TABLE_MIN_SEPARATOR_COLUMN_WIDTH
- MIN_SEPARATOR_DASHES
- TRIM_CELL_WHITESPACE
- FORMAT_CHAR_WIDTH_PROVIDER
- FORMAT_TABLE_CAPTION
- FORMAT_TABLE_LEAD_TRAIL_PIPES
- FORMAT_TABLE_SPACE_AROUND_PIPES
- FORMAT_TABLE_ADJUST_COLUMN_WIDTH
- FORMAT_TABLE_APPLY_COLUMN_ALIGNMENT
- FORMAT_TABLE_FILL_MISSING_COLUMNS
- FORMAT_TABLE_CAPTION
- FORMAT_TABLE_LEFT_ALIGN_MARKER
- FORMAT_TABLE_MIN_SEPARATOR_COLUMN_WIDTH
- FORMAT_TABLE_MIN_SEPARATOR_DASHES
- TablesExtension.FORMAT_TABLE_CAPTION, TableCaptionHandling.REMOVE
- TablesExtension.FORMAT_TABLE_CAPTION, TableCaptionHandling.AS_IS
- MIN_SEPARATOR_DASHES
-
-
-
- LEAD_TRAIL_PIPES
- SPACE_AROUND_PIPES
- ADJUST_COLUMN_WIDTH
- APPLY_COLUMN_ALIGNMENT
- FILL_MISSING_COLUMNS
- LEFT_ALIGN_MARKER
- MIN_SEPARATOR_COLUMN_WIDTH
- MIN_SEPARATOR_DASHES
- TRIM_CELL_WHITESPACE
- CHAR_WIDTH_PROVIDER
- REMOVE_CAPTION
- FORMAT_LEAD_TRAIL_PIPES
- FORMAT_SPACE_AROUND_PIPES
- FORMAT_ADJUST_COLUMN_WIDTH
- FORMAT_APPLY_COLUMN_ALIGNMENT
- FORMAT_FILL_MISSING_COLUMNS
- FORMAT_REMOVE_CAPTION
- FORMAT_LEFT_ALIGN_MARKER
- FORMAT_MIN_SEPARATOR_COLUMN_WIDTH
- FORMAT_MIN_SEPARATOR_DASHES
- TablesExtension.FORMAT_REMOVE_CAPTION, true
- TablesExtension.FORMAT_REMOVE_CAPTION, false
- FORMAT_TABLE_MIN_SEPARATOR_DASHES
-
-
-
+
+
+
+ flexmark-java 0.50.x to 0.60.0
+
+
+
+ All
+
+
+ approveProcessInstanceId
+approvedAt
+approveProcessTemplateId
+checkedAt
+checkedAt
+clientId
+conditionTypeId
+contentComponentId
+contentComponentId
+contentComponentInstanceId
+contentComponentId
+createdAt
+deadlineAt
+duration
+doneAt
+inputAt
+inputTypeId
+originStepTemplateId
+originProcessTemplateId
+previousVersionId
+processStepInstanceId
+processStepId
+processStepTemplateId
+processTemplateId
+processStepTemplateId
+processStepTemplateId
+processTemplateId
+processStepTemplateId
+taskInstanceId
+trainingProcessTemplateId
+updatedAt
+userUuid
+userUuid
+
+
+
+ approveProcessInstance
+approvedat
+approveprocess
+checkedDate
+checkedat
+client
+conditiontype
+contentComponent
+contentComponentID
+contentComponentInstance
+contentComponent_id
+createdat
+deadline
+deadline_
+doneDate
+inputDate
+inputType
+origStepTemplateId
+originTemplate
+previousVersion
+processStepInstanceID
+processStep_id
+processStep_id_
+processTemplate_id
+processstep
+processsteptemplate
+processtemplate
+processteptemplate
+taskTemplateId
+trainingsprocess
+updatedat
+user
+username
+
+
+
+
+ ProcessPostConditionProcessTemplate
+
+
+ processPostConditionId
+ processTemplateId
+
+
+
+ id
+ processtemplate
+
+
+
+
+
+ Rename id and other columns (43-45)
+
+
+ b
+
+ # change to IS NOT NULL of date column
+
+ # read as is, remove from update/insert
+
+ # if date is needed add seconds in `duration` to startAt date
+
+ # read as is, remove from update/insert
+ # change to IS NOT NULL of date column
+
+
+
+ processInstanceId
+ stepId
+ Accountable_Documents
+ Consulted_Documents
+ TriggeredProcess
+ Documents
+ Informed_Documents
+ InputType.radioButton
+ Responsible_Documents
+ accountableList
+ step_SubProcesses
+ approvalProcessInstanceId
+ approvalProcessInstanceId
+ approvalProcess
+ approvalProcessId
+ approved
+ backStepId
+ checked
+ optionState
+ checkLists
+ consultedList
+ contentId
+ contentInstanceId
+ contentTypeId
+ createdAt
+ triggeredProcess
+ step_TriggeredProcesses
+ duration
+ documentId
+ processId
+ processInstanceIds
+ informedList
+ negativePostConditionId
+ originDocumentId
+ originProcessId
+ originStepId
+ image
+ images
+ positivePostConditionId
+ postConditionTypeId
+ postConditionsArray
+ step_PostConditions
+ preConditionsArray
+ preConditionTypeId
+ step_PreConditions
+ url
+ processPreConditionId
+ conditionTypeId
+ stepId
+ stepInstance
+ stepInstanceId
+ stepInstances
+ step
+ stepId
+ steps
+ stepPostConditionId
+ stepPreConditionId
+ process
+ processId
+ processIds
+ optionList
+ optionListInstanceId
+ optionLists
+ optionState
+ step_responsibleList
+ responsibleList
+ stepTriggeredProcesses
+ stepInstanceIds
+ stepPostConditions
+ stepPreConditions
+ step_ResponsibleList
+ stepTypeId
+ stepInstances
+ stepsData
+ taskId
+ trainingProcess
+ trainingProcessId
+ contentTypeId
+ inputTypeId
+ updatedAt
+ text
+ userInput.inputTypeId
+ inputInstanceId
+
+
+
+ -id
+ -id
+ Accountable_DocumentTemplates
+ Consulted_DocumentTemplates
+ DerivedProcess
+ DocumentTemplates
+ Informed_DocumentTemplates
+ InputType.radioButton
+ Responsible_DocumentTemplates
+ accountable
+ addProcessToProcessStepArray
+ approveProcessInstance
+ approveProcessInstanceId
+ approveProcessTemplate
+ approveProcessTemplateId
+ approved
+ backStepTemplateId
+ checked
+ checkedStatus
+ checklists
+ consulted
+ contentComponentId
+ contentComponentInstanceId
+ contentComponentTypeId
+ createdAt
+ derivedProcess
+ derivedProcesses
+ duration
+ id
+ -id
+ ids
+ informed
+ negativePostCondition
+ originDocumentTemplateId
+ originProcessTemplateId
+ originStepTemplateId
+ picture
+ pictures
+ positivePostCondition
+ postConditionType
+ postConditionsArray
+ postconditions
+ preConditionsArray
+ prerequisiteType
+ prerequisites
+ preview
+ processPrerequisiteId
+ processStepConditionId
+ processStepId
+ processStepInstance
+ processStepInstanceId
+ processStepInstances
+ processStepTemplate
+ processStepTemplateId
+ processStepTemplates
+ processStepsPostConditionId
+ processStepsPrerequisiteId
+ processTemplate
+ processTemplateId
+ processTemplateIds
+ radioButton
+ radioButtonInstanceId
+ radioButtons
+ radioState
+ responsible
+ responsible
+ stepDerivedProcesses
+ stepIds
+ stepPostconditions
+ stepPrerequisites
+ stepResponsible
+ stepType
+ steps
+ stepsData
+ taskTemplateId
+ trainingProcessTemplate
+ trainingProcessTemplateId
+ typeOf
+ typeOf
+ updatedAt
+ userInput
+ userInput.typeOf
+ userInputInstanceId
+
+
+
+
+
+ ContentComponents
+
+
+ createdAt
+contentComponentTypeId
+updatedAt
+
+
+
+ createdat
+type
+updatedat
+
+
+
+
+
+ Rename status column (46)
+
+
+ w
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ w
+ w
+
+
+
+ statusTypeId
+ Option[Int]
+ Option[Int]
+
+ StatusTypes
+ StatusTypes
+ StatusTypes.OPEN
+ StatusTypes.NEW
+ StatusTypes.OPEN
+ StatusTypes.NEW
+ StatusTypes.done
+
+
+
+ status
+ -Option[String]
+ -String
+ -Documents
+ -Processes
+ -ProcessInstances
+ -StepInstances
+ -Tasks
+ -TaskInstances
+ InstanceStatusType
+ StatusType
+ "started"
+ "offen"
+ "in Bearbeitung"
+ "new"
+ "done"
+
+
+
+ false
+
+
+
+
+ ContentComponentVideoInstances
+
+
+ contentComponentInstanceId
+
+
+
+ contentComponentInstance
+
+
+
+
+
+ Accountable_TaskTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ Adaptable Changes - Plugin Utils
+
+
+ w
+b
+
+
+ JComboBox<String>
+JComboBox<String>
+
+
+ JComboBox
+JComboBox<String>
+
+
+ false
+
+
+
+
+ Rename Table id columns (43-45)
+
+
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+
+
+
+ AuditLogs
+ ChangeHistories
+ ChangeLogs
+ Clients
+ ConditionTypes
+ ContentCheckListInstances
+ ContentCheckLists
+ ContentInputInstances
+ ContentInputs
+ ContentInstances
+ ContentOptionListInstances
+ ContentOptionLists
+ Contents
+ ContentTypes
+ InputTypes
+ Processes
+ ProcessInstances
+ ProcessPostConditions
+ ProcessPreConditions
+ StepInstances
+ StepPostConditions
+ StepPreConditions
+ Steps
+ TaskInstances
+ Tasks
+ AuditLog
+ ChangeHistory
+ ChangeLog
+ Client
+ ConditionType
+ ContentCheckListInstance
+ ContentCheckList
+ ContentInputInstance
+ ContentInput
+ ContentInstance
+ ContentOptionListInstance
+ ContentOptionList
+ Content
+ ContentType
+ InputType
+ Process
+ ProcessInstance
+ ProcessPostCondition
+ ProcessPreCondition
+ StepInstance
+ StepPostCondition
+ StepPreCondition
+ Step
+ TaskInstance
+ Task
+
+
+
+ AuditLogs
+ ChangeHistories
+ ChangeLogs
+ Clients
+ ConditionTypes
+ ContentCheckListInstances
+ ContentCheckLists
+ ContentInputInstances
+ ContentInputs
+ ContentInstances
+ ContentOptionListInstances
+ ContentOptionLists
+ Contents
+ ContentTypes
+ InputTypes
+ Processes
+ ProcessInstances
+ ProcessPostConditions
+ ProcessPreConditions
+ StepInstances
+ StepPostConditions
+ StepPreConditions
+ Steps
+ TaskInstances
+ Tasks
+ AuditLog
+ ChangeHistory
+ ChangeLog
+ Client
+ ConditionType
+ ContentCheckListInstance
+ ContentCheckList
+ ContentInputInstance
+ ContentInput
+ ContentInstance
+ ContentOptionListInstance
+ ContentOptionList
+ Content
+ ContentType
+ InputType
+ Process
+ ProcessInstance
+ ProcessPostCondition
+ ProcessPreCondition
+ StepInstance
+ StepPostCondition
+ StepPreCondition
+ Step
+ TaskInstance
+ Task
+
+
+
+ false
+
+
+
+
+ Rename approve to approval
+
+
+ approvalProcessId
+ approvalProcessInstanceId
+
+
+
+ checked
+ approved
+ approveProcessId
+ approveProcessInstanceId
+
+
+
+
+
+ MarkdownNav - Specific Composite All Impl
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FlexmarkExampleAstImpl
+FlexmarkExampleHtmlImpl
+FlexmarkExampleImpl
+FlexmarkExampleOptionImpl
+FlexmarkExampleOptionsImpl
+FlexmarkExampleSourceImpl
+FlexmarkFrontMatterBlockImpl
+MdAbbreviatedTextImpl
+MdAbbreviationIdImpl
+MdAbbreviationImpl
+MdAbbreviationRefIdImpl
+MdAbbreviationTextImpl
+MdAdmonitionImpl
+MdAnchorLinkImpl
+MdAsideBlockImpl
+MdAttributeIdValueImpl
+MdAttributeImpl
+MdAttributeNameImpl
+MdAttributeNameImplicitClassImpl
+MdAttributeNameImplicitIdImpl
+MdAttributesImpl
+MdAttributeValueImpl
+MdAtxHeaderImpl
+MdAutoLinkImpl
+MdBlankLineImpl
+MdBlockCommentImpl
+MdBlockQuoteImpl
+MdCompositeImpl
+MdDefinitionImpl
+MdDefinitionListImpl
+MdDefinitionTermImpl
+MdEmojiIdImpl
+MdEmojiImpl
+MdEnumeratedReferenceFormatImpl
+MdEnumeratedReferenceFormatTextImpl
+MdEnumeratedReferenceFormatTypeImpl
+MdEnumeratedReferenceIdImpl
+MdEnumeratedReferenceLinkImpl
+MdEnumeratedReferenceTextImpl
+MdExplicitLinkImpl
+MdFootnoteIdImpl
+MdFootnoteImpl
+MdFootnoteRefIdImpl
+MdFootnoteRefImpl
+MdFootnoteTextImpl
+MdGitLabBlockQuoteImpl
+MdHeaderTextImpl
+MdHRuleImpl
+MdHtmlBlockImpl
+MdImageLinkImpl
+MdImageLinkRefImpl
+MdImageLinkRefUrlContentImpl
+MdImageLinkTextImpl
+MdImageLinkTitleImpl
+MdInlineBoldImpl
+MdInlineCodeImpl
+MdInlineCommentImpl
+MdInlineGitLabDelImpl
+MdInlineGitLabInsImpl
+MdInlineGitLabMathImpl
+MdInlineHardBreakImpl
+MdInlineHtmlEntityImpl
+MdInlineHtmlImpl
+MdInlineItalicImpl
+MdInlineMailLinkImpl
+MdInlineQuotedImpl
+MdInlineSpecialTextImpl
+MdInlineStrikethroughImpl
+MdInlineSubscriptImpl
+MdInlineSuperscriptImpl
+MdInlineTypographicImpl
+MdInlineUnderlineImpl
+MdJekyllFrontMatterBlockImpl
+MdJekyllIncludeImpl
+MdJekyllIncludeLinkRefImpl
+MdLinkAnchorImpl
+MdLinkRefImpl
+MdLinkTextImpl
+MdLinkTitleImpl
+MdMacroIdImpl
+MdMacroImpl
+MdMacroRefIdImpl
+MdMacroRefImpl
+MdMacroTextImpl
+MdOrderedListImpl
+MdOrderedListItemImpl
+MdParagraphImpl
+MdRefAnchorIdImpl
+MdRefAnchorImpl
+MdReferenceAnchorImpl
+MdReferenceIdentifierImpl
+MdReferenceImageImpl
+MdReferenceImageReferenceImpl
+MdReferenceImpl
+MdReferenceLinkImpl
+MdReferenceLinkReferenceImpl
+MdReferenceLinkRefImpl
+MdReferenceTitleImpl
+MdReferencingElementIdentifierImpl
+MdSetextHeaderImpl
+MdSimTocImpl
+MdTableBodyImpl
+MdTableCaptionImpl
+MdTableCellImpl
+MdTableHeaderImpl
+MdTableImpl
+MdTableRowImpl
+MdTableSeparatorImpl
+MdTextBlockImpl
+MdTocImpl
+MdUnorderedListImpl
+MdUnorderedListItemImpl
+MdVerbatimImpl
+MdVerbatimLanguageImpl
+MdWikiLinkAnchorImpl
+MdWikiLinkImpl
+MdWikiLinkRefImpl
+MdWikiLinkTextImpl
+
+
+
+
+
+ ProcessPostConditions
+
+
+ conditionTypeId
+processTemplateId
+processTemplateId
+
+
+
+ conditiontype
+processtemplate
+processTemplate_id
+
+
+
+
+
+ ProcessStepsPostConditionProcessTemplate
+
+
+ processStepsPostConditionId
+processTemplateId
+processTemplateId
+
+
+
+ id
+processtemplate
+processTemplate_id
+
+
+
+
+
+ ProcessStepsPrerequisites
+
+
+ conditionTypeId
+processStepTemplateId
+processTemplateId
+
+
+
+ conditiontype
+processteptemplate
+processTemplate_id
+
+
+
+
+
+ Moved CodeStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myArrangeAbbreviations
+myArrangeFootnotes
+myArrangeMacros
+myArrangeReferences
+myArrangeEnumeratedReferenceFormats
+mySortAbbreviations
+mySortFootnotes
+mySortMacros
+mySortReferences
+mySortEnumeratedReferenceFormats
+myKeepBlankLines
+myIndentSize
+myTabSize
+myKeepTrailingSpaces
+myCodeKeepTrailingSpaces
+myFlexmarkExampleKeepTrailingSpaces
+mySmartTabs
+myUseTabCharacter
+myTabSizeLabel
+myCodeStyleFeaturesAreLabel
+myFlexmarkExampleKeepTrailingSpacesLabel
+myAttributesCombineConsecutive
+myAttributesSpaces
+myAttributeValueQuotes
+myAttributeEqualSpace
+myBlockQuoteContinuationLines
+myBlockQuoteFirstLine
+myCodeFenceMatchClosingMarker
+myCodeFenceSpaceBeforeInfo
+myCodeFenceMinimizeIndent
+myVerbatimMinimizeIndent
+myCodeFenceMarkerType
+myCodeFenceMarkerLength
+mySetextHeaderEqualizeMarker
+mySmartEditAtxHeader
+mySmartEditSetextHeader
+mySmartEnterAtxHeader
+mySmartEnterSetextHeader
+myAtxHeaderTrailingMarker
+mySpaceAfterAtxMarker
+myTocOptions
+myWrapOnTypingCombo
+myDefaultRightMargin
+myRightMargin
+myKeepLineBreaks
+myEscapeSpecialCharsOnWrap
+myParaWrapText
+myUnescapeSpecialCharsOnWrap
+myDisableWrapInSoftWrap
+myParaContinuationAlignment
+myUseActualCharWidth
+myKeepAtStartImages
+myKeepAtStartLinks
+myFormatWithSoftWrap
+myEscapeNumberedLeadInOnWrap
+mySmartEditAsterisks
+mySmartEditTildes
+mySmartEditUnderscores
+
+
+
+
+
+
+ ProcessStepsTemplates_ProcessTemplates
+
+
+ processStepTemplateId
+processTemplateId
+
+
+
+ processStep_id
+processTemplate_id
+
+
+
+
+
+ ProcessStepsPrerequisiteProcessTemplate
+
+
+ processStepsPrerequisiteId
+processTemplateId
+processTemplateId
+
+
+
+ id
+processtemplate
+processTemplate_id
+
+
+
+
+
+ ProcessPrerequisites
+
+
+ conditionTypeId
+processTemplateId
+processTemplateId
+
+
+
+ conditiontype
+processtemplate
+processTemplate_id
+
+
+
+
+
+ Responsible_ProcessTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ ChangeHistory
+
+
+ createdAt
+userUuid
+
+
+
+ createdat
+user
+
+
+
+
+
+ ContentComponentChecklistInstances
+
+
+ checkedAt
+contentComponentInstanceId
+userUuid
+
+
+
+ checkedDate
+contentComponentInstance
+user
+
+
+
+
+
+ AAA
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+-
+-
+
+
+
+
+
+
+-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID_TARGET_HAS_SPACES
+ID_LINK_CASE_MISMATCH
+ID_WIKI_CASE_MISMATCH
+ID_WIKI_LINK_HAS_DASHES
+ID_NOT_UNDER_WIKI_HOME
+ID_TARGET_NOT_WIKI_PAGE_EXT
+ID_NOT_UNDER_SOURCE_WIKI_HOME
+ID_TARGET_NAME_HAS_ANCHOR
+ID_TARGET_PATH_HAS_ANCHOR
+ID_WIKI_LINK_HAS_SLASH
+ID_WIKI_LINK_HAS_SUBDIR
+ID_WIKI_LINK_HAS_ONLY_ANCHOR
+ID_LINK_TARGETS_WIKI_HAS_EXT
+ID_LINK_TARGETS_WIKI_HAS_BAD_EXT
+ID_NOT_UNDER_SAME_REPO
+ID_TARGET_NOT_UNDER_VCS
+ID_LINK_NEEDS_EXT
+ID_LINK_HAS_BAD_EXT
+ID_LINK_TARGET_NEEDS_EXT
+ID_LINK_TARGET_HAS_BAD_EXT
+ID_WIKI_LINK_NOT_IN_WIKI
+ID_IMAGE_TARGET_NOT_IN_RAW
+ID_REPO_RELATIVE_ACROSS_VCS_ROOTS
+
+
+
+
+
+ Informed_TaskTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ Refactoring Name Changes
+
+
+ approveProcessInstanceId
+ approvedAt
+ approveProcessTemplateId
+ checkedAt
+ checkedAt
+ clientId
+ conditionTypeId
+ contentComponentId
+ contentComponentId
+ contentComponentInstanceId
+ contentComponentId
+ createdAt
+ deadlineAt
+ duration
+ doneAt
+ inputAt
+ inputTypeId
+ originStepTemplateId
+ originProcessTemplateId
+ previousVersionId
+ processStepInstanceId
+ processStepId
+ processStepTemplateId
+ processTemplateId
+ processStepTemplateId
+ processStepTemplateId
+ processTemplateId
+ processStepTemplateId
+ taskInstanceId
+ trainingProcessTemplateId
+ updatedAt
+ userUuid
+ userUuid
+
+
+
+ approveProcessInstance
+ approvedat
+ approveprocess
+ checkedDate
+ checkedat
+ client
+ conditiontype
+ contentComponent
+ contentComponentID
+ contentComponentInstance
+ contentComponent_id
+ createdat
+ deadline
+ deadline_
+ doneDate
+ inputDate
+ inputType
+ origStepTemplateId
+ originTemplate
+ previousVersion
+ processStepInstanceID
+ processStep_id
+ processStep_id_
+ processTemplate_id
+ processstep
+ processsteptemplate
+ processtemplate
+ processteptemplate
+ taskTemplateId
+ trainingsprocess
+ updatedat
+ user
+ username
+
+
+
+
+
+ ContentComponentVideo
+
+
+ contentComponentId
+
+
+
+ contentComponent
+
+
+
+
+
+ ProcessStepInstances
+
+
+ deadlineAt
+doneAt
+updatedAt
+userUuid
+
+
+
+ deadline
+doneDate
+updatedat
+user
+
+
+
+
+
+ ProcessStepsPostConditions
+
+
+ conditionTypeId
+processStepTemplateId
+processTemplateId
+
+
+
+ conditiontype
+processsteptemplate
+processTemplate_id
+
+
+
+
+
+ Rename Table id and other columns (43-45)
+
+
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ b
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ b
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w # change to IS NOT NULL of date column
+ w # change to IS NOT NULL of date column
+ w # read as is, remove from update/insert
+ w # if date is needed add seconds in `duration` to startAt date
+ w # read as is, remove from update/insert
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+ w
+
+
+
+ AuditLogs
+ ChangeHistories
+ ChangeLogs
+ Clients
+ ConditionTypes
+ ContentCheckListInstances
+ ContentCheckLists
+ ContentInputInstances
+ ContentInputs
+ ContentInstances
+ ContentOptionListInstances
+ ContentOptionLists
+ Contents
+ ContentTypes
+ InputTypes
+ Processes
+ ProcessInstances
+ ProcessPostConditions
+ ProcessPreConditions
+ StepInstances
+ StepPostConditions
+ StepPreConditions
+ Steps
+ TaskInstances
+ Tasks
+ AuditLog
+ ChangeHistory
+ ChangeLog
+ Client
+ ConditionType
+ ContentCheckListInstance
+ ContentCheckList
+ ContentInputInstance
+ ContentInput
+ ContentInstance
+ ContentOptionListInstance
+ ContentOptionList
+ Content
+ ContentType
+ InputType
+ Process
+ ProcessInstance
+ ProcessPostCondition
+ ProcessPreCondition
+ StepInstance
+ StepPostCondition
+ StepPreCondition
+ Step
+ TaskInstance
+ Task
+ approvalProcessInstanceId
+ approvalProcessId
+ backStepId
+ contentId
+ contentInstanceId
+ contentTypeId
+ negativePostConditionId
+ originProcessId
+ originStepId
+ positivePostConditionId
+ processPreConditionId
+ stepInstanceId
+ stepPostConditionId
+ stepPreConditionId
+ stepId
+ processId
+ optionState
+ taskId
+ trainingProcessId
+ text
+ id
+ Accountable_Processes
+ Accountable_Tasks
+ ChangeHistories
+ ChangeLogs
+ Consulted_ProcessInstances
+ Consulted_Processes
+ Consulted_Tasks
+ ContentCheckLists
+ ContentCheckListInstances
+ ContentInstances
+ ContentImages
+ ContentImageInstances
+ ContentOptionLists
+ ContentOptionListInstances
+ ContentTables
+ ContentTableInstances
+ ContentTexts
+ ContentTextInstances
+ ContentTypes
+ ContentInputs
+ ContentInputInstances
+ ContentVideos
+ ContentVideoInstances
+ Content_Steps
+ Contents
+ Step_TriggeredProcess
+ Step_TriggeredProcesses
+ Informed_ProcessInstances
+ Informed_Processes
+ Informed_Tasks
+ Process_PostConditions
+ Process_PreConditions
+ ProcessPreConditions
+ StepInstances
+ Steps
+ StepPostCondition_Processes
+ StepPostConditions
+ StepPreCondition_Processes
+ StepPreConditions
+ Step_SubProcesses
+ Processes
+ Responsible_ProcessInstances
+ Responsible_Steps
+ Responsible_Processes
+ Responsible_Tasks
+ Tasks
+ approved
+ checked
+ createdAt
+ duration
+ updatedAt
+ step_PreConditions
+ step_PostConditions
+ stepPreConditions
+ stepPostConditions
+ step_TriggeredProcesses
+ stepTriggeredProcesses
+ step_SubProcesses
+ responsibleList
+ accountableList
+ consultedList
+ informedList
+ step_ResponsibleList
+ step
+ triggeredProcess
+ TriggeredProcess
+ process
+
+
+
+ AuditLogs
+ ChangeHistories
+ ChangeLogs
+ Clients
+ ConditionTypes
+ ContentCheckListInstances
+ ContentCheckLists
+ ContentInputInstances
+ ContentInputs
+ ContentInstances
+ ContentOptionListInstances
+ ContentOptionLists
+ Contents
+ ContentTypes
+ InputTypes
+ Processes
+ ProcessInstances
+ ProcessPostConditions
+ ProcessPreConditions
+ StepInstances
+ StepPostConditions
+ StepPreConditions
+ Steps
+ TaskInstances
+ Tasks
+ AuditLog
+ ChangeHistory
+ ChangeLog
+ Client
+ ConditionType
+ ContentCheckListInstance
+ ContentCheckList
+ ContentInputInstance
+ ContentInput
+ ContentInstance
+ ContentOptionListInstance
+ ContentOptionList
+ Content
+ ContentType
+ InputType
+ Process
+ ProcessInstance
+ ProcessPostCondition
+ ProcessPreCondition
+ StepInstance
+ StepPostCondition
+ StepPreCondition
+ Step
+ TaskInstance
+ Task
+ approveProcessInstanceId
+ approveProcessTemplateId
+ backStepTemplateId
+ contentComponentId
+ contentComponentInstanceId
+ contentComponentTypeId
+ negativePostCondition
+ originProcessTemplateId
+ originStepTemplateId
+ positivePostCondition
+ processPrerequisiteId
+ processStepInstanceId
+ processStepsPostConditionId
+ processStepsPrerequisiteId
+ processStepTemplateId
+ processTemplateId
+ radioState
+ taskTemplateId
+ trainingProcessTemplateId
+ userInput
+ id
+ Accountable_ProcessTemplates
+ Accountable_TaskTemplates
+ ChangeHistory
+ Changelog
+ Consulted_ProcessInstance
+ Consulted_ProcessTemplates
+ Consulted_TaskTemplates
+ ContentComponentChecklist
+ ContentComponentChecklistInstances
+ ContentComponentInstances
+ ContentComponentPicture
+ ContentComponentPictureInstances
+ ContentComponentRadioButton
+ ContentComponentRadioButtonInstances
+ ContentComponentTable
+ ContentComponentTableInstances
+ ContentComponentText
+ ContentComponentTextInstances
+ ContentComponentTypes
+ ContentComponentUserInput
+ ContentComponentUserInputInstances
+ ContentComponentVideo
+ ContentComponentVideoInstances
+ ContentComponent_ProcessStepTemplate
+ ContentComponents
+ Step_DerivedProcess
+ DerivedProcesses
+ Informed_ProcessInstance
+ Informed_ProcessTemplates
+ Informed_TaskTemplates
+ ProcessPostConditionProcessTemplate
+ ProcessPrerequisiteProcessTemplate
+ ProcessPrerequisites
+ ProcessStepInstances
+ ProcessStepTemplates
+ ProcessStepsPostConditionProcessTemplate
+ ProcessStepsPostConditions
+ ProcessStepsPrerequisiteProcessTemplate
+ ProcessStepsPrerequisites
+ ProcessStepsTemplates_ProcessTemplates
+ ProcessTemplates
+ Responsible_ProcessInstance
+ Responsible_ProcessStepTemplates
+ Responsible_ProcessTemplates
+ Responsible_TaskTemplates
+ TaskTemplates
+ approved
+ checked
+ createdAt
+ duration
+ updatedAt
+ prerequisites
+ postconditions
+ stepPrerequisites
+ stepPostconditions
+ derivedProcesses
+ stepDerivedProcesses
+ addProcessToProcessStepArray
+ responsible
+ accountable
+ consulted
+ informed
+ stepResponsible
+ processStepTemplate
+ derivedProcess
+ DerivedProcess
+ processTemplate
+
+
+
+ false
+
+
+
+
+ Table columns changes (43-45)
+
+
+ # change to IS NOT NULL of date column
+ # change to IS NOT NULL of date column
+ # read as is, remove from update/insert
+ # if date is needed add seconds in `duration` to startAt date
+ # read as is, remove from update/insert
+
+
+
+ approved
+ checked
+ createdAt
+ duration
+ updatedAt
+
+
+
+ approved
+ checked
+ createdAt
+ duration
+ updatedAt
+
+
+
+
+
+ ProcessTemplates
+
+
+ approvedAt
+approveProcessTemplateId
+approveProcessInstanceId
+checkedAt
+clientId
+createdAt
+duration
+originProcessTemplateId
+previousVersionId
+trainingProcessTemplateId
+updatedAt
+
+
+
+ approvedat
+approveprocess
+approveProcessInstance
+checkedat
+client
+createdat
+deadline
+originTemplate
+previousVersion
+trainingsprocess
+updatedat
+
+
+
+
+
+ Rename Table columns (43-45)
+
+
+ approvalProcessInstanceId
+ approvalProcessId
+ backStepId
+ contentId
+ contentInstanceId
+ contentTypeId
+ negativePostConditionId
+ originProcessId
+ originStepId
+ positivePostConditionId
+ processPreConditionId
+ stepInstanceId
+ stepsPostConditionId
+ stepPreConditionId
+ stepId
+ processId
+ optionState
+ taskId
+ trainingProcessId
+ text
+
+
+
+ approveProcessInstanceId
+ approveProcessTemplateId
+ backStepTemplateId
+ contentComponentId
+ contentComponentInstanceId
+ contentComponentTypeId
+ negativePostCondition
+ originProcessTemplateId
+ originStepTemplateId
+ positivePostCondition
+ processPrerequisiteId
+ processStepInstanceId
+ processStepsPostConditionId
+ processStepsPrerequisiteId
+ processStepTemplateId
+ processTemplateId
+ radioState
+ taskTemplateId
+ trainingProcessTemplateId
+ userInput
+
+
+
+
+
+ ContentComponentTableInstances
+
+
+ contentComponentInstanceId
+
+
+
+ contentComponentInstance
+
+
+
+
+
+ ContentComponentTextInstances
+
+
+ contentComponentInstanceId
+
+
+
+ contentComponentInstance
+
+
+
+
+
+ DerivedProcesses
+
+
+ processStepTemplateId
+processTemplateId
+processTemplateId
+
+
+
+ processstep
+processtemplate
+processTemplate_id
+
+
+
+
+
+ Responsible_TaskTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ TaskInstances
+
+
+ clientId
+deadlineAt
+processStepInstanceId
+updatedAt
+
+
+
+ client
+deadline
+processStepInstanceID
+updatedat
+
+
+
+
+
+ ContentComponentUserInput
+
+
+ contentComponentId
+inputTypeId
+
+
+
+ contentComponent
+inputType
+
+
+
+
+
+ ProcessStepTemplates
+
+
+ createdAt
+duration
+originStepTemplateId
+processTemplateId
+updatedAt
+processTemplateId
+
+
+
+ createdat
+deadline
+origStepTemplateId
+processtemplate
+updatedat
+processTemplate_id
+
+
+
+
+
+ ContentComponentPictureInstances
+
+
+ contentComponentInstanceId
+
+
+
+ contentComponentInstance
+
+
+
+
+
+ CodeStyleBundle Moves
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ getTargetHasSpaces
+getLinkCaseMismatch
+getWikiCaseMismatch
+getWikiLinkHasDashes
+getNotUnderWikiHome
+getTargetNotWikiPageExt
+getNotUnderSourceWikiHome
+getTargetNameHasAnchor
+getTargetPathHasAnchor
+getWikiLinkHasSlash
+getWikiLinkHasSubdir
+getWikiLinkHasOnlyAnchor
+getLinkTargetsWikiHasExt
+getLinkTargetsWikiHasBadExt
+getNotUnderSameRepo
+getTargetNotUnderVcs
+getLinkNeedsExt
+getLinkHasBadExt
+getLinkTargetNeedsExt
+getLinkTargetHasBadExt
+getWikiLinkNotInWiki
+getImageTargetNotInRaw
+getRepoRelativeAcrossVcsRoots
+
+
+
+ ID_TARGET_HAS_SPACES
+ID_CASE_MISMATCH
+ID_CASE_MISMATCH
+ID_WIKI_LINK_HAS_DASHES
+ID_NOT_UNDER_WIKI_HOME
+ID_TARGET_NOT_WIKI_PAGE_EXT
+ID_NOT_UNDER_SOURCE_WIKI_HOME
+ID_TARGET_NAME_HAS_ANCHOR
+ID_TARGET_PATH_HAS_ANCHOR
+ID_WIKI_LINK_HAS_SLASH
+ID_WIKI_LINK_HAS_SUBDIR
+ID_WIKI_LINK_HAS_ONLY_ANCHOR
+ID_LINK_TARGETS_WIKI_HAS_EXT
+ID_LINK_TARGETS_WIKI_HAS_BAD_EXT
+ID_NOT_UNDER_SAME_REPO
+ID_TARGET_NOT_UNDER_VCS
+ID_LINK_NEEDS_EXT
+ID_LINK_HAS_BAD_EXT
+ID_LINK_TARGET_NEEDS_EXT
+ID_LINK_TARGET_HAS_BAD_EXT
+ID_WIKI_LINK_NOT_IN_WIKI
+ID_IMAGE_TARGET_NOT_IN_RAW
+ID_REPO_RELATIVE_ACROSS_VCS_ROOTS
+
+
+
+
+
+ ContentComponentInstances
+
+
+ clientId
+contentComponentId
+createdAt
+processStepInstanceId
+contentComponentTypeId
+updatedAt
+
+
+
+ client
+contentComponentID
+createdat
+processStepInstanceID
+type
+updatedat
+
+
+
+
+
+ Fix constraint case
+
+
+ Accountable_ProcessInstance
+ Accountable_TaskInstances
+ AuditLogs
+ ChangeHistory
+ Changelog
+ Clients
+ ConditionTypes
+ Consulted_ProcessInstance
+ Consulted_ProcessTemplates
+ Consulted_TaskInstances
+ Consulted_TaskTemplates
+ ContentComponent_ProcessStepTemplate
+ ContentComponentChecklist
+ ContentComponentChecklistInstances
+ ContentComponentInstances
+ ContentComponentPicture
+ ContentComponentPictureInstances
+ ContentComponentRadioButton
+ ContentComponentRadioButtonInstances
+ ContentComponents
+ ContentComponentTable
+ ContentComponentTableInstances
+ ContentComponentText
+ ContentComponentTextInstances
+ ContentComponentTypes
+ ContentComponentUserInput
+ ContentComponentUserInputInstances
+ ContentComponentVideo
+ ContentComponentVideoInstances
+ DerivedProcesses
+ Informed_ProcessInstance
+ Informed_ProcessTemplates
+ Informed_TaskInstances
+ Informed_TaskTemplates
+ InputTypes
+ ProcessInstances
+ ProcessPostConditionProcessTemplate
+ ProcessPostConditions
+ ProcessPrerequisiteProcessTemplate
+ ProcessPrerequisites
+ ProcessStepInstances
+ ProcessStepsPostConditionProcessTemplate
+ ProcessStepsPostConditions
+ ProcessStepsPrerequisiteProcessTemplate
+ ProcessStepsPrerequisites
+ ProcessStepsTemplates_ProcessTemplates
+ ProcessStepTemplates
+ ProcessTemplates
+ Responsible_ProcessInstance
+ Responsible_ProcessStepTemplates
+ Responsible_ProcessTemplates
+ Responsible_TaskInstances
+ Responsible_TaskTemplates
+ TaskInstances
+ TaskTemplates
+
+
+
+ accountable_processinstance
+ accountable_taskinstances
+ auditlogs
+ changehistory
+ changelog
+ clients
+ conditiontypes
+ consulted_processinstance
+ consulted_processtemplates
+ consulted_taskinstances
+ consulted_tasktemplates
+ contentcomponent_processsteptemplate
+ contentcomponentchecklist
+ contentcomponentchecklistinstances
+ contentcomponentinstances
+ contentcomponentpicture
+ contentcomponentpictureinstances
+ contentcomponentradiobutton
+ contentcomponentradiobuttoninstances
+ contentcomponents
+ contentcomponenttable
+ contentcomponenttableinstances
+ contentcomponenttext
+ contentcomponenttextinstances
+ contentcomponenttypes
+ contentcomponentuserinput
+ contentcomponentuserinputinstances
+ contentcomponentvideo
+ contentcomponentvideoinstances
+ derivedprocesses
+ informed_processinstance
+ informed_processtemplates
+ informed_taskinstances
+ informed_tasktemplates
+ inputtypes
+ processinstances
+ processpostconditionprocesstemplate
+ processpostconditions
+ processprerequisiteprocesstemplate
+ processprerequisites
+ processstepinstances
+ processstepspostconditionprocesstemplate
+ processstepspostconditions
+ processstepsprerequisiteprocesstemplate
+ processstepsprerequisites
+ processstepstemplates_processtemplates
+ processsteptemplates
+ processtemplates
+ responsible_processinstance
+ responsible_processsteptemplates
+ responsible_processtemplates
+ responsible_taskinstances
+ responsible_tasktemplates
+ taskinstances
+ tasktemplates
+
+
+
+
+
+ Informed_TaskInstances
+
+
+ taskInstanceId
+userUuid
+
+
+
+ taskTemplateId
+username
+
+
+
+
+
+ ContentComponentUsageSearchModel
+
+
+ contentComponentId
+processStepId
+
+
+
+ contentComponent_id
+processStep_id
+
+
+
+
+
+ MarkdownNav - Specific Composites
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MdAnchorLink
+MdBlankLine
+MdBlockQuote
+MdDefinition
+MdDefinitionList
+MdDefinitionTerm
+MdGitLabBlockQuote
+MdAdmonition
+MdAnchorLink
+MdAsideBlock
+MdDefinitionList
+MdGitLabBlockQuote
+MdSimToc
+MdTable
+MdSimToc
+MdTable
+MdTextBlock
+MdToc
+MdHRule
+MdEmoji
+MdParagraph
+MdInlineBold
+MdInlineItalic
+MdInlineStrikethrough
+MdInlineSubscript
+MdInlineSuperscript
+MdInlineUnderline
+MdInlineMailLink
+MdInlineQuoted
+MdInlineGitLabDel
+MdInlineGitLabIns
+MdInlineGitLabMath
+MdInlineHardBreak
+MdInlineHtml
+MdInlineSpecialText
+MdInlineTypographic
+MdInlineHtmlEntity
+MdTableBody
+MdTableCaption
+MdTableCell
+MdTableHeader
+MdTableRow
+MdTableSeparator
+
+
+
+ ANCHOR_LINK
+BLANK_LINE
+BLOCK_QUOTE
+DEFINITION
+DEFINITION_LIST
+DEFINITION_TERM_ELEMENT
+GITLAB_BLOCK_QUOTE
+MdAdmonitionCompositeImpl
+MdAnchorLinkImpl
+MdAsideBlockCompositeImpl
+MdDefinitionListCompositeImpl
+MdGitLabBlockQuoteCompositeImpl
+MdSimTocCompositeImpl
+MdTableCompositeImpl
+SIM_TOC
+TABLE
+TEXT_BLOCK
+TOC
+HRULE
+EMOJI
+PARAGRAPH_BLOCK
+BOLD
+ITALIC
+STRIKETHROUGH
+SUBSCRIPT
+SUPERSCRIPT
+UNDERLINE
+MAIL_LINK
+QUOTE
+GITLAB_DEL
+GITLAB_INS
+GITLAB_MATH
+LINE_BREAK_SPACES
+INLINE_HTML
+SPECIAL
+SMARTS
+HTML_ENTITY
+TABLE_BODY
+TABLE_CAPTION
+TABLE_CELL
+TABLE_HEADER
+TABLE_ROW
+TABLE_SEPARATOR
+
+
+
+
+
+
+
+
+
+
+ Md Non-Text Block Elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BLANK_LINE
+BLOCK_COMMENT
+HRULE
+HTML_BLOCK
+HTML_BLOCK_TEXT
+JEKYLL_FRONT_MATTER_BLOCK
+JEKYLL_FRONT_MATTER_BLOCK_ELEM
+SIM_TOC
+VERBATIM
+
+
+
+
+
+ Moved Code Style Smart Keys
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mySmartEditListItem
+mySmartEnterAddListItem
+mySmartEnterRemoveListItem
+SMART_BACKSPACE_LIST_ITEM
+SMART_ENTER_ADD_LIST_ITEM
+SMART_ENTER_REMOVE_LIST_ITEM
+myTableAddRowOnEnter
+myTableDeleteEmptyColumns
+myTableDeleteEmptyRows
+TABLE_DELETE_EMPTY_COLUMNS
+TABLE_DELETE_EMPTY_ROWS
+TABLE_INSERT_NEW_ROWS
+mySmartEditAsterisks
+mySmartEditTildes
+mySmartEditUnderscores
+SMART_EDIT_ASTERISKS
+SMART_EDIT_TILDES
+SMART_EDIT_UNDERSCORES
+
+
+
+
+
+ Consulted_TaskInstances
+
+
+ taskInstanceId
+userUuid
+
+
+
+ taskTemplateId
+username
+
+
+
+
+
+ Responsible_TaskInstances
+
+
+ taskInstanceId
+userUuid
+
+
+
+ taskTemplateId
+username
+
+
+
+
+
+ Md Block May Contain Tasks or Headers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ADMONITION_BLOCK
+ASIDE_BLOCK
+BLOCK_QUOTE
+BULLET_LIST
+BULLET_LIST_ITEM
+DEFINITION
+DEFINITION_LIST
+FOOTNOTE
+FOOTNOTE_TEXT
+GITLAB_BLOCK_QUOTE
+MACRO
+MACRO_TEXT
+ORDERED_LIST
+ORDERED_LIST_ITEM
+
+
+
+
+
+ Rename Tables to Standard (43-45)
+
+
+ Accountable_Processes
+ Accountable_Tasks
+ ChangeHistories
+ ChangeLogs
+ Consulted_ProcessInstances
+ Consulted_Processes
+ Consulted_Tasks
+ ContentCheckLists
+ ContentCheckListInstances
+ ContentInstances
+ ContentImages
+ ContentImageInstances
+ ContentOptionLists
+ ContentOptionListInstances
+ ContentTables
+ ContentTableInstances
+ ContentTexts
+ ContentTextInstances
+ ContentTypes
+ ContentInputs
+ ContentInputInstances
+ ContentVideos
+ ContentVideoInstances
+ Content_Steps
+ Contents
+ Step_TriggeredProcesses
+ Informed_ProcessInstances
+ Informed_Processes
+ Informed_Tasks
+ Process_PostConditions
+ Process_PreConditions
+ ProcessPreConditions
+ StepInstances
+ Steps
+ StepPostCondition_Processes
+ StepPostConditions
+ StepPreCondition_Processes
+ StepPreConditions
+ Step_Processes
+ Processes
+ Responsible_ProcessInstances
+ Responsible_Steps
+ Responsible_Processes
+ Responsible_Tasks
+ Tasks
+
+
+
+ Accountable_ProcessTemplates
+ Accountable_TaskTemplates
+ ChangeHistory
+ Changelog
+ Consulted_ProcessInstance
+ Consulted_ProcessTemplates
+ Consulted_TaskTemplates
+ ContentComponentChecklist
+ ContentComponentChecklistInstances
+ ContentComponentInstances
+ ContentComponentPicture
+ ContentComponentPictureInstances
+ ContentComponentRadioButton
+ ContentComponentRadioButtonInstances
+ ContentComponentTable
+ ContentComponentTableInstances
+ ContentComponentText
+ ContentComponentTextInstances
+ ContentComponentTypes
+ ContentComponentUserInput
+ ContentComponentUserInputInstances
+ ContentComponentVideo
+ ContentComponentVideoInstances
+ ContentComponent_ProcessStepTemplate
+ ContentComponents
+ DerivedProcesses
+ Informed_ProcessInstance
+ Informed_ProcessTemplates
+ Informed_TaskTemplates
+ ProcessPostConditionProcessTemplate
+ ProcessPrerequisiteProcessTemplate
+ ProcessPrerequisites
+ ProcessStepInstances
+ ProcessStepTemplates
+ ProcessStepsPostConditionProcessTemplate
+ ProcessStepsPostConditions
+ ProcessStepsPrerequisiteProcessTemplate
+ ProcessStepsPrerequisites
+ ProcessStepsTemplates_ProcessTemplates
+ ProcessTemplates
+ Responsible_ProcessInstance
+ Responsible_ProcessStepTemplates
+ Responsible_ProcessTemplates
+ Responsible_TaskTemplates
+ TaskTemplates
+
+
+
+
+
+ Responsible_ProcessStepTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ Accountable_ProcessInstance
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ ContentComponentRadioButton
+
+
+ contentComponentId
+
+
+
+ contentComponent
+
+
+
+
+
+ Md Non-Wrapping Block Elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ABBREVIATION
+ADMONITION_BLOCK
+ATX_HEADER
+BLANK_LINE
+BLOCK_COMMENT
+BULLET_LIST
+DEFINITION_LIST
+DEFINITION_TERM
+ENUM_REF_FORMAT
+FLEXMARK_EXAMPLE
+FLEXMARK_EXAMPLE_AST
+FLEXMARK_EXAMPLE_HTML
+FLEXMARK_EXAMPLE_SOURCE
+FLEXMARK_FRONT_MATTER_BLOCK
+FLEXMARK_FRONT_MATTER_BLOCK_ELEM
+GITLAB_BLOCK_QUOTE
+HRULE
+HTML_BLOCK
+HTML_BLOCK_TEXT
+JEKYLL_FRONT_MATTER_BLOCK
+JEKYLL_FRONT_MATTER_BLOCK_ELEM
+MACRO
+MACRO_TEXT
+ORDERED_LIST
+REFERENCE
+SETEXT_HEADER
+SIM_TOC
+TABLE
+TABLE_BODY
+TABLE_HEADER
+VERBATIM
+
+
+
+
+
+ Accountable_TaskInstances
+
+
+ taskInstanceId
+userUuid
+
+
+
+ taskTemplateId
+username
+
+
+
+
+
+ ContentComponentPicture
+
+
+ contentComponentId
+
+
+
+ contentComponent
+
+
+
+
+
+ flexmark-java 0.50.x to 0.60.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BlankLineBreakNode
+BlockQuoteLike
+DelimitedNode
+DoNotTrim
+LineBreakNode
+NodeVisitHandler
+SpaceInsertingSequenceBuilder
+TextCollectingVisitor
+TextContainer
+
+
+
+
+
+ Responsible_ProcessInstance
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ ContentComponent_ProcessStepTemplate
+
+
+ contentComponentId
+processStepTemplateId
+
+
+
+ contentComponent_id
+processStep_id
+
+
+
+
+
+ Informed_ProcessTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ MarkdownNav - Specific Composite Impl
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MdAdmonition
+MdAnchorLink
+MdAsideBlock
+MdBlankLine
+MdBlockQuote
+MdDefinition
+MdDefinitionList
+MdDefinitionTerm
+MdEmoji
+MdGitLabBlockQuote
+MdHRule
+MdInlineBold
+MdInlineGitLabDel
+MdInlineGitLabIns
+MdInlineGitLabMath
+MdInlineHardBreak
+MdInlineHtmlEntity
+MdInlineHtml
+MdInlineItalic
+MdInlineMailLink
+MdInlineQuoted
+MdInlineSpecialText
+MdInlineStrikethrough
+MdInlineSubscript
+MdInlineSuperscript
+MdInlineTypographic
+MdInlineUnderline
+MdParagraph
+MdSimToc
+MdTable
+MdTextBlock
+MdToc
+MdTableBody
+MdTableCaption
+MdTableCell
+MdTableHeader
+MdTableRow
+MdTableSeparator
+
+
+
+ MdAdmonitionImpl
+MdAnchorLinkImpl
+MdAsideBlockImpl
+MdBlankLineImpl
+MdBlockQuoteImpl
+MdDefinitionImpl
+MdDefinitionListImpl
+MdDefinitionTermImpl
+MdEmojiImpl
+MdGitLabBlockQuoteImpl
+MdHRuleImpl
+MdInlineBoldImpl
+MdInlineGitLabDelImpl
+MdInlineGitLabInsImpl
+MdInlineGitLabMathImpl
+MdInlineHardBreakImpl
+MdInlineHtmlEntityImpl
+MdInlineHtmlImpl
+MdInlineItalicImpl
+MdInlineMailLinkImpl
+MdInlineQuotedImpl
+MdInlineSpecialTextImpl
+MdInlineStrikethroughImpl
+MdInlineSubscriptImpl
+MdInlineSuperscriptImpl
+MdInlineTypographicImpl
+MdInlineUnderlineImpl
+MdParagraphImpl
+MdSimTocImpl
+MdTableImpl
+MdTextBlockImpl
+MdTocImpl
+MdTableBodyImpl
+MdTableCaptionImpl
+MdTableCellImpl
+MdTableHeaderImpl
+MdTableRowImpl
+MdTableSeparatorImpl
+
+
+
+
+
+
+
+
+
+
+
+ Md Wrapping Block Elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ASIDE_BLOCK
+BLOCK_QUOTE
+BULLET_LIST_ITEM
+DEFINITION
+FOOTNOTE
+FOOTNOTE_TEXT
+ORDERED_LIST_ITEM
+PARAGRAPH_BLOCK
+TEXT_BLOCK
+
+
+
+
+
+ TaskTemplates
+
+
+ approvedAt
+approveProcessTemplateId
+checkedAt
+clientId
+createdAt
+duration
+originProcessTemplateId
+previousVersionId
+trainingProcessTemplateId
+updatedAt
+
+
+
+ approvedat
+approveprocess
+checkedat
+client
+createdat
+deadline
+originTemplate
+previousVersion
+trainingsprocess
+updatedat
+
+
+
+
+
+ Changelog
+
+
+ createdAt
+
+
+
+ createdat
+
+
+
+
+
+ Moved App Settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myInjectLangVerbatimCheckBox_
+myInjectLangHtmlCheckBox_
+mySyntaxHighlighting_
+mySoftWraps_
+myIconGutters_
+myTextSplitLayoutToggle_
+myShowEmojiInGutter_
+myEnableLineMarkers_
+myShowBreadcrumbText_
+myMaxBreadcrumbText_
+mySoftWrapAtMargin_
+myTypingUpdateDelay_
+myEnableAnnotator_
+myHideDisabledButtons_
+myHideToolbar_
+myCodeLikeStyleToggle_
+myAsteriskItalics_
+myVerticalSplitPreview_
+myConvertHtmlOnPaste_
+myShowHeadingID_
+myUseRenameSpellingFix_
+myShowApplyAllIntentionsEverywhere_
+myOverrideEditorDragDropHandler_
+myTabOverrideTables_
+myTabOverrideTablesSelect_
+myTabOverrideLists_
+myToggleStylePunctuations_
+myHtmlPasteDefaults_
+myAskHtmlOptionsOnPaste_
+myFullHighlightCombinations_
+myJoinStripPrefix_
+myTabOverridesPanel_
+myHighlightComboLabel_
+myUsePasteHandler_
+myHtmlPasteOptions_
+myDetectHtmlOnPaste_
+myOverrideEditorDropHandlerSetting_
+
+
+
+
+
+ Consulted_TaskTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ Rename Tables to Standard
+
+
+ Accountable_Processes
+ Accountable_Tasks
+ ChangeHistories
+ ChangeLogs
+ Consulted_ProcessInstances
+ Consulted_Processes
+ Consulted_Tasks
+ ContentCheckLists
+ ContentCheckListInstances
+ ContentInstances
+ ContentPictures
+ ContentPictureInstances
+ ContentOptionLists
+ ContentOptionListInstances
+ ContentTables
+ ContentTableInstances
+ ContentTexts
+ ContentTextInstances
+ ContentTypes
+ ContentInputs
+ ContentInputInstances
+ ContentVideos
+ ContentVideoInstances
+ Content_Steps
+ Contents
+ Step_TriggeredProcesses
+ Informed_ProcessInstances
+ Informed_Processes
+ Informed_Tasks
+ Process_PostConditions
+ Process_PreConditions
+ ProcessPreConditions
+ StepInstances
+ Steps
+ StepPostCondition_Processes
+ StepPostConditions
+ StepPreCondition_Processes
+ StepPreConditions
+ Step_Processes
+ Processes
+ Responsible_ProcessInstances
+ Responsible_ProcessSteps
+ Responsible_Processes
+ Responsible_Tasks
+ Tasks
+ ContentImages
+ ContentImageInstances
+ Accountable_ProcessInstances
+
+
+
+ Accountable_ProcessTemplates
+ Accountable_TaskTemplates
+ ChangeHistory
+ Changelog
+ Consulted_ProcessInstance
+ Consulted_ProcessTemplates
+ Consulted_TaskTemplates
+ ContentComponentChecklist
+ ContentComponentChecklistInstances
+ ContentComponentInstances
+ ContentComponentPicture
+ ContentComponentPictureInstances
+ ContentComponentRadioButton
+ ContentComponentRadioButtonInstances
+ ContentComponentTable
+ ContentComponentTableInstances
+ ContentComponentText
+ ContentComponentTextInstances
+ ContentComponentTypes
+ ContentComponentUserInput
+ ContentComponentUserInputInstances
+ ContentComponentVideo
+ ContentComponentVideoInstances
+ ContentComponent_ProcessStepTemplate
+ ContentComponents
+ DerivedProcesses
+ Informed_ProcessInstance
+ Informed_ProcessTemplates
+ Informed_TaskTemplates
+ ProcessPostConditionProcessTemplate
+ ProcessPrerequisiteProcessTemplate
+ ProcessPrerequisites
+ ProcessStepInstances
+ ProcessStepTemplates
+ ProcessStepsPostConditionProcessTemplate
+ ProcessStepsPostConditions
+ ProcessStepsPrerequisiteProcessTemplate
+ ProcessStepsPrerequisites
+ ProcessStepsTemplates_ProcessTemplates
+ ProcessTemplates
+ Responsible_ProcessInstance
+ Responsible_ProcessStepTemplates
+ Responsible_ProcessTemplates
+ Responsible_TaskTemplates
+ TaskTemplates
+ ContentPictures
+ ContentPictureInstances
+ Accountable_ProcessInstance
+
+
+
+ false
+
+
+
+
+ AuditLogs
+
+
+ createdAt
+userUuid
+
+
+
+ createdat
+user
+
+
+
+
+
+ ContentComponentRadioButtonInstances
+
+
+ checkedAt
+contentComponentInstanceId
+userUuid
+
+
+
+ checkedDate
+contentComponentInstance
+user
+
+
+
+
+
+ Accountable_ProcessTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ Clients
+
+
+ createdAt
+updatedAt
+
+
+
+ createdat
+updatedat
+
+
+
+
+
+ Consulted_ProcessInstance
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ Informed_ProcessInstance
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ ProcessInstances
+
+
+ deadlineAt
+doneAt
+updatedAt
+userUuid
+
+
+
+ deadline
+doneDate
+updatedat
+user
+
+
+
+
+
+ Convert to component settable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myShowHtmlPreview
+myPreviewScrollDelay
+myRemoteContentCacheExpiration
+myRemoteContentRequests
+myDisableGifImages
+myCompleteRemoteUrlAnchors
+myValidateRemoteUrlAnchors
+myValidateRemoteUrlLinks
+mySimpleStructureView
+myIncludeDirsInCompletion
+myHtmlMimeMaxImageWidth
+myPdfMaxImageWidth
+myPdfFontFamily
+myHtmlMimeFontFamily
+myZoomFactor
+
+
+
+
+ Md Block Elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ABBREVIATION
+ADMONITION_BLOCK
+ASIDE_BLOCK
+ATX_HEADER
+BLOCK_COMMENT
+BLOCK_QUOTE
+BULLET_LIST
+BULLET_LIST_ITEM
+DEFINITION
+DEFINITION_LIST
+ENUM_REF_FORMAT
+FLEXMARK_EXAMPLE
+FLEXMARK_EXAMPLE_AST
+FLEXMARK_EXAMPLE_HTML
+FLEXMARK_EXAMPLE_SOURCE
+FLEXMARK_FRONT_MATTER_BLOCK
+FLEXMARK_FRONT_MATTER_BLOCK_ELEM
+FOOTNOTE
+FOOTNOTE_TEXT
+GITLAB_BLOCK_QUOTE
+HRULE
+HTML_BLOCK
+JEKYLL_FRONT_MATTER_BLOCK_ELEM
+MACRO
+MACRO_TEXT
+ORDERED_LIST
+ORDERED_LIST_ITEM
+PARAGRAPH_BLOCK
+REFERENCE
+SETEXT_HEADER
+SIM_TOC
+TABLE
+TABLE_BODY
+TABLE_HEADER
+TEXT_BLOCK
+VERBATIM
+
+
+
+
+
+ ContentComponentTable
+
+
+ contentComponentId
+
+
+
+ contentComponent
+
+
+
+
+
+ ContentComponentChecklist
+
+
+ contentComponentId
+
+
+
+ contentComponent
+
+
+
+
+
+ ProcessPrerequisiteProcessTemplate
+
+
+ processPrerequisiteId
+processTemplateId
+processTemplateId
+
+
+
+ id
+processtemplate
+processTemplate_id
+
+
+
+
+
+ Flexmark Deprecated
+
+
+
+
+ !
+ !
+
+ !
+
+
+
+ FORMAT_TABLE_LEAD_TRAIL_PIPES
+ FORMAT_TABLE_SPACE_AROUND_PIPES
+ FORMAT_TABLE_ADJUST_COLUMN_WIDTH
+ FORMAT_TABLE_APPLY_COLUMN_ALIGNMENT
+ FORMAT_TABLE_FILL_MISSING_COLUMNS
+ FORMAT_TABLE_LEFT_ALIGN_MARKER
+ FORMAT_TABLE_MIN_SEPARATOR_COLUMN_WIDTH
+ MIN_SEPARATOR_DASHES
+ TRIM_CELL_WHITESPACE
+ FORMAT_CHAR_WIDTH_PROVIDER
+ FORMAT_TABLE_CAPTION
+ FORMAT_TABLE_LEAD_TRAIL_PIPES
+ FORMAT_TABLE_SPACE_AROUND_PIPES
+ FORMAT_TABLE_ADJUST_COLUMN_WIDTH
+ FORMAT_TABLE_APPLY_COLUMN_ALIGNMENT
+ FORMAT_TABLE_FILL_MISSING_COLUMNS
+ FORMAT_TABLE_CAPTION
+ FORMAT_TABLE_LEFT_ALIGN_MARKER
+ FORMAT_TABLE_MIN_SEPARATOR_COLUMN_WIDTH
+ FORMAT_TABLE_MIN_SEPARATOR_DASHES
+ TablesExtension.FORMAT_TABLE_CAPTION, TableCaptionHandling.REMOVE
+ TablesExtension.FORMAT_TABLE_CAPTION, TableCaptionHandling.AS_IS
+ MIN_SEPARATOR_DASHES
+
+
+
+ LEAD_TRAIL_PIPES
+ SPACE_AROUND_PIPES
+ ADJUST_COLUMN_WIDTH
+ APPLY_COLUMN_ALIGNMENT
+ FILL_MISSING_COLUMNS
+ LEFT_ALIGN_MARKER
+ MIN_SEPARATOR_COLUMN_WIDTH
+ MIN_SEPARATOR_DASHES
+ TRIM_CELL_WHITESPACE
+ CHAR_WIDTH_PROVIDER
+ REMOVE_CAPTION
+ FORMAT_LEAD_TRAIL_PIPES
+ FORMAT_SPACE_AROUND_PIPES
+ FORMAT_ADJUST_COLUMN_WIDTH
+ FORMAT_APPLY_COLUMN_ALIGNMENT
+ FORMAT_FILL_MISSING_COLUMNS
+ FORMAT_REMOVE_CAPTION
+ FORMAT_LEFT_ALIGN_MARKER
+ FORMAT_MIN_SEPARATOR_COLUMN_WIDTH
+ FORMAT_MIN_SEPARATOR_DASHES
+ TablesExtension.FORMAT_REMOVE_CAPTION, true
+ TablesExtension.FORMAT_REMOVE_CAPTION, false
+ FORMAT_TABLE_MIN_SEPARATOR_DASHES
+
+
+
+
+
+ ContentComponentText
+
+
+ contentComponentId
+
+
+
+ contentComponent
+
+
+
+
+
+ Consulted_ProcessTemplates
+
+
+ userUuid
+
+
+
+ username
+
+
+
+
+
+ ContentComponentUserInputInstances
+
+
+ contentComponentInstanceId
+inputAt
+inputTypeId
+userUuid
+
+
+
+ contentComponentInstance
+inputDate
+inputType
+user
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BlankLineBreakNode
+BlockQuoteLike
+DelimitedNode
+DoNotTrim
+LineBreakNode
+NodeVisitHandler
+SpaceInsertingSequenceBuilder
+TextCollectingVisitor
+TextContainer
+
+
+
+
diff --git a/flexmark-all/flexmark-all.iml b/flexmark-all/flexmark-all.iml
index 1ddd0b7cc..444791f12 100644
--- a/flexmark-all/flexmark-all.iml
+++ b/flexmark-all/flexmark-all.iml
@@ -54,7 +54,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -62,5 +72,6 @@
+
-
\ No newline at end of file
+
diff --git a/flexmark-all/pom.xml b/flexmark-all/pom.xml
index 575ea031e..68d0ad549 100644
--- a/flexmark-all/pom.xml
+++ b/flexmark-all/pom.xml
@@ -7,7 +7,7 @@
com.vladsch.flexmark
flexmark-java
- 0.59.100
+ 0.64.8
flexmark-all
@@ -21,182 +21,237 @@
com.vladsch.flexmark
flexmark
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-abbreviation
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-admonition
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-anchorlink
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-aside
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-attributes
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-autolink
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-definition
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-emoji
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-enumerated-reference
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-escaped-character
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-footnotes
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-gfm-issues
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-gfm-strikethrough
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-gfm-tasklist
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-gfm-users
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-gitlab
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-jekyll-front-matter
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-jekyll-tag
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-media-tags
- 0.59.100
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-ext-resizable-image
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-macros
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-ins
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-xwiki-macros
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-superscript
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-tables
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-toc
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-typographic
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-wikilink
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-yaml-front-matter
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-ext-youtube-embedded
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-html2md-converter
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-jira-converter
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-pdf-converter
- 0.59.100
+ ${project.version}
com.vladsch.flexmark
flexmark-profile-pegdown
- 0.59.100
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-ast
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-builder
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-collection
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-data
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-dependency
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-format
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-html
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-misc
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-options
+ ${project.version}
+
+
+ com.vladsch.flexmark
+ flexmark-util-sequence
+ ${project.version}
com.vladsch.flexmark
- flexmark-util
- 0.59.100
+ flexmark-util-visitor
+ ${project.version}
com.vladsch.flexmark
flexmark-youtrack-converter
- 0.59.100
+ ${project.version}
diff --git a/flexmark-all/src/assembly/bin.xml b/flexmark-all/src/assembly/bin.xml
index 2f2c1573a..b9b9407af 100644
--- a/flexmark-all/src/assembly/bin.xml
+++ b/flexmark-all/src/assembly/bin.xml
@@ -33,6 +33,7 @@
com.vladsch.flexmark:flexmark-ext-ins
com.vladsch.flexmark:flexmark-ext-macros
com.vladsch.flexmark:flexmark-ext-media-tags
+ com.vladsch.flexmark:flexmark-ext-resizable-image
com.vladsch.flexmark:flexmark-ext-xwiki-macros
com.vladsch.flexmark:flexmark-ext-superscript
com.vladsch.flexmark:flexmark-ext-tables
@@ -45,7 +46,17 @@
com.vladsch.flexmark:flexmark-pdf-converter
com.vladsch.flexmark:flexmark-youtrack-converter
com.vladsch.flexmark:flexmark-profile-pegdown
- com.vladsch.flexmark:flexmark-util
+ com.vladsch.flexmark:flexmark-util-ast
+ com.vladsch.flexmark:flexmark-util-builder
+ com.vladsch.flexmark:flexmark-util-collection
+ com.vladsch.flexmark:flexmark-util-data
+ com.vladsch.flexmark:flexmark-util-dependency
+ com.vladsch.flexmark:flexmark-util-format
+ com.vladsch.flexmark:flexmark-util-html
+ com.vladsch.flexmark:flexmark-util-misc
+ com.vladsch.flexmark:flexmark-util-options
+ com.vladsch.flexmark:flexmark-util-sequence
+ com.vladsch.flexmark:flexmark-util-visitor
false
diff --git a/flexmark-core-test/flexmark-core-test.iml b/flexmark-core-test/flexmark-core-test.iml
index 65d686f8d..353b4b4fe 100644
--- a/flexmark-core-test/flexmark-core-test.iml
+++ b/flexmark-core-test/flexmark-core-test.iml
@@ -23,22 +23,33 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
\ No newline at end of file
diff --git a/flexmark-core-test/pom.xml b/flexmark-core-test/pom.xml
index 992b84537..828ab6edf 100644
--- a/flexmark-core-test/pom.xml
+++ b/flexmark-core-test/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.59.100
+ 0.64.8
flexmark-core-test
diff --git a/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterSpecTest.java b/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterSpecTest.java
index e5b949060..d7692f123 100644
--- a/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterSpecTest.java
+++ b/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterSpecTest.java
@@ -7,6 +7,7 @@
import com.vladsch.flexmark.test.util.TestUtils;
import com.vladsch.flexmark.test.util.spec.SpecExample;
import com.vladsch.flexmark.util.data.DataHolder;
+import com.vladsch.flexmark.util.data.SharedDataKeys;
import com.vladsch.flexmark.util.format.TrackedOffset;
import com.vladsch.flexmark.util.misc.Pair;
import com.vladsch.flexmark.util.sequence.BasedSequence;
@@ -14,10 +15,9 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+
+import static com.vladsch.flexmark.formatter.Formatter.RESTORE_TRACKED_SPACES;
public abstract class FormatterSpecTest extends FormatterTranslationSpecTestBase {
public FormatterSpecTest(@NotNull SpecExample example, @Nullable Map optionMap, @Nullable DataHolder... defaultOptions) {
@@ -27,36 +27,58 @@ public FormatterSpecTest(@NotNull SpecExample example, @Nullable Map trackedOffsets;
+ @NotNull List trackedOffsets = Collections.emptyList();
+ BasedSequence trackedSequence;
+ BasedSequence originalSequence;
@Override
public void parse(CharSequence input) {
- Pair extractMarkup = TestUtils.extractMarkup(BasedSequence.of(input));
- super.parse(extractMarkup.getFirst());
+ originalSequence = BasedSequence.of(input);
+ Pair extractMarkup = TestUtils.extractMarkup(originalSequence);
+ trackedSequence = extractMarkup.getFirst();
+ super.parse(trackedSequence.toString());
if (extractMarkup.getSecond().length > 0) {
trackedOffsets = new ArrayList<>(extractMarkup.getSecond().length);
+ char c = EDIT_OP_CHAR.get(myOptions);
+ int editOp = EDIT_OP.get(myOptions);
for (int offset : extractMarkup.getSecond()) {
- trackedOffsets.add(TrackedOffset.track(offset));
+ TrackedOffset trackedOffset = TrackedOffset.track(offset, editOp != 0 && c == ' ', editOp > 0, editOp < 0);
+
+ trackedOffset.setSpacesBefore(trackedSequence.getBaseSequence().countTrailingSpaceTab(offset));
+ trackedOffset.setSpacesAfter(trackedSequence.getBaseSequence().countLeadingSpaceTab(offset));
+
+ trackedOffsets.add(trackedOffset);
}
+ Formatter.TRACKED_SEQUENCE.set(getDocument().getDocument(), trackedSequence);
Formatter.TRACKED_OFFSETS.set(getDocument().getDocument(), trackedOffsets);
+ RESTORE_TRACKED_SPACES.set(getDocument().getDocument(), RESTORE_TRACKED_SPACES.get(myOptions));
}
+
+ Formatter.DOCUMENT_FIRST_PREFIX.set(getDocument().getDocument(), Formatter.DOCUMENT_FIRST_PREFIX.get(myOptions));
+ Formatter.DOCUMENT_PREFIX.set(getDocument().getDocument(), Formatter.DOCUMENT_PREFIX.get(myOptions));
}
@Override
protected @NotNull String renderHtml() {
- if (trackedOffsets == null && !SHOW_LINE_RANGES.get(myOptions)) {
+ if (trackedOffsets.isEmpty() && !SHOW_LINE_RANGES.get(myOptions)) {
return getRenderer().render(getDocument());
} else {
- SequenceBuilder builder = getDocument().getDocument().getChars().getBuilder();
+ if (SharedDataKeys.RUNNING_TESTS.get(myOptions)) {
+ System.out.printf("%s:%d%n", myExample.getSection(), myExample.getExampleNumber());
+ }
+
+ SequenceBuilder builder = getDocument().getChars().getBuilder();
getRenderer().render(getDocument(), builder);
String html = builder.toString();
+ // NOTE: need to get document since the top node is not guaranteed to be a document for generic renderer
List trackedOffsetList = Formatter.TRACKED_OFFSETS.get(getDocument().getDocument());
- assert trackedOffsetList == trackedOffsets;
+ assert trackedOffsetList.isEmpty() || trackedOffsetList == trackedOffsets;
int[] offsets = new int[trackedOffsets.size()];
int i = 0;
@@ -78,8 +100,24 @@ public void parse(CharSequence input) {
if (SHOW_LINE_RANGES.get(myOptions)) {
StringBuilder out = new StringBuilder();
out.append(result);
- TestUtils.appendBanner(out, TestUtils.bannerText("Ranges"), false);
- out.append(builder.toStringWithRanges(false));
+ if (trackedSequence == getDocument().getDocument().getChars()) {
+ TestUtils.appendBanner(out, TestUtils.bannerText("Ranges"), false);
+ out.append(builder.toStringWithRanges(false));
+ } else {
+ if (!trackedOffsets.isEmpty()) {
+ TestUtils.appendBanner(out, TestUtils.bannerText("Tracked Offsets"), false);
+ int i1 = 0;
+ for (TrackedOffset trackedOffset1 : trackedOffsets) {
+ out.append("[").append(i1).append("]: ").append(trackedOffset1.toString()).append("\n");
+ i1++;
+ }
+ }
+ TestUtils.appendBanner(out, TestUtils.bannerText("Ranges"), !trackedOffsets.isEmpty());
+ BasedSequence sequence = builder.toSequence(trackedSequence);
+ out.append(sequence.getBuilder().append(sequence).toStringWithRanges(false)).append("\n");
+ TestUtils.appendBanner(out, TestUtils.bannerText("Segments"), false);
+ out.append(sequence.getBuilder().append(sequence).getSegmentBuilder().toString());
+ }
result = out.toString();
}
return result;
diff --git a/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterTranslationSpecTestBase.java b/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterTranslationSpecTestBase.java
index abd148f51..f3f6d1c51 100644
--- a/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterTranslationSpecTestBase.java
+++ b/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/FormatterTranslationSpecTestBase.java
@@ -10,7 +10,9 @@
import com.vladsch.flexmark.util.data.DataHolder;
import com.vladsch.flexmark.util.data.DataKey;
import com.vladsch.flexmark.util.data.MutableDataSet;
+import com.vladsch.flexmark.util.data.SharedDataKeys;
import com.vladsch.flexmark.util.format.options.*;
+import com.vladsch.flexmark.util.sequence.SequenceUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -21,18 +23,35 @@
public abstract class FormatterTranslationSpecTestBase extends ComboSpecTestCase {
final static boolean SKIP_IGNORED_TESTS = true;
final public static DataKey SHOW_LINE_RANGES = new DataKey<>("SHOW_LINE_RANGES", false);
+ final public static DataKey EDIT_OP_CHAR = new DataKey<>("EDIT_OP_CHAR", SequenceUtils.NUL);
+ final public static DataKey EDIT_OP = new DataKey<>("EDIT_OP", 0);
final private static DataHolder OPTIONS = new MutableDataSet()
.set(Parser.BLANK_LINES_IN_AST, true)
.set(Parser.HEADING_NO_ATX_SPACE, true)
.toImmutable();
+ final private static DataHolder FIXED_INDENT_OPTIONS = new MutableDataSet().setFrom(ParserEmulationProfile.FIXED_INDENT)
+ .toMutable();
+
final private static Map optionsMap = new HashMap<>();
static {
optionsMap.put("IGNORED", new MutableDataSet().set(TestUtils.IGNORE, SKIP_IGNORED_TESTS));
optionsMap.put("show-ranges", new MutableDataSet().set(SHOW_LINE_RANGES, true));
+ optionsMap.put("running-tests", new MutableDataSet().set(SharedDataKeys.RUNNING_TESTS, true));
+
+ optionsMap.put("insert-char", new MutableDataSet().set(EDIT_OP, 1).set(EDIT_OP_CHAR, '\0'));
+ optionsMap.put("insert-space", new MutableDataSet().set(EDIT_OP, 1).set(EDIT_OP_CHAR, ' '));
+ optionsMap.put("delete-char", new MutableDataSet().set(EDIT_OP, -1).set(EDIT_OP_CHAR, '\0'));
+ optionsMap.put("delete-space", new MutableDataSet().set(EDIT_OP, -1).set(EDIT_OP_CHAR, ' '));
+// optionsMap.put("indent-edit", new MutableDataSet().set(EDIT_INDENT, true));
+ optionsMap.put("restore-tracked-spaces", new MutableDataSet().set(Formatter.RESTORE_TRACKED_SPACES, true));
+ optionsMap.put("multi-line-image-url", new MutableDataSet().set(Parser.PARSE_MULTI_LINE_IMAGE_URLS, true));
+
optionsMap.put("format-fixed-indent", new MutableDataSet().set(Formatter.FORMATTER_EMULATION_PROFILE, ParserEmulationProfile.FIXED_INDENT));
- optionsMap.put("parse-fixed-indent", new MutableDataSet().set(Parser.PARSER_EMULATION_PROFILE, ParserEmulationProfile.FIXED_INDENT));
+ optionsMap.put("format-content-after-prefix", new MutableDataSet().set(Formatter.LISTS_ITEM_CONTENT_AFTER_SUFFIX, true));
+ optionsMap.put("no-list-auto-loose", new MutableDataSet().set(Parser.LISTS_AUTO_LOOSE, false));
+ optionsMap.put("parse-fixed-indent", FIXED_INDENT_OPTIONS);
optionsMap.put("format-github", new MutableDataSet().set(Formatter.FORMATTER_EMULATION_PROFILE, ParserEmulationProfile.GITHUB_DOC));
optionsMap.put("parse-github", new MutableDataSet().set(Parser.PARSER_EMULATION_PROFILE, ParserEmulationProfile.GITHUB_DOC));
optionsMap.put("max-blank-lines-1", new MutableDataSet().set(Formatter.MAX_BLANK_LINES, 1));
@@ -73,6 +92,7 @@ public abstract class FormatterTranslationSpecTestBase extends ComboSpecTestCase
optionsMap.put("list-bullet-plus", new MutableDataSet().set(Formatter.LIST_BULLET_MARKER, ListBulletMarker.PLUS));
optionsMap.put("list-numbered-dot", new MutableDataSet().set(Formatter.LIST_NUMBERED_MARKER, ListNumberedMarker.DOT));
optionsMap.put("list-numbered-paren", new MutableDataSet().set(Formatter.LIST_NUMBERED_MARKER, ListNumberedMarker.PAREN));
+ optionsMap.put("list-spacing-as-is", new MutableDataSet().set(Formatter.LIST_SPACING, ListSpacing.AS_IS));
optionsMap.put("list-spacing-loosen", new MutableDataSet().set(Formatter.LIST_SPACING, ListSpacing.LOOSEN));
optionsMap.put("list-spacing-tighten", new MutableDataSet().set(Formatter.LIST_SPACING, ListSpacing.TIGHTEN));
optionsMap.put("list-spacing-loose", new MutableDataSet().set(Formatter.LIST_SPACING, ListSpacing.LOOSE));
@@ -117,7 +137,19 @@ public abstract class FormatterTranslationSpecTestBase extends ComboSpecTestCase
optionsMap.put("link-address-pattern", new MutableDataSet().set(Formatter.LINK_MARKER_COMMENT_PATTERN, Pattern.compile("^\\s*@IGNORE PREVIOUS:.*$")));
optionsMap.put("margin", new MutableDataSet().set(TestUtils.CUSTOM_OPTION, (option, params) -> TestUtils.customIntOption(option, params, FormatterTranslationSpecTestBase::marginOption)));
+ optionsMap.put("first-prefix", new MutableDataSet().set(TestUtils.CUSTOM_OPTION, (option, params) -> TestUtils.customStringOption(option, params, FormatterTranslationSpecTestBase::firstIndentOption)));
+ optionsMap.put("prefix", new MutableDataSet().set(TestUtils.CUSTOM_OPTION, (option, params) -> TestUtils.customStringOption(option, params, FormatterTranslationSpecTestBase::indentOption)));
+ }
+ static DataHolder firstIndentOption(@Nullable String params) {
+ String value = params != null ? params : "";
+ return new MutableDataSet().set(Formatter.DOCUMENT_FIRST_PREFIX, value);
}
+
+ static DataHolder indentOption(@Nullable String params) {
+ String value = params != null ? params : "";
+ return new MutableDataSet().set(Formatter.DOCUMENT_PREFIX, value);
+ }
+
static DataHolder marginOption(@Nullable Integer params) {
int value = params != null ? params : -1;
return new MutableDataSet().set(Formatter.RIGHT_MARGIN, value);
diff --git a/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/RendererSpecTest.java b/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/RendererSpecTest.java
index 142ee0eb0..1df5ce0a6 100644
--- a/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/RendererSpecTest.java
+++ b/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/RendererSpecTest.java
@@ -19,7 +19,7 @@ public abstract class RendererSpecTest extends ComboSpecTestCase {
.set(HtmlRenderer.INDENT_SIZE, 2)
.toImmutable();
- private static final Map optionsMap = new HashMap<>();
+ final private static Map optionsMap = new HashMap<>();
static {
optionsMap.put("src-pos", new MutableDataSet().set(HtmlRenderer.SOURCE_POSITION_ATTRIBUTE, "md-pos"));
}
diff --git a/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/TranslationFormatterSpecTest.java b/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/TranslationFormatterSpecTest.java
index 199ca566e..0213ce3a4 100644
--- a/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/TranslationFormatterSpecTest.java
+++ b/flexmark-core-test/src/main/java/com/vladsch/flexmark/core/test/util/TranslationFormatterSpecTest.java
@@ -25,19 +25,19 @@
import java.util.Map;
public abstract class TranslationFormatterSpecTest extends FormatterTranslationSpecTestBase {
- private static final boolean SHOW_INTERMEDIATE = false;
- private static final boolean SHOW_INTERMEDIATE_AST = false;
+ final private static boolean SHOW_INTERMEDIATE = false;
+ final private static boolean SHOW_INTERMEDIATE_AST = false;
- public static final DataKey DETAILS = new DataKey<>("DETAILS", SHOW_INTERMEDIATE);
- public static final DataKey AST_DETAILS = new DataKey<>("AST_DETAILS", SHOW_INTERMEDIATE_AST);
+ final public static DataKey DETAILS = new DataKey<>("DETAILS", SHOW_INTERMEDIATE);
+ final public static DataKey AST_DETAILS = new DataKey<>("AST_DETAILS", SHOW_INTERMEDIATE_AST);
- private static DataHolder OPTIONS = new MutableDataSet()
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(Parser.HTML_FOR_TRANSLATOR, true)
.set(Parser.PARSE_INNER_HTML_COMMENTS, true)
.set(Formatter.MAX_TRAILING_BLANK_LINES, 0)
.toImmutable();
- private static final Map optionsMap = new HashMap<>();
+ final private static Map optionsMap = new HashMap<>();
static {
optionsMap.put("details", new MutableDataSet().set(DETAILS, true));
optionsMap.put("ast-details", new MutableDataSet().set(AST_DETAILS, true));
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterNoBlankLinesSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterNoBlankLinesSpecTest.java
index 17ffab476..4093987b5 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterNoBlankLinesSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterNoBlankLinesSpecTest.java
@@ -12,9 +12,9 @@
import java.util.List;
public class ComboCoreFormatterNoBlankLinesSpecTest extends ComboCoreFormatterSpecTestBase {
- private static final String SPEC_RESOURCE = "/core_formatter_no_blanklines_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static String SPEC_RESOURCE = "/core_formatter_no_blanklines_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(Parser.BLANK_LINES_IN_AST, false)
.toImmutable();
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterSpecTest.java
index 5e94fd688..e731c3e22 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterSpecTest.java
@@ -8,8 +8,8 @@
import java.util.List;
public class ComboCoreFormatterSpecTest extends ComboCoreFormatterSpecTestBase {
- private static final String SPEC_RESOURCE = "/core_formatter_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static String SPEC_RESOURCE = "/core_formatter_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
public ComboCoreFormatterSpecTest(@NotNull SpecExample example) {
super(example, null);
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterSpecTestBase.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterSpecTestBase.java
index d2f5f5e48..e1f05d78b 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterSpecTestBase.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreFormatterSpecTestBase.java
@@ -11,7 +11,7 @@
import java.util.Map;
public abstract class ComboCoreFormatterSpecTestBase extends FormatterSpecTest {
- private static final Map optionsMap = new HashMap<>();
+ final private static Map optionsMap = new HashMap<>();
// static {
// optionsMap.put("atx-space-as-is", new MutableDataSet().set(Formatter.SPACE_AFTER_ATX_MARKER, DiscretionaryText.AS_IS));
// }
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreTranslationFormatterSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreTranslationFormatterSpecTest.java
index 48cf77794..7140c8c37 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreTranslationFormatterSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreTranslationFormatterSpecTest.java
@@ -16,10 +16,10 @@
import java.util.Map;
public class ComboCoreTranslationFormatterSpecTest extends TranslationFormatterSpecTest {
- private static final String SPEC_RESOURCE = "/core_translation_formatter_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static String SPEC_RESOURCE = "/core_translation_formatter_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final Map optionsMap = placementAndSortOptions(
+ final private static Map optionsMap = placementAndSortOptions(
Parser.REFERENCES_KEEP,
Formatter.REFERENCE_PLACEMENT,
Formatter.REFERENCE_SORT
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreWrappingSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreWrappingSpecTest.java
new file mode 100644
index 000000000..cabe5840a
--- /dev/null
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboCoreWrappingSpecTest.java
@@ -0,0 +1,29 @@
+package com.vladsch.flexmark.core.test.util.formatter;
+
+import com.vladsch.flexmark.test.util.spec.ResourceLocation;
+import com.vladsch.flexmark.test.util.spec.SpecExample;
+import com.vladsch.flexmark.util.data.DataHolder;
+import com.vladsch.flexmark.util.data.MutableDataSet;
+import com.vladsch.flexmark.util.data.SharedDataKeys;
+import org.jetbrains.annotations.NotNull;
+import org.junit.runners.Parameterized;
+
+import java.util.List;
+
+public class ComboCoreWrappingSpecTest extends ComboCoreFormatterSpecTestBase {
+ final private static String SPEC_RESOURCE = "/core_wrapping_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+
+ final private static DataHolder OPTIONS = new MutableDataSet()
+ .set(SharedDataKeys.RUNNING_TESTS, false) // Set to true to get stdout printout of intermediate wrapping information
+ .toImmutable();
+
+ public ComboCoreWrappingSpecTest(@NotNull SpecExample example) {
+ super(example, null, OPTIONS);
+ }
+
+ @Parameterized.Parameters(name = "{0}")
+ public static List data() {
+ return getTestData(RESOURCE_LOCATION);
+ }
+}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboParagraphFormatterSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboParagraphFormatterSpecTest.java
index 825ee3b11..635153323 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboParagraphFormatterSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/ComboParagraphFormatterSpecTest.java
@@ -11,12 +11,12 @@
import com.vladsch.flexmark.util.data.DataHolder;
import com.vladsch.flexmark.util.data.DataKey;
import com.vladsch.flexmark.util.data.MutableDataSet;
+import com.vladsch.flexmark.util.data.SharedDataKeys;
import com.vladsch.flexmark.util.format.CharWidthProvider;
import com.vladsch.flexmark.util.format.MarkdownParagraph;
import com.vladsch.flexmark.util.format.TrackedOffset;
import com.vladsch.flexmark.util.misc.Pair;
import com.vladsch.flexmark.util.sequence.BasedSequence;
-import com.vladsch.flexmark.util.sequence.SequenceUtils;
import com.vladsch.flexmark.util.sequence.builder.SequenceBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -27,48 +27,25 @@
import java.util.List;
import java.util.Map;
+import static com.vladsch.flexmark.formatter.Formatter.*;
import static com.vladsch.flexmark.util.sequence.SequenceUtils.EOL;
public class ComboParagraphFormatterSpecTest extends ComboCoreFormatterSpecTestBase {
- private static final String SPEC_RESOURCE = "/core_paragraph_formatter_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
-
- public static final DataKey RIGHT_MARGIN = new DataKey<>("RIGHT_MARGIN", 0);
- public static final DataKey FIRST_INDENT = new DataKey<>("FIRST_INDENT", "");
- public static final DataKey INDENT = new DataKey<>("INDENT", "");
- public static final DataKey FIRST_WIDTH_DELTA = new DataKey<>("FIRST_WIDTH_DELTA", 0);
- public static final DataKey EDIT_OP_CHAR = new DataKey<>("EDIT_OP_CHAR", SequenceUtils.NUL);
- public static final DataKey EDIT_OP = new DataKey<>("EDIT_OP", 0);
- public static final DataKey RESTORE_TRACKED_SPACES = new DataKey<>("RESTORE_END_SPACES", false);
- private static final Map optionsMap = new HashMap<>();
+ final private static String SPEC_RESOURCE = "/core_paragraph_formatter_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+
+ final public static DataKey FIRST_WIDTH_DELTA = new DataKey<>("FIRST_WIDTH_DELTA", 0);
+
+ final private static DataHolder OPTIONS = new MutableDataSet()
+ .set(SharedDataKeys.RUNNING_TESTS, false) // Set to true to get stdout printout of intermediate wrapping information
+ .toImmutable();
+
+ final private static Map optionsMap = new HashMap<>();
static {
- optionsMap.put("margin", new MutableDataSet().set(TestUtils.CUSTOM_OPTION, (option, params) -> TestUtils.customIntOption(option, params, ComboParagraphFormatterSpecTest::rightMarginOption)));
- optionsMap.put("first-indent", new MutableDataSet().set(TestUtils.CUSTOM_OPTION, (option, params) -> TestUtils.customStringOption(option, params, ComboParagraphFormatterSpecTest::firstIndentOption)));
- optionsMap.put("indent", new MutableDataSet().set(TestUtils.CUSTOM_OPTION, (option, params) -> TestUtils.customStringOption(option, params, ComboParagraphFormatterSpecTest::indentOption)));
optionsMap.put("first-width-delta", new MutableDataSet().set(TestUtils.CUSTOM_OPTION, (option, params) -> TestUtils.customIntOption(option, params, ComboParagraphFormatterSpecTest::firstWidthDeltaOption)));
- optionsMap.put("insert-char", new MutableDataSet().set(EDIT_OP, 1).set(EDIT_OP_CHAR, '\0'));
- optionsMap.put("insert-space", new MutableDataSet().set(EDIT_OP, 1).set(EDIT_OP_CHAR, ' '));
- optionsMap.put("delete-char", new MutableDataSet().set(EDIT_OP, -1).set(EDIT_OP_CHAR, '\0'));
- optionsMap.put("delete-space", new MutableDataSet().set(EDIT_OP, -1).set(EDIT_OP_CHAR, ' '));
- optionsMap.put("restore-tracked-spaces", new MutableDataSet().set(RESTORE_TRACKED_SPACES, true));
}
public ComboParagraphFormatterSpecTest(@NotNull SpecExample example) {
- super(example, optionsMap);
- }
-
- static DataHolder rightMarginOption(@Nullable Integer params) {
- int value = params != null ? params : -1;
- return new MutableDataSet().set(RIGHT_MARGIN, value);
- }
-
- static DataHolder firstIndentOption(@Nullable String params) {
- String value = params != null ? params : "";
- return new MutableDataSet().set(FIRST_INDENT, value);
- }
-
- static DataHolder indentOption(@Nullable String params) {
- String value = params != null ? params : "";
- return new MutableDataSet().set(INDENT, value);
+ super(example, optionsMap, OPTIONS);
}
static DataHolder firstWidthDeltaOption(@Nullable Integer params) {
@@ -123,30 +100,52 @@ public ParagraphFormatter(DataHolder options) {
public void render(@NotNull Node document, @NotNull Appendable output) {
BasedSequence input = document.getChars();
StringBuilder out = new StringBuilder();
+ Boolean inTest = SharedDataKeys.RUNNING_TESTS.get(getOptions());
Pair info = TestUtils.extractMarkup(input);
BasedSequence sequence = BasedSequence.of(info.getFirst());
- MarkdownParagraph formatter = new MarkdownParagraph(sequence, CharWidthProvider.NULL);
DataHolder options = getOptions() == null ? DataHolder.NULL : getOptions();
+ MarkdownParagraph formatter = new MarkdownParagraph(sequence, CharWidthProvider.NULL);
+ formatter.setOptions(options);
+
+ boolean restoreTrackedSpaces = RESTORE_TRACKED_SPACES.get(options);
+ int rightMargin = RIGHT_MARGIN.get(options);
+ CharSequence prefix = DOCUMENT_PREFIX.get(options);
+ CharSequence firstIndent = DOCUMENT_FIRST_PREFIX.get(options);
+
+ if (restoreTrackedSpaces && (prefix.length() > 0 || firstIndent.length() > 0)) {
+ formatter.setRestoreTrackedSpaces(true);
+ formatter.setFirstWidthOffset(firstIndent.length() - prefix.length());
+ formatter.setWidth(rightMargin - prefix.length());
+ } else {
+ formatter.setRestoreTrackedSpaces(restoreTrackedSpaces);
+ formatter.setWidth(rightMargin);
+ formatter.setFirstWidthOffset(FIRST_WIDTH_DELTA.get(options));
+ formatter.setIndent(prefix);
+ formatter.setFirstIndent(firstIndent);
+ }
- if (options.contains(INDENT)) formatter.setIndent(INDENT.get(options));
- if (options.contains(FIRST_INDENT)) formatter.setFirstIndent(FIRST_INDENT.get(options));
- if (options.contains(FIRST_WIDTH_DELTA)) formatter.setFirstWidthOffset(FIRST_WIDTH_DELTA.get(options));
- if (options.contains(RIGHT_MARGIN)) formatter.setWidth(RIGHT_MARGIN.get(options));
- if (options.contains(RESTORE_TRACKED_SPACES)) formatter.setRestoreTrackedSpaces(RESTORE_TRACKED_SPACES.get(options));
formatter.setKeepSoftBreaks(false); // cannot keep line breaks when formatting as you type
formatter.setKeepHardBreaks(true);
int[] offsets = info.getSecond();
SequenceBuilder builder1 = TestUtils.insertCaretMarkup(sequence, offsets);
- System.out.println(builder1.toStringWithRanges());
+ if (inTest) {
+ System.out.println(builder1.toStringWithRanges());
+ }
for (int offset : offsets) {
char c = EDIT_OP_CHAR.get(options);
int editOp = EDIT_OP.get(options);
- formatter.addTrackedOffset(TrackedOffset.track(offset, editOp != 0 && c == ' ', editOp > 0, editOp < 0));
+
+ TrackedOffset trackedOffset = TrackedOffset.track(offset, editOp != 0 && c == ' ', editOp > 0, editOp < 0);
+
+ trackedOffset.setSpacesBefore(sequence.getBaseSequence().countTrailingSpaceTab(offset));
+ trackedOffset.setSpacesAfter(sequence.getBaseSequence().countLeadingSpaceTab(offset));
+
+ formatter.addTrackedOffset(trackedOffset);
}
BasedSequence actual = formatter.wrapText();
@@ -154,7 +153,9 @@ public void render(@NotNull Node document, @NotNull Appendable output) {
SequenceBuilder builder = sequence.getBuilder();
actual.addSegments(builder.getSegmentBuilder());
- System.out.println(builder.toStringWithRanges());
+ if (inTest) {
+ System.out.println(builder.toStringWithRanges());
+ }
List trackedOffsets = formatter.getTrackedOffsets();
assert trackedOffsets.size() == offsets.length;
@@ -166,7 +167,7 @@ public void render(@NotNull Node document, @NotNull Appendable output) {
for (TrackedOffset trackedOffset : trackedOffsets) {
int offset = trackedOffset.getIndex();
assert offset != -1;
- out.append("[").append(Integer.toString(r)).append("]: ").append(trackedOffset.toString()).append(" --> ").append(offset).append("\n");
+ out.append("[").append(r).append("]: ").append(trackedOffset.toString()).append("\n");
resultOffsets[r++] = offset;
}
}
@@ -191,6 +192,10 @@ public void render(@NotNull Node document, @NotNull Appendable output) {
@Override
protected @NotNull String renderHtml() {
+ if (SharedDataKeys.RUNNING_TESTS.get(myOptions)) {
+ System.out.printf("%s:%d%n", myExample.getSection(), myExample.getExampleNumber());
+ }
+
return super.renderHtml();
}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/CoreFormatterTestSuite.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/CoreFormatterTestSuite.java
index 6400b969d..5470d5673 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/CoreFormatterTestSuite.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/CoreFormatterTestSuite.java
@@ -10,7 +10,6 @@
ComboCoreFormatterNoBlankLinesSpecTest.class,
FormatterModifiedAST.class,
MergeFormatterCoreTest.class,
- ComboParagraphFormatterSpecTest.class,
})
public class CoreFormatterTestSuite {
}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/FormatterModifiedAST.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/FormatterModifiedAST.java
index cb4d600e0..6b52a1f7c 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/FormatterModifiedAST.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/formatter/FormatterModifiedAST.java
@@ -242,4 +242,36 @@ public void test_LinkText() throws Exception {
//System.out.println("\n\nFormatted\n");
//System.out.println(formatted);
}
+
+ @Test
+ public void test_CRLFInFencedCodeBlock() throws Exception {
+
+ final String input =
+ "following sample:\n" +
+ "\n" +
+ "```xml\n" +
+ "\r\n" +
+ " com.vladsch.flexmark \r\n" +
+ " flexmark-all \r\n" +
+ " 0.60.2 \r\n" +
+ " \r\n" +
+ "```\n\n";
+
+ final String expected =
+ "following sample:\n" +
+ "\n" +
+ "```xml\n" +
+ "\r\n" +
+ " com.vladsch.flexmark \r\n" +
+ " flexmark-all \r\n" +
+ " 0.60.2 \r\n" +
+ " \r\n" +
+ "```\n\n";
+
+ Node document = PARSER.parse(input);
+
+ String formatted = RENDERER.render(document);
+
+ assertEquals(expected,formatted);
+ }
}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/HtmlEmbeddedAttributeTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/HtmlEmbeddedAttributeTest.java
index 3ba64377d..e3fc0d4e5 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/HtmlEmbeddedAttributeTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/HtmlEmbeddedAttributeTest.java
@@ -13,6 +13,7 @@
import com.vladsch.flexmark.util.data.MutableDataHolder;
import com.vladsch.flexmark.util.data.MutableDataSet;
import com.vladsch.flexmark.util.html.Attributes;
+import com.vladsch.flexmark.util.html.MutableAttributes;
import com.vladsch.flexmark.util.sequence.BasedSequence;
import org.jetbrains.annotations.NotNull;
import org.junit.Before;
@@ -77,7 +78,7 @@ public static NodePostProcessorFactory Factory(DataHolder options) {
public void process(@NotNull NodeTracker state, @NotNull Node node) {
BasedSequence paragraphText = BasedSequence.NULL;
if (node instanceof Paragraph) { // [foo](http://example.com)
- Attributes attributes = new Attributes();
+ MutableAttributes attributes = new MutableAttributes();
attributes.addValue("class", "caption");
node.appendChild(new EmbeddedAttributeProvider.EmbeddedNodeAttributes(node, attributes));
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/HtmlRendererTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/HtmlRendererTest.java
index 7d914d738..2642936db 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/HtmlRendererTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/HtmlRendererTest.java
@@ -1,8 +1,6 @@
package com.vladsch.flexmark.core.test.util.html;
-import com.vladsch.flexmark.ast.FencedCodeBlock;
-import com.vladsch.flexmark.ast.Image;
-import com.vladsch.flexmark.ast.Link;
+import com.vladsch.flexmark.ast.*;
import com.vladsch.flexmark.html.*;
import com.vladsch.flexmark.html.renderer.*;
import com.vladsch.flexmark.parser.Parser;
@@ -330,30 +328,30 @@ public void imageAltTextWithEntities() {
}
static class CustomLinkResolverImpl implements LinkResolver {
- public static final DataKey DOC_RELATIVE_URL = new DataKey<>("DOC_RELATIVE_URL", "");
+ final public static DataKey DOC_RELATIVE_URL = new DataKey<>("DOC_RELATIVE_URL", "");
final String docUrl;
- public CustomLinkResolverImpl(LinkResolverContext context) {
+ public CustomLinkResolverImpl(LinkResolverBasicContext context) {
docUrl = DOC_RELATIVE_URL.get(context.getOptions());
}
@NotNull
@Override
- public ResolvedLink resolveLink(@NotNull Node node, @NotNull LinkResolverContext context, @NotNull ResolvedLink link) {
+ public ResolvedLink resolveLink(@NotNull Node node, @NotNull LinkResolverBasicContext context, @NotNull ResolvedLink link) {
if (node instanceof Link) {
Link linkNode = (Link) node;
if (linkNode.getUrl().equals("/url")) {
return link.withUrl("www.url.com" + docUrl);
}
}
- return null;
+ return link;
}
static class Factory extends IndependentLinkResolverFactory {
@NotNull
@Override
- public LinkResolver apply(@NotNull LinkResolverContext context) {
+ public LinkResolver apply(@NotNull LinkResolverBasicContext context) {
return new CustomLinkResolverImpl(context);
}
}
@@ -361,6 +359,41 @@ public LinkResolver apply(@NotNull LinkResolverContext context) {
@Test
public void withOptions_customLinkResolver() {
+ // make sure custom link resolver is preserved when using withOptions() on HTML builder
+ HtmlRenderer renderer = HtmlRenderer.builder().linkResolverFactory(new CustomRefLinkResolverImpl.Factory()).build();
+ String rendered = renderer.render(parse("foo [:bar]"));
+
+ assertEquals("foo [:bar]
\n", rendered);
+ }
+
+ static class CustomRefLinkResolverImpl implements LinkResolver {
+ public CustomRefLinkResolverImpl(LinkResolverBasicContext context) {
+
+ }
+
+ @NotNull
+ @Override
+ public ResolvedLink resolveLink(@NotNull Node node, @NotNull LinkResolverBasicContext context, @NotNull ResolvedLink link) {
+ if (node instanceof LinkRef || node instanceof ImageRef) {
+ RefNode linkNode = (RefNode) node;
+ if (linkNode.getReference().startsWith(":")) {
+ return link.withUrl("");
+ }
+ }
+ return link;
+ }
+
+ static class Factory extends IndependentLinkResolverFactory {
+ @NotNull
+ @Override
+ public LinkResolver apply(@NotNull LinkResolverBasicContext context) {
+ return new CustomLinkResolverImpl(context);
+ }
+ }
+ }
+
+ @Test
+ public void withOptions_linkRefCustomLinkResolver() {
// make sure custom link resolver is preserved when using withOptions() on HTML builder
DataHolder OPTIONS = new MutableDataSet().set(CustomLinkResolverImpl.DOC_RELATIVE_URL, "/url");
DataHolder OPTIONS1 = new MutableDataSet().set(CustomLinkResolverImpl.DOC_RELATIVE_URL, "/url1");
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/PathologicalRenderingTestCase.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/PathologicalRenderingTestCase.java
index 7b6c958cb..70ce4bd9e 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/PathologicalRenderingTestCase.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/html/PathologicalRenderingTestCase.java
@@ -21,7 +21,7 @@
import java.util.concurrent.TimeUnit;
public abstract class PathologicalRenderingTestCase extends RenderingTestCase {
- private final DataHolder OPTIONS;
+ final private DataHolder OPTIONS;
public PathologicalRenderingTestCase(boolean spcInLinkUrls) {
OPTIONS = new MutableDataSet()
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/DelimiterProcessorTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/DelimiterProcessorTest.java
index 62a1cf543..78ef96092 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/DelimiterProcessorTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/DelimiterProcessorTest.java
@@ -33,11 +33,11 @@
import static org.junit.Assert.assertEquals;
final public class DelimiterProcessorTest extends RenderingTestCase {
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(TestUtils.NO_FILE_EOL, false)
.toImmutable();
- private static final Parser PARSER = Parser.builder(OPTIONS).customDelimiterProcessor(new AsymmetricDelimiterProcessor()).build();
- private static final HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).nodeRendererFactory(new UpperCaseNodeRendererFactory()).build();
+ final private static Parser PARSER = Parser.builder(OPTIONS).customDelimiterProcessor(new AsymmetricDelimiterProcessor()).build();
+ final private static HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).nodeRendererFactory(new UpperCaseNodeRendererFactory()).build();
@Test
public void delimiterProcessorWithInvalidDelimiterUse() {
@@ -75,8 +75,8 @@ public void asymmetricDelimiter() {
}
private static class CustomDelimiterProcessor implements DelimiterProcessor {
- private final char delimiterChar;
- private final int delimiterUse;
+ final private char delimiterChar;
+ final private int delimiterUse;
CustomDelimiterProcessor(char delimiterChar, int delimiterUse) {
this.delimiterChar = delimiterChar;
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/ParserTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/ParserTest.java
index db7b2b5d9..e37da066b 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/ParserTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/ParserTest.java
@@ -30,6 +30,7 @@
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.*;
final public class ParserTest {
@@ -659,7 +660,7 @@ public BasedSequence[] getSegments() {
}
private static class DashBlockParser extends AbstractBlockParser {
- private final DashBlock dash;
+ final private DashBlock dash;
public DashBlockParser(BasedSequence line) {
dash = new DashBlock();
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/SpecBenchmark.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/SpecBenchmark.java
index 28c2f36a6..f715b937e 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/SpecBenchmark.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/SpecBenchmark.java
@@ -17,12 +17,12 @@
@State(Scope.Benchmark)
public class SpecBenchmark {
- private static final String SPEC = TestSpecLocator.DEFAULT_RESOURCE_LOCATION.getResourceText();
- private static final List SPEC_EXAMPLES =
+ final private static String SPEC = TestSpecLocator.DEFAULT_RESOURCE_LOCATION.getResourceText();
+ final private static List SPEC_EXAMPLES =
SpecReader.createAndReadExamples(TestSpecLocator.DEFAULT_RESOURCE_LOCATION, false)
.getExamplesSourceAsString();
- private static final Parser PARSER = Parser.builder().build();
- private static final HtmlRenderer RENDERER = HtmlRenderer.builder().build();
+ final private static Parser PARSER = Parser.builder().build();
+ final private static HtmlRenderer RENDERER = HtmlRenderer.builder().build();
public static void main(String[] args) throws Exception {
Options options = new OptionsBuilder()
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/SpecialInputTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/SpecialInputTest.java
index 426cab3ab..5119cf8e2 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/SpecialInputTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/SpecialInputTest.java
@@ -12,7 +12,7 @@
import org.junit.Test;
final public class SpecialInputTest extends RenderingTestCase {
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(TestUtils.NO_FILE_EOL, false)
.toImmutable();
@@ -119,6 +119,11 @@ public void linkLabelLength() {
"[foo][12" + label2 + "]\n\n[12" + label2 + "]: /", "[foo][12" + label2 + "]
\n[12" + label2 + "]: /
\n");
}
+ @Test
+ public void manyUnderscores() {
+ assertRendering(Strings.repeat("_", 1000), " ");
+ }
+
@Nullable
@Override
public DataHolder options(@NotNull String option) {
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/UsageExampleTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/UsageExampleTest.java
index a4d0711e4..447188814 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/UsageExampleTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/UsageExampleTest.java
@@ -33,7 +33,7 @@ public void visitor() {
static class WordCountVisitor {
int wordCount = 0;
- private final NodeVisitor myVisitor;
+ final private NodeVisitor myVisitor;
public WordCountVisitor() {
myVisitor = new NodeVisitor(
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/ast/TextCollectingVisitorTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/ast/TextCollectingVisitorTest.java
index 83edc4c39..bc447c752 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/ast/TextCollectingVisitorTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/parser/ast/TextCollectingVisitorTest.java
@@ -67,4 +67,48 @@ public void test_pararaphs() {
"with more text" +
"", text);
}
+
+ @Test
+ public void test_paragraph_and_fenced_code_block() {
+ Parser parser = Parser.builder().build();
+ Node document = parser.parse("" +
+ "before\n" +
+ "\n" +
+ "```\n" +
+ "fenced code\n" +
+ "block\n" +
+ "```\n" +
+ "\n" +
+ "after");
+ TextCollectingVisitor collectingVisitor = new TextCollectingVisitor();
+ final String text = collectingVisitor.collectAndGetText(document);
+ assertEquals("" +
+ "before\n" +
+ "\n"+
+ "fenced code\n" +
+ "block\n" +
+ "\n"+
+ "after" +
+ "", text);
+ }
+
+ @Test
+ public void test_paragraph_and_indented_code_block() {
+ Parser parser = Parser.builder().build();
+ Node document = parser.parse("" +
+ "before\n" +
+ "\n" +
+ " indented code block\n" +
+ "\n" +
+ "after");
+ TextCollectingVisitor collectingVisitor = new TextCollectingVisitor();
+ final String text = collectingVisitor.collectAndGetText(document);
+ assertEquals("" +
+ "before\n" +
+ "\n"+
+ "indented code block\n" +
+ "\n"+
+ "after" +
+ "", text);
+ }
}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCommonMarkCompatibilitySpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCommonMarkCompatibilitySpecTest.java
index 9eed8a6a2..949bc7c76 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCommonMarkCompatibilitySpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCommonMarkCompatibilitySpecTest.java
@@ -12,9 +12,9 @@
import java.util.List;
final public class ComboCommonMarkCompatibilitySpecTest extends CoreRendererSpecTest {
- private static final String SPEC_RESOURCE = "/core_commonmark_compatibility_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static String SPEC_RESOURCE = "/core_commonmark_compatibility_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = new MutableDataSet()
.setFrom(ParserEmulationProfile.COMMONMARK.getOptions())
.set(HtmlRenderer.INDENT_SIZE, 4)
.set(HtmlRenderer.RENDER_HEADER_ID, true)
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCoreDirectionalSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCoreDirectionalSpecTest.java
index b3f97d0c2..9452cb48e 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCoreDirectionalSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCoreDirectionalSpecTest.java
@@ -14,8 +14,8 @@
final public class ComboCoreDirectionalSpecTest extends CoreRendererSpecTest {
static final String SPEC_RESOURCE = "/ast_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(HtmlRenderer.INDENT_SIZE, 0)
.set(Parser.INLINE_DELIMITER_DIRECTIONAL_PUNCTUATIONS, true)
.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCoreSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCoreSpecTest.java
index 28ccb783c..c95605cba 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCoreSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboCoreSpecTest.java
@@ -14,9 +14,9 @@
final public class ComboCoreSpecTest extends CoreRendererSpecTest {
static final String SPEC_RESOURCE = "/ast_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(HtmlRenderer.INDENT_SIZE, 0)
.set(Parser.INLINE_DELIMITER_DIRECTIONAL_PUNCTUATIONS, false)
.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboExtraSpec2Test.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboExtraSpec2Test.java
new file mode 100644
index 000000000..8475b54d0
--- /dev/null
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboExtraSpec2Test.java
@@ -0,0 +1,29 @@
+package com.vladsch.flexmark.core.test.util.renderer;
+
+import com.vladsch.flexmark.html.HtmlRenderer;
+import com.vladsch.flexmark.test.util.spec.ResourceLocation;
+import com.vladsch.flexmark.test.util.spec.SpecExample;
+import com.vladsch.flexmark.util.data.DataHolder;
+import com.vladsch.flexmark.util.data.MutableDataSet;
+import org.jetbrains.annotations.NotNull;
+import org.junit.runners.Parameterized;
+
+import java.util.List;
+
+final public class ComboExtraSpec2Test extends CoreRendererSpecTest {
+ final private static String SPEC_RESOURCE = "/core_extra_ast_spec2.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+
+ final private static DataHolder OPTIONS = new MutableDataSet()
+ .set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
+ .toImmutable();
+
+ public ComboExtraSpec2Test(@NotNull SpecExample example) {
+ super(example, null, OPTIONS);
+ }
+
+ @Parameterized.Parameters(name = "{0}")
+ public static List data() {
+ return getTestData(RESOURCE_LOCATION);
+ }
+}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboExtraSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboExtraSpecTest.java
index 04ee43aef..cb403ce43 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboExtraSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboExtraSpecTest.java
@@ -11,10 +11,10 @@
import java.util.List;
final public class ComboExtraSpecTest extends CoreRendererSpecTest {
- private static final String SPEC_RESOURCE = "/core_extra_ast_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static String SPEC_RESOURCE = "/core_extra_ast_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
.toImmutable();
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboGitHubCompatibilitySpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboGitHubCompatibilitySpecTest.java
index 4ee913ae4..dca41882c 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboGitHubCompatibilitySpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboGitHubCompatibilitySpecTest.java
@@ -15,9 +15,9 @@
import java.util.Map;
final public class ComboGitHubCompatibilitySpecTest extends CoreRendererSpecTest {
- private static final String SPEC_RESOURCE = "/core_gfm_doc_compatibility_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static String SPEC_RESOURCE = "/core_gfm_doc_compatibility_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = new MutableDataSet()
.setFrom(ParserEmulationProfile.GITHUB_DOC)
//.set(Parser.THEMATIC_BREAK_RELAXED_START, true)
@@ -26,7 +26,7 @@ final public class ComboGitHubCompatibilitySpecTest extends CoreRendererSpecTest
.set(HtmlRenderer.SOFT_BREAK, " ")
.toImmutable();
- private static final Map optionsMap = new HashMap<>();
+ final private static Map optionsMap = new HashMap<>();
static {
optionsMap.put("no-loose-non-list-children", new MutableDataSet().set(Parser.LISTS_LOOSE_WHEN_HAS_NON_LIST_CHILDREN, false).set(Parser.LISTS_LOOSE_WHEN_BLANK_LINE_FOLLOWS_ITEM_PARAGRAPH, false));
}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboIssuesSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboIssuesSpecTest.java
index c2da1bfdd..fac285362 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboIssuesSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboIssuesSpecTest.java
@@ -18,15 +18,15 @@
import java.util.Map;
final public class ComboIssuesSpecTest extends CoreRendererSpecTest {
- private static final String SPEC_RESOURCE = "/core_issues_ast_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static String SPEC_RESOURCE = "/core_issues_ast_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(HtmlRenderer.INDENT_SIZE, 2)
.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
.toImmutable();
- private static final Map optionsMap = new HashMap<>();
+ final private static Map optionsMap = new HashMap<>();
static {
optionsMap.put("block-no-interrupt-paragraph", new MutableDataSet().set(Parser.BLOCK_QUOTE_INTERRUPTS_PARAGRAPH, false));
optionsMap.put("fixed-indent", new MutableDataSet().setFrom(ParserEmulationProfile.FIXED_INDENT));
@@ -34,6 +34,7 @@ final public class ComboIssuesSpecTest extends CoreRendererSpecTest {
optionsMap.put("allow-javascript", new MutableDataSet().set(HtmlRenderer.SUPPRESSED_LINKS, ""));
optionsMap.put("pass-through", new MutableDataSet().set(HtmlRenderer.FORMAT_FLAGS, LineAppendable.F_PASS_THROUGH));
optionsMap.put("strip-indent", new MutableDataSet().set(TestUtils.SOURCE_INDENT, "> > "));
+ optionsMap.put("link-over-linkref", new MutableDataSet().set(Parser.LINK_TEXT_PRIORITY_OVER_LINK_REF, true));
optionsMap.put("no-html-blocks", new MutableDataSet().set(Parser.HTML_BLOCK_PARSER, false));
optionsMap.put("sub-parse", new MutableDataSet()
.set(TestUtils.SOURCE_PREFIX, "" +
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboKramdownCompatibilitySpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboKramdownCompatibilitySpecTest.java
index 581a01899..b32069195 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboKramdownCompatibilitySpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboKramdownCompatibilitySpecTest.java
@@ -12,9 +12,9 @@
import java.util.List;
final public class ComboKramdownCompatibilitySpecTest extends CoreRendererSpecTest {
- private static final String SPEC_RESOURCE = "/core_kramdown_compatibility_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static String SPEC_RESOURCE = "/core_kramdown_compatibility_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = new MutableDataSet()
.setFrom(ParserEmulationProfile.KRAMDOWN)
.set(HtmlRenderer.INDENT_SIZE, 4)
.toMutable();
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboMarkdownCompatibilitySpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboMarkdownCompatibilitySpecTest.java
index 106e918f3..ee882ac76 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboMarkdownCompatibilitySpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboMarkdownCompatibilitySpecTest.java
@@ -13,9 +13,9 @@
import java.util.List;
final public class ComboMarkdownCompatibilitySpecTest extends CoreRendererSpecTest {
- private static final String SPEC_RESOURCE = "/core_markdown_compatibility_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static String SPEC_RESOURCE = "/core_markdown_compatibility_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = new MutableDataSet()
.setFrom(ParserEmulationProfile.MARKDOWN)
.set(HtmlRenderer.INDENT_SIZE, 4)
.toMutable();
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboMultiMarkdownCompatibilitySpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboMultiMarkdownCompatibilitySpecTest.java
index dea5d9737..88559aca2 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboMultiMarkdownCompatibilitySpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboMultiMarkdownCompatibilitySpecTest.java
@@ -12,9 +12,9 @@
import java.util.List;
final public class ComboMultiMarkdownCompatibilitySpecTest extends CoreRendererSpecTest {
- private static final String SPEC_RESOURCE = "/core_multi_markdown_compatibility_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static String SPEC_RESOURCE = "/core_multi_markdown_compatibility_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = new MutableDataSet()
.setFrom(ParserEmulationProfile.MULTI_MARKDOWN)
.set(HtmlRenderer.INDENT_SIZE, 4)
.toMutable();
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboPegdownCompatibilitySpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboPegdownCompatibilitySpecTest.java
index 4d2b831d7..f34368fed 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboPegdownCompatibilitySpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/ComboPegdownCompatibilitySpecTest.java
@@ -16,15 +16,15 @@
import java.util.Map;
final public class ComboPegdownCompatibilitySpecTest extends CoreRendererSpecTest {
- private static final String SPEC_RESOURCE = "/core_pegdown_compatibility_spec.md";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static String SPEC_RESOURCE = "/core_pegdown_compatibility_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = new MutableDataSet().setFrom(ParserEmulationProfile.PEGDOWN_STRICT)
+ final private static DataHolder OPTIONS = new MutableDataSet().setFrom(ParserEmulationProfile.PEGDOWN_STRICT)
.set(HtmlRenderer.INDENT_SIZE, 2)
.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
.toMutable();
- private static final Map optionsMap = new HashMap<>();
+ final private static Map optionsMap = new HashMap<>();
static {
optionsMap.put("lists-item-indent", new MutableDataSet().set(Parser.LISTS_ITEM_INDENT, 2));
optionsMap.put("blank-line-interrupts-html", new MutableDataSet().set(Parser.HTML_BLOCK_DEEP_PARSE_BLANK_LINE_INTERRUPTS, true));
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/CoreRendererSpecTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/CoreRendererSpecTest.java
index 833488590..9ad3e4586 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/CoreRendererSpecTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/CoreRendererSpecTest.java
@@ -12,18 +12,37 @@
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.function.Supplier;
public abstract class CoreRendererSpecTest extends RendererSpecTest {
- private static final DataHolder OPTIONS = new MutableDataSet()
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(HtmlRenderer.OBFUSCATE_EMAIL_RANDOM, false)
.toImmutable();
- private static final Map optionsMap = new HashMap<>();
+ final private static Map optionsMap = new HashMap<>();
static {
ArrayList userTags = new ArrayList<>(Parser.HTML_BLOCK_TAGS.get(null));
userTags.add("tag");
+ optionsMap.put("heading-ids", new MutableDataSet().set(HtmlRenderer.RENDER_HEADER_ID, true));
+ optionsMap.put("heading-ids-no-dupe-dashes", new MutableDataSet().set(HtmlRenderer.HEADER_ID_GENERATOR_NO_DUPED_DASHES, true));
+ optionsMap.put("heading-ids-no-non-ascii-lowercase", new MutableDataSet().set(HtmlRenderer.HEADER_ID_GENERATOR_NON_ASCII_TO_LOWERCASE, false));
+ optionsMap.put("heading-ids-no-trim-start", new MutableDataSet().set(HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_LEADING_SPACES, false));
+ optionsMap.put("heading-ids-no-trim-end", new MutableDataSet().set(HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_TRAILING_SPACES, false));
+ optionsMap.put("heading-ids-emoji", new MutableDataSet().set(HtmlRenderer.HEADER_ID_ADD_EMOJI_SHORTCUT, true));
+ optionsMap.put("heading-ids-github", new MutableDataSet()
+ .set(HtmlRenderer.HEADER_ID_GENERATOR_TO_DASH_CHARS, " -")
+ .set(HtmlRenderer.HEADER_ID_GENERATOR_NON_DASH_CHARS, "_")
+ .set(HtmlRenderer.HEADER_ID_GENERATOR_NON_ASCII_TO_LOWERCASE, false)
+
+ // GitHub does not trim trailing spaces of Ref Links in Headings for ID generation
+ .set(HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_TRAILING_SPACES, false)
+ // GitHub adds emoji shortcut text to heading id
+ .set(HtmlRenderer.HEADER_ID_ADD_EMOJI_SHORTCUT, true)
+ );
+
optionsMap.put("user-block-tags", new MutableDataSet().set(Parser.HTML_BLOCK_TAGS, userTags));
optionsMap.put("obfuscate-email", new MutableDataSet().set(HtmlRenderer.OBFUSCATE_EMAIL, true));
optionsMap.put("keep-blank-lines", new MutableDataSet().set(Parser.BLANK_LINES_IN_AST, true));
@@ -64,6 +83,11 @@ public abstract class CoreRendererSpecTest extends RendererSpecTest {
optionsMap.put("suppress-inline-html", new MutableDataSet().set(HtmlRenderer.SUPPRESS_INLINE_HTML, true));
optionsMap.put("suppress-inline-html-comments", new MutableDataSet().set(HtmlRenderer.SUPPRESS_INLINE_HTML_COMMENTS, true));
optionsMap.put("no-class-prefix", new MutableDataSet().set(HtmlRenderer.FENCED_CODE_LANGUAGE_CLASS_PREFIX, ""));
+
+ HashMap map = new HashMap<>();
+ map.put("latex", "math");
+ optionsMap.put("class-map-latex", new MutableDataSet().set(HtmlRenderer.FENCED_CODE_LANGUAGE_CLASS_MAP, map));
+
optionsMap.put("no-language-class", new MutableDataSet().set(HtmlRenderer.FENCED_CODE_NO_LANGUAGE_CLASS, "nohighlight"));
optionsMap.put("parse-inner-comments", new MutableDataSet().set(Parser.PARSE_INNER_HTML_COMMENTS, true));
optionsMap.put("multi-line-image-url", new MutableDataSet().set(Parser.PARSE_MULTI_LINE_IMAGE_URLS, true));
@@ -74,6 +98,7 @@ public abstract class CoreRendererSpecTest extends RendererSpecTest {
optionsMap.put("block-quote-extend", new MutableDataSet().set(Parser.BLOCK_QUOTE_EXTEND_TO_BLANK_LINE, true));
optionsMap.put("block-ignore-blank", new MutableDataSet().set(Parser.BLOCK_QUOTE_IGNORE_BLANK_LINE, true));
optionsMap.put("html-block-start-only-on-block-tags", new MutableDataSet().set(Parser.HTML_BLOCK_START_ONLY_ON_BLOCK_TAGS, true));
+ optionsMap.put("no-html-block-start-only-on-block-tags", new MutableDataSet().set(Parser.HTML_BLOCK_START_ONLY_ON_BLOCK_TAGS, false));
optionsMap.put("setext-marker-length", new MutableDataSet().set(Parser.HEADING_SETEXT_MARKER_LENGTH, 3));
optionsMap.put("src-pos-lines", new MutableDataSet().set(HtmlRenderer.SOURCE_POSITION_PARAGRAPH_LINES, true).set(Parser.CODE_SOFT_LINE_BREAKS, true));
optionsMap.put("src-pos-lines-splice", new MutableDataSet().set(HtmlRenderer.SOURCE_POSITION_PARAGRAPH_LINES, true).set(Parser.CODE_SOFT_LINE_BREAKS, true).set(HtmlRenderer.INLINE_CODE_SPLICE_CLASS, "line-spliced"));
@@ -97,6 +122,7 @@ public abstract class CoreRendererSpecTest extends RendererSpecTest {
optionsMap.put("spec-027", new MutableDataSet().set(Parser.STRONG_WRAPS_EMPHASIS, true));
optionsMap.put("custom-list-marker", new MutableDataSet().set(Parser.LISTS_ITEM_PREFIX_CHARS, "*/"));
optionsMap.put("no-p-tags", new MutableDataSet().set(HtmlRenderer.NO_P_TAGS_USE_BR, true));
+ optionsMap.put("allow-name-space", new MutableDataSet().set(Parser.HTML_ALLOW_NAME_SPACE, true));
optionsMap.put("list-markdown-navigator", new MutableDataSet()
.set(Parser.LISTS_AUTO_LOOSE, false)
.set(Parser.LISTS_AUTO_LOOSE, false)
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/CoreRendererTestSuite.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/CoreRendererTestSuite.java
index 526c0a111..9e8fc72dc 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/CoreRendererTestSuite.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/CoreRendererTestSuite.java
@@ -6,11 +6,13 @@
@RunWith(Suite.class)
@Suite.SuiteClasses({
ComboExtraSpecTest.class,
+ ComboExtraSpec2Test.class,
CoreCompatibilityTestSuite.class,
ComboIssuesSpecTest.class,
FullOrigSpecCoreTest.class,
FullOrigSpec027CoreTest.class,
FullOrigSpec028CoreTest.class,
+ FullOrigSpec029CoreTest.class,
ComboCoreSpecTest.class,
ComboCoreDirectionalSpecTest.class,
})
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec027CoreTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec027CoreTest.java
index 357605901..e57ab3ba0 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec027CoreTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec027CoreTest.java
@@ -7,10 +7,16 @@
final public class FullOrigSpec027CoreTest extends OrigSpecCoreTest {
static final String SPEC_RESOURCE = "/spec.0.27.txt";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = ParserEmulationProfile.COMMONMARK_0_27.getProfileOptions().toImmutable();
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = ParserEmulationProfile.COMMONMARK_0_27.getProfileOptions().toImmutable();
public FullOrigSpec027CoreTest() {
super(OPTIONS);
}
+
+ @Override
+ @NotNull
+ protected ResourceLocation getSpecResourceLocation() {
+ return RESOURCE_LOCATION;
+ }
}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec028CoreTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec028CoreTest.java
index 83909e5e1..1092e0af7 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec028CoreTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec028CoreTest.java
@@ -7,10 +7,16 @@
final public class FullOrigSpec028CoreTest extends OrigSpecCoreTest {
static final String SPEC_RESOURCE = "/spec.0.28.txt";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
- private static final DataHolder OPTIONS = ParserEmulationProfile.COMMONMARK_0_28.getProfileOptions().toImmutable();
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = ParserEmulationProfile.COMMONMARK_0_28.getProfileOptions().toImmutable();
public FullOrigSpec028CoreTest() {
super(OPTIONS);
}
+
+ @Override
+ @NotNull
+ protected ResourceLocation getSpecResourceLocation() {
+ return RESOURCE_LOCATION;
+ }
}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec029CoreTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec029CoreTest.java
new file mode 100644
index 000000000..e34eb42d0
--- /dev/null
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpec029CoreTest.java
@@ -0,0 +1,24 @@
+package com.vladsch.flexmark.core.test.util.renderer;
+
+import com.vladsch.flexmark.parser.ParserEmulationProfile;
+import com.vladsch.flexmark.test.util.spec.ResourceLocation;
+import com.vladsch.flexmark.util.data.DataHolder;
+import org.jetbrains.annotations.NotNull;
+
+final public class FullOrigSpec029CoreTest extends OrigSpecCoreTest {
+ static final String SPEC_RESOURCE = "/spec.0.29.txt";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = ParserEmulationProfile.COMMONMARK_0_29.getProfileOptions().toImmutable();
+
+ public FullOrigSpec029CoreTest() {
+ super(OPTIONS);
+ }
+
+ @Override
+ @NotNull
+ protected ResourceLocation getSpecResourceLocation() {
+ // FIX: implement 0.29 spec and enable test
+ //return RESOURCE_LOCATION;
+ return ResourceLocation.NULL;
+ }
+}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpecCoreTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpecCoreTest.java
index e965590b0..3bf8a9839 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpecCoreTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/FullOrigSpecCoreTest.java
@@ -5,9 +5,15 @@
final public class FullOrigSpecCoreTest extends OrigSpecCoreTest {
static final String SPEC_RESOURCE = "/spec.txt";
- public static final @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
public FullOrigSpecCoreTest() {
super(null);
}
+
+ @Override
+ @NotNull
+ protected ResourceLocation getSpecResourceLocation() {
+ return RESOURCE_LOCATION;
+ }
}
diff --git a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/OrigSpecCoreTest.java b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/OrigSpecCoreTest.java
index 024a47c57..17aa92af3 100644
--- a/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/OrigSpecCoreTest.java
+++ b/flexmark-core-test/src/test/java/com/vladsch/flexmark/core/test/util/renderer/OrigSpecCoreTest.java
@@ -14,7 +14,7 @@
import org.jetbrains.annotations.Nullable;
public abstract class OrigSpecCoreTest extends FullSpecTestCase {
- static private final DataHolder OPTIONS = new MutableDataSet()
+ final private static DataHolder OPTIONS = new MutableDataSet()
.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
.set(TestUtils.NO_FILE_EOL, false)
.toImmutable();
diff --git a/flexmark-core-test/src/test/resources/ast_spec.md b/flexmark-core-test/src/test/resources/ast_spec.md
index 5d950d205..cbdda13af 100644
--- a/flexmark-core-test/src/test/resources/ast_spec.md
+++ b/flexmark-core-test/src/test/resources/ast_spec.md
@@ -12815,7 +12815,7 @@ Document[0, 14]
Paragraph[0, 14]
Text[0, 3] chars:[0, 3, "foo"]
HardLineBreak[3, 5]
- Text[10, 13] chars:[10, 13, "bar"]
+ Text[10, 13] chars:[10, 13, " bar"]
````````````````````````````````
diff --git a/flexmark-core-test/src/test/resources/core_extra_ast_spec.md b/flexmark-core-test/src/test/resources/core_extra_ast_spec.md
index a3a097f80..c1fd66389 100644
--- a/flexmark-core-test/src/test/resources/core_extra_ast_spec.md
+++ b/flexmark-core-test/src/test/resources/core_extra_ast_spec.md
@@ -826,6 +826,17 @@ Document[0, 96]
````````````````````````````````
+```````````````````````````````` example List - No Auto Loose: 3
+* item
+ text or code
+.
+
+````````````````````````````````
+
+
### No Auto Loose, Loose Item if Previous Loose
Without auto loose setting for list with loose if previous loose item
@@ -3725,9 +3736,25 @@ Document[0, 22]
````````````````````````````````
+Change language class map
+
+```````````````````````````````` example(Fenced Code Options: 2) options(class-map-latex)
+```latex
+text
+```
+.
+text
+
+.
+Document[0, 17]
+ FencedCodeBlock[0, 17] open:[0, 3, "```"] info:[3, 8, "latex"] content:[9, 14] lines[1] close:[14, 17, "```"]
+ Text[9, 14] chars:[9, 14, "text\n"]
+````````````````````````````````
+
+
no info with custom class
-```````````````````````````````` example(Fenced Code Options: 2) options(no-language-class)
+```````````````````````````````` example(Fenced Code Options: 3) options(no-language-class)
```
plain text
```
@@ -3743,7 +3770,7 @@ Document[0, 18]
indented code with custom class
-```````````````````````````````` example(Fenced Code Options: 3) options(no-language-class)
+```````````````````````````````` example(Fenced Code Options: 4) options(no-language-class)
plain text
.
plain text
@@ -3756,7 +3783,7 @@ Document[0, 14]
empty, no info
-```````````````````````````````` example Fenced Code Options: 4
+```````````````````````````````` example Fenced Code Options: 5
```
```
@@ -3772,7 +3799,7 @@ Document[0, 8]
empty, no info, blank line follows
-```````````````````````````````` example Fenced Code Options: 5
+```````````````````````````````` example Fenced Code Options: 6
```
```
@@ -3789,7 +3816,7 @@ Document[0, 10]
empty, info
-```````````````````````````````` example Fenced Code Options: 6
+```````````````````````````````` example Fenced Code Options: 7
```info
```
@@ -3805,7 +3832,7 @@ Document[0, 12]
empty, info, blank line follows
-```````````````````````````````` example Fenced Code Options: 7
+```````````````````````````````` example Fenced Code Options: 8
```info
```
@@ -3822,7 +3849,7 @@ Document[0, 14]
Unclosed Fenced code should take all input to end
-```````````````````````````````` example Fenced Code Options: 8
+```````````````````````````````` example Fenced Code Options: 9
```
sample
unclosed
@@ -3853,7 +3880,7 @@ Document[0, 38]
Wrap content in CodeBlock
-```````````````````````````````` example(Fenced Code Options: 9) options(code-content-block)
+```````````````````````````````` example(Fenced Code Options: 10) options(code-content-block)
```info
code content
indented code line
@@ -3871,7 +3898,7 @@ Document[0, 46]
Wrap content in CodeBlock
-```````````````````````````````` example(Fenced Code Options: 10) options(code-content-block)
+```````````````````````````````` example(Fenced Code Options: 11) options(code-content-block)
code content
indented code line
.
@@ -3887,7 +3914,7 @@ Document[0, 42]
Option not to match closing fence characters to opening ones
-```````````````````````````````` example(Fenced Code Options: 11) options(unmatched-fence)
+```````````````````````````````` example(Fenced Code Options: 12) options(unmatched-fence)
```
proper unmatched fenced code
~~~
@@ -3901,7 +3928,7 @@ Document[0, 36]
````````````````````````````````
-```````````````````````````````` example(Fenced Code Options: 12) options(unmatched-fence)
+```````````````````````````````` example(Fenced Code Options: 13) options(unmatched-fence)
```
proper unmatched fenced code
```
@@ -3916,6 +3943,104 @@ Document[0, 38]
````````````````````````````````
+Use info upto space
+
+```````````````````````````````` example Fenced Code Options: 14
+```java test
+proper unmatched fenced code
+```
+
+.
+proper unmatched fenced code
+
+.
+Document[0, 47]
+ FencedCodeBlock[0, 45] open:[0, 3, "```"] info:[3, 12, "java test"] content:[13, 42] lines[1] close:[42, 45, "```"]
+ Text[13, 42] chars:[13, 42, "prope … code\n"]
+````````````````````````````````
+
+
+Use info upto tab
+
+```````````````````````````````` example Fenced Code Options: 15
+```java→test
+proper unmatched fenced code
+```
+
+.
+proper unmatched fenced code
+
+.
+Document[0, 47]
+ FencedCodeBlock[0, 45] open:[0, 3, "```"] info:[3, 12, "java\ttest"] content:[13, 42] lines[1] close:[42, 45, "```"]
+ Text[13, 42] chars:[13, 42, "prope … code\n"]
+````````````````````````````````
+
+
+Use info up to space
+
+```````````````````````````````` example Fenced Code Options: 16
+```java test
+proper unmatched fenced code
+```
+
+.
+proper unmatched fenced code
+
+.
+Document[0, 47]
+ FencedCodeBlock[0, 45] open:[0, 3, "```"] info:[3, 12, "java test"] content:[13, 42] lines[1] close:[42, 45, "```"]
+ Text[13, 42] chars:[13, 42, "prope … code\n"]
+````````````````````````````````
+
+
+```````````````````````````````` example Fenced Code Options: 17
+``` java test
+proper unmatched fenced code
+```
+
+.
+proper unmatched fenced code
+
+.
+Document[0, 48]
+ FencedCodeBlock[0, 46] open:[0, 3, "```"] info:[4, 13, "java test"] content:[14, 43] lines[1] close:[43, 46, "```"]
+ Text[14, 43] chars:[14, 43, "prope … code\n"]
+````````````````````````````````
+
+
+Use info upto tab
+
+```````````````````````````````` example Fenced Code Options: 18
+```java→test
+proper unmatched fenced code
+```
+
+.
+proper unmatched fenced code
+
+.
+Document[0, 47]
+ FencedCodeBlock[0, 45] open:[0, 3, "```"] info:[3, 12, "java\ttest"] content:[13, 42] lines[1] close:[42, 45, "```"]
+ Text[13, 42] chars:[13, 42, "prope … code\n"]
+````````````````````````````````
+
+
+```````````````````````````````` example Fenced Code Options: 19
+```→java→test
+proper unmatched fenced code
+```
+
+.
+proper unmatched fenced code
+
+.
+Document[0, 48]
+ FencedCodeBlock[0, 46] open:[0, 3, "```"] info:[4, 13, "java\ttest"] content:[14, 43] lines[1] close:[43, 46, "```"]
+ Text[14, 43] chars:[14, 43, "prope … code\n"]
+````````````````````````````````
+
+
## Anchor links option
Change language class prefix
@@ -4148,7 +4273,64 @@ Document[0, 59]
````````````````````````````````
-```````````````````````````````` example(Multi-Line Image URL: 11) options(unmatched-fence)
+encoding of embedded EOL
+
+```````````````````````````````` example(Multi-Line Image URL: 11) options(multi-line-image-url)
+ trailing text
+.
+ trailing text
+.
+Document[0, 53]
+ Paragraph[0, 53]
+ Image[0, 39] textOpen:[0, 2, "!["] text:[2, 5, "ref"] textClose:[5, 6, "]"] linkOpen:[6, 7, "("] url:[7, 13, "/url1?"] pageRef:[7, 13, "/url1?"] urlContent:[14, 38, "one = 1 & line\nline two\n"] linkClose:[38, 39, ")"]
+ Text[2, 5] chars:[2, 5, "ref"]
+ Text[39, 53] chars:[39, 53, " trai … text"]
+````````````````````````````````
+
+
+preserve content indent
+
+```````````````````````````````` example(Multi-Line Image URL: 12) options(multi-line-image-url)
+ trailing text
+.
+ trailing text
+.
+Document[0, 61]
+ Paragraph[0, 61]
+ Image[0, 47] textOpen:[0, 2, "!["] text:[2, 5, "ref"] textClose:[5, 6, "]"] linkOpen:[6, 7, "("] url:[7, 13, "/url1?"] pageRef:[7, 13, "/url1?"] urlContent:[18, 46, " one = 1 & line\n line two\n"] linkClose:[46, 47, ")"]
+ Text[2, 5] chars:[2, 5, "ref"]
+ Text[47, 61] chars:[47, 61, " trai … text"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Multi-Line Image URL: 13) options(multi-line-image-url)
+>  trailing text
+.
+
+ trailing text
+
+.
+Document[0, 69]
+ BlockQuote[0, 69] marker:[0, 1, ">"]
+ Paragraph[2, 69]
+ Image[2, 55] textOpen:[2, 4, "!["] text:[4, 7, "ref"] textClose:[7, 8, "]"] linkOpen:[8, 9, "("] url:[9, 15, "/url1?"] pageRef:[9, 15, "/url1?"] urlContent:[22, 52, " one = 1 & line\n line two\n"] linkClose:[54, 55, ")"]
+ Text[4, 7] chars:[4, 7, "ref"]
+ Text[55, 69] chars:[55, 69, " trai … text"]
+````````````````````````````````
+
+
+## Fenced Code
+
+```````````````````````````````` example(Fenced Code: 1) options(unmatched-fence)
~~~
proper unmatched fenced code
```
@@ -4164,7 +4346,7 @@ Document[0, 36]
non empty, info, blank line follows, unmatched
-```````````````````````````````` example(Multi-Line Image URL: 12) options(unmatched-fence)
+```````````````````````````````` example(Fenced Code: 2) options(unmatched-fence)
```info
some text
~~~
@@ -5388,10 +5570,10 @@ lines*
Document[0, 131]
Paragraph[0, 131]
Text[0, 10] chars:[0, 10, "paragraph "]
- Code[10, 23] textOpen:[10, 11, "`"] text:[11, 22, "test \nwith"] textClose:[22, 23, "`"]
+ Code[10, 23] textOpen:[10, 11, "`"] text:[11, 22, "test … \n with"] textClose:[22, 23, "`"]
Text[11, 16] chars:[11, 16, "test "]
SoftLineBreak[16, 17]
- Text[18, 22] chars:[18, 22, "with"]
+ Text[18, 22] chars:[18, 22, " with"]
Text[23, 45] chars:[23, 45, " mult … lines"]
SoftLineBreak[45, 46]
Text[46, 56] chars:[46, 56, "paragraph "]
@@ -5400,7 +5582,7 @@ Document[0, 131]
SoftLineBreak[61, 62]
Text[62, 66] chars:[62, 66, "with"]
Text[67, 82] chars:[67, 82, " mult … lazy "]
- StrongEmphasis[82, 97] textOpen:[82, 84, "**"] text:[84, 95, "lines\nall"] textClose:[95, 97, "**"]
+ StrongEmphasis[82, 97] textOpen:[82, 84, "**"] text:[84, 95, "lines\n all"] textClose:[95, 97, "**"]
Text[84, 89] chars:[84, 89, "lines"]
SoftLineBreak[89, 90]
Text[92, 95] chars:[92, 95, "all"]
@@ -5428,10 +5610,10 @@ lines*
Document[0, 131]
Paragraph[0, 131]
Text[0, 10] chars:[0, 10, "paragraph "]
- Code[10, 23] textOpen:[10, 11, "`"] text:[11, 22, "test \nwith"] textClose:[22, 23, "`"]
+ Code[10, 23] textOpen:[10, 11, "`"] text:[11, 22, "test … \n with"] textClose:[22, 23, "`"]
Text[11, 16] chars:[11, 16, "test "]
SoftLineBreak[16, 17]
- Text[18, 22] chars:[18, 22, "with"]
+ Text[18, 22] chars:[18, 22, " with"]
Text[23, 45] chars:[23, 45, " mult … lines"]
SoftLineBreak[45, 46]
Text[46, 56] chars:[46, 56, "paragraph "]
@@ -5440,7 +5622,7 @@ Document[0, 131]
SoftLineBreak[61, 62]
Text[62, 66] chars:[62, 66, "with"]
Text[67, 82] chars:[67, 82, " mult … lazy "]
- StrongEmphasis[82, 97] textOpen:[82, 84, "**"] text:[84, 95, "lines\nall"] textClose:[95, 97, "**"]
+ StrongEmphasis[82, 97] textOpen:[82, 84, "**"] text:[84, 95, "lines\n all"] textClose:[95, 97, "**"]
Text[84, 89] chars:[84, 89, "lines"]
SoftLineBreak[89, 90]
Text[92, 95] chars:[92, 95, "all"]
@@ -6819,9 +7001,9 @@ Document[0, 20]
.
Document[0, 31]
Paragraph[0, 31]
- Link[0, 31] textOpen:[0, 1, "["] text:[1, 23, "hello **bold\nworld**"] textClose:[23, 24, "]"] linkOpen:[24, 25, "("] url:[25, 30, "#test"] pageRef:[25, 25] anchorMarker:[25, 26, "#"] anchorRef:[26, 30, "test"] linkClose:[30, 31, ")"]
+ Link[0, 31] textOpen:[0, 1, "["] text:[1, 23, "hello **bold\n world**"] textClose:[23, 24, "]"] linkOpen:[24, 25, "("] url:[25, 30, "#test"] pageRef:[25, 25] anchorMarker:[25, 26, "#"] anchorRef:[26, 30, "test"] linkClose:[30, 31, ")"]
Text[1, 7] chars:[1, 7, "hello "]
- StrongEmphasis[7, 23] textOpen:[7, 9, "**"] text:[9, 21, "bold\nworld"] textClose:[21, 23, "**"]
+ StrongEmphasis[7, 23] textOpen:[7, 9, "**"] text:[9, 21, "bold\n world"] textClose:[21, 23, "**"]
Text[9, 13] chars:[9, 13, "bold"]
SoftLineBreak[13, 14]
Text[16, 21] chars:[16, 21, "world"]
diff --git a/flexmark-core-test/src/test/resources/core_extra_ast_spec2.md b/flexmark-core-test/src/test/resources/core_extra_ast_spec2.md
new file mode 100644
index 000000000..247ec16b7
--- /dev/null
+++ b/flexmark-core-test/src/test/resources/core_extra_ast_spec2.md
@@ -0,0 +1,787 @@
+---
+title: Extra Core Test Spec
+author: Vladimir Schneider
+version: 0.2
+date: '2016-06-06'
+license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)'
+...
+
+---
+
+# Extra tests
+
+## Flexmark Spec
+
+## Heading ID
+
+### Default
+
+Heading ID option
+
+```````````````````````````````` example(Heading ID - Default: 1) options(heading-ids)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 160]
+ Heading[0, 75] textOpen:[0, 2, "##"] text:[3, 75, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 75] referenceOpen:[19, 20, "["] reference:[21, 73, "There is a {} reference showing but is Нет copy-able"] referenceClose:[74, 75, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[77, 158] refOpen:[77, 78, "["] ref:[78, 130, "There is a {} reference showing but is Нет copy-able"] refClose:[130, 132, "]:"] url:[133, 158, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - Default: 2) options(heading-ids)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 162]
+ Heading[0, 77] textOpen:[0, 2, "##"] text:[3, 77, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 77] referenceOpen:[19, 20, "["] reference:[22, 74, "There is a {} reference showing but is Нет copy-able"] referenceClose:[76, 77, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[79, 160] refOpen:[79, 80, "["] ref:[80, 132, "There is a {} reference showing but is Нет copy-able"] refClose:[132, 134, "]:"] url:[135, 160, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - Default: 3) options(heading-ids)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 216]
+ Heading[0, 131] textOpen:[0, 2, "##"] text:[3, 131, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 131] textOpen:[19, 20, "["] text:[21, 73, "There is a {} reference showing but is Нет copy-able"] textClose:[74, 75, "]"] referenceOpen:[75, 76, "["] reference:[77, 129, "There is a {} reference showing but is Нет copy-able"] referenceClose:[130, 131, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[133, 214] refOpen:[133, 134, "["] ref:[134, 186, "There is a {} reference showing but is Нет copy-able"] refClose:[186, 188, "]:"] url:[189, 214, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - Default: 4) options(heading-ids)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 220]
+ Heading[0, 135] textOpen:[0, 2, "##"] text:[3, 135, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 135] textOpen:[19, 20, "["] text:[22, 74, "There is a {} reference showing but is Нет copy-able"] textClose:[76, 77, "]"] referenceOpen:[77, 78, "["] reference:[80, 132, "There is a {} reference showing but is Нет copy-able"] referenceClose:[134, 135, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[137, 218] refOpen:[137, 138, "["] ref:[138, 190, "There is a {} reference showing but is Нет copy-able"] refClose:[190, 192, "]:"] url:[193, 218, "https://www.example.com/0"]
+````````````````````````````````
+
+
+### No Duped Dashes
+
+Heading ID option
+
+```````````````````````````````` example(Heading ID - No Duped Dashes: 1) options(heading-ids, heading-ids-no-dupe-dashes, heading-ids-no-dupe-dashes)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 160]
+ Heading[0, 75] textOpen:[0, 2, "##"] text:[3, 75, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 75] referenceOpen:[19, 20, "["] reference:[21, 73, "There is a {} reference showing but is Нет copy-able"] referenceClose:[74, 75, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[77, 158] refOpen:[77, 78, "["] ref:[78, 130, "There is a {} reference showing but is Нет copy-able"] refClose:[130, 132, "]:"] url:[133, 158, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Duped Dashes: 2) options(heading-ids, heading-ids-no-dupe-dashes)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 162]
+ Heading[0, 77] textOpen:[0, 2, "##"] text:[3, 77, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 77] referenceOpen:[19, 20, "["] reference:[22, 74, "There is a {} reference showing but is Нет copy-able"] referenceClose:[76, 77, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[79, 160] refOpen:[79, 80, "["] ref:[80, 132, "There is a {} reference showing but is Нет copy-able"] refClose:[132, 134, "]:"] url:[135, 160, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Duped Dashes: 3) options(heading-ids, heading-ids-no-dupe-dashes)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 216]
+ Heading[0, 131] textOpen:[0, 2, "##"] text:[3, 131, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 131] textOpen:[19, 20, "["] text:[21, 73, "There is a {} reference showing but is Нет copy-able"] textClose:[74, 75, "]"] referenceOpen:[75, 76, "["] reference:[77, 129, "There is a {} reference showing but is Нет copy-able"] referenceClose:[130, 131, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[133, 214] refOpen:[133, 134, "["] ref:[134, 186, "There is a {} reference showing but is Нет copy-able"] refClose:[186, 188, "]:"] url:[189, 214, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Duped Dashes: 4) options(heading-ids, heading-ids-no-dupe-dashes)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 220]
+ Heading[0, 135] textOpen:[0, 2, "##"] text:[3, 135, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 135] textOpen:[19, 20, "["] text:[22, 74, "There is a {} reference showing but is Нет copy-able"] textClose:[76, 77, "]"] referenceOpen:[77, 78, "["] reference:[80, 132, "There is a {} reference showing but is Нет copy-able"] referenceClose:[134, 135, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[137, 218] refOpen:[137, 138, "["] ref:[138, 190, "There is a {} reference showing but is Нет copy-able"] refClose:[190, 192, "]:"] url:[193, 218, "https://www.example.com/0"]
+````````````````````````````````
+
+
+### No Lowercase
+
+Heading ID option
+
+```````````````````````````````` example(Heading ID - No Lowercase: 1) options(heading-ids, heading-ids-no-non-ascii-lowercase)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 160]
+ Heading[0, 75] textOpen:[0, 2, "##"] text:[3, 75, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 75] referenceOpen:[19, 20, "["] reference:[21, 73, "There is a {} reference showing but is Нет copy-able"] referenceClose:[74, 75, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[77, 158] refOpen:[77, 78, "["] ref:[78, 130, "There is a {} reference showing but is Нет copy-able"] refClose:[130, 132, "]:"] url:[133, 158, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Lowercase: 2) options(heading-ids, heading-ids-no-non-ascii-lowercase)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 162]
+ Heading[0, 77] textOpen:[0, 2, "##"] text:[3, 77, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 77] referenceOpen:[19, 20, "["] reference:[22, 74, "There is a {} reference showing but is Нет copy-able"] referenceClose:[76, 77, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[79, 160] refOpen:[79, 80, "["] ref:[80, 132, "There is a {} reference showing but is Нет copy-able"] refClose:[132, 134, "]:"] url:[135, 160, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Lowercase: 3) options(heading-ids, heading-ids-no-non-ascii-lowercase)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 216]
+ Heading[0, 131] textOpen:[0, 2, "##"] text:[3, 131, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 131] textOpen:[19, 20, "["] text:[21, 73, "There is a {} reference showing but is Нет copy-able"] textClose:[74, 75, "]"] referenceOpen:[75, 76, "["] reference:[77, 129, "There is a {} reference showing but is Нет copy-able"] referenceClose:[130, 131, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[133, 214] refOpen:[133, 134, "["] ref:[134, 186, "There is a {} reference showing but is Нет copy-able"] refClose:[186, 188, "]:"] url:[189, 214, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Lowercase: 4) options(heading-ids, heading-ids-no-non-ascii-lowercase)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 220]
+ Heading[0, 135] textOpen:[0, 2, "##"] text:[3, 135, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 135] textOpen:[19, 20, "["] text:[22, 74, "There is a {} reference showing but is Нет copy-able"] textClose:[76, 77, "]"] referenceOpen:[77, 78, "["] reference:[80, 132, "There is a {} reference showing but is Нет copy-able"] referenceClose:[134, 135, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[137, 218] refOpen:[137, 138, "["] ref:[138, 190, "There is a {} reference showing but is Нет copy-able"] refClose:[190, 192, "]:"] url:[193, 218, "https://www.example.com/0"]
+````````````````````````````````
+
+
+### No Duped Dashes, No Lowercase
+
+Heading ID option
+
+```````````````````````````````` example(Heading ID - No Duped Dashes, No Lowercase: 1) options(heading-ids, heading-ids-no-non-ascii-lowercase, heading-ids-no-dupe-dashes)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 160]
+ Heading[0, 75] textOpen:[0, 2, "##"] text:[3, 75, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 75] referenceOpen:[19, 20, "["] reference:[21, 73, "There is a {} reference showing but is Нет copy-able"] referenceClose:[74, 75, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[77, 158] refOpen:[77, 78, "["] ref:[78, 130, "There is a {} reference showing but is Нет copy-able"] refClose:[130, 132, "]:"] url:[133, 158, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Duped Dashes, No Lowercase: 2) options(heading-ids, heading-ids-no-non-ascii-lowercase, heading-ids-no-dupe-dashes)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 162]
+ Heading[0, 77] textOpen:[0, 2, "##"] text:[3, 77, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 77] referenceOpen:[19, 20, "["] reference:[22, 74, "There is a {} reference showing but is Нет copy-able"] referenceClose:[76, 77, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[79, 160] refOpen:[79, 80, "["] ref:[80, 132, "There is a {} reference showing but is Нет copy-able"] refClose:[132, 134, "]:"] url:[135, 160, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Duped Dashes, No Lowercase: 3) options(heading-ids, heading-ids-no-non-ascii-lowercase, heading-ids-no-dupe-dashes)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 216]
+ Heading[0, 131] textOpen:[0, 2, "##"] text:[3, 131, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 131] textOpen:[19, 20, "["] text:[21, 73, "There is a {} reference showing but is Нет copy-able"] textClose:[74, 75, "]"] referenceOpen:[75, 76, "["] reference:[77, 129, "There is a {} reference showing but is Нет copy-able"] referenceClose:[130, 131, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[133, 214] refOpen:[133, 134, "["] ref:[134, 186, "There is a {} reference showing but is Нет copy-able"] refClose:[186, 188, "]:"] url:[189, 214, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Duped Dashes, No Lowercase: 4) options(heading-ids, heading-ids-no-non-ascii-lowercase, heading-ids-no-dupe-dashes)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 220]
+ Heading[0, 135] textOpen:[0, 2, "##"] text:[3, 135, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 135] textOpen:[19, 20, "["] text:[22, 74, "There is a {} reference showing but is Нет copy-able"] textClose:[76, 77, "]"] referenceOpen:[77, 78, "["] reference:[80, 132, "There is a {} reference showing but is Нет copy-able"] referenceClose:[134, 135, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[137, 218] refOpen:[137, 138, "["] ref:[138, 190, "There is a {} reference showing but is Нет copy-able"] refClose:[190, 192, "]:"] url:[193, 218, "https://www.example.com/0"]
+````````````````````````````````
+
+
+### No Trim End
+
+Heading ID option
+
+```````````````````````````````` example(Heading ID - No Trim End: 1) options(heading-ids, heading-ids-no-trim-end)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 160]
+ Heading[0, 75] textOpen:[0, 2, "##"] text:[3, 75, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 75] referenceOpen:[19, 20, "["] reference:[21, 73, "There is a {} reference showing but is Нет copy-able"] referenceClose:[74, 75, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[77, 158] refOpen:[77, 78, "["] ref:[78, 130, "There is a {} reference showing but is Нет copy-able"] refClose:[130, 132, "]:"] url:[133, 158, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Trim End: 2) options(heading-ids, heading-ids-no-trim-end)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 162]
+ Heading[0, 77] textOpen:[0, 2, "##"] text:[3, 77, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 77] referenceOpen:[19, 20, "["] reference:[22, 74, "There is a {} reference showing but is Нет copy-able"] referenceClose:[76, 77, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[79, 160] refOpen:[79, 80, "["] ref:[80, 132, "There is a {} reference showing but is Нет copy-able"] refClose:[132, 134, "]:"] url:[135, 160, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Trim End: 3) options(heading-ids, heading-ids-no-trim-end)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 216]
+ Heading[0, 131] textOpen:[0, 2, "##"] text:[3, 131, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 131] textOpen:[19, 20, "["] text:[21, 73, "There is a {} reference showing but is Нет copy-able"] textClose:[74, 75, "]"] referenceOpen:[75, 76, "["] reference:[77, 129, "There is a {} reference showing but is Нет copy-able"] referenceClose:[130, 131, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[133, 214] refOpen:[133, 134, "["] ref:[134, 186, "There is a {} reference showing but is Нет copy-able"] refClose:[186, 188, "]:"] url:[189, 214, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Trim End: 4) options(heading-ids, heading-ids-no-trim-end)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 220]
+ Heading[0, 135] textOpen:[0, 2, "##"] text:[3, 135, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 135] textOpen:[19, 20, "["] text:[22, 74, "There is a {} reference showing but is Нет copy-able"] textClose:[76, 77, "]"] referenceOpen:[77, 78, "["] reference:[80, 132, "There is a {} reference showing but is Нет copy-able"] referenceClose:[134, 135, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[137, 218] refOpen:[137, 138, "["] ref:[138, 190, "There is a {} reference showing but is Нет copy-able"] refClose:[190, 192, "]:"] url:[193, 218, "https://www.example.com/0"]
+````````````````````````````````
+
+
+### No Trim Start
+
+Heading ID option
+
+```````````````````````````````` example(Heading ID - No Trim Start: 1) options(heading-ids, heading-ids-no-trim-start)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 160]
+ Heading[0, 75] textOpen:[0, 2, "##"] text:[3, 75, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 75] referenceOpen:[19, 20, "["] reference:[21, 73, "There is a {} reference showing but is Нет copy-able"] referenceClose:[74, 75, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[77, 158] refOpen:[77, 78, "["] ref:[78, 130, "There is a {} reference showing but is Нет copy-able"] refClose:[130, 132, "]:"] url:[133, 158, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Trim Start: 2) options(heading-ids, heading-ids-no-trim-start)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 162]
+ Heading[0, 77] textOpen:[0, 2, "##"] text:[3, 77, "2.0. References [ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 77] referenceOpen:[19, 20, "["] reference:[22, 74, "There is a {} reference showing but is Нет copy-able"] referenceClose:[76, 77, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[79, 160] refOpen:[79, 80, "["] ref:[80, 132, "There is a {} reference showing but is Нет copy-able"] refClose:[132, 134, "]:"] url:[135, 160, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Trim Start: 3) options(heading-ids, heading-ids-no-trim-start)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 216]
+ Heading[0, 131] textOpen:[0, 2, "##"] text:[3, 131, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 131] textOpen:[19, 20, "["] text:[21, 73, "There is a {} reference showing but is Нет copy-able"] textClose:[74, 75, "]"] referenceOpen:[75, 76, "["] reference:[77, 129, "There is a {} reference showing but is Нет copy-able"] referenceClose:[130, 131, "]"]
+ Text[21, 73] chars:[21, 73, "There … -able"]
+ Reference[133, 214] refOpen:[133, 134, "["] ref:[134, 186, "There is a {} reference showing but is Нет copy-able"] refClose:[186, 188, "]:"] url:[189, 214, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - No Trim Start: 4) options(heading-ids, heading-ids-no-trim-start)
+## 2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 220]
+ Heading[0, 135] textOpen:[0, 2, "##"] text:[3, 135, "2.0. References [ There is a {} reference showing but is Нет copy-able ][ There is a {} reference showing but is Нет copy-able ]"]
+ Text[3, 19] chars:[3, 19, "2.0. … nces "]
+ LinkRef[19, 135] textOpen:[19, 20, "["] text:[22, 74, "There is a {} reference showing but is Нет copy-able"] textClose:[76, 77, "]"] referenceOpen:[77, 78, "["] reference:[80, 132, "There is a {} reference showing but is Нет copy-able"] referenceClose:[134, 135, "]"]
+ Text[22, 74] chars:[22, 74, "There … -able"]
+ Reference[137, 218] refOpen:[137, 138, "["] ref:[138, 190, "There is a {} reference showing but is Нет copy-able"] refClose:[190, 192, "]:"] url:[193, 218, "https://www.example.com/0"]
+````````````````````````````````
+
+
+### Emoji
+
+Heading ID with emoji
+
+```````````````````````````````` example(Heading ID - Emoji: 1) options(heading-ids, heading-ids-emoji)
+## Heading with some_underscore
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with some_underscore
+.
+Document[0, 116]
+ Heading[0, 31] textOpen:[0, 2, "##"] text:[3, 31, "Heading with some_underscore"]
+ Text[3, 31] chars:[3, 31, "Headi … score"]
+ Reference[33, 114] refOpen:[33, 34, "["] ref:[34, 86, "There is a {} reference showing but is Нет copy-able"] refClose:[86, 88, "]:"] url:[89, 114, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - Emoji: 2) options(heading-ids, heading-ids-emoji)
+## Heading with emoji :information_source:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 127]
+ Heading[0, 42] textOpen:[0, 2, "##"] text:[3, 42, "Heading with emoji :information_source:"]
+ Text[3, 42] chars:[3, 42, "Headi … urce:"]
+ Reference[44, 125] refOpen:[44, 45, "["] ref:[45, 97, "There is a {} reference showing but is Нет copy-able"] refClose:[97, 99, "]:"] url:[100, 125, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - Emoji: 3) options(heading-ids, heading-ids-emoji)
+## Heading with emoji :+1:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with emoji :+1:
+.
+Document[0, 111]
+ Heading[0, 26] textOpen:[0, 2, "##"] text:[3, 26, "Heading with emoji :+1:"]
+ Text[3, 26] chars:[3, 26, "Headi … :+1:"]
+ Reference[28, 109] refOpen:[28, 29, "["] ref:[29, 81, "There is a {} reference showing but is Нет copy-able"] refClose:[81, 83, "]:"] url:[84, 109, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - Emoji: 4) options(heading-ids, heading-ids-emoji)
+## Heading with emoji :-1:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with emoji :-1:
+.
+Document[0, 111]
+ Heading[0, 26] textOpen:[0, 2, "##"] text:[3, 26, "Heading with emoji :-1:"]
+ Text[3, 26] chars:[3, 26, "Headi … :-1:"]
+ Reference[28, 109] refOpen:[28, 29, "["] ref:[29, 81, "There is a {} reference showing but is Нет copy-able"] refClose:[81, 83, "]:"] url:[84, 109, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - Emoji: 5) options(heading-ids, heading-ids-emoji)
+## Heading with emoji :100:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with emoji :100:
+.
+Document[0, 112]
+ Heading[0, 27] textOpen:[0, 2, "##"] text:[3, 27, "Heading with emoji :100:"]
+ Text[3, 27] chars:[3, 27, "Headi … :100:"]
+ Reference[29, 110] refOpen:[29, 30, "["] ref:[30, 82, "There is a {} reference showing but is Нет copy-able"] refClose:[82, 84, "]:"] url:[85, 110, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - Emoji: 6) options(heading-ids, heading-ids-emoji)
+## Heading with emoji :u5272:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with emoji :u5272:
+.
+Document[0, 114]
+ Heading[0, 29] textOpen:[0, 2, "##"] text:[3, 29, "Heading with emoji :u5272:"]
+ Text[3, 29] chars:[3, 29, "Headi … 5272:"]
+ Reference[31, 112] refOpen:[31, 32, "["] ref:[32, 84, "There is a {} reference showing but is Нет copy-able"] refClose:[84, 86, "]:"] url:[87, 112, "https://www.example.com/0"]
+````````````````````````````````
+
+
+### GitHub
+
+Heading ID with emoji
+
+```````````````````````````````` example(Heading ID - GitHub: 1) options(heading-ids, heading-ids-github)
+## Heading with some_underscore
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with some_underscore
+.
+Document[0, 116]
+ Heading[0, 31] textOpen:[0, 2, "##"] text:[3, 31, "Heading with some_underscore"]
+ Text[3, 31] chars:[3, 31, "Headi … score"]
+ Reference[33, 114] refOpen:[33, 34, "["] ref:[34, 86, "There is a {} reference showing but is Нет copy-able"] refClose:[86, 88, "]:"] url:[89, 114, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - GitHub: 2) options(heading-ids, heading-ids-github)
+## Heading with emoji :information_source:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+
+.
+Document[0, 127]
+ Heading[0, 42] textOpen:[0, 2, "##"] text:[3, 42, "Heading with emoji :information_source:"]
+ Text[3, 42] chars:[3, 42, "Headi … urce:"]
+ Reference[44, 125] refOpen:[44, 45, "["] ref:[45, 97, "There is a {} reference showing but is Нет copy-able"] refClose:[97, 99, "]:"] url:[100, 125, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - GitHub: 3) options(heading-ids, heading-ids-github)
+## Heading with emoji :+1:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with emoji :+1:
+.
+Document[0, 111]
+ Heading[0, 26] textOpen:[0, 2, "##"] text:[3, 26, "Heading with emoji :+1:"]
+ Text[3, 26] chars:[3, 26, "Headi … :+1:"]
+ Reference[28, 109] refOpen:[28, 29, "["] ref:[29, 81, "There is a {} reference showing but is Нет copy-able"] refClose:[81, 83, "]:"] url:[84, 109, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - GitHub: 4) options(heading-ids, heading-ids-github)
+## Heading with emoji :-1:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with emoji :-1:
+.
+Document[0, 111]
+ Heading[0, 26] textOpen:[0, 2, "##"] text:[3, 26, "Heading with emoji :-1:"]
+ Text[3, 26] chars:[3, 26, "Headi … :-1:"]
+ Reference[28, 109] refOpen:[28, 29, "["] ref:[29, 81, "There is a {} reference showing but is Нет copy-able"] refClose:[81, 83, "]:"] url:[84, 109, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - GitHub: 5) options(heading-ids, heading-ids-github)
+## Heading with emoji :100:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with emoji :100:
+.
+Document[0, 112]
+ Heading[0, 27] textOpen:[0, 2, "##"] text:[3, 27, "Heading with emoji :100:"]
+ Text[3, 27] chars:[3, 27, "Headi … :100:"]
+ Reference[29, 110] refOpen:[29, 30, "["] ref:[30, 82, "There is a {} reference showing but is Нет copy-able"] refClose:[82, 84, "]:"] url:[85, 110, "https://www.example.com/0"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Heading ID - GitHub: 6) options(heading-ids, heading-ids-github)
+## Heading with emoji :u5272:
+
+[There is a {} reference showing but is Нет copy-able]: https://www.example.com/0
+
+.
+Heading with emoji :u5272:
+.
+Document[0, 114]
+ Heading[0, 29] textOpen:[0, 2, "##"] text:[3, 29, "Heading with emoji :u5272:"]
+ Text[3, 29] chars:[3, 29, "Headi … 5272:"]
+ Reference[31, 112] refOpen:[31, 32, "["] ref:[32, 84, "There is a {} reference showing but is Нет copy-able"] refClose:[84, 86, "]:"] url:[87, 112, "https://www.example.com/0"]
+````````````````````````````````
+
+
+## HTML Allow Name Space
+
+```````````````````````````````` example(HTML Allow Name Space: 1) options(allow-name-space)
+
+
+
+.
+
+
+.
+Document[0, 22]
+ HtmlBlock[0, 21]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 2) options(deep-html-parsing, allow-name-space)
+
+
+
+.
+ns:strong
+</ns:strong>
+.
+Document[0, 26]
+ Paragraph[0, 25] isTrailingBlankLine
+ AutoLink[0, 11] open:[0, 1, "<"] text:[1, 10, "ns:strong"] pageRef:[1, 10, "ns:strong"] close:[10, 11, ">"]
+ SoftLineBreak[11, 12]
+ Text[12, 24] chars:[12, 24, ""]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 3) options(deep-html-parsing, allow-name-space, no-html-block-start-only-on-block-tags)
+
+
+
+.
+
+
+.
+Document[0, 26]
+ HtmlBlock[0, 25]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 4) options(deep-html-parsing)
+
+
+
+.
+
+
+.
+Document[0, 24]
+ HtmlBlock[0, 23]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 5) options(deep-html-parsing, allow-name-space)
+
+
+
+.
+
+
+.
+Document[0, 24]
+ HtmlBlock[0, 23]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 6) options(deep-html-parsing, allow-name-space, no-html-block-start-only-on-block-tags)
+
+
+
+.
+
+
+.
+Document[0, 24]
+ HtmlBlock[0, 23]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 7) options(allow-name-space)
+
+
+
+.
+
+
+.
+Document[0, 24]
+ HtmlBlock[0, 23]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 8) options(allow-name-space)
+
+
+
+.
+
+
+.
+Document[0, 24]
+ HtmlBlock[0, 23]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 9) options(allow-name-space, html-block-start-only-on-block-tags)
+
+
+
+.
+
+
+.
+Document[0, 24]
+ HtmlBlock[0, 23]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 10) options(allow-name-space, html-block-start-only-on-block-tags)
+
+
+
+.
+ns:strong
+</ns:strong>
+.
+Document[0, 26]
+ Paragraph[0, 25] isTrailingBlankLine
+ AutoLink[0, 11] open:[0, 1, "<"] text:[1, 10, "ns:strong"] pageRef:[1, 10, "ns:strong"] close:[10, 11, ">"]
+ SoftLineBreak[11, 12]
+ Text[12, 24] chars:[12, 24, ""]
+````````````````````````````````
+
+
+```````````````````````````````` example(HTML Allow Name Space: 11) options(allow-name-space, no-html-block-start-only-on-block-tags)
+
+
+
+.
+
+
+.
+Document[0, 26]
+ HtmlBlock[0, 25]
+````````````````````````````````
+
+
diff --git a/flexmark-core-test/src/test/resources/core_formatter_no_blanklines_spec.md b/flexmark-core-test/src/test/resources/core_formatter_no_blanklines_spec.md
index b7b5daa93..19868a728 100644
--- a/flexmark-core-test/src/test/resources/core_formatter_no_blanklines_spec.md
+++ b/flexmark-core-test/src/test/resources/core_formatter_no_blanklines_spec.md
@@ -593,10 +593,10 @@ list spacing
```````````````````````````````` example(Lists: 22) options(list-spacing-tighten)
* item 1
* item 2
+
* item 2.1
* item 2.2
-
* item 3
.
* item 1
@@ -612,10 +612,10 @@ list spacing
```````````````````````````````` example(Lists: 23) options(list-spacing-tighten)
* item 1
* item 2
+
* item 2.1
* item 2.2
-
* item 3
paragraph
@@ -633,7 +633,9 @@ paragraph
```````````````````````````````` example(Lists: 24) options(list-spacing-tight)
* item 1
+
* item 2
+
* item 2.1
* item 2.2
@@ -1771,7 +1773,6 @@ Adds missing editor actions for end of word navigation but that is just the begi
* Enable Auto Indent Lines after move line/selection up or down actions to have them indented
automatically.
-
* Use Smart Paste to eliminate case change and prefix edits when pasting identifiers. MIA will
match case and style of identifier at destination when you paste, undo to get results before
MIA adjusted them. Copy `myColumnData` and paste it over `DEFAULT_VALUE` to get `COLUMN_DATA`,
@@ -1788,15 +1789,11 @@ Adds missing editor actions for end of word navigation but that is just the begi
moving the caret to the start of line when selecting or pasting. **Choose** whether you want
to **paste full line** selections: **above** or **below** the current line regardless of the
caret's column.
-
* Toggle between selection and multiple carets on selected lines to save time re-selecting the
same text again.
-
* Filter multiple carets saves you time when creating multiple carets by removing carets on
blank or comment lines so you can edit only code lines.
-
* Enhanced Paste from History dialog:
-
* **combine**, **arrange** and **reverse** the order of content entries
* **combine multiple** clipboard contents **with caret information intact**
* **paste and re-create multiple carets** from information already stored on the clipboard
@@ -2248,3 +2245,94 @@ Document[0, 53]
````````````````````````````````
+## Format Control
+
+```````````````````````````````` example(Format Control: 1) options(formatter-tags-enabled, margin[72])
+
+
+
+
+.
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Format Control: 2) options(formatter-tags-enabled, margin[72])
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
+
+
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
+
+
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
+.
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
+voluptua. At
+
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
+
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
+voluptua. At
+````````````````````````````````
+
+
+```````````````````````````````` example(Format Control: 3) options(formatter-tags-enabled, fenced-code-minimize, margin[72])
+
+
+* `fun appendListQuery(out: Appendable, params: Array>, alias: String? = null): Appendable`
+
+
+
+* `fun appendListQuery(out: Appendable, params: Array>, alias: String? = null): Appendable`
+
+```kotlin
+ data class ValidData(
+ val processId: Int,
+ )
+```
+.
+
+* `fun appendListQuery(out: Appendable, params: Array>, alias: String? = null): Appendable`
+
+* `fun appendListQuery(out: Appendable, params: Array>, alias: String? = null): Appendable`
+
+```kotlin
+data class ValidData(
+ val processId: Int,
+)
+```
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Format Control: 4) options(formatter-tags-enabled, margin[72])
+* 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
+
+ * Add: `BasedSequence.extendToStartOfLine(CharSequence eolChars, boolean includeEol)` - extend start to start of line in basedSequence
+.
+* 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
+
+ * Add: `BasedSequence.extendToStartOfLine(CharSequence eolChars,
+ boolean includeEol)` - extend start to start of line in
+ basedSequence
+
+````````````````````````````````
+
+
diff --git a/flexmark-core-test/src/test/resources/core_formatter_spec.md b/flexmark-core-test/src/test/resources/core_formatter_spec.md
index 59ba55a1b..762d0e106 100644
--- a/flexmark-core-test/src/test/resources/core_formatter_spec.md
+++ b/flexmark-core-test/src/test/resources/core_formatter_spec.md
@@ -153,7 +153,6 @@ indented code
1. numbered item 1
2. numbered item 2
-
1. numbered item 2
with uneven indent
@@ -198,6 +197,98 @@ lazy continuation
-----
+paragraph text
+lazy continuation
++ list item
+
+ > block quote
+ > lazy continuation
+
+`````` info
+ with uneven indent
+ with uneven indent
+indented code
+``````
+
+ with uneven indent
+ with uneven indent
+ indented code
+
+1. numbered item 1
+ 1. numbered item 2
+
+ `````` info
+ with uneven indent
+ with uneven indent
+ indented code
+ ``````
+
+ with uneven indent
+ with uneven indent
+ indented code
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Formatter: 5) options(list-spacing-loosen, format-fixed-indent, atx-space-add, atx-trailing-add, list-no-renumber-items, block-quote-compact-with-space, fenced-code-spaced-info, list-bullet-plus, fenced-code-marker-backtick, fenced-code-marker-length, fenced-code-minimize, indented-code-minimize)
+1. numbered item 1
+
+2. numbered item 2
+ 1. numbered item 2
+
+ with uneven indent
+ with uneven indent
+ indented code
+.
+1. numbered item 1
+
+2. numbered item 2
+
+ 1. numbered item 2
+
+ with uneven indent
+ with uneven indent
+ indented code
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Formatter: 6) options(format-fixed-indent, atx-space-add, atx-trailing-add, list-no-renumber-items, block-quote-compact-with-space, fenced-code-spaced-info, list-bullet-plus, fenced-code-marker-backtick, fenced-code-marker-length, fenced-code-minimize, indented-code-minimize)
+#Heading
+-----
+paragraph text
+lazy continuation
+* list item
+ > block quote
+ lazy continuation
+
+~~~info
+ with uneven indent
+ with uneven indent
+ indented code
+~~~
+
+ with uneven indent
+ with uneven indent
+ indented code
+1. numbered item 1
+
+ 1. numbered item 2
+
+ ~~~info
+ with uneven indent
+ with uneven indent
+ indented code
+ ~~~
+
+ with uneven indent
+ with uneven indent
+ indented code
+.
+# Heading #
+
+-----
+
paragraph text
lazy continuation
+ list item
@@ -234,7 +325,9 @@ indented code
## Lists
-```````````````````````````````` example Lists: 1
+### Items
+
+```````````````````````````````` example Lists - Items: 1
* list item 1
* list item 1.1
* list item 1.1.1
@@ -246,7 +339,7 @@ indented code
````````````````````````````````
-```````````````````````````````` example Lists: 2
+```````````````````````````````` example Lists - Items: 2
* list item 1
* list item 1.1
* list item 1.2
@@ -276,7 +369,7 @@ indented code
````````````````````````````````
-```````````````````````````````` example Lists: 3
+```````````````````````````````` example Lists - Items: 3
1. list item 1
1. list item 1.1
1. list item 1.2
@@ -306,7 +399,7 @@ indented code
````````````````````````````````
-```````````````````````````````` example Lists: 4
+```````````````````````````````` example Lists - Items: 4
1. list item 1
1. list item 1.1
1. list item 1.2
@@ -337,7 +430,7 @@ indented code
````````````````````````````````
-```````````````````````````````` example Lists: 5
+```````````````````````````````` example Lists - Items: 5
1. list item 1
1. list item 1.1
1) list item 1.2
@@ -349,7 +442,7 @@ indented code
````````````````````````````````
-```````````````````````````````` example(Lists: 6) options(list-numbered-dot)
+```````````````````````````````` example(Lists - Items: 6) options(list-numbered-dot)
1. list item 1
1. list item 1.1
1) list item 1.2
@@ -361,7 +454,7 @@ indented code
````````````````````````````````
-```````````````````````````````` example(Lists: 7) options(list-numbered-paren)
+```````````````````````````````` example(Lists - Items: 7) options(list-numbered-paren)
1. list item 1
1. list item 1.1
1) list item 1.2
@@ -373,7 +466,7 @@ indented code
````````````````````````````````
-```````````````````````````````` example Lists: 8
+```````````````````````````````` example Lists - Items: 8
paragraph
* item 1
* item 2
@@ -389,7 +482,7 @@ paragraph
````````````````````````````````
-```````````````````````````````` example Lists: 9
+```````````````````````````````` example Lists - Items: 9
paragraph
* item 1
@@ -407,7 +500,7 @@ paragraph
````````````````````````````````
-```````````````````````````````` example Lists: 10
+```````````````````````````````` example Lists - Items: 10
paragraph
1. item 1
1. item 2
@@ -423,7 +516,7 @@ paragraph
````````````````````````````````
-```````````````````````````````` example(Lists: 11) options(list-add-blank-line-before)
+```````````````````````````````` example(Lists - Items: 11) options(list-add-blank-line-before)
paragraph
* item 1
* item 2
@@ -440,7 +533,7 @@ paragraph
````````````````````````````````
-```````````````````````````````` example(Lists: 12) options(list-add-blank-line-before)
+```````````````````````````````` example(Lists - Items: 12) options(list-add-blank-line-before)
paragraph
1. item 1
1. item 2
@@ -457,7 +550,7 @@ paragraph
````````````````````````````````
-```````````````````````````````` example(Lists: 13) options(list-bullet-asterisk)
+```````````````````````````````` example(Lists - Items: 13) options(list-bullet-asterisk)
+ item 1
+ item 2
+ item 2.1
@@ -471,7 +564,7 @@ paragraph
````````````````````````````````
-```````````````````````````````` example(Lists: 14) options(list-bullet-plus)
+```````````````````````````````` example(Lists - Items: 14) options(list-bullet-plus)
* item 1
* item 2
* item 2.1
@@ -485,7 +578,7 @@ paragraph
````````````````````````````````
-```````````````````````````````` example(Lists: 15) options(list-bullet-dash)
+```````````````````````````````` example(Lists - Items: 15) options(list-bullet-dash)
* item 1
* item 2
* item 2.1
@@ -499,9 +592,9 @@ paragraph
````````````````````````````````
-list spacing
+list spacing as is
-```````````````````````````````` example Lists: 16
+```````````````````````````````` example Lists - Items: 16
* item 1
* item 2
* item 2.1
@@ -511,19 +604,59 @@ list spacing
* item 3
.
* item 1
-
* item 2
+ * item 2.1
+
+ * item 2.2
+* item 3
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 17) options(list-spacing-loosen)
+* item 1
+* item 2
+
+
* item 2.1
+
+ * item 2.2
+* item 3
+.
+* item 1
+* item 2
+
+ * item 2.1
+
+ * item 2.2
+* item 3
+
+````````````````````````````````
+
+list spacing tighten
+
+```````````````````````````````` example(Lists - Items: 18) options(list-spacing-tighten)
+* item 1
+* item 2
+ * item 2.1
+
* item 2.2
+
+* item 3
+.
+* item 1
+* item 2
+ * item 2.1
+ * item 2.2
* item 3
````````````````````````````````
-```````````````````````````````` example(Lists: 17) options(list-spacing-loose)
+```````````````````````````````` example(Lists - Items: 19) options(list-spacing-loosen)
* item 1
* item 2
* item 2.1
@@ -545,31 +678,30 @@ list spacing
````````````````````````````````
-```````````````````````````````` example(Lists: 18) options(list-spacing-tight)
+```````````````````````````````` example(Lists - Items: 20) options(list-spacing-loosen)
* item 1
* item 2
* item 2.1
* item 2.2
-
* item 3
.
* item 1
* item 2
* item 2.1
+
* item 2.2
* item 3
````````````````````````````````
-```````````````````````````````` example(Lists: 19) options(list-spacing-loosen)
+```````````````````````````````` example(Lists - Items: 21) options(list-spacing-loose)
* item 1
* item 2
* item 2.1
-
+
* item 2.2
-
* item 3
.
* item 1
@@ -585,32 +717,72 @@ list spacing
````````````````````````````````
-```````````````````````````````` example(Lists: 20) options(list-spacing-tighten)
+```````````````````````````````` example(Lists - Items: 22) options(list-spacing-tight)
+* item 1
+* item 2
+ * item 2.1
+
+ * item 2.2
+
+* item 3
+.
* item 1
* item 2
* item 2.1
-
* item 2.2
-
+* item 3
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 23) options(list-spacing-loosen)
+* item 1
+* item 2
+ * item 2.1
+
+ * item 2.2
+
* item 3
.
* item 1
+
* item 2
+
* item 2.1
* item 2.2
+
* item 3
````````````````````````````````
-```````````````````````````````` example(Lists: 21) options(list-spacing-tighten)
+```````````````````````````````` example(Lists - Items: 24) options(list-spacing-tighten)
* item 1
* item 2
* item 2.1
-
+
* item 2.2
-
+
+* item 3
+.
+* item 1
+* item 2
+ * item 2.1
+
+ * item 2.2
+* item 3
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 25) options(list-spacing-tighten)
+* item 1
+* item 2
+ * item 2.1
+
+ * item 2.2
+
* item 3
paragraph
@@ -626,7 +798,7 @@ paragraph
````````````````````````````````
-```````````````````````````````` example(Lists: 22) options(list-spacing-tight)
+```````````````````````````````` example(Lists - Items: 26) options(list-spacing-tight)
* item 1
* item 2
* item 2.1
@@ -649,7 +821,27 @@ paragraph
list family changing
-```````````````````````````````` example(Lists: 23) options(format-fixed-indent)
+```````````````````````````````` example(Lists - Items: 27) options(format-fixed-indent)
+* item 1
+* item 2
+ * item 2.1
+
+ * item 2.2
+
+* item 3
+.
+* item 1
+* item 2
+ * item 2.1
+
+ * item 2.2
+
+* item 3
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 28) options(format-fixed-indent, list-spacing-loosen)
* item 1
* item 2
* item 2.1
@@ -671,7 +863,7 @@ list family changing
````````````````````````````````
-```````````````````````````````` example Lists: 24
+```````````````````````````````` example Lists - Items: 29
- [link](link.txt)
next line
@@ -682,7 +874,7 @@ next line
````````````````````````````````
-```````````````````````````````` example Lists: 25
+```````````````````````````````` example Lists - Items: 30
- [link](link.txt)
next line
@@ -693,6 +885,123 @@ next line
````````````````````````````````
+Should not add blank line after last child of list item.
+
+```````````````````````````````` example(Lists - Items: 31) options(list-spacing-as-is, margin[72])
+1. List item with paragraph child item without blank line after is a tight list.
+
+ Paragraph child item.
+2. Following list item.
+3. Another list item.
+
+.
+1. List item with paragraph child item without blank line after is a
+ tight list.
+
+ Paragraph child item.
+2. Following list item.
+3. Another list item.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 32) options(list-spacing-tight, margin[72])
+1. List item with paragraph child item without blank line after is a tight list.
+
+ Paragraph child item.
+2. Following list item.
+3. Another list item.
+
+.
+1. List item with paragraph child item without blank line after is a
+ tight list.
+
+ Paragraph child item.
+2. Following list item.
+3. Another list item.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 33) options(list-spacing-tight, margin[72])
+1. List item with paragraph child item without blank line after is a tight list.
+
+ Paragraph child item.
+
+2. Following list item.
+
+3. Another list item.
+
+.
+1. List item with paragraph child item without blank line after is a
+ tight list.
+
+ Paragraph child item.
+2. Following list item.
+3. Another list item.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 34) options(list-spacing-loosen, margin[72])
+1. List item with paragraph child item without blank line after is a tight list.
+
+ Paragraph child item.
+2. Following list item.
+3. Another list item.
+
+.
+1. List item with paragraph child item without blank line after is a
+ tight list.
+
+ Paragraph child item.
+2. Following list item.
+3. Another list item.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 35) options(list-spacing-loosen, margin[72])
+1. List item with paragraph child item without blank line after is a tight list.
+
+ Paragraph child item.
+
+2. Following list item.
+3. Another list item.
+
+.
+1. List item with paragraph child item without blank line after is a
+ tight list.
+
+ Paragraph child item.
+
+2. Following list item.
+
+3. Another list item.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Items: 36) options(list-spacing-loose, margin[72])
+1. List item with paragraph child item without blank line after is a tight list.
+
+ Paragraph child item.
+2. Following list item.
+3. Another list item.
+
+.
+1. List item with paragraph child item without blank line after is a
+ tight list.
+
+ Paragraph child item.
+
+2. Following list item.
+
+3. Another list item.
+
+````````````````````````````````
+
+
### Ordered
```````````````````````````````` example(Lists - Ordered: 1) options(list-no-renumber-items)
@@ -969,7 +1278,339 @@ next line
````````````````````````````````
-## Block Quotes
+### Empty Items
+
+```````````````````````````````` example(Lists - Empty Items: 1) options(list-spacing-loosen)
+* list item 1
+*
+
+* list item 2
+*
+not a list item
+.
+* list item 1
+
+*
+
+* list item 2
+
+*
+
+not a list item
+.
+Document[0, 50]
+ BulletList[0, 33] isLoose
+ BulletListItem[0, 14] open:[0, 1, "*"] isLoose
+ Paragraph[2, 14]
+ Text[2, 13] chars:[2, 13, "list … tem 1"]
+ BulletListItem[14, 15] open:[14, 15, "*"] isLoose hadBlankLineAfter
+ BlankLine[17, 18]
+ BulletListItem[18, 32] open:[18, 19, "*"] isLoose
+ Paragraph[20, 32]
+ Text[20, 31] chars:[20, 31, "list … tem 2"]
+ BulletListItem[32, 33] open:[32, 33, "*"] isLoose
+ Paragraph[35, 50]
+ Text[35, 50] chars:[35, 50, "not a … item"]
+````````````````````````````````
+
+
+```````````````````````````````` example Lists - Empty Items: 2
+* list item 1
+*
+* list item 2
+*
+not a list item
+.
+* list item 1
+*
+* list item 2
+*
+
+not a list item
+.
+Document[0, 49]
+ BulletList[0, 32] isTight
+ BulletListItem[0, 14] open:[0, 1, "*"] isTight
+ Paragraph[2, 14]
+ Text[2, 13] chars:[2, 13, "list … tem 1"]
+ BulletListItem[14, 15] open:[14, 15, "*"] isTight
+ BulletListItem[17, 31] open:[17, 18, "*"] isTight
+ Paragraph[19, 31]
+ Text[19, 30] chars:[19, 30, "list … tem 2"]
+ BulletListItem[31, 32] open:[31, 32, "*"] isTight
+ Paragraph[34, 49]
+ Text[34, 49] chars:[34, 49, "not a … item"]
+````````````````````````````````
+
+
+With removal of empty list items
+
+```````````````````````````````` example(Lists - Empty Items: 3) options(remove-empty-items)
+* list item 1
+*
+
+* list item 2
+*
+not a list item
+.
+* list item 1
+
+* list item 2
+
+not a list item
+.
+Document[0, 50]
+ BulletList[0, 33] isLoose
+ BulletListItem[0, 14] open:[0, 1, "*"] isLoose
+ Paragraph[2, 14]
+ Text[2, 13] chars:[2, 13, "list … tem 1"]
+ BulletListItem[14, 15] open:[14, 15, "*"] isLoose hadBlankLineAfter
+ BlankLine[17, 18]
+ BulletListItem[18, 32] open:[18, 19, "*"] isLoose
+ Paragraph[20, 32]
+ Text[20, 31] chars:[20, 31, "list … tem 2"]
+ BulletListItem[32, 33] open:[32, 33, "*"] isLoose
+ Paragraph[35, 50]
+ Text[35, 50] chars:[35, 50, "not a … item"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Empty Items: 4) options(remove-empty-items)
+* list item 1
+*
+* list item 2
+*
+not a list item
+.
+* list item 1
+* list item 2
+
+not a list item
+.
+Document[0, 49]
+ BulletList[0, 32] isTight
+ BulletListItem[0, 14] open:[0, 1, "*"] isTight
+ Paragraph[2, 14]
+ Text[2, 13] chars:[2, 13, "list … tem 1"]
+ BulletListItem[14, 15] open:[14, 15, "*"] isTight
+ BulletListItem[17, 31] open:[17, 18, "*"] isTight
+ Paragraph[19, 31]
+ Text[19, 30] chars:[19, 30, "list … tem 2"]
+ BulletListItem[31, 32] open:[31, 32, "*"] isTight
+ Paragraph[34, 49]
+ Text[34, 49] chars:[34, 49, "not a … item"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Empty Items: 5) options(remove-empty-items)
+1. list item 1
+1.
+
+1. list item 2
+1.
+not a list item
+.
+1. list item 1
+
+2. list item 2
+
+not a list item
+.
+Document[0, 54]
+ OrderedList[0, 37] isLoose delimiter:'.'
+ OrderedListItem[0, 15] open:[0, 2, "1."] isLoose
+ Paragraph[3, 15]
+ Text[3, 14] chars:[3, 14, "list … tem 1"]
+ OrderedListItem[15, 17] open:[15, 17, "1."] isLoose hadBlankLineAfter
+ BlankLine[19, 20]
+ OrderedListItem[20, 35] open:[20, 22, "1."] isLoose
+ Paragraph[23, 35]
+ Text[23, 34] chars:[23, 34, "list … tem 2"]
+ OrderedListItem[35, 37] open:[35, 37, "1."] isLoose
+ Paragraph[39, 54]
+ Text[39, 54] chars:[39, 54, "not a … item"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Empty Items: 6) options(remove-empty-items)
+1. list item 1
+1.
+1. list item 2
+1.
+not a list item
+.
+1. list item 1
+2. list item 2
+
+not a list item
+.
+Document[0, 53]
+ OrderedList[0, 36] isTight delimiter:'.'
+ OrderedListItem[0, 15] open:[0, 2, "1."] isTight
+ Paragraph[3, 15]
+ Text[3, 14] chars:[3, 14, "list … tem 1"]
+ OrderedListItem[15, 17] open:[15, 17, "1."] isTight
+ OrderedListItem[19, 34] open:[19, 21, "1."] isTight
+ Paragraph[22, 34]
+ Text[22, 33] chars:[22, 33, "list … tem 2"]
+ OrderedListItem[34, 36] open:[34, 36, "1."] isTight
+ Paragraph[38, 53]
+ Text[38, 53] chars:[38, 53, "not a … item"]
+````````````````````````````````
+
+
+### Issues
+
+```````````````````````````````` example(Lists - Issues: 1) options(list-spacing-as-is)
+* Fix: Add Markdown file templates as per
+ [fileTemplates.j2ee](jetbrains://idea/navigate/reference?project=intellij-community.master&fqn=fileTemplates.j2ee)
+ and
+ [DevKitFileTemplatesFactory](jetbrains://idea/navigate/reference?project=intellij-community.master&fqn=org.jetbrains.idea.devkit.DevKitFileTemplatesFactory)
+
+ ```xml
+
+ ```
+* Next Item
+.
+* Fix: Add Markdown file templates as per
+ [fileTemplates.j2ee](jetbrains://idea/navigate/reference?project=intellij-community.master&fqn=fileTemplates.j2ee)
+ and
+ [DevKitFileTemplatesFactory](jetbrains://idea/navigate/reference?project=intellij-community.master&fqn=org.jetbrains.idea.devkit.DevKitFileTemplatesFactory)
+
+ ```xml
+
+ ```
+* Next Item
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Issues: 2) options(list-spacing-tighten)
+* Fix: Add Markdown file templates as per
+ [fileTemplates.j2ee](jetbrains://idea/navigate/reference?project=intellij-community.master&fqn=fileTemplates.j2ee)
+ and
+ [DevKitFileTemplatesFactory](jetbrains://idea/navigate/reference?project=intellij-community.master&fqn=org.jetbrains.idea.devkit.DevKitFileTemplatesFactory)
+
+ ```xml
+
+ ```
+* Next Item
+.
+* Fix: Add Markdown file templates as per
+ [fileTemplates.j2ee](jetbrains://idea/navigate/reference?project=intellij-community.master&fqn=fileTemplates.j2ee)
+ and
+ [DevKitFileTemplatesFactory](jetbrains://idea/navigate/reference?project=intellij-community.master&fqn=org.jetbrains.idea.devkit.DevKitFileTemplatesFactory)
+
+ ```xml
+
+ ```
+* Next Item
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Issues: 3) options(list-spacing-tighten)
+* [ ] task item
+ * sub item
+
+ sub item paragraph with Abbr1
+
+* list item 1 list item 1 lazy
+ continuation text
+ with hard break spaces
+
+ Contained child text block of bullet
+ list item
+.
+* [ ] task item
+ * sub item
+
+ sub item paragraph with Abbr1
+* list item 1 list item 1 lazy
+ continuation text
+ with hard break spaces
+
+ Contained child text block of bullet
+ list item
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Lists - Issues: 4) options(list-spacing-tighten)
+* * task sub item with long
+ paragraph text to wrap around to
+ next line.
+ * sub item
+
+ task sub item paragraph with
+ overflow wrapping text
+
+ * sub item
+* task item
+ * sub item
+
+ sub item paragraph with Abbr1
+
+* list item 1 list item 1 lazy
+ continuation text
+ with hard break spaces
+
+ Contained child text block of bullet
+ list item
+
+* list item 2
+* [x] task item
+* [x] task item
+.
+* * task sub item with long
+ paragraph text to wrap around to
+ next line.
+ * sub item
+
+ task sub item paragraph with
+ overflow wrapping text
+ * sub item
+* task item
+ * sub item
+
+ sub item paragraph with Abbr1
+* list item 1 list item 1 lazy
+ continuation text
+ with hard break spaces
+
+ Contained child text block of bullet
+ list item
+* list item 2
+* [x] task item
+* [x] task item
+
+````````````````````````````````
+
+
+Should add blank line after paragraph before sub-item
+
+```````````````````````````````` example(Lists - Issues: 5) options(list-spacing-tighten)
+* task sub item with long
+ paragraph text to wrap around to
+ next line.
+
+ task sub item paragraph with
+ overflow wrapping text
+ * sub item
+.
+* task sub item with long
+ paragraph text to wrap around to
+ next line.
+
+ task sub item paragraph with
+ overflow wrapping text
+
+ * sub item
+
+````````````````````````````````
+
+
+## Block Quotes
```````````````````````````````` example(Block Quotes: 1) options(block-quote-compact-with-space, fenced-code-minimize)
> 1. numbered item 1
@@ -1811,6 +2452,34 @@ Heading
````````````````````````````````
+### Trailing Marker
+
+```````````````````````````````` example(Headings - Trailing Marker: 1) options(heading-any, atx-trailing-equalize)
+# Heading 1
+
+## Heading 2
+
+.
+# Heading 1
+
+## Heading 2
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Headings - Trailing Marker: 2) options(heading-any, atx-trailing-equalize)
+# Heading 1
+
+## Heading 2 #
+
+.
+# Heading 1
+
+## Heading 2 ##
+
+````````````````````````````````
+
+
## Thematic Break
```````````````````````````````` example Thematic Break: 1
@@ -2451,7 +3120,7 @@ text with
## Format Conversion
-```````````````````````````````` example Format Conversion: 1
+```````````````````````````````` example(Format Conversion: 1) options(list-spacing-loosen)
Adds missing editor actions for end of word navigation but that is just the beginning:
* Enable Auto Indent Lines after move line/selection up or down actions to have them indented
@@ -2492,7 +3161,6 @@ Adds missing editor actions for end of word navigation but that is just the begi
* Enable Auto Indent Lines after move line/selection up or down actions to have them indented
automatically.
-
* Use Smart Paste to eliminate case change and prefix edits when pasting identifiers. MIA will
match case and style of identifier at destination when you paste, undo to get results before
MIA adjusted them. Copy `myColumnData` and paste it over `DEFAULT_VALUE` to get `COLUMN_DATA`,
@@ -2504,20 +3172,15 @@ Adds missing editor actions for end of word navigation but that is just the begi
Default prefixes: `my`, `our`, `is`, `get`, `set` to allow pasting over member fields, static
fields, getters and setters.
-
* Enable Auto Line Selections and select full lines without loosing time or column position by
moving the caret to the start of line when selecting or pasting. **Choose** whether you want
to **paste full line** selections: **above** or **below** the current line regardless of the
caret's column.
-
* Toggle between selection and multiple carets on selected lines to save time re-selecting the
same text again.
-
* Filter multiple carets saves you time when creating multiple carets by removing carets on
blank or comment lines so you can edit only code lines.
-
* Enhanced Paste from History dialog:
-
* **combine**, **arrange** and **reverse** the order of content entries
* **combine multiple** clipboard contents **with caret information intact**
* **paste and re-create multiple carets** from information already stored on the clipboard
@@ -2574,7 +3237,6 @@ Adds missing editor actions for end of word navigation but that is just the begi
* Enable Auto Indent Lines after move line/selection up or down actions to have them indented
automatically.
-
* Use Smart Paste to eliminate case change and prefix edits when pasting identifiers. MIA will
match case and style of identifier at destination when you paste, undo to get results before
MIA adjusted them. Copy `myColumnData` and paste it over `DEFAULT_VALUE` to get `COLUMN_DATA`,
@@ -2586,20 +3248,15 @@ Adds missing editor actions for end of word navigation but that is just the begi
Default prefixes: `my`, `our`, `is`, `get`, `set` to allow pasting over member fields, static
fields, getters and setters.
-
* Enable Auto Line Selections and select full lines without loosing time or column position by
moving the caret to the start of line when selecting or pasting. **Choose** whether you want
to **paste full line** selections: **above** or **below** the current line regardless of the
caret's column.
-
* Toggle between selection and multiple carets on selected lines to save time re-selecting the
same text again.
-
* Filter multiple carets saves you time when creating multiple carets by removing carets on
blank or comment lines so you can edit only code lines.
-
* Enhanced Paste from History dialog:
-
* **combine**, **arrange** and **reverse** the order of content entries
* **combine multiple** clipboard contents **with caret information intact**
* **paste and re-create multiple carets** from information already stored on the clipboard
@@ -2616,8 +3273,76 @@ Adds missing editor actions for end of word navigation but that is just the begi
```````````````````````````````` example(Format Conversion: 3) options(parse-fixed-indent, format-github)
-Adds missing editor actions for end of word navigation but that is just the beginning:
-
+* Enhanced Paste from History dialog:
+ * **duplicate line/block for each caret** in the clipboard content and **put a caret on the
+ first line** of the block, ready for multi-caret select and paste
+ * see caret information stored on the clipboard for each content entry
+.
+* Enhanced Paste from History dialog:
+ * **duplicate line/block for each caret** in the clipboard content and **put a caret on the
+ first line** of the block, ready for multi-caret select and paste
+ * see caret information stored on the clipboard for each content entry
+
+.
+Document[0, 282]
+ BulletList[0, 282] isTight
+ BulletListItem[0, 282] open:[0, 1, "*"] isTight
+ Paragraph[2, 38]
+ Text[2, 37] chars:[2, 37, "Enhan … alog:"]
+ BulletList[42, 282] isTight
+ BulletListItem[42, 208] open:[42, 43, "*"] isTight
+ Paragraph[44, 208]
+ StrongEmphasis[44, 83] textOpen:[44, 46, "**"] text:[46, 81, "duplicate line/block for each caret"] textClose:[81, 83, "**"]
+ Text[46, 81] chars:[46, 81, "dupli … caret"]
+ Text[83, 113] chars:[83, 113, " in t … and "]
+ StrongEmphasis[113, 154] textOpen:[113, 115, "**"] text:[115, 152, "put a caret on the\nfirst line"] textClose:[152, 154, "**"]
+ Text[115, 133] chars:[115, 133, "put a … n the"]
+ SoftLineBreak[133, 134]
+ Text[142, 152] chars:[142, 152, "first line"]
+ Text[154, 207] chars:[154, 207, " of t … paste"]
+ BulletListItem[212, 282] open:[212, 213, "*"] isTight
+ Paragraph[214, 282]
+ Text[214, 282] chars:[214, 282, "see c … entry"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Format Conversion: 4) options(parse-fixed-indent, format-github)
+* Enhanced Paste from History dialog:
+ * **duplicate line/block for each caret** in the clipboard content and **put a caret on the
+ first line** of the block, ready for multi-caret select and paste
+ * see caret information stored on the clipboard for each content entry
+.
+* Enhanced Paste from History dialog:
+ * **duplicate line/block for each caret** in the clipboard content and **put a caret on the
+ first line** of the block, ready for multi-caret select and paste
+ * see caret information stored on the clipboard for each content entry
+
+.
+Document[0, 282]
+ BulletList[0, 282] isTight
+ BulletListItem[0, 282] open:[0, 1, "*"] isTight
+ Paragraph[2, 38]
+ Text[2, 37] chars:[2, 37, "Enhan … alog:"]
+ BulletList[42, 282] isTight
+ BulletListItem[42, 208] open:[42, 43, "*"] isTight
+ Paragraph[44, 208]
+ StrongEmphasis[44, 83] textOpen:[44, 46, "**"] text:[46, 81, "duplicate line/block for each caret"] textClose:[81, 83, "**"]
+ Text[46, 81] chars:[46, 81, "dupli … caret"]
+ Text[83, 113] chars:[83, 113, " in t … and "]
+ StrongEmphasis[113, 154] textOpen:[113, 115, "**"] text:[115, 152, "put a caret on the\nfirst line"] textClose:[152, 154, "**"]
+ Text[115, 133] chars:[115, 133, "put a … n the"]
+ SoftLineBreak[133, 134]
+ Text[142, 152] chars:[142, 152, "first line"]
+ Text[154, 207] chars:[154, 207, " of t … paste"]
+ BulletListItem[212, 282] open:[212, 213, "*"] isTight
+ Paragraph[214, 282]
+ Text[214, 282] chars:[214, 282, "see c … entry"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Format Conversion: 5) options(parse-fixed-indent, format-github)
+Adds missing editor actions for end of word navigation but that is just the beginning:
+
* Enable Auto Indent Lines after move line/selection up or down actions to have them indented
automatically.
* Use Smart Paste to eliminate case change and prefix edits when pasting identifiers. MIA will
@@ -2656,7 +3381,6 @@ Adds missing editor actions for end of word navigation but that is just the begi
* Enable Auto Indent Lines after move line/selection up or down actions to have them indented
automatically.
-
* Use Smart Paste to eliminate case change and prefix edits when pasting identifiers. MIA will
match case and style of identifier at destination when you paste, undo to get results before
MIA adjusted them. Copy `myColumnData` and paste it over `DEFAULT_VALUE` to get `COLUMN_DATA`,
@@ -2668,20 +3392,15 @@ Adds missing editor actions for end of word navigation but that is just the begi
Default prefixes: `my`, `our`, `is`, `get`, `set` to allow pasting over member fields, static
fields, getters and setters.
-
* Enable Auto Line Selections and select full lines without loosing time or column position by
moving the caret to the start of line when selecting or pasting. **Choose** whether you want
to **paste full line** selections: **above** or **below** the current line regardless of the
caret's column.
-
* Toggle between selection and multiple carets on selected lines to save time re-selecting the
same text again.
-
* Filter multiple carets saves you time when creating multiple carets by removing carets on
blank or comment lines so you can edit only code lines.
-
* Enhanced Paste from History dialog:
-
* **combine**, **arrange** and **reverse** the order of content entries
* **combine multiple** clipboard contents **with caret information intact**
* **paste and re-create multiple carets** from information already stored on the clipboard
@@ -2697,7 +3416,7 @@ Adds missing editor actions for end of word navigation but that is just the begi
````````````````````````````````
-```````````````````````````````` example(Format Conversion: 4) options(parse-fixed-indent, format-github, references-as-is)
+```````````````````````````````` example(Format Conversion: 6) options(parse-fixed-indent, format-github, references-as-is)

Markdown Navigator 2.0
@@ -2819,7 +3538,7 @@ for:
Handle proper GitHub indented code in list items
-```````````````````````````````` example(Format Conversion: 5) options(parse-fixed-indent, format-github)
+```````````````````````````````` example(Format Conversion: 7) options(parse-fixed-indent, format-github)
* item
indented code
@@ -2839,7 +3558,7 @@ Handle proper GitHub indented code in list items
````````````````````````````````
-```````````````````````````````` example(Format Conversion: 6) options(parse-fixed-indent, format-github)
+```````````````````````````````` example(Format Conversion: 8) options(parse-fixed-indent, format-github)
1. item
indented code
@@ -3001,187 +3720,6 @@ Document[0, 33]
````````````````````````````````
-## Empty List Items
-
-```````````````````````````````` example Empty List Items: 1
-* list item 1
-*
-
-* list item 2
-*
-not a list item
-.
-* list item 1
-
-*
-
-* list item 2
-
-*
-
-not a list item
-.
-Document[0, 50]
- BulletList[0, 33] isLoose
- BulletListItem[0, 14] open:[0, 1, "*"] isLoose
- Paragraph[2, 14]
- Text[2, 13] chars:[2, 13, "list … tem 1"]
- BulletListItem[14, 15] open:[14, 15, "*"] isLoose hadBlankLineAfter
- BlankLine[17, 18]
- BulletListItem[18, 32] open:[18, 19, "*"] isLoose
- Paragraph[20, 32]
- Text[20, 31] chars:[20, 31, "list … tem 2"]
- BulletListItem[32, 33] open:[32, 33, "*"] isLoose
- Paragraph[35, 50]
- Text[35, 50] chars:[35, 50, "not a … item"]
-````````````````````````````````
-
-
-```````````````````````````````` example Empty List Items: 2
-* list item 1
-*
-* list item 2
-*
-not a list item
-.
-* list item 1
-*
-* list item 2
-*
-
-not a list item
-.
-Document[0, 49]
- BulletList[0, 32] isTight
- BulletListItem[0, 14] open:[0, 1, "*"] isTight
- Paragraph[2, 14]
- Text[2, 13] chars:[2, 13, "list … tem 1"]
- BulletListItem[14, 15] open:[14, 15, "*"] isTight
- BulletListItem[17, 31] open:[17, 18, "*"] isTight
- Paragraph[19, 31]
- Text[19, 30] chars:[19, 30, "list … tem 2"]
- BulletListItem[31, 32] open:[31, 32, "*"] isTight
- Paragraph[34, 49]
- Text[34, 49] chars:[34, 49, "not a … item"]
-````````````````````````````````
-
-
-With removal of empty list items
-
-```````````````````````````````` example(Empty List Items: 3) options(remove-empty-items)
-* list item 1
-*
-
-* list item 2
-*
-not a list item
-.
-* list item 1
-
-* list item 2
-
-not a list item
-.
-Document[0, 50]
- BulletList[0, 33] isLoose
- BulletListItem[0, 14] open:[0, 1, "*"] isLoose
- Paragraph[2, 14]
- Text[2, 13] chars:[2, 13, "list … tem 1"]
- BulletListItem[14, 15] open:[14, 15, "*"] isLoose hadBlankLineAfter
- BlankLine[17, 18]
- BulletListItem[18, 32] open:[18, 19, "*"] isLoose
- Paragraph[20, 32]
- Text[20, 31] chars:[20, 31, "list … tem 2"]
- BulletListItem[32, 33] open:[32, 33, "*"] isLoose
- Paragraph[35, 50]
- Text[35, 50] chars:[35, 50, "not a … item"]
-````````````````````````````````
-
-
-```````````````````````````````` example(Empty List Items: 4) options(remove-empty-items)
-* list item 1
-*
-* list item 2
-*
-not a list item
-.
-* list item 1
-* list item 2
-
-not a list item
-.
-Document[0, 49]
- BulletList[0, 32] isTight
- BulletListItem[0, 14] open:[0, 1, "*"] isTight
- Paragraph[2, 14]
- Text[2, 13] chars:[2, 13, "list … tem 1"]
- BulletListItem[14, 15] open:[14, 15, "*"] isTight
- BulletListItem[17, 31] open:[17, 18, "*"] isTight
- Paragraph[19, 31]
- Text[19, 30] chars:[19, 30, "list … tem 2"]
- BulletListItem[31, 32] open:[31, 32, "*"] isTight
- Paragraph[34, 49]
- Text[34, 49] chars:[34, 49, "not a … item"]
-````````````````````````````````
-
-
-```````````````````````````````` example(Empty List Items: 5) options(remove-empty-items)
-1. list item 1
-1.
-
-1. list item 2
-1.
-not a list item
-.
-1. list item 1
-
-2. list item 2
-
-not a list item
-.
-Document[0, 54]
- OrderedList[0, 37] isLoose delimiter:'.'
- OrderedListItem[0, 15] open:[0, 2, "1."] isLoose
- Paragraph[3, 15]
- Text[3, 14] chars:[3, 14, "list … tem 1"]
- OrderedListItem[15, 17] open:[15, 17, "1."] isLoose hadBlankLineAfter
- BlankLine[19, 20]
- OrderedListItem[20, 35] open:[20, 22, "1."] isLoose
- Paragraph[23, 35]
- Text[23, 34] chars:[23, 34, "list … tem 2"]
- OrderedListItem[35, 37] open:[35, 37, "1."] isLoose
- Paragraph[39, 54]
- Text[39, 54] chars:[39, 54, "not a … item"]
-````````````````````````````````
-
-
-```````````````````````````````` example(Empty List Items: 6) options(remove-empty-items)
-1. list item 1
-1.
-1. list item 2
-1.
-not a list item
-.
-1. list item 1
-2. list item 2
-
-not a list item
-.
-Document[0, 53]
- OrderedList[0, 36] isTight delimiter:'.'
- OrderedListItem[0, 15] open:[0, 2, "1."] isTight
- Paragraph[3, 15]
- Text[3, 14] chars:[3, 14, "list … tem 1"]
- OrderedListItem[15, 17] open:[15, 17, "1."] isTight
- OrderedListItem[19, 34] open:[19, 21, "1."] isTight
- Paragraph[22, 34]
- Text[22, 33] chars:[22, 33, "list … tem 2"]
- OrderedListItem[34, 36] open:[34, 36, "1."] isTight
- Paragraph[38, 53]
- Text[38, 53] chars:[38, 53, "not a … item"]
-````````````````````````````````
-
-
## Keep Breaks
```````````````````````````````` example(Keep Breaks: 1) options(no-hard-breaks)
@@ -3336,453 +3874,6 @@ Document[0, 132]
````````````````````````````````
-## Wrap
-
-```````````````````````````````` example(Wrap: 1) options(margin[30])
-Paragraph with hard break and more text.
-
-Paragraph with soft break and more text.
-
-Paragraph with hard break and more text.
-
-.
-Paragraph with hard break and
-more text.
-
-Paragraph with soft break and
-more text.
-
-Paragraph with hard break and
-more text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 2) options(margin[30])
-Paragraph with hard break and # more text.
-
-Paragraph with soft break and * more text.
-
-Paragraph with hard break and 1. more text.
-
-.
-Paragraph with hard break and
-\# more text.
-
-Paragraph with soft break and
-\* more text.
-
-Paragraph with hard break and
-1\. more text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 3) options(margin[30], no-apply-escapers)
-Paragraph with hard break and # more text.
-
-Paragraph with soft break and * more text.
-
-Paragraph with hard break and 1. more text.
-
-.
-Paragraph with hard break and
-# more text.
-
-Paragraph with soft break and
-* more text.
-
-Paragraph with hard break and
-1. more text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 4) options(margin[60], no-soft-breaks)
-Paragraph with hard break and
-\# more text.
-
-Paragraph with soft break and
-\* more text.
-
-Paragraph with hard break and
-1\. more text.
-
-.
-Paragraph with hard break and # more text.
-
-Paragraph with soft break and * more text.
-
-Paragraph with hard break and 1. more text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 5) options(margin[60], no-apply-escapers, no-soft-breaks)
-Paragraph with hard break and
-\# more text.
-
-Paragraph with soft break and
-\* more text.
-
-Paragraph with hard break and
-1\. more text.
-
-.
-Paragraph with hard break and \# more text.
-
-Paragraph with soft break and \* more text.
-
-Paragraph with hard break and 1\. more text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 6) options(margin[30])
-* Paragraph with hard break and more text.
-
-1. Paragraph with soft break and more text.
-
-.
-* Paragraph with hard break
- and more text.
-
-1. Paragraph with soft break
- and more text.
-
-````````````````````````````````
-
-
-do not wrap links
-
-```````````````````````````````` example(Wrap: 7) options(margin[30])
-[Issue #Tests-Fail-JavaSwingTimers](https://github.com/vsch/idea-multimarkdown/issues/Tests-Fail-JavaSwingTimers)
-.
-[Issue #Tests-Fail-JavaSwingTimers](https://github.com/vsch/idea-multimarkdown/issues/Tests-Fail-JavaSwingTimers)
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 8) options(margin[30])
-
-.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 9) options(margin[30], explicit-links-at-start)
-* Paragraph with hard break and more text. [Test](test) text.
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break
- and more text.
- [Test](test) text.
-
-1. Paragraph with soft break
- and more text.
-  text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 10) options(margin[30])
-* Paragraph with hard break and more text. [Test](test) text.
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break
- and more text. [Test](test)
- text.
-
-1. Paragraph with soft break
- and more text.
-  text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 11) options(margin[30], image-links-at-start)
-* Paragraph with hard break and more text. [Test](test) text.
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break
- and more text. [Test](test)
- text.
-
-1. Paragraph with soft break
- and more text.
-  text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Wrap: 12) options(margin[72])
-* [#697, Autoscroll from source does not work in simplified structure view]
-.
-* [#697, Autoscroll from source does not work in simplified structure view]
-
-````````````````````````````````
-
-
-## Tracked Offset
-
-```````````````````````````````` example(Tracked Offset: 1) options(margin[31])
-* Paragraph with hard break ⦙and more text. [Test](test) text.
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break ⦙and
- more text. [Test](test) text.
-
-1. Paragraph with soft break
- and more text. 
- text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 2) options(margin[31])
-* Paragraph with hard break⦙ and more text. [Test](test) text.
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break⦙ and
- more text. [Test](test) text.
-
-1. Paragraph with soft break
- and more text. 
- text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 3) options(margin[31])
-* Paragraph with hard break and more text. [Test](test) text.
-
-some text
-
-1. Paragraph with soft break ⦙and more text.  text.
-
-.
-* Paragraph with hard break and
- more text. [Test](test) text.
-
-some text
-
-1. Paragraph with soft break
- ⦙and more text. 
- text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 4) options(margin[31])
-* Paragraph with hard break and more text. [Test](test) text.
-
-1. Paragraph with soft break⦙ and more text.  text.
-
-.
-* Paragraph with hard break and
- more text. [Test](test) text.
-
-1. Paragraph with soft break⦙
- and more text. 
- text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 5) options(margin[31], explicit-links-at-start)
-* Paragraph with hard break and more text.⦙ [Test](test) text.
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break and
- more text.⦙
- [Test](test) text.
-
-1. Paragraph with soft break
- and more text. 
- text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 6) options(margin[31], explicit-links-at-start, image-links-at-start)
-* Paragraph with hard break and more text.⦙ [Test](test) text.
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break and
- more text.⦙
- [Test](test) text.
-
-1. Paragraph with soft break
- and more text.
-  text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 7) options(margin[31], explicit-links-at-start, image-links-at-start)
-* Paragraph with hard break and more text. ⦙[Test](test) text.
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break and
- more text.
- ⦙[Test](test) text.
-
-1. Paragraph with soft break
- and more text.
-  text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 8) options(margin[31], explicit-links-at-start, image-links-at-start)
-* Paragraph with hard break and more text. [Test](test) text.⦙
-
-1. Paragraph with soft break and more text.  text.
-
-.
-* Paragraph with hard break and
- more text.
- [Test](test) text.⦙
-
-1. Paragraph with soft break
- and more text.
-  text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 9) options(margin[31], explicit-links-at-start, image-links-at-start)
-* Paragraph with hard break and more text. [Test](test) text.
-
-1. Paragraph with soft break and more text.⦙  text.
-
-.
-* Paragraph with hard break and
- more text.
- [Test](test) text.
-
-1. Paragraph with soft break
- and more text.⦙
-  text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 10) options(margin[31], explicit-links-at-start, image-links-at-start)
-* Paragraph with hard break and more text. [Test](test) text.
-
-1. Paragraph with soft break and more text. ⦙ text.
-
-.
-* Paragraph with hard break and
- more text.
- [Test](test) text.
-
-1. Paragraph with soft break
- and more text.
- ⦙ text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 11) options(margin[31], explicit-links-at-start, image-links-at-start)
-* Paragraph with hard break and more text. [Test](test) text.
-
-1. Paragraph with soft break and more text.  text.⦙
-
-.
-* Paragraph with hard break and
- more text.
- [Test](test) text.
-
-1. Paragraph with soft break
- and more text.
-  text.⦙
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 12) options(margin[31], explicit-links-at-start, image-links-at-start)
-* Paragraph with hard break and⦙ ⦙more text.⦙ ⦙[Test](test) text.⦙
-
-1. Paragraph with soft break⦙ ⦙and more text.⦙ ⦙ text.⦙
-
-.
-* Paragraph with hard break and⦙
- ⦙more text.⦙
- ⦙[Test](test) text.⦙
-
-1. Paragraph with soft break⦙
- ⦙and more text.⦙
- ⦙ text.⦙
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 13) options(margin[31], explicit-links-at-start, image-links-at-start)
-⦙* Paragraph with hard break and more text. [Test](test) text.
-
-.
-⦙* Paragraph with hard break and
- more text.
- [Test](test) text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 14) options(margin[31], explicit-links-at-start, image-links-at-start)
-*⦙ Paragraph with hard break and more text. [Test](test) text.
-
-.
-*⦙ Paragraph with hard break and
- more text.
- [Test](test) text.
-
-````````````````````````````````
-
-
-```````````````````````````````` example(Tracked Offset: 15) options(margin[31], explicit-links-at-start, image-links-at-start, show-ranges)
-⦙*⦙ ⦙Paragraph with hard break and⦙ ⦙more text.⦙ ⦙[Test](test) text.⦙
-
-⦙1⦙.⦙ ⦙Paragraph with soft break⦙ ⦙and more text.⦙ ⦙ text.⦙
-
-.
-⦙*⦙ ⦙Paragraph with hard break and⦙
- ⦙more text.⦙
- ⦙[Test](test) text.⦙
-
-⦙1⦙.⦙ ⦙Paragraph with soft break⦙
- ⦙and more text.⦙
- ⦙ text.⦙
-
----- Ranges ------------------------------------------------------------
-⟦* Paragraph with hard break and⟧
-⟦⟧ ⟦ more text.⟧
-⟦⟧ ⟦ [Test](test) text.⟧⟦
-⟧⟦
-1. Paragraph with soft break⟧
-⟦⟧ ⟦ and more text.⟧
-⟦⟧ ⟦  text.⟧⟦
-⟧
-⟦⟧
-````````````````````````````````
-
-
## Issue
### 243
@@ -3885,11 +3976,11 @@ Document[0, 162]
````````````````````````````````
-### MdNav
+## MdNav
-#### 770
+### 770
-```````````````````````````````` example(Issue - MdNav - 770: 1) options(FAIL, list-no-delimiter-mismatch-to-new-list)
+```````````````````````````````` example(MdNav - 770: 1) options(list-no-delimiter-mismatch-to-new-list)
1. a
* b
@@ -3900,6 +3991,7 @@ Document[0, 162]
* c
.
1. a
+
* b
```bash
@@ -3907,11 +3999,33 @@ Document[0, 162]
```
* c
+
+````````````````````````````````
+
+
+```````````````````````````````` example(MdNav - 770: 2) options(list-no-delimiter-mismatch-to-new-list, list-spacing-tighten)
+1. a
+ * b
+
+ ```bash
+ foo.code
+ ```
+
+ * c
.
+1. a
+
+* b
+
+ ```bash
+ foo.code
+ ```
+* c
+
````````````````````````````````
-```````````````````````````````` example(Issue - MdNav - 770: 2) options(FAIL, list-no-item-mismatch-to-new-list)
+```````````````````````````````` example(MdNav - 770: 3) options(list-no-item-mismatch-to-new-list)
1. a
* b
@@ -3926,9 +4040,8 @@ Document[0, 162]
```bash
foo.code
```
-
* c
-.
+
````````````````````````````````
diff --git a/flexmark-core-test/src/test/resources/core_issues_ast_spec.md b/flexmark-core-test/src/test/resources/core_issues_ast_spec.md
index b54f1be0c..f24d59cb1 100644
--- a/flexmark-core-test/src/test/resources/core_issues_ast_spec.md
+++ b/flexmark-core-test/src/test/resources/core_issues_ast_spec.md
@@ -1269,6 +1269,250 @@ Document[0, 73]
````````````````````````````````
+### 384
+
+Issue #384,
+
+```````````````````````````````` example(Core Issues Tests - 384: 1) options(keep-blank-lines)
+
+
+# Media Server Installation
+
+## Install Kurento Media server
+
+Install Kurento Media server
+
+→It should be run under same user as OM
+
+
+## Specify/Install Turn server
+
+Optional step
+.
+
+Media Server Installation
+Install Kurento Media server
+Install Kurento Media server
+
+→It should be run under same user as OM
+
+Specify/Install Turn server
+Optional step
+.
+Document[0, 474]
+ HtmlCommentBlock[0, 118]
+ BlankLine[118, 119]
+ Heading[119, 146] textOpen:[119, 120, "#"] text:[121, 146, "Media Server Installation"]
+ Text[121, 146] chars:[121, 146, "Media … ation"]
+ BlankLine[147, 148]
+ Heading[148, 179] textOpen:[148, 150, "##"] text:[151, 179, "Install Kurento Media server"]
+ Text[151, 179] chars:[151, 179, "Insta … erver"]
+ BlankLine[180, 181]
+ Paragraph[181, 292]
+ HtmlInline[181, 259] chars:[181, 259, ""]
+ Text[259, 287] chars:[259, 287, "Insta … erver"]
+ HtmlInline[287, 291] chars:[287, 291, " "]
+ HtmlBlock[292, 382]
+ BlankLine[382, 383]
+ Heading[383, 413] textOpen:[383, 385, "##"] text:[386, 413, "Specify/Install Turn server"]
+ Text[386, 413] chars:[386, 413, "Speci … erver"]
+ BlankLine[414, 415]
+ HtmlBlock[415, 474]
+````````````````````````````````
+
+
+### 407
+
+Issue #487
+
+Image refs
+
+```````````````````````````````` example Core Issues Tests - 407: 1
+[![][moon]](/uri)
+
+[moon]: moon.jpg
+.
+
+.
+Document[0, 35]
+ Paragraph[0, 18] isTrailingBlankLine
+ Link[0, 17] textOpen:[0, 1, "["] text:[1, 10, "![][moon]"] textClose:[10, 11, "]"] linkOpen:[11, 12, "("] url:[12, 16, "/uri"] pageRef:[12, 16, "/uri"] linkClose:[16, 17, ")"]
+ ImageRef[1, 10] textOpen:[1, 3, "!["] text:[3, 3] textClose:[3, 4, "]"] referenceOpen:[4, 5, "["] reference:[5, 9, "moon"] referenceClose:[9, 10, "]"]
+ Reference[19, 35] refOpen:[19, 20, "["] ref:[20, 24, "moon"] refClose:[24, 26, "]:"] url:[27, 35, "moon.jpg"]
+````````````````````````````````
+
+
+```````````````````````````````` example Core Issues Tests - 407: 2
+[![moon]](/uri)
+
+[moon]: moon.jpg
+.
+
+.
+Document[0, 33]
+ Paragraph[0, 16] isTrailingBlankLine
+ Link[0, 15] textOpen:[0, 1, "["] text:[1, 8, "![moon]"] textClose:[8, 9, "]"] linkOpen:[9, 10, "("] url:[10, 14, "/uri"] pageRef:[10, 14, "/uri"] linkClose:[14, 15, ")"]
+ ImageRef[1, 8] referenceOpen:[1, 3, "!["] reference:[3, 7, "moon"] referenceClose:[7, 8, "]"]
+ Text[3, 7] chars:[3, 7, "moon"]
+ Reference[17, 33] refOpen:[17, 18, "["] ref:[18, 22, "moon"] refClose:[22, 24, "]:"] url:[25, 33, "moon.jpg"]
+````````````````````````````````
+
+
+```````````````````````````````` example Core Issues Tests - 407: 3
+[![moon][]](/uri)
+
+[moon]: moon.jpg
+.
+
+.
+Document[0, 35]
+ Paragraph[0, 18] isTrailingBlankLine
+ Link[0, 17] textOpen:[0, 1, "["] text:[1, 10, "![moon][]"] textClose:[10, 11, "]"] linkOpen:[11, 12, "("] url:[12, 16, "/uri"] pageRef:[12, 16, "/uri"] linkClose:[16, 17, ")"]
+ ImageRef[1, 10] referenceOpen:[1, 3, "!["] reference:[3, 7, "moon"] referenceClose:[7, 8, "]"] textOpen:[8, 9, "["] textClose:[9, 10, "]"]
+ Text[3, 7] chars:[3, 7, "moon"]
+ Reference[19, 35] refOpen:[19, 20, "["] ref:[20, 24, "moon"] refClose:[24, 26, "]:"] url:[27, 35, "moon.jpg"]
+````````````````````````````````
+
+
+Link refs should be treated as text
+
+```````````````````````````````` example Core Issues Tests - 407: 4
+[[][moon]](/uri)
+
+[moon]: moon.jpg
+.
+[ ](/uri)
+.
+Document[0, 34]
+ Paragraph[0, 17] isTrailingBlankLine
+ Text[0, 1] chars:[0, 1, "["]
+ LinkRef[1, 9] textOpen:[1, 2, "["] text:[2, 2] textClose:[2, 3, "]"] referenceOpen:[3, 4, "["] reference:[4, 8, "moon"] referenceClose:[8, 9, "]"]
+ Text[9, 16] chars:[9, 16, "](/uri)"]
+ Reference[18, 34] refOpen:[18, 19, "["] ref:[19, 23, "moon"] refClose:[23, 25, "]:"] url:[26, 34, "moon.jpg"]
+````````````````````````````````
+
+
+```````````````````````````````` example Core Issues Tests - 407: 5
+[[moon]](/uri)
+
+[moon]: moon.jpg
+.
+[moon ](/uri)
+.
+Document[0, 32]
+ Paragraph[0, 15] isTrailingBlankLine
+ Text[0, 1] chars:[0, 1, "["]
+ LinkRef[1, 7] referenceOpen:[1, 2, "["] reference:[2, 6, "moon"] referenceClose:[6, 7, "]"]
+ Text[2, 6] chars:[2, 6, "moon"]
+ Text[7, 14] chars:[7, 14, "](/uri)"]
+ Reference[16, 32] refOpen:[16, 17, "["] ref:[17, 21, "moon"] refClose:[21, 23, "]:"] url:[24, 32, "moon.jpg"]
+````````````````````````````````
+
+
+```````````````````````````````` example Core Issues Tests - 407: 6
+[[moon][]](/uri)
+
+[moon]: moon.jpg
+.
+[moon ](/uri)
+.
+Document[0, 34]
+ Paragraph[0, 17] isTrailingBlankLine
+ Text[0, 1] chars:[0, 1, "["]
+ LinkRef[1, 9] referenceOpen:[1, 2, "["] reference:[2, 6, "moon"] referenceClose:[6, 7, "]"] textOpen:[7, 8, "["] textClose:[8, 9, "]"]
+ Text[2, 6] chars:[2, 6, "moon"]
+ Text[9, 16] chars:[9, 16, "](/uri)"]
+ Reference[18, 34] refOpen:[18, 19, "["] ref:[19, 23, "moon"] refClose:[23, 25, "]:"] url:[26, 34, "moon.jpg"]
+````````````````````````````````
+
+
+undefined should render the same as if link text has priority
+
+```````````````````````````````` example Core Issues Tests - 407: 7
+[[][moon]](/uri)
+.
+[][moon]
+.
+Document[0, 16]
+ Paragraph[0, 16]
+ Link[0, 16] textOpen:[0, 1, "["] text:[1, 9, "[][moon]"] textClose:[9, 10, "]"] linkOpen:[10, 11, "("] url:[11, 15, "/uri"] pageRef:[11, 15, "/uri"] linkClose:[15, 16, ")"]
+ Text[1, 9] chars:[1, 9, "[][moon]"]
+````````````````````````````````
+
+
+```````````````````````````````` example Core Issues Tests - 407: 8
+[[moon]](/uri)
+.
+[moon]
+.
+Document[0, 14]
+ Paragraph[0, 14]
+ Link[0, 14] textOpen:[0, 1, "["] text:[1, 7, "[moon]"] textClose:[7, 8, "]"] linkOpen:[8, 9, "("] url:[9, 13, "/uri"] pageRef:[9, 13, "/uri"] linkClose:[13, 14, ")"]
+ Text[1, 7] chars:[1, 7, "[moon]"]
+````````````````````````````````
+
+
+```````````````````````````````` example Core Issues Tests - 407: 9
+[[moon][]](/uri)
+.
+[moon][]
+.
+Document[0, 16]
+ Paragraph[0, 16]
+ Link[0, 16] textOpen:[0, 1, "["] text:[1, 9, "[moon][]"] textClose:[9, 10, "]"] linkOpen:[10, 11, "("] url:[11, 15, "/uri"] pageRef:[11, 15, "/uri"] linkClose:[15, 16, ")"]
+ Text[1, 9] chars:[1, 9, "[moon][]"]
+````````````````````````````````
+
+
+Link refs should be treated as text
+
+```````````````````````````````` example(Core Issues Tests - 407: 10) options(link-over-linkref)
+[[][moon]](/uri)
+
+[moon]: moon.jpg
+.
+[][moon]
+.
+Document[0, 34]
+ Paragraph[0, 17] isTrailingBlankLine
+ Link[0, 16] textOpen:[0, 1, "["] text:[1, 9, "[][moon]"] textClose:[9, 10, "]"] linkOpen:[10, 11, "("] url:[11, 15, "/uri"] pageRef:[11, 15, "/uri"] linkClose:[15, 16, ")"]
+ Text[1, 9] chars:[1, 9, "[][moon]"]
+ Reference[18, 34] refOpen:[18, 19, "["] ref:[19, 23, "moon"] refClose:[23, 25, "]:"] url:[26, 34, "moon.jpg"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Core Issues Tests - 407: 11) options(link-over-linkref)
+[[moon]](/uri)
+
+[moon]: moon.jpg
+.
+[moon]
+.
+Document[0, 32]
+ Paragraph[0, 15] isTrailingBlankLine
+ Link[0, 14] textOpen:[0, 1, "["] text:[1, 7, "[moon]"] textClose:[7, 8, "]"] linkOpen:[8, 9, "("] url:[9, 13, "/uri"] pageRef:[9, 13, "/uri"] linkClose:[13, 14, ")"]
+ Text[1, 7] chars:[1, 7, "[moon]"]
+ Reference[16, 32] refOpen:[16, 17, "["] ref:[17, 21, "moon"] refClose:[21, 23, "]:"] url:[24, 32, "moon.jpg"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Core Issues Tests - 407: 12) options(link-over-linkref)
+[[moon][]](/uri)
+
+[moon]: moon.jpg
+.
+[moon][]
+.
+Document[0, 34]
+ Paragraph[0, 17] isTrailingBlankLine
+ Link[0, 16] textOpen:[0, 1, "["] text:[1, 9, "[moon][]"] textClose:[9, 10, "]"] linkOpen:[10, 11, "("] url:[11, 15, "/uri"] pageRef:[11, 15, "/uri"] linkClose:[15, 16, ")"]
+ Text[1, 9] chars:[1, 9, "[moon][]"]
+ Reference[18, 34] refOpen:[18, 19, "["] ref:[19, 23, "moon"] refClose:[23, 25, "]:"] url:[26, 34, "moon.jpg"]
+````````````````````````````````
+
+
## Issues xxx
### 1
@@ -1557,17 +1801,17 @@ Parsing a sub-sequence as the document input
.
-Document[14, 454]
- BulletList[14, 453] isLoose
- BulletListItem[14, 453] open:[14, 15, "*"] isLoose hadBlankLineAfter
- Paragraph[16, 114] isTrailingBlankLine
- Text[16, 106] chars:[16, 106, "Fix: … ed by"]
- SoftLineBreak[106, 107]
- Code[109, 112] textOpen:[109, 110, "`"] text:[110, 111, "|"] textClose:[111, 112, "`"]
- Text[110, 111] chars:[110, 111, "|"]
- Text[112, 113] chars:[112, 113, ":"]
- FencedCodeBlock[117, 453] open:[117, 120, "```"] info:[120, 128, "markdown"] content:[131, 448] lines[10] close:[450, 453, "```"]
- Text[131, 448] chars:[131, 448, "7. El … ion,\n"]
+Document[0, 440]
+ BulletList[0, 439] isLoose
+ BulletListItem[0, 439] open:[0, 1, "*"] isLoose hadBlankLineAfter
+ Paragraph[2, 100] isTrailingBlankLine
+ Text[2, 92] chars:[2, 92, "Fix: … ed by"]
+ SoftLineBreak[92, 93]
+ Code[95, 98] textOpen:[95, 96, "`"] text:[96, 97, "|"] textClose:[97, 98, "`"]
+ Text[96, 97] chars:[96, 97, "|"]
+ Text[98, 99] chars:[98, 99, ":"]
+ FencedCodeBlock[103, 439] open:[103, 106, "```"] info:[106, 114, "markdown"] content:[117, 434] lines[10] close:[436, 439, "```"]
+ Text[117, 434] chars:[117, 434, "7. El … ion,\n"]
````````````````````````````````
@@ -1606,17 +1850,17 @@ Document[14, 454]
.
-Document[4, 499]
- BulletList[4, 499] isLoose
- BulletListItem[4, 499] open:[4, 5, "*"] isLoose hadBlankLineAfter
- Paragraph[6, 108] isTrailingBlankLine
- Text[6, 96] chars:[6, 96, "Fix: … ed by"]
- SoftLineBreak[96, 97]
- Code[103, 106] textOpen:[103, 104, "`"] text:[104, 105, "|"] textClose:[105, 106, "`"]
- Text[104, 105] chars:[104, 105, "|"]
- Text[106, 107] chars:[106, 107, ":"]
- FencedCodeBlock[119, 499] open:[119, 122, "```"] info:[122, 130, "markdown"] content:[137, 490] lines[10] close:[496, 499, "```"]
- Text[137, 490] chars:[137, 490, "7. El … ion,\n"]
+Document[0, 439]
+ BulletList[0, 439] isLoose
+ BulletListItem[0, 439] open:[0, 1, "*"] isLoose hadBlankLineAfter
+ Paragraph[2, 100] isTrailingBlankLine
+ Text[2, 92] chars:[2, 92, "Fix: … ed by"]
+ SoftLineBreak[92, 93]
+ Code[95, 98] textOpen:[95, 96, "`"] text:[96, 97, "|"] textClose:[97, 98, "`"]
+ Text[96, 97] chars:[96, 97, "|"]
+ Text[98, 99] chars:[98, 99, ":"]
+ FencedCodeBlock[103, 439] open:[103, 106, "```"] info:[106, 114, "markdown"] content:[117, 434] lines[10] close:[436, 439, "```"]
+ Text[117, 434] chars:[117, 434, "7. El … ion,\n"]
````````````````````````````````
@@ -1657,17 +1901,17 @@ Add prefix/suffix to text so document ast shifts by 14 chars
.
-Document[18, 514]
- BulletList[18, 513] isLoose
- BulletListItem[18, 513] open:[18, 19, "*"] isLoose hadBlankLineAfter
- Paragraph[20, 122] isTrailingBlankLine
- Text[20, 110] chars:[20, 110, "Fix: … ed by"]
- SoftLineBreak[110, 111]
- Code[117, 120] textOpen:[117, 118, "`"] text:[118, 119, "|"] textClose:[119, 120, "`"]
- Text[118, 119] chars:[118, 119, "|"]
- Text[120, 121] chars:[120, 121, ":"]
- FencedCodeBlock[133, 513] open:[133, 136, "```"] info:[136, 144, "markdown"] content:[151, 504] lines[10] close:[510, 513, "```"]
- Text[151, 504] chars:[151, 504, "7. El … ion,\n"]
+Document[0, 440]
+ BulletList[0, 439] isLoose
+ BulletListItem[0, 439] open:[0, 1, "*"] isLoose hadBlankLineAfter
+ Paragraph[2, 100] isTrailingBlankLine
+ Text[2, 92] chars:[2, 92, "Fix: … ed by"]
+ SoftLineBreak[92, 93]
+ Code[95, 98] textOpen:[95, 96, "`"] text:[96, 97, "|"] textClose:[97, 98, "`"]
+ Text[96, 97] chars:[96, 97, "|"]
+ Text[98, 99] chars:[98, 99, ":"]
+ FencedCodeBlock[103, 439] open:[103, 106, "```"] info:[106, 114, "markdown"] content:[117, 434] lines[10] close:[436, 439, "```"]
+ Text[117, 434] chars:[117, 434, "7. El … ion,\n"]
````````````````````````````````
@@ -1679,7 +1923,7 @@ Blank line at end of block quote not included in block quote
> - Item
>
> class Dummy {
-> private final int intValue;
+> final private int intValue;
>
> public Dummy(int intValue) {
> this.intValue = intValue;
@@ -1697,7 +1941,7 @@ Blank line at end of block quote not included in block quote
Item
class Dummy {
- private final int intValue;
+ final private int intValue;
public Dummy(int intValue) {
this.intValue = intValue;
diff --git a/flexmark-core-test/src/test/resources/core_paragraph_formatter_spec.md b/flexmark-core-test/src/test/resources/core_paragraph_formatter_spec.md
index 950fa2ab7..7ccf87d95 100644
--- a/flexmark-core-test/src/test/resources/core_paragraph_formatter_spec.md
+++ b/flexmark-core-test/src/test/resources/core_paragraph_formatter_spec.md
@@ -38,7 +38,7 @@ Add: configuration for repeated prefixes in items, which would `be #2`
standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [78) } --> 71
+[0]: {78 8|0 -> 71}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated prefixes in items, which would `be⟧
@@ -62,7 +62,7 @@ Add: configuration for repeated prefixes in items, which would `be #2` copied wh
⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [133, s, d) } --> 128
+[0]: {133 >< 4|0 sd -> 128}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated prefixes in items, which would `be⟧
@@ -80,13 +80,13 @@ would be automatically copied.
````````````````````````````````
-```````````````````````````````` example(Wrap: 4) options(margin[66], delete-space, indent[ ], first-indent[], first-width-delta[0])
+```````````````````````````````` example(Wrap: 4) options(margin[66], delete-space, prefix[ ], first-prefix[], first-width-delta[0])
Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
⟦ ⟧⦙would be treated equivalent to task item marker prefix. That way
⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [133, s, d) } --> 136
+[0]: {133 >< 4|0 sd -> 136}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated prefixes in items, which would `be⟧
@@ -104,13 +104,13 @@ Add: configuration for repeated prefixes in items, which would `be
````````````````````````````````
-```````````````````````````````` example(Wrap: 5) options(margin[66], delete-space, indent[ > ], first-width-delta[0])
+```````````````````````````````` example(Wrap: 5) options(margin[66], delete-space, prefix[ > ], first-prefix[ > ])
Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
⟦ ⟧⦙would be treated equivalent to task item marker prefix. That way
⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [133, s, d) } --> 146
+[0]: {133 >< 4|0 sd -> 146}
---- Ranges ------------------------------------------------------------
⟦⟧ > ⟦Add: configuration for repeated prefixes in items, which⟧
@@ -134,7 +134,7 @@ Add: configuration for repeated prefixes in items, which would `be #2` copied wh
⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [133, d) } --> 129
+[0]: {133 4|0 d -> 129}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated prefixes in items, which would `be⟧
@@ -154,12 +154,36 @@ would be automatically copied.
```````````````````````````````` example(Wrap: 7) options(margin[66], restore-tracked-spaces)
Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧would be treated equivalent to task item marker prefix. That way
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙
+.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {300 3|2 -> 292}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent to task item marker prefix. That way
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦would be automatically copied.⟧ ⟦⟧
+
+---- Result ------------------------------------------------------------
+Add: configuration for repeated prefixes in items, which would `be
+#2` copied when adding/splitting an item. In other words they
+would be treated equivalent to task item marker prefix. That way
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied. ⦙
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 8) options(margin[66], restore-tracked-spaces)
+Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
⟦ ⟧⦙would be treated equivalent to task item marker prefix. That way
⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [133) } --> 129
-[1]: { [300) } --> 292
+[0]: {133 4|0 -> 129}
+[1]: {300 3|2 -> 292}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated prefixes in items, which would `be⟧
@@ -177,15 +201,15 @@ would be automatically copied. ⦙
````````````````````````````````
-```````````````````````````````` example(Wrap: 8) options(margin[66], restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 9) options(margin[66], restore-tracked-spaces)
Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
⟦ ⟧⦙would be treated equivalent to task item marker prefix. That way
⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙ ⦙
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [133) } --> 129
-[1]: { [300) } --> 292
-[2]: { [303) } --> 295
+[0]: {133 4|0 -> 129}
+[1]: {300 3|6 -> 292}
+[2]: {303 6|3 -> 295}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated prefixes in items, which would `be⟧
@@ -203,16 +227,40 @@ would be automatically copied. ⦙ ⦙
````````````````````````````````
-```````````````````````````````` example(Wrap: 9) options(margin[66], restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 10) options(margin[66], restore-tracked-spaces)
+Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧would be treated equivalent to task item marker prefix. That way ⦙
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
+.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {199 2|0 -> 195}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent to task item marker prefix. That way
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦would be automatically copied.⟧
+
+---- Result ------------------------------------------------------------
+Add: configuration for repeated prefixes in items, which would `be
+#2` copied when adding/splitting an item. In other words they
+would be treated equivalent to task item marker prefix. That way ⦙
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 11) options(margin[66], restore-tracked-spaces)
Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
⟦ ⟧⦙would be treated equivalent to task item marker prefix. That way ⦙
⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙ ⦙
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [133) } --> 129
-[1]: { [199) } --> 195
-[2]: { [302) } --> 294
-[3]: { [305) } --> 297
+[0]: {133 4|0 -> 129}
+[1]: {199 2|0 -> 195}
+[2]: {302 3|6 -> 294}
+[3]: {305 6|3 -> 297}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated prefixes in items, which would `be⟧
@@ -230,23 +278,73 @@ would be automatically copied. ⦙ ⦙
````````````````````````````````
-```````````````````````````````` example(Wrap: 10) options(margin[66], restore-tracked-spaces)
+Leading space not handled for tracking for now
+
+```````````````````````````````` example(Wrap: 12) options(margin[66], restore-tracked-spaces)
+ Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧would be treated equivalent ⦙ to task item marker prefix. That way
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
+.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {164 1|1 -> 157}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent⟧ ⟦ ⟧⟦to task item marker prefix. That way
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦would be automatically copied.⟧
+
+---- Result ------------------------------------------------------------
+Add: configuration for repeated prefixes in items, which would `be
+#2` copied when adding/splitting an item. In other words they
+would be treated equivalent ⦙ to task item marker prefix. That way
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 13) options(margin[66], restore-tracked-spaces, running-tests)
+ ⦙ Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧would be treated equivalent to task item marker prefix. That way
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
+.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {2 2|1 -> 0}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent ⟧⟦to task item marker prefix. That way
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦would be automatically copied.⟧
+
+---- Result ------------------------------------------------------------
+⦙Add: configuration for repeated prefixes in items, which would `be
+#2` copied when adding/splitting an item. In other words they
+would be treated equivalent to task item marker prefix. That way
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 14) options(margin[66], restore-tracked-spaces)
⦙ Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
⟦ ⟧⦙would be treated equivalent ⦙ to task item marker prefix. That way ⦙
⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙ ⦙
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [2) } --> 0
-[1]: { [136) } --> 129
-[2]: { [164) } --> 157
-[3]: { [203) } --> 196
-[4]: { [306) } --> 295
-[5]: { [309) } --> 298
+[0]: {2 2|1 -> 0}
+[1]: {136 4|0 -> 129}
+[2]: {164 1|1 -> 157}
+[3]: {203 2|0 -> 196}
+[4]: {306 3|6 -> 295}
+[5]: {309 6|3 -> 298}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated prefixes in items, which would `be⟧
⟦#2` copied when adding/splitting an item. In other words they
-⟧⟦would be treated equivalent to task item marker prefix. That way
+⟧⟦would be treated equivalent⟧ ⟦ ⟧⟦to task item marker prefix. That way
⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
⟦would be automatically copied.⟧ ⟦⟧
@@ -259,11 +357,11 @@ would be automatically copied. ⦙ ⦙
````````````````````````````````
-```````````````````````````````` example(Wrap: 11) options(margin[66])
+```````````````````````````````` example(Wrap: 15) options(margin[66])
Add: configuration ⦙ for repeated
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [19) } --> 19
+[0]: {19 1|1 -> 19}
---- Ranges ------------------------------------------------------------
⟦Add: configuration ⟧⟦for repeated⟧
@@ -273,30 +371,30 @@ Add: configuration ⦙for repeated
````````````````````````````````
-```````````````````````````````` example(Wrap: 12) options(margin[66], restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 16) options(margin[66], restore-tracked-spaces)
Add: configuration ⦙ for repeated
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [19) } --> 19
+[0]: {19 1|1 -> 19}
---- Ranges ------------------------------------------------------------
-⟦Add: configuration for repeated⟧
+⟦Add: configuration⟧ ⟦ ⟧⟦for repeated⟧
---- Result ------------------------------------------------------------
Add: configuration ⦙ for repeated
````````````````````````````````
-```````````````````````````````` example(Wrap: 13) options(margin[66], restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 17) options(margin[66], restore-tracked-spaces)
Add: configuration ⦙ for repeated. ⦙ ⦙
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [19) } --> 19
-[1]: { [35) } --> 35
-[2]: { [37) } --> 37
+[0]: {19 1|1 -> 19}
+[1]: {35 2|4 -> 35}
+[2]: {37 4|2 -> 37}
---- Ranges ------------------------------------------------------------
-⟦Add: configuration for repeated.⟧ ⟦⟧
+⟦Add: configuration⟧ ⟦ ⟧⟦for repeated.⟧ ⟦⟧
---- Result ------------------------------------------------------------
Add: configuration ⦙ for repeated. ⦙ ⦙
@@ -305,25 +403,25 @@ Add: configuration ⦙ for repeated. ⦙ ⦙
backspace after typing 1 char should preserve surrounding spaces
-```````````````````````````````` example(Wrap: 14) options(margin[66], delete-char, restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 18) options(margin[66], delete-char, restore-tracked-spaces)
Add: configuration ⦙ for repeated.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [19, d) } --> 19
+[0]: {19 1|1 d -> 19}
---- Ranges ------------------------------------------------------------
-⟦Add: configuration for repeated.⟧
+⟦Add: configuration⟧ ⟦ ⟧⟦for repeated.⟧
---- Result ------------------------------------------------------------
Add: configuration ⦙ for repeated.
````````````````````````````````
-```````````````````````````````` example(Wrap: 15) options(margin[66], restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 19) options(margin[66], restore-tracked-spaces)
Add: configuration for repeated. ⦙ ➥[simLink](simLink.md)
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [33) } --> 33
+[0]: {33 1|1 -> 33}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated.⟧ ⟦⟧
@@ -335,12 +433,12 @@ Add: configuration for repeated. ⦙
````````````````````````````````
-```````````````````````````````` example(Wrap: 16) options(margin[66], insert-space, restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 20) options(margin[66], insert-space, restore-tracked-spaces)
Add: configuration for repeated.
⦙➥[simLink](simLink.md)
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [34, s) } --> 33
+[0]: {34 1|0 si -> 33}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated.⟧ ⟦
@@ -352,12 +450,12 @@ Add: configuration for repeated. ⦙
````````````````````````````````
-```````````````````````````````` example(Wrap: 17) options(margin[66], insert-char, restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 21) options(margin[66], insert-char, restore-tracked-spaces)
Add: configuration for repeated.
t⦙➥[simLink](simLink.md)
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [34) } --> 34
+[0]: {34 0|0 i -> 34}
---- Ranges ------------------------------------------------------------
⟦Add: configuration for repeated.⟧ ⟦t⟧
@@ -369,12 +467,12 @@ Add: configuration for repeated. t⦙
````````````````````````````````
-```````````````````````````````` example(Wrap: 18) options(margin[30], insert-char, restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 22) options(margin[30], insert-char, restore-tracked-spaces)
text should wrap onto the next t⦙
line at right margin of 30
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [32) } --> 32
+[0]: {32 0|0 i -> 32}
---- Ranges ------------------------------------------------------------
⟦text should wrap onto the next⟧
@@ -386,12 +484,12 @@ t⦙ line at right margin of 30
````````````````````````````````
-```````````````````````````````` example(Wrap: 19) options(margin[32], insert-char, restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 23) options(margin[32], insert-char, restore-tracked-spaces)
text should wrap onto the next tt⦙
line at right margin of 30
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [33) } --> 33
+[0]: {33 0|0 i -> 33}
---- Ranges ------------------------------------------------------------
⟦text should wrap onto the next⟧
@@ -403,12 +501,12 @@ tt⦙ line at right margin of 30
````````````````````````````````
-```````````````````````````````` example(Wrap: 20) options(margin[32], delete-char, restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 24) options(margin[32], delete-char, restore-tracked-spaces)
text should wrap onto the next
t⦙ line at right margin of 30
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [32, d) } --> 32
+[0]: {32 0|1 d -> 32}
---- Ranges ------------------------------------------------------------
⟦text should wrap onto the next⟧ ⟦t⟧
@@ -420,12 +518,12 @@ line at right margin of 30
````````````````````````````````
-```````````````````````````````` example(Wrap: 21) options(margin[30], insert-space, restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 25) options(margin[30], insert-space, restore-tracked-spaces)
text should wrap onto the next ⦙.
line at right margin of 30
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [31, s) } --> 31
+[0]: {31 1|0 si -> 31}
---- Ranges ------------------------------------------------------------
⟦text should wrap onto the next⟧
@@ -437,12 +535,12 @@ text should wrap onto the next
````````````````````````````````
-```````````````````````````````` example(Wrap: 22) options(margin[32], insert-space, restore-tracked-spaces)
+```````````````````````````````` example(Wrap: 26) options(margin[32], insert-space, restore-tracked-spaces)
text should wrap onto the next ⦙\\.
line at right margin of 30
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [31, s) } --> 31
+[0]: {31 1|0 si -> 31}
---- Ranges ------------------------------------------------------------
⟦text should wrap onto the next⟧
@@ -454,138 +552,141 @@ text should wrap onto the next
````````````````````````````````
-```````````````````````````````` example(Wrap: 23) options(margin[96], delete-char, restore-tracked-spaces, indent[ ], first-indent[* [ ] ])
+```````````````````````````````` example(Wrap: 27) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ])
⟦* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
⟦ ⟧⦙ keep duplicate code.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [103, d) } --> 97
+[0]: {103 6|1 d -> 91}
---- Ranges ------------------------------------------------------------
-⟦* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need⟧ ⟦
-⟧⟦ keep duplicate code.⟧
+⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the need⟧ ⟦
+⟧⟦keep duplicate code.⟧
---- Result ------------------------------------------------------------
-* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙
- keep duplicate code.
+Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙
+keep duplicate code.
````````````````````````````````
-```````````````````````````````` example(Wrap: 24) options(margin[96], delete-char, restore-tracked-spaces, indent[ ], first-indent[ * [ ] ])
+In tests, `prefix` and `first-prefix` with `restore-tracked-spaces` is only used to adjust right
+margin on first/following lines. Not to add actual prefix to result.
+
+```````````````````````````````` example(Wrap: 28) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[ * [ ] ])
⟦ * [ ] ⟧d ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
⟦ ⟧dependencies on classes in other directories.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [10, d) } --> 10
+[0]: {10 1|1 d -> 2}
---- Ranges ------------------------------------------------------------
-⟦ * [ ] d classes contained in `util` directory to `misc` sub-directory and not have any
- dependencies on classes in other directories.⟧
+⟦d⟧ ⟦ ⟧⟦classes contained in `util` directory to `misc` sub-directory and not have any
+⟧⟦dependencies on classes in other directories.⟧
---- Result ------------------------------------------------------------
- * [ ] d ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
- dependencies on classes in other directories.
+d ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
+dependencies on classes in other directories.
````````````````````````````````
-```````````````````````````````` example(Wrap: 25) options(margin[96], delete-char, restore-tracked-spaces, indent[ ], first-indent[ * [ ] ])
+```````````````````````````````` example(Wrap: 29) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[ * [ ] ])
⟦ * [ ] ⟧ ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
⟦ ⟧dependencies on classes in other directories.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [9, d) } --> 8
+[0]: {9 2|1 d -> 0}
---- Ranges ------------------------------------------------------------
-⟦⟧ * [ ] ⟦⟧ ⟦classes contained in `util` directory to `misc` sub-directory and not have any
- dependencies on classes in other directories.⟧
+⟦⟧ ⟦classes contained in `util` directory to `misc` sub-directory and not have any
+⟧⟦dependencies on classes in other directories.⟧
---- Result ------------------------------------------------------------
- * [ ] ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
- dependencies on classes in other directories.
+⦙ classes contained in `util` directory to `misc` sub-directory and not have any
+dependencies on classes in other directories.
````````````````````````````````
-```````````````````````````````` example(Wrap: 26) options(margin[96], delete-char, restore-tracked-spaces, indent[ ], first-indent[ * [ ] ])
+```````````````````````````````` example(Wrap: 30) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[ * [ ] ])
⟦* item 1
* [ ] ⟧ ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
⟦ ⟧dependencies on classes in other directories.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [18, d) } --> 8
+[0]: {18 2|1 d -> 0}
---- Ranges ------------------------------------------------------------
-⟦⟧ * [ ] ⟦⟧ ⟦classes contained in `util` directory to `misc` sub-directory and not have any
- dependencies on classes in other directories.⟧
+⟦⟧ ⟦classes contained in `util` directory to `misc` sub-directory and not have any
+⟧⟦dependencies on classes in other directories.⟧
---- Result ------------------------------------------------------------
- * [ ] ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
- dependencies on classes in other directories.
+⦙ classes contained in `util` directory to `misc` sub-directory and not have any
+dependencies on classes in other directories.
````````````````````````````````
-```````````````````````````````` example(Wrap: 27) options(margin[96], insert-space, restore-tracked-spaces, indent[ ], first-indent[* [ ] ])
+```````````````````````````````` example(Wrap: 31) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ])
⟦* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
⟦ ⟧ ⦙to keep duplicate code.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [104, s) } --> 103
+[0]: {104 7|0 si -> 91}
---- Ranges ------------------------------------------------------------
-⟦* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need
-⟧⟦ to keep duplicate code.⟧
+⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟧⟦to keep duplicate code.⟧
---- Result ------------------------------------------------------------
-* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need
- ⦙to keep duplicate code.
+Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⦙to keep duplicate code.
````````````````````````````````
-```````````````````````````````` example(Wrap: 28) options(margin[96], insert-space, restore-tracked-spaces, indent[ ], first-indent[* [ ] ])
+```````````````````````````````` example(Wrap: 32) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ])
⟦* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙ to keep duplicate code.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [97, s) } --> 97
+[0]: {97 1|1 si -> 91}
---- Ranges ------------------------------------------------------------
-⟦* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need⟧ ⟦⟧
- ⟦ to keep duplicate code.⟧
+⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the need⟧ ⟦⟧
+⟦to keep duplicate code.⟧
---- Result ------------------------------------------------------------
-* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙
- to keep duplicate code.
+Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙
+to keep duplicate code.
````````````````````````````````
-```````````````````````````````` example(Wrap: 29) options(margin[96], insert-space, restore-tracked-spaces, indent[ ], first-indent[* ])
+```````````````````````````````` example(Wrap: 33) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* ])
⟦* ⟧Fix: conversion from Smart to based to extract more source information from segmented
⟦ ⟧sequence ⦙and mapped sequence.
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [99, s) } --> 99
+[0]: {99 1|0 si -> 95}
---- Ranges ------------------------------------------------------------
-⟦* Fix: conversion from Smart to based to extract more source information from segmented⟧⟦ sequence⟧
- ⟦ and mapped sequence.⟧
+⟦Fix: conversion from Smart to based to extract more source information from segmented⟧⟦ sequence⟧
+⟦and mapped sequence.⟧
---- Result ------------------------------------------------------------
-* Fix: conversion from Smart to based to extract more source information from segmented sequence
- ⦙and mapped sequence.
+Fix: conversion from Smart to based to extract more source information from segmented sequence
+⦙and mapped sequence.
````````````````````````````````
-```````````````````````````````` example(Wrap: 30) options(margin[96], insert-space, restore-tracked-spaces, indent[ ], first-indent[* ])
+```````````````````````````````` example(Wrap: 34) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* ])
⟦* ⟧Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line elements. ⦙
.
---- Tracked Offsets ---------------------------------------------------
-[0]: { [107, s) } --> 109
+[0]: {107 1|0 si -> 105}
---- Ranges ------------------------------------------------------------
-⟦* Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line⟧
- ⟦ elements.⟧ ⟦⟧
+⟦Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line⟧
+⟦elements.⟧ ⟦⟧
---- Result ------------------------------------------------------------
-* Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line
- elements. ⦙
+Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line
+elements. ⦙
````````````````````````````````
diff --git a/flexmark-core-test/src/test/resources/core_pegdown_compatibility_spec.md b/flexmark-core-test/src/test/resources/core_pegdown_compatibility_spec.md
index 13503a34c..b5b40acad 100644
--- a/flexmark-core-test/src/test/resources/core_pegdown_compatibility_spec.md
+++ b/flexmark-core-test/src/test/resources/core_pegdown_compatibility_spec.md
@@ -2083,6 +2083,72 @@ Document[0, 374]
````````````````````````````````
+```````````````````````````````` example List Item Indent Handling: 9
+* Enhanced Paste from History dialog:
+ * **combine**, **arrange** and **reverse** the order of content entries
+ * **combine multiple** clipboard contents **with caret information intact**
+ * **paste and re-create multiple carets** from information already stored on the clipboard
+ * **duplicate line/block for each caret** in the clipboard content and **put a caret on the
+ first line** of the block, ready for multi-caret select and paste
+ * see caret information stored on the clipboard for each content entry
+.
+
+ Enhanced Paste from History dialog:
+
+ combine , arrange and reverse the order of content entries
+ combine multiple clipboard contents with caret information intact
+ paste and re-create multiple carets from information already stored on the clipboard
+ duplicate line/block for each caret in the clipboard content and put a caret on the first line of the block, ready for multi-caret select and paste
+ see caret information stored on the clipboard for each content entry
+
+
+
+.
+Document[0, 533]
+ BulletList[0, 533] isTight
+ BulletListItem[0, 533] open:[0, 1, "*"] isTight
+ Paragraph[2, 38]
+ Text[2, 37] chars:[2, 37, "Enhan … alog:"]
+ BulletList[42, 533] isTight
+ BulletListItem[42, 114] open:[42, 43, "*"] isTight
+ Paragraph[44, 114]
+ StrongEmphasis[44, 55] textOpen:[44, 46, "**"] text:[46, 53, "combine"] textClose:[53, 55, "**"]
+ Text[46, 53] chars:[46, 53, "combine"]
+ Text[55, 57] chars:[55, 57, ", "]
+ StrongEmphasis[57, 68] textOpen:[57, 59, "**"] text:[59, 66, "arrange"] textClose:[66, 68, "**"]
+ Text[59, 66] chars:[59, 66, "arrange"]
+ Text[68, 73] chars:[68, 73, " and "]
+ StrongEmphasis[73, 84] textOpen:[73, 75, "**"] text:[75, 82, "reverse"] textClose:[82, 84, "**"]
+ Text[75, 82] chars:[75, 82, "reverse"]
+ Text[84, 113] chars:[84, 113, " the … tries"]
+ BulletListItem[118, 194] open:[118, 119, "*"] isTight
+ Paragraph[120, 194]
+ StrongEmphasis[120, 140] textOpen:[120, 122, "**"] text:[122, 138, "combine multiple"] textClose:[138, 140, "**"]
+ Text[122, 138] chars:[122, 138, "combi … tiple"]
+ Text[140, 160] chars:[140, 160, " clip … ents "]
+ StrongEmphasis[160, 193] textOpen:[160, 162, "**"] text:[162, 191, "with caret information intact"] textClose:[191, 193, "**"]
+ Text[162, 191] chars:[162, 191, "with … ntact"]
+ BulletListItem[198, 289] open:[198, 199, "*"] isTight
+ Paragraph[200, 289]
+ StrongEmphasis[200, 239] textOpen:[200, 202, "**"] text:[202, 237, "paste and re-create multiple carets"] textClose:[237, 239, "**"]
+ Text[202, 237] chars:[202, 237, "paste … arets"]
+ Text[239, 288] chars:[239, 288, " from … board"]
+ BulletListItem[293, 459] open:[293, 294, "*"] isTight
+ Paragraph[295, 459]
+ StrongEmphasis[295, 334] textOpen:[295, 297, "**"] text:[297, 332, "duplicate line/block for each caret"] textClose:[332, 334, "**"]
+ Text[297, 332] chars:[297, 332, "dupli … caret"]
+ Text[334, 364] chars:[334, 364, " in t … and "]
+ StrongEmphasis[364, 405] textOpen:[364, 366, "**"] text:[366, 403, "put a caret on the\nfirst line"] textClose:[403, 405, "**"]
+ Text[366, 384] chars:[366, 384, "put a … n the"]
+ SoftLineBreak[384, 385]
+ Text[393, 403] chars:[393, 403, "first line"]
+ Text[405, 458] chars:[405, 458, " of t … paste"]
+ BulletListItem[463, 533] open:[463, 464, "*"] isTight
+ Paragraph[465, 533]
+ Text[465, 533] chars:[465, 533, "see c … entry"]
+````````````````````````````````
+
+
## Block quote parsing
Whether blank lines are required to start a block quote
@@ -2852,12 +2918,12 @@ Document[0, 1096]
````````````````````````````````
-## Issue #70
+### 70
Issue #70, parse failed for angle quotes if the end angle quote follows with a line feed or a
carriage return
-```````````````````````````````` example(Issue #70: 1) options(FILE_EOL)
+```````````````````````````````` example(Issues - 70: 1) options(FILE_EOL)
<>
.
<>
@@ -2870,7 +2936,7 @@ Document[0, 9]
````````````````````````````````
-```````````````````````````````` example(Issue #70: 2) options(NO_FILE_EOL)
+```````````````````````````````` example(Issues - 70: 2) options(NO_FILE_EOL)
<>⏎
.
<>
@@ -2883,7 +2949,7 @@ Document[0, 9]
````````````````````````````````
-```````````````````````````````` example(Issue #70: 3) options(FILE_EOL)
+```````````````````````````````` example(Issues - 70: 3) options(FILE_EOL)
<>⏎
.
<>
@@ -2896,7 +2962,7 @@ Document[0, 10]
````````````````````````````````
-```````````````````````````````` example(Issue #70: 4) options(FILE_EOL)
+```````````````````````````````` example(Issues - 70: 4) options(FILE_EOL)
<>
.
@@ -2910,13 +2976,13 @@ Document[0, 10]
````````````````````````````````
-## Issue 108
+### 108
Issue #108, problem of the list of some Space in front, misunderstanding of
`Parser.LISTS_ITEM_INDENT` setting to 2
-```````````````````````````````` example(Issue 108: 1) options(lists-item-indent)
- 1. **download**
+```````````````````````````````` example(Issues - 108: 1) options(lists-item-indent)
+1. **download**
2. **abc** →→
3. **999**
@@ -2930,25 +2996,25 @@ Issue #108, problem of the list of some Space in front, misunderstanding of
.
-Document[0, 51]
- OrderedList[2, 50] isTight delimiter:'.'
- OrderedListItem[2, 50] open:[2, 4, "1."] isTight
- Paragraph[5, 20]
- StrongEmphasis[5, 17] textOpen:[5, 7, "**"] text:[7, 15, "download"] textClose:[15, 17, "**"]
- Text[7, 15] chars:[7, 15, "download"]
- OrderedList[22, 50] isTight start:2 delimiter:'.'
- OrderedListItem[22, 37] open:[22, 24, "2."] isTight
- Paragraph[25, 37]
- StrongEmphasis[25, 32] textOpen:[25, 27, "**"] text:[27, 30, "abc"] textClose:[30, 32, "**"]
- Text[27, 30] chars:[27, 30, "abc"]
- OrderedListItem[39, 50] open:[39, 41, "3."] isTight hadBlankLineAfter
- Paragraph[42, 50] isTrailingBlankLine
- StrongEmphasis[42, 49] textOpen:[42, 44, "**"] text:[44, 47, "999"] textClose:[47, 49, "**"]
- Text[44, 47] chars:[44, 47, "999"]
-````````````````````````````````
-
-
-```````````````````````````````` example Issue 108: 2
+Document[0, 49]
+ OrderedList[0, 48] isTight delimiter:'.'
+ OrderedListItem[0, 48] open:[0, 2, "1."] isTight
+ Paragraph[3, 18]
+ StrongEmphasis[3, 15] textOpen:[3, 5, "**"] text:[5, 13, "download"] textClose:[13, 15, "**"]
+ Text[5, 13] chars:[5, 13, "download"]
+ OrderedList[20, 48] isTight start:2 delimiter:'.'
+ OrderedListItem[20, 35] open:[20, 22, "2."] isTight
+ Paragraph[23, 35]
+ StrongEmphasis[23, 30] textOpen:[23, 25, "**"] text:[25, 28, "abc"] textClose:[28, 30, "**"]
+ Text[25, 28] chars:[25, 28, "abc"]
+ OrderedListItem[37, 48] open:[37, 39, "3."] isTight hadBlankLineAfter
+ Paragraph[40, 48] isTrailingBlankLine
+ StrongEmphasis[40, 47] textOpen:[40, 42, "**"] text:[42, 45, "999"] textClose:[45, 47, "**"]
+ Text[42, 45] chars:[42, 45, "999"]
+````````````````````````````````
+
+
+```````````````````````````````` example Issues - 108: 2
1. **download**
2. **abc** →→
3. **999**
@@ -3233,3 +3299,18 @@ Document[0, 40]
````````````````````````````````
+## Issue 402
+
+Indented code block looking like list item
+
+```````````````````````````````` example Issue 402: 1
+ - this is indented code
+.
+- this is indented code
+
+.
+Document[0, 27]
+ IndentedCodeBlock[4, 27]
+````````````````````````````````
+
+
diff --git a/flexmark-core-test/src/test/resources/core_translation_formatter_spec.md b/flexmark-core-test/src/test/resources/core_translation_formatter_spec.md
index 7f0881936..99222c9cb 100644
--- a/flexmark-core-test/src/test/resources/core_translation_formatter_spec.md
+++ b/flexmark-core-test/src/test/resources/core_translation_formatter_spec.md
@@ -1937,45 +1937,45 @@ Handle proper GitHub indented code in list items
.
- Original ----------------
Document[0, 95]
- BulletList[0, 95] isLoose
- BulletListItem[0, 95] open:[0, 1, "*"] isLoose hadBlankLineAfter
+ BulletList[0, 95] isTight
+ BulletListItem[0, 95] open:[0, 1, "*"] isTight hadBlankLineAfter
Paragraph[2, 8] isTrailingBlankLine
Text[2, 6] chars:[2, 6, "item"]
BlankLine[8, 9]
IndentedCodeBlock[17, 31]
BlankLine[31, 40]
- BulletList[44, 95] isLoose
- BulletListItem[44, 95] open:[44, 45, "*"] isLoose hadBlankLineAfter
+ BulletList[44, 95] isTight
+ BulletListItem[44, 95] open:[44, 45, "*"] isTight hadBlankLineAfter
Paragraph[46, 56] isTrailingBlankLine
Text[46, 54] chars:[46, 54, "sub-item"]
BlankLine[56, 61]
IndentedCodeBlock[73, 95]
- Partial ----------------
Document[0, 58]
- BulletList[0, 58] isLoose
- BulletListItem[0, 58] open:[0, 1, "*"] isLoose hadBlankLineAfter
+ BulletList[0, 58] isTight
+ BulletListItem[0, 58] open:[0, 1, "*"] isTight hadBlankLineAfter
Paragraph[2, 9] isTrailingBlankLine
Text[2, 8] chars:[2, 8, "iIteEm"]
BlankLine[9, 10]
IndentedCodeBlock[18, 22]
BlankLine[22, 23]
- BulletList[27, 58] isLoose
- BulletListItem[27, 58] open:[27, 28, "*"] isLoose hadBlankLineAfter
+ BulletList[27, 58] isTight
+ BulletListItem[27, 58] open:[27, 28, "*"] isTight hadBlankLineAfter
Paragraph[29, 41] isTrailingBlankLine
Text[29, 40] chars:[29, 40, "SuUB- … IteEm"]
BlankLine[41, 42]
IndentedCodeBlock[54, 58]
- Translated -------------
Document[0, 87]
- BulletList[0, 87] isLoose
- BulletListItem[0, 87] open:[0, 1, "*"] isLoose hadBlankLineAfter
+ BulletList[0, 87] isTight
+ BulletListItem[0, 87] open:[0, 1, "*"] isTight hadBlankLineAfter
Paragraph[2, 9] isTrailingBlankLine
Text[2, 8] chars:[2, 8, "iIteEm"]
BlankLine[9, 10]
IndentedCodeBlock[18, 32]
BlankLine[32, 33]
- BulletList[37, 87] isLoose
- BulletListItem[37, 87] open:[37, 38, "*"] isLoose hadBlankLineAfter
+ BulletList[37, 87] isTight
+ BulletListItem[37, 87] open:[37, 38, "*"] isTight hadBlankLineAfter
Paragraph[39, 51] isTrailingBlankLine
Text[39, 50] chars:[39, 50, "SuUB- … IteEm"]
BlankLine[51, 52]
diff --git a/flexmark-core-test/src/test/resources/core_wrapping_spec.md b/flexmark-core-test/src/test/resources/core_wrapping_spec.md
new file mode 100644
index 000000000..e9311aa4b
--- /dev/null
+++ b/flexmark-core-test/src/test/resources/core_wrapping_spec.md
@@ -0,0 +1,1642 @@
+---
+title: Wrapping and Offset Tracking Spec
+author:
+version:
+date: '2016-06-06'
+license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)'
+...
+
+---
+
+## Wrap
+
+```````````````````````````````` example(Wrap: 1) options(margin[30])
+Paragraph with hard break and more text.
+
+Paragraph with soft break and more text.
+
+Paragraph with hard break and more text.
+
+.
+Paragraph with hard break and
+more text.
+
+Paragraph with soft break and
+more text.
+
+Paragraph with hard break and
+more text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 2) options(margin[30])
+Paragraph with hard break and # more text.
+
+Paragraph with soft break and * more text.
+
+Paragraph with hard break and 1. more text.
+
+.
+Paragraph with hard break and
+\# more text.
+
+Paragraph with soft break and
+\* more text.
+
+Paragraph with hard break and
+1\. more text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 3) options(margin[30], no-apply-escapers)
+Paragraph with hard break and # more text.
+
+Paragraph with soft break and * more text.
+
+Paragraph with hard break and 1. more text.
+
+.
+Paragraph with hard break and
+# more text.
+
+Paragraph with soft break and
+* more text.
+
+Paragraph with hard break and
+1. more text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 4) options(margin[60], no-soft-breaks)
+Paragraph with hard break and
+\# more text.
+
+Paragraph with soft break and
+\* more text.
+
+Paragraph with hard break and
+1\. more text.
+
+.
+Paragraph with hard break and # more text.
+
+Paragraph with soft break and * more text.
+
+Paragraph with hard break and 1. more text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 5) options(margin[60], no-apply-escapers, no-soft-breaks)
+Paragraph with hard break and
+\# more text.
+
+Paragraph with soft break and
+\* more text.
+
+Paragraph with hard break and
+1\. more text.
+
+.
+Paragraph with hard break and \# more text.
+
+Paragraph with soft break and \* more text.
+
+Paragraph with hard break and 1\. more text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 6) options(margin[30])
+* Paragraph with hard break and more text.
+
+1. Paragraph with soft break and more text.
+
+.
+* Paragraph with hard break
+ and more text.
+
+1. Paragraph with soft break
+ and more text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap: 7) options(margin[96], insert-space, first-prefix[* ], prefix[], show-ranges, restore-tracked-spaces)
+⟦* Fix: copy fixed utils from Arduino Support plugin.
+* Fix: Paste Image: old crop settings out of bounds for new image caused
+⟧⟦* ⟧Fix: for ⦙#651, Drop image with dialog issues
+
+.
+* Fix: for ⦙#651, Drop image with dialog issues
+
+---- Tracked Offsets ---------------------------------------------------
+[0]: {138 1|0 si -> 11}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* ⟦Fix: for #651, Drop image with dialog issues
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[129, 174), s=0:1, u=2:3, t=2:3, l=48, sz=5, na=3: [129), a:'* ', [129, 174), a:'\n', [174) }
+````````````````````````````````
+
+
+### Links
+
+do not wrap links
+
+```````````````````````````````` example(Wrap - Links: 1) options(margin[30])
+[Issue #Tests-Fail-JavaSwingTimers](https://github.com/vsch/idea-multimarkdown/issues/Tests-Fail-JavaSwingTimers)
+.
+[Issue #Tests-Fail-JavaSwingTimers](https://github.com/vsch/idea-multimarkdown/issues/Tests-Fail-JavaSwingTimers)
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 2) options(margin[30])
+
+.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 3) options(margin[30], explicit-links-at-start, show-ranges)
+* Paragraph with hard break and more text. [Test](test) text.
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break
+ and more text.
+ [Test](test) text.
+
+1. Paragraph with soft break
+ and more text.
+  text.
+
+---- Ranges ------------------------------------------------------------
+⟦* Paragraph with hard break⟧
+⟦⟧ ⟦ and more text.⟧
+⟦⟧ ⟦ [Test](test) text.⟧⟦
+⟧⟦
+1. Paragraph with soft break⟧
+⟦⟧ ⟦ and more text.⟧
+⟦⟧ ⟦  text.⟧⟦
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 133), s=4:6, u=9:11, t=9:11, l=138, sz=22, na=17: [0, 27), a:'\n', [27), a:' ', [27, 42), a:'\n', [42), a:' ', [42, 61), [62, 63), [67, 96), a:'\n', [96), a:2x' ', [96, 111), a:'\n', [111), a:2x' ', [111, 131), [132, 133), a:'\n', [133) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 4) options(margin[34], insert-space, restore-tracked-spaces, explicit-links-at-start, image-links-at-start, show-ranges)
+⟦* Paragraph with hard break and more text. [Test](test) text.
+
+⟧1. Paragraph with soft break and more text. ⦙ text.
+
+.
+1. Paragraph with soft break and
+ more text. ⦙
+  text.
+
+---- Tracked Offsets ---------------------------------------------------
+[0]: {112 1|0 si -> 47}
+
+---- Ranges ------------------------------------------------------------
+⟦1. Paragraph with soft break and⟧
+⟦⟧ ⟦ more text.⟧ ⟦⟧
+⟦⟧ ⟦  text.⟧⟦
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[68, 136), s=3:5, u=6:8, t=6:8, l=75, sz=14, na=10: [68, 100), a:'\n', [100), a:2x' ', [100, 111), a:' ', [111), a:'\n', [111), a:2x' ', [111, 134), [135, 136), a:'\n', [136) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 5) options(margin[34], insert-space, restore-tracked-spaces, explicit-links-at-start, image-links-at-start, show-ranges)
+⟦* Paragraph with hard break and more text. [Test](test) text.
+
+1. ⟧Paragraph with soft break and more text. ⦙ text.
+⟦ ⟧with lazy continuation so we can attempt to duplicate md nav.
+
+.
+Paragraph with soft break and more
+text. ⦙
+ text. with lazy
+continuation so we can attempt to
+duplicate md nav.
+
+---- Tracked Offsets ---------------------------------------------------
+[0]: {112 1|0 si -> 41}
+
+---- Ranges ------------------------------------------------------------
+⟦Paragraph with soft break and more⟧
+⟦⟧⟦text.⟧ ⟦⟧
+⟦⟧⟦ text. ⟧⟦with lazy⟧
+⟦⟧⟦continuation so we can attempt to⟧
+⟦⟧⟦duplicate md nav.
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[71, 202), s=1:1, u=6:6, t=6:6, l=128, sz=18, na=12: [71, 105), a:'\n', [105), [106, 111), a:' ', [111), a:'\n', [111), [112, 135), [140, 149), a:'\n', [149), [150, 183), a:'\n', [183), [184, 202), a:'\n', [202) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 6) options(margin[66], restore-tracked-spaces, insert-space, explicit-links-at-start, image-links-at-start, show-ranges)
+Add: configuration for repeated.
+ ⦙[simLink](simLink.md)
+.
+Add: configuration for repeated. ⦙
+[simLink](simLink.md)
+---- Tracked Offsets ---------------------------------------------------
+[0]: {34 1|0 si -> 33}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated.⟧ ⟦
+⟧⟦[simLink](simLink.md)⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 55), s=1:1, u=2:2, t=2:2, l=56, sz=6, na=5: [0, 32), a:' ', [32, 33), [34, 55), a:'\n', [55) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 7) options(margin[66], restore-tracked-spaces, insert-space, explicit-links-at-start, image-links-at-start, show-ranges)
+Add: configuration for repeated.
+⦙[simLink](simLink.md)
+.
+Add: configuration for repeated. ⦙
+[simLink](simLink.md)
+---- Tracked Offsets ---------------------------------------------------
+[0]: {33 0|0 si -> 33}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated.⟧ ⟦
+[simLink](simLink.md)⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 54), s=1:1, u=2:2, t=2:2, l=56, sz=5, na=4: [0, 32), a:' ', [32, 54), a:'\n', [54) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 8) options(margin[66], restore-tracked-spaces, insert-char, explicit-links-at-start, image-links-at-start, show-ranges)
+Add: configuration for repeated.
+t⦙[simLink](simLink.md)
+.
+Add: configuration for repeated. t⦙
+[simLink](simLink.md)
+---- Tracked Offsets ---------------------------------------------------
+[0]: {34 0|0 i -> 34}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated.⟧ ⟦t⟧
+⟦[simLink](simLink.md)⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 55), s=1:1, u=3:3, t=3:3, l=57, sz=7, na=6: [0, 32), a:' ', [33, 34), a:'\n', [34, 55), a:'\n', [55) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 9) options(margin[30], show-ranges)
+* Paragraph with hard break and more text. [Test](test) text.
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break
+ and more text. [Test](test)
+ text.
+
+1. Paragraph with soft break
+ and more text.
+  text.
+
+---- Ranges ------------------------------------------------------------
+⟦* Paragraph with hard break⟧
+⟦⟧ ⟦ and more text. [Test](test)⟧
+⟦⟧ ⟦ text.⟧⟦
+⟧⟦
+1. Paragraph with soft break⟧
+⟦⟧ ⟦ and more text.⟧
+⟦⟧ ⟦  text.⟧⟦
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 133), s=4:6, u=9:11, t=9:11, l=138, sz=22, na=17: [0, 27), a:'\n', [27), a:' ', [27, 55), a:'\n', [55), a:' ', [55, 61), [62, 63), [67, 96), a:'\n', [96), a:2x' ', [96, 111), a:'\n', [111), a:2x' ', [111, 131), [132, 133), a:'\n', [133) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 10) options(margin[30], image-links-at-start, show-ranges)
+* Paragraph with hard break and more text. [Test](test) text.
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break
+ and more text. [Test](test)
+ text.
+
+1. Paragraph with soft break
+ and more text.
+  text.
+
+---- Ranges ------------------------------------------------------------
+⟦* Paragraph with hard break⟧
+⟦⟧ ⟦ and more text. [Test](test)⟧
+⟦⟧ ⟦ text.⟧⟦
+⟧⟦
+1. Paragraph with soft break⟧
+⟦⟧ ⟦ and more text.⟧
+⟦⟧ ⟦  text.⟧⟦
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 133), s=4:6, u=9:11, t=9:11, l=138, sz=22, na=17: [0, 27), a:'\n', [27), a:' ', [27, 55), a:'\n', [55), a:' ', [55, 61), [62, 63), [67, 96), a:'\n', [96), a:2x' ', [96, 111), a:'\n', [111), a:2x' ', [111, 131), [132, 133), a:'\n', [133) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Links: 11) options(margin[72])
+* [#697, Autoscroll from source does not work in simplified structure view]
+.
+* [#697, Autoscroll from source does not work in simplified structure view]
+
+````````````````````````````````
+
+
+### Images
+
+
+```````````````````````````````` example(Wrap - Images: 1) options(margin[72], multi-line-image-url, show-ranges)
+
+.
+
+---- Ranges ------------------------------------------------------------
+⟦⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 538), s=0:0, u=1:1, t=1:1, l=539, sz=3, na=2: [0, 538), a:'\n', [538) }
+.
+Document[0, 538]
+ Paragraph[0, 538]
+ Image[0, 538] textOpen:[0, 2, "!["] text:[2, 5, "alt"] textClose:[5, 6, "]"] linkOpen:[6, 7, "("] url:[7, 30, "http://g.gravizo.com/g?"] pageRef:[7, 30, "http://g.gravizo.com/g?"] urlContent:[31, 515, "digraph G {\n aize =\"4,4\";\n main [shape=box];\n main -> parse [weight=8];\n parse -> execute;\n main -> init [style=dotted];\n main -> testing [style=dashed];\n testing -> make_string;\n main -> cleanupMore;\n execute -> { make_string; printf }\n init -> make_string;\n edge [color=red];\n main -> printf [style=bold,label=\"100 times\"];\n make_string [label=\"make a string\"];\n node [shape=box,style=fill≤ed,color=\".7 .3 1.0\"];\n execute -> compares;\n}\n"] titleOpen:[515, 516, "\""] title:[516, 536, "title works three!!!"] titleClose:[536, 537, "\""] linkClose:[537, 538, ")"]
+ Text[2, 5] chars:[2, 5, "alt"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Images: 2) options(margin[72], multi-line-image-url)
+> 
+.
+> 
+
+````````````````````````````````
+
+
+### Delete Indent
+
+delete space to previous non-blank
+
+```````````````````````````````` example(Wrap - Delete Indent: 1) options(margin[96], delete-space, restore-tracked-spaces, first-prefix[* [ ] ], prefix[ ], show-ranges)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟦ ⟧⦙keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the
+ need⦙keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {147 >< 6|0 sd -> 102}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the⟧
+⟦⟧ ⟦ need⟧⟦keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 167), s=1:8, u=4:13, t=4:13, l=123, sz=10, na=7: [50), a:'* [ ] ', [50, 135), a:'\n', [135), a:5x' ', [135, 140), [147, 167), a:'\n', [167) }
+````````````````````````````````
+
+
+Should not preserve space since there was more than one in middle of paragraph
+
+```````````````````````````````` example(Wrap - Delete Indent: 2) options(margin[96], delete-space, restore-tracked-spaces, first-prefix[* [ ] ], prefix[ ], show-ranges, explicit-links-at-start)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the
+ need ⦙[example.com](http://example.com) keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need⦙
+ [example.com](http://example.com) keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {147 1|0 sd -> 96}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the⟧⟦ need⟧
+⟦⟧ ⟦ [example.com](http://example.com) keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 201), s=1:8, u=4:13, t=4:13, l=158, sz=10, na=7: [50), a:'* [ ] ', [50, 135), [141, 146), a:'\n', [146), a:5x' ', [146, 201), a:'\n', [201) }
+````````````````````````````````
+
+
+Should preserve space since there was a non-space char in middle
+
+```````````````````````````````` example(Wrap - Delete Indent: 3) options(margin[96], delete-char, restore-tracked-spaces, first-prefix[* [ ] ], prefix[ ], show-ranges, explicit-links-at-start)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the
+ need ⦙[example.com](http://example.com) keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙
+ [example.com](http://example.com) keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {147 1|0 d -> 97}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the⟧⟦ need⟧ ⟦⟧
+⟦⟧ ⟦ [example.com](http://example.com) keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 201), s=2:9, u=5:14, t=5:14, l=159, sz=12, na=8: [50), a:'* [ ] ', [50, 135), [141, 146), a:' ', [146), a:'\n', [146), a:5x' ', [146, 201), a:'\n', [201) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Delete Indent: 4) options(margin[96], delete-space, restore-tracked-spaces, first-prefix[* [ ] ], prefix[ ], show-ranges, explicit-links-at-start)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the
+ need⦙[example.com](http://example.com) keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need⦙
+ [example.com](http://example.com) keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {146 0|0 sd -> 96}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the⟧⟦ need⟧
+⟦⟧ ⟦[example.com](http://example.com) keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 200), s=1:9, u=4:14, t=4:14, l=158, sz=10, na=7: [50), a:'* [ ] ', [50, 135), [141, 146), a:'\n', [146), a:6x' ', [146, 200), a:'\n', [200) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Delete Indent: 5) options(margin[96], delete-space, restore-tracked-spaces, first-prefix[* [ ] ], prefix[ ], show-ranges, explicit-links-at-start)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the
+ ⦙[example.com](http://example.com) keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the⦙
+ [example.com](http://example.com) keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {142 6|0 sd -> 91}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the
+ [example.com](http://example.com) keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 196), s=0:3, u=2:7, t=2:7, l=153, sz=5, na=3: [50), a:'* [ ] ', [50, 196), a:'\n', [196) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Delete Indent: 6) options(margin[96], delete-char, restore-tracked-spaces, first-prefix[* [ ] ], prefix[ ], show-ranges)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟦ ⟧⦙ keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙
+ keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {147 6|1 d -> 97}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the need⟧ ⟦
+ ⟧⟦ keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 168), s=1:4, u=3:8, t=3:8, l=125, sz=8, na=6: [50), a:'* [ ] ', [50, 140), a:' ', [140, 144), [145, 168), a:'\n', [168) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Delete Indent: 7) options(margin[96], delete-space, restore-tracked-spaces, first-prefix[* [ ] ], prefix[ ], show-ranges)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟦ ⟧keep duplicate code.
+⟦ ⟧⦙keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ keep duplicate code.⦙keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {174 >< 6|0 sd -> 123}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ keep duplicate code.⟧⟦keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 194), s=0:3, u=2:7, t=2:7, l=144, sz=6, na=4: [50), a:'* [ ] ', [50, 167), [174, 194), a:'\n', [194) }
+````````````````````````````````
+
+
+### Restore Spaces
+
+```````````````````````````````` example(Wrap - Restore Spaces: 1) options(margin[66], restore-tracked-spaces)
+⟦ ⟧Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧would be treated equivalent ⦙ to task item marker prefix. That way
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
+.
+Add: configuration for repeated prefixes in items, which would `be
+\#2` copied when adding/splitting an item. In other words they
+would be treated equivalent ⦙ to task item marker prefix. That way
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 2) options(margin[96], insert-space, restore-tracked-spaces, first-prefix[* [ ] ], prefix[ ], show-ranges)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟦ ⟧⦙to keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ ⦙to keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {147 6|0 si -> 103}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ to keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 170), s=0:3, u=2:7, t=2:7, l=127, sz=5, na=3: [50), a:'* [ ] ', [50, 170), a:'\n', [170) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 3) options(margin[29], insert-space, restore-tracked-spaces, explicit-links-at-start, image-links-at-start, show-ranges)
+ ⦙text should wrap onto the next line at right margin of 30
+.
+⦙text should wrap onto the
+next line at right margin of
+30
+---- Tracked Offsets ---------------------------------------------------
+[0]: {1 1|0 si -> 0}
+
+---- Ranges ------------------------------------------------------------
+⟦text should wrap onto the⟧
+⟦⟧⟦next line at right margin of⟧
+⟦⟧⟦30⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[1, 58), s=0:0, u=3:3, t=3:3, l=58, sz=9, na=6: [1, 26), a:'\n', [26), [27, 55), a:'\n', [55), [56, 58), a:'\n', [58) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 4) options(margin[66], restore-tracked-spaces, explicit-links-at-start, image-links-at-start, show-ranges)
+Add: configuration for repeated. ⦙ [simLink](simLink.md)
+.
+Add: configuration for repeated. ⦙
+[simLink](simLink.md)
+---- Tracked Offsets ---------------------------------------------------
+[0]: {33 1|1 -> 33}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated.⟧ ⟦⟧
+⟦⟧⟦[simLink](simLink.md)⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 55), s=1:1, u=3:3, t=3:3, l=56, sz=8, na=5: [0, 32), a:' ', [32), a:'\n', [32), [34, 55), a:'\n', [55) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 5) options(margin[96], insert-char, restore-tracked-spaces, first-prefix[* ], prefix[ ], show-ranges)
+⟦## Some Heading
+
+Text to shift offset
+
+* ⟧Fix: Jekyll `{% include "" %}` completions would not work unless there was an `.html`
+⟦ ⟧extension between the strings. a;lsdfj ladsfj dlsf; jlasdfj l;asdfj lads;fj lasdfj l;dsaj fladd⦙
+⟦ ⟧asdfasfdsaffdsa
+.
+* Fix: Jekyll `{% include "" %}` completions would not work unless there was an `.html`
+ extension between the strings. a;lsdfj ladsfj dlsf; jlasdfj l;asdfj lads;fj lasdfj l;dsaj
+ fladd⦙ asdfasfdsaffdsa
+---- Tracked Offsets ---------------------------------------------------
+[0]: {233 0|0 i -> 187}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* ⟦Fix: Jekyll `{% include "" %}` completions would not work unless there was an `.html`
+ extension between the strings. a;lsdfj ladsfj dlsf; jlasdfj l;asdfj lads;fj lasdfj l;dsaj⟧
+⟦⟧ ⟦ fladd⟧⟦ asdfasfdsaffdsa⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 251), s=1:2, u=4:5, t=4:5, l=204, sz=10, na=7: [50), a:'* ', [50, 227), a:'\n', [227), a:' ', [227, 233), [235, 251), a:'\n', [251) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 6) options(margin[96], insert-space, restore-tracked-spaces, explicit-links-at-start, image-links-at-start, show-ranges)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+⟧* Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line elements. ⦙
+.
+* Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line
+ elements. ⦙
+
+---- Tracked Offsets ---------------------------------------------------
+[0]: {151 1|0 si -> 109}
+
+---- Ranges ------------------------------------------------------------
+⟦* Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line⟧
+⟦⟧ ⟦ elements.⟧ ⟦⟧
+⟦⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[44, 150), s=2:2, u=5:5, t=5:5, l=111, sz=11, na=7: [44, 140), a:'\n', [140), a:' ', [140, 150), a:' ', [150), a:'\n', [150), a:'\n', [150) }
+````````````````````````````````
+
+
+Should preserve space at end of line
+
+```````````````````````````````` example(Wrap - Restore Spaces: 7) options(margin[96], delete-char, first-prefix[* [ ] ], restore-tracked-spaces, explicit-links-at-start, image-links-at-start, show-ranges)
+⟦* [ ] ⟧Add: validation to `Formatter.render` for ⦙
+.
+* [ ] Add: validation to `Formatter.render` for ⦙
+---- Tracked Offsets ---------------------------------------------------
+[0]: {48 1|0 d -> 48}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Add: validation to `Formatter.render` for⟧ ⟦⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[6, 47), s=1:4, u=3:8, t=3:8, l=49, sz=7, na=4: [6), a:'* [ ] ', [6, 47), a:' ', [47), a:'\n', [47) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 8) options(margin[96], insert-char, first-prefix[* ], prefix[], show-ranges, restore-tracked-spaces)
+⟦* ⟧Fix: for #651, Drop image with dialog issues alsdf jals;df jl;as dfjl;saj fdlaskjdf ;ls adfd
+⟦ ⟧d⦙as this is the end.
+
+.
+* Fix: for #651, Drop image with dialog issues alsdf jals;df jl;as dfjl;saj fdlaskjdf ;ls adfd
+d⦙as this is the end.
+
+---- Tracked Offsets ---------------------------------------------------
+[0]: {100 0|0 i -> 96}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* ⟦Fix: for #651, Drop image with dialog issues alsdf jals;df jl;as dfjl;saj fdlaskjdf ;ls adfd⟧⟦
+⟧⟦das this is the end.⟧⟦
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[2, 121), s=0:1, u=2:3, t=2:3, l=117, sz=8, na=6: [2), a:'* ', [2, 94), [95, 96), [99, 119), [120, 121), a:'\n', [121) }
+````````````````````````````````
+
+
+Should not splice or move caret to previous line
+
+```````````````````````````````` example(Wrap - Restore Spaces: 9) options(margin[96], delete-char, first-prefix[* ], prefix[], show-ranges, restore-tracked-spaces)
+⟦* ⟧Fix: for #651, Drop image with dialog issues alsdf jals;df jl;as dfjl;saj fdlaskjdf ;ls adfd
+⟦ ⟧⦙as this is the end.
+
+.
+* Fix: for #651, Drop image with dialog issues alsdf jals;df jl;as dfjl;saj fdlaskjdf ;ls adfd
+⦙as this is the end.
+
+---- Tracked Offsets ---------------------------------------------------
+[0]: {99 3|0 d -> 95}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* ⟦Fix: for #651, Drop image with dialog issues alsdf jals;df jl;as dfjl;saj fdlaskjdf ;ls adfd⟧⟦
+⟧⟦as this is the end.⟧⟦
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[2, 120), s=0:1, u=2:3, t=2:3, l=116, sz=8, na=6: [2), a:'* ', [2, 94), [95, 96), [99, 118), [119, 120), a:'\n', [120) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 10) options(margin[31])
+* Paragraph with hard break ⦙and more text. [Test](test) text.
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break ⦙and
+ more text. [Test](test) text.
+
+1. Paragraph with soft break
+ and more text. 
+ text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 11) options(margin[31])
+* Paragraph with hard break⦙ and more text. [Test](test) text.
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break⦙ and
+ more text. [Test](test) text.
+
+1. Paragraph with soft break
+ and more text. 
+ text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 12) options(margin[31])
+* Paragraph with hard break and more text. [Test](test) text.
+
+some text
+
+1. Paragraph with soft break ⦙and more text.  text.
+
+.
+* Paragraph with hard break and
+ more text. [Test](test) text.
+
+some text
+
+1. Paragraph with soft break
+ ⦙and more text. 
+ text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 13) options(margin[31])
+* Paragraph with hard break and more text. [Test](test) text.
+
+1. Paragraph with soft break⦙ and more text.  text.
+
+.
+* Paragraph with hard break and
+ more text. [Test](test) text.
+
+1. Paragraph with soft break⦙
+ and more text. 
+ text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 14) options(margin[31], explicit-links-at-start)
+* Paragraph with hard break and more text.⦙ [Test](test) text.
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break and
+ more text.⦙
+ [Test](test) text.
+
+1. Paragraph with soft break
+ and more text. 
+ text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 15) options(margin[31], explicit-links-at-start, image-links-at-start)
+* Paragraph with hard break and more text.⦙ [Test](test) text.
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break and
+ more text.⦙
+ [Test](test) text.
+
+1. Paragraph with soft break
+ and more text.
+  text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 16) options(margin[31], explicit-links-at-start, image-links-at-start)
+* Paragraph with hard break and more text. ⦙[Test](test) text.
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break and
+ more text.
+ ⦙[Test](test) text.
+
+1. Paragraph with soft break
+ and more text.
+  text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 17) options(margin[31], explicit-links-at-start, image-links-at-start)
+* Paragraph with hard break and more text. [Test](test) text.⦙
+
+1. Paragraph with soft break and more text.  text.
+
+.
+* Paragraph with hard break and
+ more text.
+ [Test](test) text.⦙
+
+1. Paragraph with soft break
+ and more text.
+  text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 18) options(margin[31], explicit-links-at-start, image-links-at-start)
+* Paragraph with hard break and more text. [Test](test) text.
+
+1. Paragraph with soft break and more text.⦙  text.
+
+.
+* Paragraph with hard break and
+ more text.
+ [Test](test) text.
+
+1. Paragraph with soft break
+ and more text.⦙
+  text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 19) options(margin[31], explicit-links-at-start, image-links-at-start)
+* Paragraph with hard break and more text. [Test](test) text.
+
+1. Paragraph with soft break and more text. ⦙ text.
+
+.
+* Paragraph with hard break and
+ more text.
+ [Test](test) text.
+
+1. Paragraph with soft break
+ and more text.
+ ⦙ text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 20) options(margin[31], explicit-links-at-start, image-links-at-start)
+* Paragraph with hard break and more text. [Test](test) text.
+
+1. Paragraph with soft break and more text.  text.⦙
+
+.
+* Paragraph with hard break and
+ more text.
+ [Test](test) text.
+
+1. Paragraph with soft break
+ and more text.
+  text.⦙
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 21) options(margin[31], explicit-links-at-start, image-links-at-start)
+* Paragraph with hard break and⦙ ⦙more text.⦙ ⦙[Test](test) text.⦙
+
+1. Paragraph with soft break⦙ ⦙and more text.⦙ ⦙ text.⦙
+
+.
+* Paragraph with hard break and⦙
+ ⦙more text.⦙
+ ⦙[Test](test) text.⦙
+
+1. Paragraph with soft break⦙
+ ⦙and more text.⦙
+ ⦙ text.⦙
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 22) options(margin[31], explicit-links-at-start, image-links-at-start)
+⦙* Paragraph with hard break and more text. [Test](test) text.
+
+.
+⦙* Paragraph with hard break and
+ more text.
+ [Test](test) text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 23) options(margin[31], explicit-links-at-start, image-links-at-start)
+*⦙ Paragraph with hard break and more text. [Test](test) text.
+
+.
+*⦙ Paragraph with hard break and
+ more text.
+ [Test](test) text.
+
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 24) options(margin[31], explicit-links-at-start, image-links-at-start, show-ranges)
+⦙*⦙ ⦙Paragraph with hard break and⦙ ⦙more text.⦙ ⦙[Test](test) text.⦙
+
+⦙1⦙.⦙ ⦙Paragraph with soft break⦙ ⦙and more text.⦙ ⦙ text.⦙
+
+.
+⦙*⦙ ⦙Paragraph with hard break and⦙
+ ⦙more text.⦙
+ ⦙[Test](test) text.⦙
+
+⦙1⦙.⦙ ⦙Paragraph with soft break⦙
+ ⦙and more text.⦙
+ ⦙ text.⦙
+
+---- Tracked Offsets ---------------------------------------------------
+[0]: {0 0|0 -> 0}
+[1]: {1 0|1 -> 1}
+[2]: {2 1|0 -> 2}
+[3]: {31 0|1 -> 31}
+[4]: {32 1|0 -> 34}
+[5]: {42 0|1 -> 44}
+[6]: {43 1|0 -> 47}
+[7]: {61 0|1 -> 65}
+[8]: {68 0|0 -> 67}
+[9]: {69 0|0 -> 68}
+[10]: {70 0|1 -> 69}
+[11]: {71 1|0 -> 70}
+[12]: {96 0|1 -> 95}
+[13]: {97 1|0 -> 99}
+[14]: {111 0|1 -> 113}
+[15]: {112 1|0 -> 117}
+[16]: {131 0|1 -> 136}
+
+---- Ranges ------------------------------------------------------------
+⟦* Paragraph with hard break and⟧
+⟦⟧ ⟦ more text.⟧
+⟦⟧ ⟦ [Test](test) text.⟧⟦
+⟧⟦
+1. Paragraph with soft break⟧
+⟦⟧ ⟦ and more text.⟧
+⟦⟧ ⟦  text.⟧⟦
+⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 133), s=4:6, u=9:11, t=9:11, l=138, sz=22, na=17: [0, 31), a:'\n', [31), a:' ', [31, 42), a:'\n', [42), a:' ', [42, 61), [62, 63), [67, 96), a:'\n', [96), a:2x' ', [96, 111), a:'\n', [111), a:2x' ', [111, 131), [132, 133), a:'\n', [133) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 25) options(margin[66], restore-tracked-spaces, show-ranges)
+⟦ ⟧configuration. ⦙
+.
+configuration. ⦙
+---- Tracked Offsets ---------------------------------------------------
+[0]: {21 3|2 -> 17}
+
+---- Ranges ------------------------------------------------------------
+⟦configuration.⟧ ⟦⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[4, 18), s=1:3, u=2:4, t=2:4, l=18, sz=5, na=3: [4, 18), a:3x' ', [18), a:'\n', [18) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 26) options(margin[66], restore-tracked-spaces, show-ranges)
+Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧would be treated equivalent to task item marker prefix. That way
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙
+.
+Add: configuration for repeated prefixes in items, which would `be
+\#2` copied when adding/splitting an item. In other words they
+would be treated equivalent to task item marker prefix. That way
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied. ⦙
+---- Tracked Offsets ---------------------------------------------------
+[0]: {300 3|2 -> 293}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦⟧\⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent to task item marker prefix. That way
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦⟧⟦would be automatically copied.⟧ ⟦⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 297), s=1:3, u=5:7, t=5:7, l=294, sz=14, na=10: [0, 66), a:'\n', [66), a:'\', [67, 129), [133, 198), [202, 266), a:'\n', [266), [267, 297), a:3x' ', [297), a:'\n', [297) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 27) options(margin[66], restore-tracked-spaces, show-ranges)
+Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧⦙would be treated equivalent to task item marker prefix. That way
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙
+.
+Add: configuration for repeated prefixes in items, which would `be
+\#2` copied when adding/splitting an item. In other words they
+⦙would be treated equivalent to task item marker prefix. That way
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied. ⦙
+---- Tracked Offsets ---------------------------------------------------
+[0]: {133 4|0 -> 130}
+[1]: {300 3|2 -> 293}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦⟧\⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent to task item marker prefix. That way
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦⟧⟦would be automatically copied.⟧ ⟦⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 297), s=1:3, u=5:7, t=5:7, l=294, sz=14, na=10: [0, 66), a:'\n', [66), a:'\', [67, 129), [133, 198), [202, 266), a:'\n', [266), [267, 297), a:3x' ', [297), a:'\n', [297) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 28) options(margin[66], restore-tracked-spaces, show-ranges)
+Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧⦙would be treated equivalent to task item marker prefix. That way
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙ ⦙
+.
+Add: configuration for repeated prefixes in items, which would `be
+\#2` copied when adding/splitting an item. In other words they
+⦙would be treated equivalent to task item marker prefix. That way
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied. ⦙ ⦙
+---- Tracked Offsets ---------------------------------------------------
+[0]: {133 4|0 -> 130}
+[1]: {300 3|6 -> 293}
+[2]: {303 6|3 -> 296}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦⟧\⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent to task item marker prefix. That way
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦⟧⟦would be automatically copied.⟧ ⟦⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 297), s=1:6, u=5:10, t=5:10, l=297, sz=14, na=10: [0, 66), a:'\n', [66), a:'\', [67, 129), [133, 198), [202, 266), a:'\n', [266), [267, 297), a:6x' ', [297), a:'\n', [297) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 29) options(margin[66], restore-tracked-spaces, show-ranges)
+Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧would be treated equivalent to task item marker prefix. That way ⦙
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
+.
+Add: configuration for repeated prefixes in items, which would `be
+\#2` copied when adding/splitting an item. In other words they
+would be treated equivalent to task item marker prefix. That way ⦙
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {199 2|0 -> 196}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦⟧\⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent to task item marker prefix. That way⟧ ⟦⟧⟦
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦⟧⟦would be automatically copied.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 299), s=1:2, u=5:6, t=5:6, l=293, sz=15, na=11: [0, 66), a:'\n', [66), a:'\', [67, 129), [133, 197), a:2x' ', [197), [199, 200), [204, 268), a:'\n', [268), [269, 299), a:'\n', [299) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 30) options(margin[66], restore-tracked-spaces, show-ranges)
+Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧⦙would be treated equivalent to task item marker prefix. That way ⦙
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied. ⦙ ⦙
+.
+Add: configuration for repeated prefixes in items, which would `be
+\#2` copied when adding/splitting an item. In other words they
+⦙would be treated equivalent to task item marker prefix. That way ⦙
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied. ⦙ ⦙
+---- Tracked Offsets ---------------------------------------------------
+[0]: {133 4|0 -> 130}
+[1]: {199 2|0 -> 196}
+[2]: {302 3|6 -> 295}
+[3]: {305 6|3 -> 298}
+
+---- Ranges ------------------------------------------------------------
+⟦Add: configuration for repeated prefixes in items, which would `be⟧
+⟦⟧\⟦#2` copied when adding/splitting an item. In other words they
+⟧⟦would be treated equivalent to task item marker prefix. That way⟧ ⟦⟧⟦
+⟧⟦standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes⟧
+⟦⟧⟦would be automatically copied.⟧ ⟦⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 299), s=2:8, u=6:12, t=6:12, l=299, sz=17, na=12: [0, 66), a:'\n', [66), a:'\', [67, 129), [133, 197), a:2x' ', [197), [199, 200), [204, 268), a:'\n', [268), [269, 299), a:6x' ', [299), a:'\n', [299) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 31) options(margin[66], restore-tracked-spaces)
+ Add: configuration for repeated prefixes in items, which would `be #2` copied when adding/splitting an item. In other words they
+⟦ ⟧would be treated equivalent ⦙ to task item marker prefix. That way
+⟦ ⟧standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes would be automatically copied.
+.
+Add: configuration for repeated prefixes in items, which would `be
+\#2` copied when adding/splitting an item. In other words they
+would be treated equivalent ⦙ to task item marker prefix. That way
+standard: `Add: `, `Fix: `, `Break: ` and `Deprecate: ` prefixes
+would be automatically copied.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 32) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ])
+⟦* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟦ ⟧⦙ keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙
+ keep duplicate code.
+````````````````````````````````
+
+
+space and ` ` are equivalent
+
+```````````````````````````````` example(Wrap - Restore Spaces: 33) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ])
+⟦* [ ] ⟧Fix: [diagnostic/4671](https://vladsch.com/admin/diagnosticdetails/4626)
+ [467⦙ Stacktrace](test/data/diagnotics/4671/stacktrace.txt)
+.
+* [ ] Fix: [diagnostic/4671](https://vladsch.com/admin/diagnosticdetails/4626)
+ [467⦙ Stacktrace](test/data/diagnotics/4671/stacktrace.txt)
+````````````````````````````````
+
+
+space and ` ` are equivalent
+
+```````````````````````````````` example(Wrap - Restore Spaces: 34) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ], NO_FILE_EOL)
+⟦* [ ] ⟧Fix: [diagnostic/4671](https://vladsch.com/admin/diagnosticdetails/4626)
+ [467⦙
+.
+* [ ] Fix: [diagnostic/4671](https://vladsch.com/admin/diagnosticdetails/4626) [467⦙
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 35) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[ * [ ] ])
+⟦ * [ ] ⟧d⦙ classes contained in `util` directory to `misc` sub-directory and not have any
+⟦ ⟧dependencies on classes in other directories.
+.
+ * [ ] d⦙ classes contained in `util` directory to `misc` sub-directory and not have any
+ dependencies on classes in other directories.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 36) options(margin[96], delete-char, restore-tracked-spaces, prefix[ ], first-prefix[ * [ ] ])
+⟦ * [ ] ⟧d ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
+⟦ ⟧dependencies on classes in other directories.
+.
+ * [ ] d ⦙ classes contained in `util` directory to `misc` sub-directory and not have any
+ dependencies on classes in other directories.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 37) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ])
+⟦* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟦ ⟧ ⦙to keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ ⦙to keep duplicate code.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 38) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ])
+⟦* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙ to keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need ⦙
+ to keep duplicate code.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 39) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* ])
+⟦* ⟧Fix: conversion from Smart to based to extract more source information from segmented
+⟦ ⟧sequence ⦙and mapped sequence.
+.
+* Fix: conversion from Smart to based to extract more source information from segmented sequence
+ ⦙and mapped sequence.
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 40) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* ])
+⟦* ⟧Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line elements. ⦙
+.
+* Fix: wrap on typing caret adjustment on space after non-space and before keep at start of line
+ elements. ⦙
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 41) options(margin[96], insert-char, restore-tracked-spaces, prefix[ ], first-prefix[ * ], show-ranges)
+⟦## Markdown Navigator
+
+[TOC levels=3,4]: # "Version History"
+
+# Version History
+- [2.7.0.8 - Bug Fix & Enhancement Release](#2708---bug-fix--enhancement-release)
+- [2.7.0 - Bug Fix & Enhancement Release](#270---bug-fix--enhancement-release)
+- [2.6.0 - Bug Fix & Enhancement Release](#260---bug-fix--enhancement-release)
+- [2.5.4 - Bug Fix Release](#254---bug-fix-release)
+- [2.5.2 - Bug Fix & Enhancement Release](#252---bug-fix--enhancement-release)
+- [2.4.0 - Bug Fix & Enhancement Release](#240---bug-fix--enhancement-release)
+- [2.3.8 - Bug Fix Release](#238---bug-fix-release)
+- [2.3.7 - Bug Fix Release](#237---bug-fix-release)
+- [2.3.6 - Bug Fix & Enhancement Release](#236---bug-fix--enhancement-release)
+- [2.3.5 - Bug Fix & Enhancement Release](#235---bug-fix--enhancement-release)
+
+### 2.7.0.8 - Bug Fix & Enhancement Release
+
+* Fix: copy fixed utils from Arduino Support plugin.
+* item text https://
+* Fix: nasty bug introducing typing delay with preview enabled.
+* Fix: diagnostic-2012, kotlins NPE.
+* Fix: Paste Image: old crop settings out of bounds for new image caused exception
+* Fix: for #651, Drop image with dialog issues
+ * Spaces in file name were url encoded
+ * ⟧Copy dragging a file leaves its original directory instead of setting it to the closest or best⦙
+ guess based on the destination file. Should be the same
+ as if the image was pasted into the file. If the destination directory is
+ the same as the source then a new name should be generated to uniquify it.
+.
+ * Copy dragging a file leaves its original directory instead of setting it to the closest or
+ best⦙ guess based on the destination file. Should be the same as if the image was pasted into
+ the file. If the destination directory is the same as the source then a new name should be
+ generated to uniquify it.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {1293 0|1 i -> 103}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧ * ⟦Copy dragging a file leaves its original directory instead of setting it to the closest or⟧
+⟦⟧ ⟦ best ⟧⟦guess based on the destination file. Should be the same⟧⟦ as if the image was pasted into⟧
+⟦⟧ ⟦ the file. If the destination directory is⟧⟦ the same as the source then a new name should be⟧
+⟦⟧ ⟦ generated to uniquify it.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[1198, 1511), s=3:12, u=8:17, t=8:17, l=317, sz=20, na=15: [1198), a:' * ', [1198, 1288), a:'\n', [1288), a:3x' ', [1288, 1294), [1299, 1354), [1358, 1390), a:'\n', [1390), a:3x' ', [1390, 1432), [1436, 1485), a:'\n', [1485), a:3x' ', [1485, 1511), a:'\n', [1511) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 42) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ], show-ranges)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟦ ⟧⦙to keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ ⦙to keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {147 6|0 si -> 103}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ to keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 170), s=0:3, u=2:7, t=2:7, l=127, sz=5, na=3: [50), a:'* [ ] ', [50, 170), a:'\n', [170) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 43) options(margin[96], insert-space, restore-tracked-spaces, prefix[ ], first-prefix[* [ ] ], show-ranges)
+⟦### Next 2.9.0.227/2.9.7.227 - Dev Build
+
+* [ ] ⟧Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+⟦ ⟧ ⦙to keep duplicate code.
+.
+* [ ] Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ ⦙to keep duplicate code.
+---- Tracked Offsets ---------------------------------------------------
+[0]: {148 7|0 si -> 103}
+
+---- Ranges ------------------------------------------------------------
+⟦⟧* [ ] ⟦Fix: remove formatter and use flexmark formatter for document format to eliminate the need
+ ⟧⟦ to keep duplicate code.⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[50, 171), s=0:3, u=2:7, t=2:7, l=127, sz=6, na=4: [50), a:'* [ ] ', [50, 144), [145, 171), a:'\n', [171) }
+````````````````````````````````
+
+
+Unmatched after wrapping
+
+```````````````````````````````` example(Wrap - Restore Spaces: 44) options(margin[70], insert-space, restore-tracked-spaces, show-ranges)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated ⦙
+abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been
+updated ⦙ abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {74 1|0 si -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been⟧
+⟦⟧⟦updated ⟧ ⟦abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 104), s=1:1, u=3:3, t=3:3, l=105, sz=8, na=6: [0, 65), a:'\n', [65), [66, 74), a:' ', [75, 104), a:'\n', [104) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 45) options(margin[70], insert-space, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated ⦙
+ abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been
+updated ⦙ abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {74 1|0 si -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been⟧
+⟦⟧⟦updated ⟧⟦ abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 105), s=0:0, u=2:2, t=2:2, l=105, sz=7, na=5: [0, 65), a:'\n', [65), [66, 74), [75, 105), a:'\n', [105) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 46) options(margin[76], insert-space, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated
+ ⦙abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been updated
+⦙abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {75 1|0 si -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been updated
+⟧⟦abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 104), s=0:0, u=1:1, t=1:1, l=104, sz=4, na=3: [0, 74), [75, 104), a:'\n', [104) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 47) options(margin[76], insert-space, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated
+ ⦙abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been updated
+⦙abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {76 2|0 si -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been updated
+⟧⟦abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 105), s=0:0, u=1:1, t=1:1, l=104, sz=4, na=3: [0, 74), [76, 105), a:'\n', [105) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 48) options(margin[76], insert-space, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated ⦙abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been updated
+⦙abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {74 1|0 si -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been updated⟧
+⟦⟧⟦abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 103), s=0:0, u=2:2, t=2:2, l=104, sz=6, na=4: [0, 73), a:'\n', [73), [74, 103), a:'\n', [103) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 49) options(margin[76], insert-space, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated ⦙ abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been updated ⦙
+abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {74 1|1 si -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been updated⟧ ⟦⟧
+⟦⟧⟦abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 104), s=1:1, u=3:3, t=3:3, l=105, sz=8, na=5: [0, 73), a:' ', [73), a:'\n', [73), [75, 104), a:'\n', [104) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 50) options(margin[76], insert-space, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated
+ ⦙ abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been updated ⦙
+abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {75 1|1 si -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been updated⟧ ⟦
+⟧⟦abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 105), s=1:1, u=2:2, t=2:2, l=105, sz=6, na=5: [0, 73), a:' ', [73, 74), [76, 105), a:'\n', [105) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 51) options(margin[76], insert-space, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated
+ ⦙ abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been updated ⦙
+abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {76 2|1 si -> 75}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been updated⟧ ⟦
+⟧⟦abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 106), s=1:2, u=2:3, t=2:3, l=106, sz=6, na=5: [0, 73), a:2x' ', [73, 74), [77, 106), a:'\n', [106) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 52) options(margin[76], insert-char, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated.⦙ abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been updated.⦙
+abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {74 0|1 i -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been updated.⟧
+⟦⟧⟦abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 104), s=0:0, u=2:2, t=2:2, l=105, sz=6, na=4: [0, 74), a:'\n', [74), [75, 104), a:'\n', [104) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 53) options(margin[76], insert-char, restore-tracked-spaces, show-ranges, running-tests)
+Require `jclg/php-slack-bot` dev-master (the library has not been updated.⦙
+abandoned there is no release
+.
+Require `jclg/php-slack-bot` dev-master (the library has not been updated.⦙
+abandoned there is no release
+---- Tracked Offsets ---------------------------------------------------
+[0]: {74 0|0 i -> 74}
+
+---- Ranges ------------------------------------------------------------
+⟦Require `jclg/php-slack-bot` dev-master (the library has not been updated.
+abandoned there is no release⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 104), s=0:0, u=1:1, t=1:1, l=105, sz=3, na=2: [0, 104), a:'\n', [104) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 54) options(margin[76], insert-space, restore-tracked-spaces, show-ranges, running-tests)
+[B ⦙]
+.
+[B ⦙]
+---- Tracked Offsets ---------------------------------------------------
+[0]: {3 1|0 si -> 3}
+
+---- Ranges ------------------------------------------------------------
+⟦[B ]⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 4), s=0:0, u=1:1, t=1:1, l=5, sz=3, na=2: [0, 4), a:'\n', [4) }
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 55) options(margin[76], show-ranges)
+[B ]
+.
+[B]
+---- Ranges ------------------------------------------------------------
+⟦[B⟧⟦]⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 4), s=0:0, u=1:1, t=1:1, l=4, sz=4, na=3: [0, 2), [3, 4), a:'\n', [4) }
+.
+Document[0, 5]
+ Paragraph[0, 5]
+ LinkRef[0, 4] referenceOpen:[0, 1, "["] reference:[1, 2, "B"] referenceClose:[3, 4, "]"]
+ Text[1, 2] chars:[1, 2, "B"]
+````````````````````````````````
+
+
+```````````````````````````````` example(Wrap - Restore Spaces: 56) options(margin[76], restore-tracked-spaces, show-ranges)
+[B ⦙]
+.
+[B ⦙]
+---- Tracked Offsets ---------------------------------------------------
+[0]: {3 1|0 -> 3}
+
+---- Ranges ------------------------------------------------------------
+⟦[B ]⟧
+⟦⟧
+---- Segments ----------------------------------------------------------
+BasedSegmentBuilder{[0, 4), s=0:0, u=1:1, t=1:1, l=5, sz=3, na=2: [0, 4), a:'\n', [4) }
+````````````````````````````````
+
+
diff --git a/flexmark-docx-converter/flexmark-docx-converter.iml b/flexmark-docx-converter/flexmark-docx-converter.iml
index 0d485a411..5af30aac2 100644
--- a/flexmark-docx-converter/flexmark-docx-converter.iml
+++ b/flexmark-docx-converter/flexmark-docx-converter.iml
@@ -28,7 +28,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -42,12 +51,19 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/flexmark-docx-converter/pom.xml b/flexmark-docx-converter/pom.xml
index 1823d3d10..eb24ed444 100644
--- a/flexmark-docx-converter/pom.xml
+++ b/flexmark-docx-converter/pom.xml
@@ -5,7 +5,7 @@
com.vladsch.flexmark
flexmark-java
- 0.59.100
+ 0.64.8
flexmark-docx-converter
@@ -51,6 +51,10 @@
com.vladsch.flexmark
flexmark-ext-ins
+
+ com.vladsch.flexmark
+ flexmark-ext-jekyll-tag
+
com.vladsch.flexmark
flexmark-ext-superscript
@@ -92,15 +96,41 @@
flexmark-ext-autolink
test
+
+ org.apache.xmlgraphics
+ xmlgraphics-commons
+ 2.7
+
+
+ commons-io
+ commons-io
+
+
+
+
+ commons-io
+ commons-io
+ 2.11.0
+
org.docx4j
- docx4j-JAXB-Internal
- 8.1.2
+ docx4j-JAXB-ReferenceImpl
+ 11.4.9
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.20.0
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.20.0
- log4j
- log4j
- 1.2.17
+ org.apache.logging.log4j
+ log4j-1.2-api
+ 2.20.0
diff --git a/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRenderer.java b/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRenderer.java
index 396500b67..483844175 100644
--- a/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRenderer.java
+++ b/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRenderer.java
@@ -9,6 +9,7 @@
import com.vladsch.flexmark.ext.emoji.EmojiExtension;
import com.vladsch.flexmark.html.*;
import com.vladsch.flexmark.html.renderer.*;
+import com.vladsch.flexmark.util.ast.Document;
import com.vladsch.flexmark.util.ast.*;
import com.vladsch.flexmark.util.builder.BuilderBase;
import com.vladsch.flexmark.util.collection.SubClassingBag;
@@ -17,21 +18,25 @@
import com.vladsch.flexmark.util.data.DataKey;
import com.vladsch.flexmark.util.data.MutableDataHolder;
import com.vladsch.flexmark.util.data.ScopedDataSet;
-import com.vladsch.flexmark.util.dependency.FlatDependencyHandler;
+import com.vladsch.flexmark.util.dependency.DependencyResolver;
import com.vladsch.flexmark.util.html.Attributes;
+import com.vladsch.flexmark.util.html.MutableAttribute;
+import com.vladsch.flexmark.util.html.MutableAttributes;
import com.vladsch.flexmark.util.misc.Extension;
import com.vladsch.flexmark.util.sequence.Escaping;
import org.docx4j.Docx4J;
import org.docx4j.XmlUtils;
+import org.docx4j.docProps.custom.Properties;
+import org.docx4j.model.structure.PageDimensions;
+import org.docx4j.model.structure.PageSizePaper;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.exceptions.InvalidFormatException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.docx4j.openpackaging.parts.DocPropsCustomPart;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;
import org.docx4j.openpackaging.parts.WordprocessingML.StyleDefinitionsPart;
-import org.docx4j.wml.CTBookmark;
-import org.docx4j.wml.Numbering;
-import org.docx4j.wml.Styles;
+import org.docx4j.wml.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -44,102 +49,109 @@
*/
@SuppressWarnings("WeakerAccess")
public class DocxRenderer implements IRender {
- public static final DataKey STYLES_XML = new DataKey<>("STYLES_XML", getResourceString("/styles.xml"));
- public static final DataKey NUMBERING_XML = new DataKey<>("NUMBERING_XML", getResourceString("/numbering.xml"));
+ final public static DataKey STYLES_XML = new DataKey<>("STYLES_XML", getResourceString("/styles.xml"));
+ final public static DataKey NUMBERING_XML = new DataKey<>("NUMBERING_XML", getResourceString("/numbering.xml"));
- public static final DataKey RENDER_BODY_ONLY = new DataKey<>("RENDER_BODY_ONLY", false);
- public static final DataKey MAX_IMAGE_WIDTH = new DataKey<>("MAX_IMAGE_WIDTH", 0);
+ final public static DataKey RENDER_BODY_ONLY = new DataKey<>("RENDER_BODY_ONLY", false);
+ final public static DataKey MAX_IMAGE_WIDTH = new DataKey<>("MAX_IMAGE_WIDTH", 0);
- public static final DataKey DEFAULT_LINK_RESOLVER = new DataKey<>("DEFAULT_LINK_RESOLVER", true);
- public static final DataKey DOC_RELATIVE_URL = new DataKey<>("DOC_RELATIVE_URL", "");
- public static final DataKey DOC_ROOT_URL = new DataKey<>("DOC_ROOT_URL", "");
- public static final DataKey PREFIX_WWW_LINKS = new DataKey<>("PREFIX_WWW_LINKS", true);
+ final public static DataKey DEFAULT_LINK_RESOLVER = new DataKey<>("DEFAULT_LINK_RESOLVER", true);
+ final public static DataKey DOC_RELATIVE_URL = new DataKey<>("DOC_RELATIVE_URL", "");
+ final public static DataKey DOC_ROOT_URL = new DataKey<>("DOC_ROOT_URL", "");
+ final public static DataKey PREFIX_WWW_LINKS = new DataKey<>("PREFIX_WWW_LINKS", true);
+ final public static DataKey DEFAULT_CONTENT_RESOLVER = new DataKey<>("DEFAULT_CONTENT_RESOLVER", true);
// same keys, same function also available here for convenience
- public static final DataKey RECHECK_UNDEFINED_REFERENCES = HtmlRenderer.RECHECK_UNDEFINED_REFERENCES;
- public static final DataKey PERCENT_ENCODE_URLS = HtmlRenderer.PERCENT_ENCODE_URLS;
- public static final DataKey ESCAPE_HTML = HtmlRenderer.ESCAPE_HTML;
- public static final DataKey ESCAPE_HTML_BLOCKS = HtmlRenderer.ESCAPE_HTML_BLOCKS;
- public static final DataKey ESCAPE_HTML_COMMENT_BLOCKS = HtmlRenderer.ESCAPE_HTML_COMMENT_BLOCKS;
- public static final DataKey ESCAPE_INLINE_HTML = HtmlRenderer.ESCAPE_INLINE_HTML;
- public static final DataKey ESCAPE_INLINE_HTML_COMMENTS = HtmlRenderer.ESCAPE_INLINE_HTML_COMMENTS;
- public static final DataKey SUPPRESS_HTML = HtmlRenderer.SUPPRESS_HTML;
- public static final DataKey SUPPRESS_HTML_BLOCKS = HtmlRenderer.SUPPRESS_HTML_BLOCKS;
- public static final DataKey SUPPRESS_HTML_COMMENT_BLOCKS = HtmlRenderer.SUPPRESS_HTML_COMMENT_BLOCKS;
- public static final DataKey SUPPRESS_INLINE_HTML = HtmlRenderer.SUPPRESS_INLINE_HTML;
- public static final DataKey SUPPRESS_INLINE_HTML_COMMENTS = HtmlRenderer.SUPPRESS_INLINE_HTML_COMMENTS;
- public static final DataKey LINEBREAK_ON_INLINE_HTML_BR = new DataKey<>("LINEBREAK_ON_INLINE_HTML_BR", true);
- public static final DataKey TABLE_CAPTION_TO_PARAGRAPH = new DataKey<>("TABLE_CAPTION_TO_PARAGRAPH", true);
- public static final DataKey TABLE_CAPTION_BEFORE_TABLE = new DataKey<>("TABLE_CAPTION_BEFORE_TABLE", false);
- public static final DataKey TABLE_PREFERRED_WIDTH_PCT = new DataKey<>("TABLE_PREFERRED_WIDTH_PCT", 0);
- public static final DataKey TABLE_LEFT_INDENT = new DataKey<>("TABLE_LEFT_INDENT", 120);
- public static final DataKey TABLE_STYLE = new DataKey<>("TABLE_STYLE", "");
- public static final DataKey TOC_GENERATE = new DataKey<>("TOC_GENERATE", false);
- public static final DataKey TOC_INSTRUCTION = new DataKey<>("TOC_INSTRUCTION", "TOC \\o \"1-3\" \\h \\z \\u ");
- public static final DataKey LOG_IMAGE_PROCESSING = new DataKey<>("LOG_IMAGE_PROCESSING", false);
- public static final DataKey NO_CHARACTER_STYLES = new DataKey<>("NO_CHARACTER_STYLES", false);
- public static final DataKey CODE_HIGHLIGHT_SHADING = new DataKey<>("CODE_HIGHLIGHT_SHADING", "");
- public static final DataKey ERRORS_TO_STDERR = new DataKey<>("ERRORS_TO_STDERR", false);
- public static final DataKey ERROR_SOURCE_FILE = new DataKey<>("ERROR_SOURCE_FILE", "");
- public static final DataKey DOC_EMOJI_IMAGE_VERT_OFFSET = new DataKey<>("DOC_EMOJI_IMAGE_VERT_OFFSET", -0.10); // offset emoji images down by 10% of the line height, final value rounded to nearest pt so can create jumps in position
- public static final DataKey DOC_EMOJI_IMAGE_VERT_SIZE = new DataKey<>("DOC_EMOJI_IMAGE_VERT_SIZE", 0.9); // size of image as factor of line height range >0
- public static final DataKey FORM_CONTROLS = new DataKey<>("FORM_CONTROLS", ""); // enable form controls with name given by this key [name]{.type attributes}
+ final public static DataKey RECHECK_UNDEFINED_REFERENCES = HtmlRenderer.RECHECK_UNDEFINED_REFERENCES;
+ final public static DataKey PERCENT_ENCODE_URLS = HtmlRenderer.PERCENT_ENCODE_URLS;
+ final public static DataKey ESCAPE_HTML = HtmlRenderer.ESCAPE_HTML;
+ final public static DataKey ESCAPE_HTML_BLOCKS = HtmlRenderer.ESCAPE_HTML_BLOCKS;
+ final public static DataKey ESCAPE_HTML_COMMENT_BLOCKS = HtmlRenderer.ESCAPE_HTML_COMMENT_BLOCKS;
+ final public static DataKey ESCAPE_INLINE_HTML = HtmlRenderer.ESCAPE_INLINE_HTML;
+ final public static DataKey ESCAPE_INLINE_HTML_COMMENTS = HtmlRenderer.ESCAPE_INLINE_HTML_COMMENTS;
+ final public static DataKey SUPPRESS_HTML = HtmlRenderer.SUPPRESS_HTML;
+ final public static DataKey SUPPRESS_HTML_BLOCKS = HtmlRenderer.SUPPRESS_HTML_BLOCKS;
+ final public static DataKey SUPPRESS_HTML_COMMENT_BLOCKS = HtmlRenderer.SUPPRESS_HTML_COMMENT_BLOCKS;
+ final public static DataKey SUPPRESS_INLINE_HTML = HtmlRenderer.SUPPRESS_INLINE_HTML;
+ final public static DataKey SUPPRESS_INLINE_HTML_COMMENTS = HtmlRenderer.SUPPRESS_INLINE_HTML_COMMENTS;
+ final public static DataKey LINEBREAK_ON_INLINE_HTML_BR = new DataKey<>("LINEBREAK_ON_INLINE_HTML_BR", true);
+ final public static DataKey TABLE_CAPTION_TO_PARAGRAPH = new DataKey<>("TABLE_CAPTION_TO_PARAGRAPH", true);
+ final public static DataKey TABLE_CAPTION_BEFORE_TABLE = new DataKey<>("TABLE_CAPTION_BEFORE_TABLE", false);
+ final public static DataKey TABLE_PREFERRED_WIDTH_PCT = new DataKey<>("TABLE_PREFERRED_WIDTH_PCT", 0);
+ final public static DataKey TABLE_LEFT_INDENT = new DataKey<>("TABLE_LEFT_INDENT", 120);
+ final public static DataKey TABLE_STYLE = new DataKey<>("TABLE_STYLE", "");
+ final public static DataKey TOC_GENERATE = new DataKey<>("TOC_GENERATE", false);
+ final public static DataKey TOC_INSTRUCTION = new DataKey<>("TOC_INSTRUCTION", "TOC \\o \"1-3\" \\h \\z \\u ");
+ final public static DataKey LOG_IMAGE_PROCESSING = new DataKey<>("LOG_IMAGE_PROCESSING", false);
+ final public static DataKey NO_CHARACTER_STYLES = new DataKey<>("NO_CHARACTER_STYLES", false);
+ final public static DataKey CODE_HIGHLIGHT_SHADING = new DataKey<>("CODE_HIGHLIGHT_SHADING", "");
+ final public static DataKey ERRORS_TO_STDERR = new DataKey<>("ERRORS_TO_STDERR", false);
+ final public static DataKey ERROR_SOURCE_FILE = new DataKey<>("ERROR_SOURCE_FILE", "");
+ final public static DataKey DOC_EMOJI_IMAGE_VERT_OFFSET = new DataKey<>("DOC_EMOJI_IMAGE_VERT_OFFSET", -0.10); // offset emoji images down by 10% of the line height, final value rounded to nearest pt so can create jumps in position
+ final public static DataKey DOC_EMOJI_IMAGE_VERT_SIZE = new DataKey<>("DOC_EMOJI_IMAGE_VERT_SIZE", 0.9); // size of image as factor of line height range >0
+ final public static DataKey FORM_CONTROLS = new DataKey<>("FORM_CONTROLS", ""); // enable form controls with name given by this key [name]{.type attributes}
// for compatibility with HtmlIdGenerator these are placed here
- public static final DataKey HEADER_ID_GENERATOR_RESOLVE_DUPES = HtmlRenderer.HEADER_ID_GENERATOR_RESOLVE_DUPES;
- public static final DataKey HEADER_ID_GENERATOR_TO_DASH_CHARS = HtmlRenderer.HEADER_ID_GENERATOR_TO_DASH_CHARS;
- public static final DataKey HEADER_ID_GENERATOR_NO_DUPED_DASHES = HtmlRenderer.HEADER_ID_GENERATOR_NO_DUPED_DASHES;
- public static final DataKey RENDER_HEADER_ID = HtmlRenderer.RENDER_HEADER_ID;
- public static final DataKey LOCAL_HYPERLINK_SUFFIX = new DataKey<>("LOCAL_HYPERLINK_SUFFIX", "");
- public static final DataKey LOCAL_HYPERLINK_MISSING_HIGHLIGHT = new DataKey<>("LOCAL_HYPERLINK_MISSING_HIGHLIGHT", "red");
- public static final DataKey LOCAL_HYPERLINK_MISSING_FORMAT = new DataKey<>("LOCAL_HYPERLINK_MISSING_FORMAT", "Missing target id: #%s");
- //public static final DataKey FIRST_HEADING_ID_SUFFIX = new DataKey<>("FIRST_HEADING_ID_SUFFIX", "");
-
- public static final DataKey ASIDE_BLOCK_STYLE = new DataKey<>("ASIDE_BLOCK_STYLE", "AsideBlock");
- public static final DataKey BLOCK_QUOTE_STYLE = new DataKey<>("BLOCK_QUOTE_STYLE", "Quotations");
- public static final DataKey BOLD_STYLE = new DataKey<>("BOLD_STYLE", "StrongEmphasis");
- public static final DataKey DEFAULT_STYLE = new DataKey<>("DEFAULT_STYLE", "Normal");
- public static final DataKey ENDNOTE_ANCHOR_STYLE = new DataKey<>("ENDNOTE_ANCHOR_STYLE", "EndnoteReference");
- public static final DataKey FOOTER = new DataKey<>("FOOTER", "Footer");
- public static final DataKey FOOTNOTE_ANCHOR_STYLE = new DataKey<>("FOOTNOTE_ANCHOR_STYLE", "FootnoteReference");
- public static final DataKey FOOTNOTE_STYLE = new DataKey<>("FOOTNOTE_STYLE", "Footnote");
- public static final DataKey FOOTNOTE_TEXT = new DataKey<>("FOOTNOTE_TEXT", "FootnoteText");
- public static final DataKey HEADER = new DataKey<>("HEADER", "Header");
- public static final DataKey HEADING_1 = new DataKey<>("HEADING_1", "Heading1");
- public static final DataKey HEADING_2 = new DataKey<>("HEADING_2", "Heading2");
- public static final DataKey HEADING_3 = new DataKey<>("HEADING_3", "Heading3");
- public static final DataKey HEADING_4 = new DataKey<>("HEADING_4", "Heading4");
- public static final DataKey HEADING_5 = new DataKey<>("HEADING_5", "Heading5");
- public static final DataKey HEADING_6 = new DataKey<>("HEADING_6", "Heading6");
- public static final DataKey HORIZONTAL_LINE_STYLE = new DataKey<>("HORIZONTAL_LINE_STYLE", "HorizontalLine");
- public static final DataKey HYPERLINK_STYLE = new DataKey<>("HYPERLINK_STYLE", "Hyperlink");
- public static final DataKey INLINE_CODE_STYLE = new DataKey<>("INLINE_CODE_STYLE", "SourceText");
- public static final DataKey INS_STYLE = new DataKey<>("INS_STYLE", "Underlined");
- public static final DataKey ITALIC_STYLE = new DataKey<>("ITALIC_STYLE", "Emphasis");
- public static final DataKey LOOSE_PARAGRAPH_STYLE = new DataKey<>("LOOSE_PARAGRAPH_STYLE", "ParagraphTextBody");
- public static final DataKey PREFORMATTED_TEXT_STYLE = new DataKey<>("PREFORMATTED_TEXT_STYLE", "PreformattedText");
- public static final DataKey STRIKE_THROUGH_STYLE = new DataKey<>("STRIKE_THROUGH_STYLE", "Strikethrough");
- public static final DataKey SUBSCRIPT_STYLE = new DataKey<>("SUBSCRIPT_STYLE", "Subscript");
- public static final DataKey SUPERSCRIPT_STYLE = new DataKey<>("SUPERSCRIPT_STYLE", "Superscript");
- public static final DataKey TABLE_CAPTION = new DataKey<>("TABLE_CAPTION", "TableCaption");
- public static final DataKey TABLE_CONTENTS = new DataKey<>("TABLE_CONTENTS", "TableContents");
- public static final DataKey TABLE_GRID = new DataKey<>("TABLE_GRID", "TableGrid");
- public static final DataKey TABLE_HEADING = new DataKey<>("TABLE_HEADING", "TableHeading");
- public static final DataKey TIGHT_PARAGRAPH_STYLE = new DataKey<>("TIGHT_PARAGRAPH_STYLE", "BodyText");
-
- public static final DataKey DEFAULT_TEMPLATE_RESOURCE = new DataKey<>("TIGHT_PARAGRAPH_STYLE", "/empty.xml");
+ final public static DataKey HEADER_ID_GENERATOR_RESOLVE_DUPES = HtmlRenderer.HEADER_ID_GENERATOR_RESOLVE_DUPES;
+ final public static DataKey HEADER_ID_GENERATOR_TO_DASH_CHARS = HtmlRenderer.HEADER_ID_GENERATOR_TO_DASH_CHARS;
+ final public static DataKey HEADER_ID_GENERATOR_NO_DUPED_DASHES = HtmlRenderer.HEADER_ID_GENERATOR_NO_DUPED_DASHES;
+ final public static DataKey RENDER_HEADER_ID = HtmlRenderer.RENDER_HEADER_ID;
+ final public static DataKey HEADER_ID_GENERATOR_NON_DASH_CHARS = HtmlRenderer.HEADER_ID_GENERATOR_NON_DASH_CHARS;
+ final public static DataKey HEADER_ID_GENERATOR_NON_ASCII_TO_LOWERCASE = HtmlRenderer.HEADER_ID_GENERATOR_NON_ASCII_TO_LOWERCASE;
+ final public static DataKey HEADER_ID_REF_TEXT_TRIM_LEADING_SPACES = HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_LEADING_SPACES;
+ final public static DataKey HEADER_ID_REF_TEXT_TRIM_TRAILING_SPACES = HtmlRenderer.HEADER_ID_REF_TEXT_TRIM_TRAILING_SPACES;
+ final public static DataKey HEADER_ID_ADD_EMOJI_SHORTCUT = HtmlRenderer.HEADER_ID_ADD_EMOJI_SHORTCUT;
+ final public static DataKey LOCAL_HYPERLINK_SUFFIX = new DataKey<>("LOCAL_HYPERLINK_SUFFIX", "");
+ final public static DataKey LOCAL_HYPERLINK_MISSING_HIGHLIGHT = new DataKey<>("LOCAL_HYPERLINK_MISSING_HIGHLIGHT", "red");
+ final public static DataKey LOCAL_HYPERLINK_MISSING_FORMAT = new DataKey<>("LOCAL_HYPERLINK_MISSING_FORMAT", "Missing target id: #%s");
+
+ final public static DataKey ASIDE_BLOCK_STYLE = new DataKey<>("ASIDE_BLOCK_STYLE", "AsideBlock");
+ final public static DataKey BLOCK_QUOTE_STYLE = new DataKey<>("BLOCK_QUOTE_STYLE", "Quotations");
+ final public static DataKey BOLD_STYLE = new DataKey<>("BOLD_STYLE", "StrongEmphasis");
+ final public static DataKey DEFAULT_STYLE = new DataKey<>("DEFAULT_STYLE", "Normal");
+ final public static DataKey ENDNOTE_ANCHOR_STYLE = new DataKey<>("ENDNOTE_ANCHOR_STYLE", "EndnoteReference");
+ final public static DataKey FOOTER = new DataKey<>("FOOTER", "Footer");
+ final public static DataKey FOOTNOTE_ANCHOR_STYLE = new DataKey<>("FOOTNOTE_ANCHOR_STYLE", "FootnoteReference");
+ final public static DataKey FOOTNOTE_STYLE = new DataKey<>("FOOTNOTE_STYLE", "Footnote");
+ final public static DataKey FOOTNOTE_TEXT = new DataKey<>("FOOTNOTE_TEXT", "FootnoteText");
+ final public static DataKey HEADER = new DataKey<>("HEADER", "Header");
+ final public static DataKey HEADING_1 = new DataKey<>("HEADING_1", "Heading1");
+ final public static DataKey HEADING_2 = new DataKey<>("HEADING_2", "Heading2");
+ final public static DataKey HEADING_3 = new DataKey<>("HEADING_3", "Heading3");
+ final public static DataKey HEADING_4 = new DataKey<>("HEADING_4", "Heading4");
+ final public static DataKey HEADING_5 = new DataKey<>("HEADING_5", "Heading5");
+ final public static DataKey HEADING_6 = new DataKey<>("HEADING_6", "Heading6");
+ final public static DataKey HORIZONTAL_LINE_STYLE = new DataKey<>("HORIZONTAL_LINE_STYLE", "HorizontalLine");
+ final public static DataKey HYPERLINK_STYLE = new DataKey<>("HYPERLINK_STYLE", "Hyperlink");
+ final public static DataKey INLINE_CODE_STYLE = new DataKey<>("INLINE_CODE_STYLE", "SourceText");
+ final public static DataKey INS_STYLE = new DataKey<>("INS_STYLE", "Underlined");
+ final public static DataKey ITALIC_STYLE = new DataKey<>("ITALIC_STYLE", "Emphasis");
+ final public static DataKey LOOSE_PARAGRAPH_STYLE = new DataKey<>("LOOSE_PARAGRAPH_STYLE", "ParagraphTextBody");
+ final public static DataKey PREFORMATTED_TEXT_STYLE = new DataKey<>("PREFORMATTED_TEXT_STYLE", "PreformattedText");
+ final public static DataKey STRIKE_THROUGH_STYLE = new DataKey<>("STRIKE_THROUGH_STYLE", "Strikethrough");
+ final public static DataKey SUBSCRIPT_STYLE = new DataKey<>("SUBSCRIPT_STYLE", "Subscript");
+ final public static DataKey SUPERSCRIPT_STYLE = new DataKey<>("SUPERSCRIPT_STYLE", "Superscript");
+ final public static DataKey TABLE_CAPTION = new DataKey<>("TABLE_CAPTION", "TableCaption");
+ final public static DataKey TABLE_CONTENTS = new DataKey<>("TABLE_CONTENTS", "TableContents");
+ final public static DataKey TABLE_GRID = new DataKey<>("TABLE_GRID", "TableGrid");
+ final public static DataKey TABLE_HEADING = new DataKey<>("TABLE_HEADING", "TableHeading");
+ final public static DataKey TIGHT_PARAGRAPH_STYLE = new DataKey<>("TIGHT_PARAGRAPH_STYLE", "BodyText");
+
+ final public static DataKey DEFAULT_TEMPLATE_RESOURCE = new DataKey<>("TIGHT_PARAGRAPH_STYLE", "/empty.xml");
// Now Used. These are numbering styles
- public static final DataKey BULLET_LIST_STYLE = new DataKey<>("BULLET_LIST_STYLE", "BulletList");
- public static final DataKey NUMBERED_LIST_STYLE = new DataKey<>("NUMBERED_LIST_STYLE", "NumberedList");
+ final public static DataKey BULLET_LIST_STYLE = new DataKey<>("BULLET_LIST_STYLE", "BulletList");
+ final public static DataKey NUMBERED_LIST_STYLE = new DataKey<>("NUMBERED_LIST_STYLE", "NumberedList");
- public static final DataKey PARAGRAPH_BULLET_LIST_STYLE = new DataKey<>("PARAGRAPH_BULLET_LIST_STYLE", "ListBullet");
- public static final DataKey PARAGRAPH_NUMBERED_LIST_STYLE = new DataKey<>("PARAGRAPH_NUMBERED_LIST_STYLE", "ListNumber");
+ final public static DataKey PARAGRAPH_BULLET_LIST_STYLE = new DataKey<>("PARAGRAPH_BULLET_LIST_STYLE", "ListBullet");
+ final public static DataKey PARAGRAPH_NUMBERED_LIST_STYLE = new DataKey<>("PARAGRAPH_NUMBERED_LIST_STYLE", "ListNumber");
+ final public static DataKey PAGE_SIZE = new DataKey<>("PAGE_SIZE", ""); // NOTE: if not in PageSizePaper then will use default from the ML Package
+ final public static DataKey PAGE_LANDSCAPE = new DataKey<>("PAGE_LANDSCAPE", false); // NOTE: only used if page size is also defined
// internal stuff
- public static final String EMOJI_RESOURCE_PREFIX = "emoji:";
+ final public static String EMOJI_RESOURCE_PREFIX = "emoji:";
- public static final DataKey DOC_EMOJI_ROOT_IMAGE_PATH = new DataKey<>("DOC_EMOJI_ROOT_IMAGE_PATH", EMOJI_RESOURCE_PREFIX, options -> {
+ final public static DataKey DOC_EMOJI_ROOT_IMAGE_PATH = new DataKey<>("DOC_EMOJI_ROOT_IMAGE_PATH", EMOJI_RESOURCE_PREFIX, options -> {
if (options.contains(EmojiExtension.ROOT_IMAGE_PATH)) {
return EmojiExtension.ROOT_IMAGE_PATH.get(options);
}
@@ -147,11 +159,13 @@ public class DocxRenderer implements IRender {
// kludge it to use our resources
return EMOJI_RESOURCE_PREFIX;
});
+ final public static DataKey> CUSTOM_PROPERTIES = new DataKey<>("CUSTOM_PROPERTIES", Collections.emptyMap());
final List nodeFormatterFactories;
//final DocxRendererOptions rendererOptions;
- private final DataHolder options;
+ final private DataHolder options;
final List linkResolverFactories;
+ final List contentResolverFactories;
final List attributeProviderFactories;
final HeaderIdGeneratorFactory htmlIdGeneratorFactory;
@@ -165,8 +179,9 @@ public class DocxRenderer implements IRender {
// Add as last. This means clients can override the rendering of core nodes if they want.
this.nodeFormatterFactories.add(CoreNodeDocxRenderer::new);
- this.attributeProviderFactories = FlatDependencyHandler.computeDependencies(builder.attributeProviderFactories);
- this.linkResolverFactories = FlatDependencyHandler.computeDependencies(builder.linkResolverFactories);
+ this.attributeProviderFactories = DependencyResolver.resolveFlatDependencies(builder.attributeProviderFactories, null, null);
+ this.linkResolverFactories = DependencyResolver.resolveFlatDependencies(builder.linkResolverFactories, null, null);
+ this.contentResolverFactories = DependencyResolver.resolveFlatDependencies(builder.contentResolverFactories, null, null);
}
@Nullable
@@ -217,6 +232,30 @@ public static WordprocessingMLPackage getDefaultTemplate(InputStream inputStream
return null;
}
+ public static void setPageSize(WordprocessingMLPackage out, PageSizePaper sz, boolean landscape) {
+ MainDocumentPart documentPart = out.getMainDocumentPart();
+ org.docx4j.wml.Document document = documentPart.getJaxbElement();
+ Body body = document.getBody();
+
+// // Create a basic sectPr using our Page model
+// PageDimensions page = new PageDimensions();
+// page.setPgSize(sz, landscape);
+//
+// SectPr sectPr = new ObjectFactory().createSectPr();
+// body.setSectPr(sectPr);
+// sectPr.setPgSz(page.getPgSz());
+// // NOTE: page margins are not changed
+//// sectPr.setPgMar(page.getPgMar());
+
+ // Change only page size
+ PageDimensions page = new PageDimensions();
+ page.setPgSize(sz, landscape);
+ SectPr sectPr = body.getSectPr();
+ sectPr.setPgSz(page.getPgSz());
+ // NOTE: page margins are not changed
+// sectPr.setPgMar(page.getPgMar());
+ }
+
static void setDefaultStyleAndNumbering(WordprocessingMLPackage out, DataHolder options) {
try {
// (main doc part it if necessary)
@@ -227,6 +266,7 @@ static void setDefaultStyleAndNumbering(WordprocessingMLPackage out, DataHolder
out.addTargetPart(documentPart);
} catch (InvalidFormatException e) {
e.printStackTrace();
+ throw e;
}
}
@@ -254,6 +294,50 @@ static void setDefaultStyleAndNumbering(WordprocessingMLPackage out, DataHolder
}
}
+ public static void setDocumentProperties(WordprocessingMLPackage out, DataHolder options) {
+ Map properties = CUSTOM_PROPERTIES.get(options);
+
+ if (!properties.isEmpty()) {
+ try {
+ DocPropsCustomPart customPropsPart = out.getDocPropsCustomPart();
+ if (customPropsPart == null) {
+ try {
+ customPropsPart = new DocPropsCustomPart();
+ out.addTargetPart(customPropsPart);
+ } catch (InvalidFormatException e) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ if (customPropsPart.getContents() == null) {
+ customPropsPart.setContents(new Properties());
+ }
+
+ for (Map.Entry entry : properties.entrySet()) {
+ customPropsPart.setProperty(entry.getKey(), entry.getValue());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ String pageSize = PAGE_SIZE.get(options).trim().toLowerCase();
+ if (!pageSize.isEmpty()) {
+ PageSizePaper sz = null;
+ for (PageSizePaper paper : PageSizePaper.values()) {
+ if (pageSize.equalsIgnoreCase(paper.value())) {
+ sz = paper;
+ break;
+ }
+ }
+
+ if (sz != null) {
+ setPageSize(out, sz, PAGE_LANDSCAPE.get(options));
+ }
+ }
+ }
+
/**
* Render a node to the given word processing package
*
@@ -263,6 +347,7 @@ static void setDefaultStyleAndNumbering(WordprocessingMLPackage out, DataHolder
public void render(Node node, WordprocessingMLPackage output) {
DocxRenderer.MainDocxRenderer renderer = new DocxRenderer.MainDocxRenderer(options, output, node.getDocument(), null);
renderer.render(node);
+ setDocumentProperties(output, node.getDocument());
}
/**
@@ -270,7 +355,7 @@ public void render(Node node, WordprocessingMLPackage output) {
*
* @param node node to render
* @param output appendable to use for the output
- * @param contentContainer contaner for content to use
+ * @param contentContainer container for content to use
*/
public void render(Node node, WordprocessingMLPackage output, DocumentContentHandler contentContainer) {
DocxRenderer.MainDocxRenderer renderer = new DocxRenderer.MainDocxRenderer(options, output, node.getDocument(), contentContainer);
@@ -296,6 +381,7 @@ public String render(@NotNull Node document) {
String resourcePath = DEFAULT_TEMPLATE_RESOURCE.get(getOptions());
WordprocessingMLPackage mlPackage = getDefaultTemplate(resourcePath);
render(document, mlPackage);
+ setDocumentProperties(mlPackage, document.getDocument());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
mlPackage.save(outputStream, Docx4J.FLAG_SAVE_FLAT_XML);
@@ -324,9 +410,10 @@ public void render(@NotNull Node document, @NotNull Appendable output) {
* Builder for configuring an {@link DocxRenderer}. See methods for default configuration.
*/
public static class Builder extends BuilderBase implements RendererBuilder {
- List attributeProviderFactories = new ArrayList<>();
- List nodeDocxRendererFactories = new ArrayList<>();
- List linkResolverFactories = new ArrayList<>();
+ final List attributeProviderFactories = new ArrayList<>();
+ final List nodeDocxRendererFactories = new ArrayList<>();
+ final List linkResolverFactories = new ArrayList<>();
+ final List contentResolverFactories = new ArrayList<>();
HeaderIdGeneratorFactory htmlIdGeneratorFactory = null;
public Builder() {
@@ -343,6 +430,7 @@ protected void removeApiPoint(@NotNull Object apiPoint) {
if (apiPoint instanceof AttributeProviderFactory) this.attributeProviderFactories.remove(apiPoint);
else if (apiPoint instanceof NodeDocxRendererFactory) this.nodeDocxRendererFactories.remove(apiPoint);
else if (apiPoint instanceof LinkResolverFactory) this.linkResolverFactories.remove(apiPoint);
+ else if (apiPoint instanceof UriContentResolverFactory) this.contentResolverFactories.remove(apiPoint);
else if (apiPoint instanceof HeaderIdGeneratorFactory) this.htmlIdGeneratorFactory = null;
else {
throw new IllegalStateException("Unknown data point type: " + apiPoint.getClass().getName());
@@ -383,8 +471,7 @@ public DocxRenderer build() {
}
/**
- * Add a factory for instantiating a node renderer (done when rendering). This allows to override the rendering
- * of node types or define rendering for custom node types.
+ * Add a factory for resolving link text to URI
*
* If multiple node renderers for the same node type are created, the one from the factory that was added first
* "wins". (This is how the rendering for core node types can be overridden; the default rendering comes last.)
@@ -400,11 +487,7 @@ public Builder nodeFormatterFactory(NodeDocxRendererFactory nodeDocxRendererFact
}
/**
- * Add a factory for instantiating a node renderer (done when rendering). This allows to override the rendering
- * of node types or define rendering for custom node types.
- *
- * If multiple node renderers for the same node type are created, the one from the factory that was added first
- * "wins". (This is how the rendering for core node types can be overridden; the default rendering comes last.)
+ * Add a factory for resolving links in markdown to URI used in rendering
*
* @param linkResolverFactory the factory for creating a node renderer
* @return {@code this}
@@ -417,6 +500,20 @@ public Builder linkResolverFactory(@NotNull LinkResolverFactory linkResolverFact
return this;
}
+ /**
+ * Add a factory for resolving URI to content
+ *
+ * @param contentResolverFactory the factory for creating a node renderer
+ * @return {@code this}
+ */
+ @NotNull
+ @Override
+ public Builder contentResolverFactory(@NotNull UriContentResolverFactory contentResolverFactory) {
+ this.contentResolverFactories.add(contentResolverFactory);
+ addExtensionApiPoint(contentResolverFactory);
+ return this;
+ }
+
/**
* Add an attribute provider for adding/changing HTML attributes to the rendered tags.
*
@@ -464,7 +561,7 @@ public interface DocxRendererExtension extends Extension {
void extend(Builder builder);
}
- private final static Iterator extends Node> NULL_ITERATOR = new Iterator() {
+ final private static Iterator extends Node> NULL_ITERATOR = new Iterator() {
@Override
public boolean hasNext() {
return false;
@@ -483,20 +580,22 @@ public void remove() {
final static Iterable extends Node> NULL_ITERABLE = (Iterable) () -> null;
private class MainDocxRenderer extends DocxContextImpl implements DocxRendererContext {
- private final Document document;
- private final Map, NodeDocxRendererHandler>> renderers;
- private final SubClassingBag collectedNodes;
+ final private Document document;
+ final private Map, NodeDocxRendererHandler>> renderers;
+ final private SubClassingBag collectedNodes;
final HashSet> bookmarkWrapsChildren;
- private final List phasedFormatters;
- private final Set renderingPhases;
+ final private List phasedFormatters;
+ final private Set renderingPhases;
private DocxRendererPhase phase;
Node renderingNode;
- private final LinkResolver[] myLinkResolvers;
- private final HashMap> resolvedLinkMap = new HashMap<>();
- private final AttributeProvider[] myAttributeProviders;
- private final HtmlIdGenerator htmlIdGenerator;
- //private final Node firstHeadingNode;
+ final private LinkResolver[] myLinkResolvers;
+ final private UriContentResolver[] myContentResolvers;
+ final private HashMap> resolvedLinkMap = new HashMap<>();
+ final private HashMap resolvedContentMap = new HashMap<>();
+ final private AttributeProvider[] myAttributeProviders;
+ final private HtmlIdGenerator htmlIdGenerator;
+ //final private Node firstHeadingNode;
final TwoWayHashMap nodeIdMap;
final HashMap baseIdToSerial;
final HashMap idToValidBookmark;
@@ -510,8 +609,11 @@ private class MainDocxRenderer extends DocxContextImpl implements DocxRend
this.renderingPhases = new HashSet<>(DocxRendererPhase.values().length);
Set> collectNodeTypes = new HashSet<>(100);
this.phasedFormatters = new ArrayList<>(nodeFormatterFactories.size());
- Boolean defaultLinkResolver = DEFAULT_LINK_RESOLVER.get(options);
+ boolean defaultLinkResolver = DEFAULT_LINK_RESOLVER.get(options) && linkResolverFactories.stream().noneMatch(it -> it instanceof DocxLinkResolver.Factory);
this.myLinkResolvers = new LinkResolver[linkResolverFactories.size() + (defaultLinkResolver ? 1 : 0)];
+
+ boolean defaultContentResolver = DEFAULT_CONTENT_RESOLVER.get(options) && contentResolverFactories.stream().noneMatch(it -> it instanceof FileUriContentResolver.Factory);
+ this.myContentResolvers = new UriContentResolver[contentResolverFactories.size() + (defaultContentResolver ? 1 : 0)];
this.htmlIdGenerator = htmlIdGeneratorFactory != null ? htmlIdGeneratorFactory.create(this)
: new HeaderIdGenerator.Factory().create(this);
@@ -536,6 +638,15 @@ private class MainDocxRenderer extends DocxContextImpl implements DocxRend
myLinkResolvers[linkResolverFactories.size()] = new DocxLinkResolver.Factory().apply(this);
}
+ for (int i = 0; i < contentResolverFactories.size(); i++) {
+ myContentResolvers[i] = contentResolverFactories.get(i).apply(this);
+ }
+
+ if (defaultContentResolver) {
+ // add the default link resolver
+ myContentResolvers[contentResolverFactories.size()] = new FileUriContentResolver.Factory().apply(this);
+ }
+
this.myAttributeProviders = new AttributeProvider[attributeProviderFactories.size()];
for (int i = 0; i < attributeProviderFactories.size(); i++) {
myAttributeProviders[i] = attributeProviderFactories.get(i).apply(this);
@@ -595,7 +706,7 @@ private class MainDocxRenderer extends DocxContextImpl implements DocxRend
String calculateNodeId(Node node) {
String id = htmlIdGenerator.getId(node);
if (attributeProviderFactories.size() != 0) {
- Attributes attributes = new Attributes();
+ MutableAttributes attributes = new MutableAttributes();
if (id != null) attributes.replaceValue("id", id);
for (AttributeProvider attributeProvider : myAttributeProviders) {
@@ -659,8 +770,8 @@ public String encodeUrl(@NotNull CharSequence url) {
}
@Override
- public Attributes extendRenderingNodeAttributes(@NotNull AttributablePart part, @Nullable Attributes attributes) {
- Attributes attr = attributes != null ? attributes : new Attributes();
+ public MutableAttributes extendRenderingNodeAttributes(@NotNull AttributablePart part, @Nullable Attributes attributes) {
+ MutableAttributes attr = attributes != null ? attributes.toMutable() : new MutableAttributes();
for (AttributeProvider attributeProvider : myAttributeProviders) {
attributeProvider.setAttributes(this.renderingNode, part, attr);
}
@@ -668,8 +779,8 @@ public Attributes extendRenderingNodeAttributes(@NotNull AttributablePart part,
}
@Override
- public Attributes extendRenderingNodeAttributes(@NotNull Node node, @NotNull AttributablePart part, @Nullable Attributes attributes) {
- Attributes attr = attributes != null ? attributes : new Attributes();
+ public MutableAttributes extendRenderingNodeAttributes(@NotNull Node node, @NotNull AttributablePart part, @Nullable Attributes attributes) {
+ MutableAttributes attr = attributes != null ? attributes.toMutable() : new MutableAttributes();
for (AttributeProvider attributeProvider : myAttributeProviders) {
attributeProvider.setAttributes(node, part, attr);
}
@@ -708,31 +819,25 @@ public DocxRendererPhase getPhase() {
}
@Override
- public final Iterable extends Node> nodesOfType(Class>[] classes) {
+ final public Iterable extends Node> nodesOfType(Class>[] classes) {
return collectedNodes == null ? NULL_ITERABLE : collectedNodes.itemsOfType(Node.class, classes);
}
@Override
- public final Iterable extends Node> nodesOfType(Collection> classes) {
+ final public Iterable extends Node> nodesOfType(Collection> classes) {
return collectedNodes == null ? NULL_ITERABLE : collectedNodes.itemsOfType(Node.class, classes);
}
@Override
- public final Iterable extends Node> reversedNodesOfType(Class>[] classes) {
+ final public Iterable extends Node> reversedNodesOfType(Class>[] classes) {
return collectedNodes == null ? NULL_ITERABLE : collectedNodes.reversedItemsOfType(Node.class, classes);
}
@Override
- public final Iterable extends Node> reversedNodesOfType(Collection> classes) {
+ final public Iterable extends Node> reversedNodesOfType(Collection> classes) {
return collectedNodes == null ? NULL_ITERABLE : collectedNodes.reversedItemsOfType(Node.class, classes);
}
- @NotNull
- @Override
- public ResolvedLink resolveLink(@NotNull LinkType linkType, @NotNull CharSequence url, Boolean urlEncode) {
- return resolveLink(linkType, url, (Attributes) null, urlEncode);
- }
-
@NotNull
@Override
public ResolvedLink resolveLink(@NotNull LinkType linkType, @NotNull CharSequence url, Attributes attributes, Boolean urlEncode) {
@@ -756,13 +861,33 @@ public ResolvedLink resolveLink(@NotNull LinkType linkType, @NotNull CharSequenc
}
}
- // put it in the map
resolvedLinks.put(urlSeq, resolvedLink);
}
return resolvedLink;
}
+ @NotNull
+ @Override
+ public ResolvedContent resolvedContent(@NotNull ResolvedLink resolvedLink) {
+ ResolvedContent resolvedContent = resolvedContentMap.get(resolvedLink.getUrl());
+
+ if (resolvedContent == null) {
+ resolvedContent = new ResolvedContent(resolvedLink, LinkStatus.UNKNOWN, null);
+ Node currentNode = renderingNode;
+
+ for (UriContentResolver contentResolver : myContentResolvers) {
+ resolvedContent = contentResolver.resolveContent(currentNode, this, resolvedContent);
+ if (resolvedContent.getStatus() != LinkStatus.UNKNOWN) break;
+ }
+
+ // put it in the map
+ resolvedContentMap.put(resolvedLink.getUrl(), resolvedContent);
+ }
+
+ return resolvedContent;
+ }
+
@Override
public void render(@NotNull Node node) {
if (node instanceof Document) {
diff --git a/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRendererContext.java b/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRendererContext.java
index b3078e40d..5f1654676 100644
--- a/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRendererContext.java
+++ b/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRendererContext.java
@@ -2,7 +2,10 @@
import com.vladsch.flexmark.docx.converter.util.DocxContext;
import com.vladsch.flexmark.html.renderer.LinkResolverContext;
+import com.vladsch.flexmark.html.renderer.ResolvedContent;
+import com.vladsch.flexmark.html.renderer.ResolvedLink;
import com.vladsch.flexmark.util.ast.Node;
+import org.jetbrains.annotations.NotNull;
import java.util.Collection;
@@ -41,4 +44,13 @@ public interface DocxRendererContext extends DocxContext, LinkResolverCont
* @return the {@link DocxRendererOptions} for the context.
*/
DocxRendererOptions getDocxRendererOptions();
+
+ /**
+ * Resolve link to content
+ *
+ * @param resolvedLink resolved link
+ * @return resolved content for the link
+ */
+ @NotNull
+ ResolvedContent resolvedContent(@NotNull ResolvedLink resolvedLink);
}
diff --git a/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRendererOptions.java b/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRendererOptions.java
index d7fd2b538..1d0eb081e 100644
--- a/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRendererOptions.java
+++ b/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/DocxRendererOptions.java
@@ -12,7 +12,7 @@
import java.util.List;
public class DocxRendererOptions {
- static private final HashMap standardStyleNames = new HashMap<>();
+ final private static HashMap standardStyleNames = new HashMap<>();
static {
standardStyleNames.put("AsideBlock", "AsideBlock");
standardStyleNames.put("BodyText", "Body Text");
@@ -47,68 +47,68 @@ public class DocxRendererOptions {
standardStyleNames.put("Underlined", "Underlined");
}
- public final boolean escapeHtmlBlocks;
- public final boolean escapeHtmlCommentBlocks;
- public final boolean escapeInlineHtml;
- public final boolean escapeInlineHtmlComments;
- public final boolean percentEncodeUrls;
- public final boolean suppressHtmlBlocks;
- public final boolean suppressHtmlCommentBlocks;
- public final boolean suppressInlineHtml;
- public final boolean suppressInlineHtmlComments;
- public final boolean tocGenerate;
- public final boolean logImageProcessing;
- public final boolean noCharacterStyles;
- public final boolean prefixWwwLinks;
- public final int maxImageWidth;
- public final String tocInstruction;
- public final String codeHighlightShading;
- public final String localHyperlinkSuffix;
- public final String localHyperlinkMissingHighlight;
- public final String localHyperlinkMissingFormat;
- public final boolean errorsToStdErr;
- public final double docEmojiImageVertOffset;
- public final double docEmojiImageVertSize;
- public final String errorSourceFile;
- public final String formControls;
- public final boolean runningTests;
+ final public boolean escapeHtmlBlocks;
+ final public boolean escapeHtmlCommentBlocks;
+ final public boolean escapeInlineHtml;
+ final public boolean escapeInlineHtmlComments;
+ final public boolean percentEncodeUrls;
+ final public boolean suppressHtmlBlocks;
+ final public boolean suppressHtmlCommentBlocks;
+ final public boolean suppressInlineHtml;
+ final public boolean suppressInlineHtmlComments;
+ final public boolean tocGenerate;
+ final public boolean logImageProcessing;
+ final public boolean noCharacterStyles;
+ final public boolean prefixWwwLinks;
+ final public int maxImageWidth;
+ final public String tocInstruction;
+ final public String codeHighlightShading;
+ final public String localHyperlinkSuffix;
+ final public String localHyperlinkMissingHighlight;
+ final public String localHyperlinkMissingFormat;
+ final public boolean errorsToStdErr;
+ final public double docEmojiImageVertOffset;
+ final public double docEmojiImageVertSize;
+ final public String errorSourceFile;
+ final public String formControls;
+ final public boolean runningTests;
- public final String ASIDE_BLOCK_STYLE;
- public final String BLOCK_QUOTE_STYLE;
- public final String BOLD_STYLE;
- public final String DEFAULT_STYLE;
- public final String ENDNOTE_ANCHOR_STYLE;
- public final String FOOTER;
- public final String FOOTNOTE_ANCHOR_STYLE;
- public final String FOOTNOTE_STYLE;
- public final String FOOTNOTE_TEXT;
- public final String HEADER;
- public final String HEADING_1;
- public final String HEADING_2;
- public final String HEADING_3;
- public final String HEADING_4;
- public final String HEADING_5;
- public final String HEADING_6;
- public final String HORIZONTAL_LINE_STYLE;
- public final String HYPERLINK_STYLE;
- public final String INLINE_CODE_STYLE;
- public final String INS_STYLE;
- public final String ITALIC_STYLE;
- public final String LOOSE_PARAGRAPH_STYLE;
- public final String PREFORMATTED_TEXT_STYLE;
- public final String STRIKE_THROUGH_STYLE;
- public final String SUBSCRIPT_STYLE;
- public final String SUPERSCRIPT_STYLE;
- public final String TABLE_CAPTION;
- public final String TABLE_CONTENTS;
- public final String TABLE_GRID;
- public final String TABLE_HEADING;
- public final String TIGHT_PARAGRAPH_STYLE;
- public final String BULLET_LIST_STYLE;
- public final String NUMBERED_LIST_STYLE;
- public final String PARAGRAPH_BULLET_LIST_STYLE;
- public final String PARAGRAPH_NUMBERED_LIST_STYLE;
- public final String[] HEADINGS;
+ final public String ASIDE_BLOCK_STYLE;
+ final public String BLOCK_QUOTE_STYLE;
+ final public String BOLD_STYLE;
+ final public String DEFAULT_STYLE;
+ final public String ENDNOTE_ANCHOR_STYLE;
+ final public String FOOTER;
+ final public String FOOTNOTE_ANCHOR_STYLE;
+ final public String FOOTNOTE_STYLE;
+ final public String FOOTNOTE_TEXT;
+ final public String HEADER;
+ final public String HEADING_1;
+ final public String HEADING_2;
+ final public String HEADING_3;
+ final public String HEADING_4;
+ final public String HEADING_5;
+ final public String HEADING_6;
+ final public String HORIZONTAL_LINE_STYLE;
+ final public String HYPERLINK_STYLE;
+ final public String INLINE_CODE_STYLE;
+ final public String INS_STYLE;
+ final public String ITALIC_STYLE;
+ final public String LOOSE_PARAGRAPH_STYLE;
+ final public String PREFORMATTED_TEXT_STYLE;
+ final public String STRIKE_THROUGH_STYLE;
+ final public String SUBSCRIPT_STYLE;
+ final public String SUPERSCRIPT_STYLE;
+ final public String TABLE_CAPTION;
+ final public String TABLE_CONTENTS;
+ final public String TABLE_GRID;
+ final public String TABLE_HEADING;
+ final public String TIGHT_PARAGRAPH_STYLE;
+ final public String BULLET_LIST_STYLE;
+ final public String NUMBERED_LIST_STYLE;
+ final public String PARAGRAPH_BULLET_LIST_STYLE;
+ final public String PARAGRAPH_NUMBERED_LIST_STYLE;
+ final public String[] HEADINGS;
final HashMap styleIdToStyleName;
final HashMap nameToStyleStyleId;
diff --git a/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/internal/CoreNodeDocxRenderer.java b/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/internal/CoreNodeDocxRenderer.java
index 31d7966c3..a661121d6 100644
--- a/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/internal/CoreNodeDocxRenderer.java
+++ b/flexmark-docx-converter/src/main/java/com/vladsch/flexmark/docx/converter/internal/CoreNodeDocxRenderer.java
@@ -16,12 +16,16 @@
import com.vladsch.flexmark.ext.enumerated.reference.internal.EnumRefTextCollectingVisitor;
import com.vladsch.flexmark.ext.footnotes.Footnote;
import com.vladsch.flexmark.ext.footnotes.FootnoteBlock;
+import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
+import com.vladsch.flexmark.ext.footnotes.internal.FootnoteRepository;
import com.vladsch.flexmark.ext.gfm.strikethrough.Strikethrough;
import com.vladsch.flexmark.ext.gfm.strikethrough.Subscript;
import com.vladsch.flexmark.ext.gitlab.GitLabBlockQuote;
import com.vladsch.flexmark.ext.gitlab.GitLabDel;
import com.vladsch.flexmark.ext.gitlab.GitLabIns;
import com.vladsch.flexmark.ext.ins.Ins;
+import com.vladsch.flexmark.ext.jekyll.tag.JekyllTag;
+import com.vladsch.flexmark.ext.jekyll.tag.JekyllTagBlock;
import com.vladsch.flexmark.ext.macros.MacroDefinitionBlock;
import com.vladsch.flexmark.ext.macros.MacroReference;
import com.vladsch.flexmark.ext.superscript.Superscript;
@@ -41,6 +45,7 @@
import com.vladsch.flexmark.util.format.options.ListSpacing;
import com.vladsch.flexmark.util.html.Attribute;
import com.vladsch.flexmark.util.html.Attributes;
+import com.vladsch.flexmark.util.html.MutableAttributes;
import com.vladsch.flexmark.util.misc.ImageUtils;
import com.vladsch.flexmark.util.misc.Pair;
import com.vladsch.flexmark.util.sequence.BasedSequence;
@@ -63,12 +68,9 @@
import org.docx4j.wml.*;
import org.jetbrains.annotations.NotNull;
-import javax.xml.bind.JAXBElement;
+import jakarta.xml.bind.JAXBElement;
import java.awt.image.BufferedImage;
-import java.io.File;
import java.math.BigInteger;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.time.Instant;
@@ -79,26 +81,26 @@
@SuppressWarnings({ "WeakerAccess", "MethodMayBeStatic", "OverlyCoupledClass" })
public class CoreNodeDocxRenderer implements PhasedNodeDocxRenderer {
- public static final DataKey LIST_ITEM_NUMBER = new DataKey<>("LIST_ITEM_NUMBER", 0);
- public static final NullableDataKey LIST_ITEM_SPACING = new NullableDataKey<>("LIST_ITEM_SPACING");
- public static final HashSet