From b7a94255e0ae65f9eb07654c9b25f9fa842ac060 Mon Sep 17 00:00:00 2001
From: Vladimir Schneider
Date: Mon, 24 Dec 2018 17:12:26 -0500
Subject: [PATCH 1/3] fix missing test-scope on some dependencies
---
VERSION.md | 6 ++
flexmark-all/pom.xml | 78 ++++++++--------
flexmark-docx-converter/pom.xml | 2 +-
flexmark-ext-abbreviation/pom.xml | 6 +-
flexmark-ext-admonition/pom.xml | 2 +-
flexmark-ext-anchorlink/pom.xml | 4 +-
flexmark-ext-aside/pom.xml | 2 +-
flexmark-ext-attributes/pom.xml | 2 +-
flexmark-ext-autolink/pom.xml | 2 +-
flexmark-ext-definition/pom.xml | 2 +-
flexmark-ext-emoji/pom.xml | 2 +-
flexmark-ext-enumerated-reference/pom.xml | 2 +-
flexmark-ext-escaped-character/pom.xml | 2 +-
flexmark-ext-footnotes/pom.xml | 2 +-
flexmark-ext-gfm-issues/pom.xml | 2 +-
flexmark-ext-gfm-strikethrough/pom.xml | 2 +-
flexmark-ext-gfm-tables/pom.xml | 2 +-
flexmark-ext-gfm-tasklist/pom.xml | 2 +-
flexmark-ext-gfm-users/pom.xml | 2 +-
flexmark-ext-gitlab/pom.xml | 2 +-
flexmark-ext-ins/pom.xml | 2 +-
flexmark-ext-jekyll-front-matter/pom.xml | 2 +-
flexmark-ext-jekyll-tag/pom.xml | 2 +-
flexmark-ext-macros/pom.xml | 2 +-
flexmark-ext-media-tags/pom.xml | 3 +-
flexmark-ext-spec-example/pom.xml | 2 +-
flexmark-ext-superscript/pom.xml | 2 +-
flexmark-ext-tables/pom.xml | 2 +-
flexmark-ext-toc/pom.xml | 2 +-
flexmark-ext-typographic/pom.xml | 2 +-
flexmark-ext-wikilink/pom.xml | 2 +-
flexmark-ext-xwiki-macros/pom.xml | 2 +-
flexmark-ext-yaml-front-matter/pom.xml | 2 +-
flexmark-ext-youtube-embedded/pom.xml | 2 +-
flexmark-ext-zzzzzz/pom.xml | 2 +-
flexmark-formatter/pom.xml | 2 +-
flexmark-html-parser/pom.xml | 2 +-
flexmark-integration-test/pom.xml | 2 +-
flexmark-jira-converter/pom.xml | 2 +-
flexmark-osgi/pom.xml | 2 +-
flexmark-pdf-converter/pom.xml | 2 +-
flexmark-profile-pegdown/pom.xml | 2 +-
flexmark-test-util/pom.xml | 2 +-
flexmark-util/pom.xml | 2 +-
flexmark-youtrack-converter/pom.xml | 2 +-
flexmark/pom.xml | 3 +-
.../flexmark/internal/DocumentParser.java | 44 ++++------
pom.xml | 88 +++++++++----------
48 files changed, 155 insertions(+), 157 deletions(-)
diff --git a/VERSION.md b/VERSION.md
index 67c44e7803..9ecf5b70ed 100644
--- a/VERSION.md
+++ b/VERSION.md
@@ -7,6 +7,7 @@ flexmark-java
- [To Do](#to-do)
- [Docx Converter](#docx-converter)
+- [0.35.8](#0358)
- [0.35.6](#0356)
- [0.35.4](#0354)
- [0.35.2](#0352)
@@ -265,6 +266,11 @@ flexmark-java
+0.35.8
+------
+
+* Fix: add missing test-scope to flexmark-test-util dependencies
+
0.35.6
------
diff --git a/flexmark-all/pom.xml b/flexmark-all/pom.xml
index 10aca0c9f0..2bbe50390f 100644
--- a/flexmark-all/pom.xml
+++ b/flexmark-all/pom.xml
@@ -7,7 +7,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-all
@@ -21,192 +21,192 @@
com.vladsch.flexmark
flexmark
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-abbreviation
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-admonition
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-anchorlink
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-aside
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-attributes
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-autolink
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-definition
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-emoji
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-enumerated-reference
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-escaped-character
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-footnotes
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-issues
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-strikethrough
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-tables
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-tasklist
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-users
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gitlab
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-jekyll-front-matter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-jekyll-tag
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-media-tags
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-macros
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-ins
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-xwiki-macros
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-superscript
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-tables
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-toc
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-typographic
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-wikilink
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-yaml-front-matter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-youtube-embedded
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-formatter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-html-parser
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-jira-converter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-pdf-converter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-profile-pegdown
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-util
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-youtrack-converter
- 0.35.6
+ 0.36.8
diff --git a/flexmark-docx-converter/pom.xml b/flexmark-docx-converter/pom.xml
index 0c74260138..5c6660f4eb 100644
--- a/flexmark-docx-converter/pom.xml
+++ b/flexmark-docx-converter/pom.xml
@@ -5,7 +5,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-docx-converter
diff --git a/flexmark-ext-abbreviation/pom.xml b/flexmark-ext-abbreviation/pom.xml
index 3b854b78c4..290dbaffd7 100644
--- a/flexmark-ext-abbreviation/pom.xml
+++ b/flexmark-ext-abbreviation/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-abbreviation
@@ -36,18 +36,22 @@
com.vladsch.flexmark
flexmark-ext-typographic
+ test
com.vladsch.flexmark
flexmark-ext-ins
+ test
com.vladsch.flexmark
flexmark-ext-gfm-strikethrough
+ test
com.vladsch.flexmark
flexmark-ext-superscript
+ test
diff --git a/flexmark-ext-admonition/pom.xml b/flexmark-ext-admonition/pom.xml
index e22050089b..7cd818bc4d 100644
--- a/flexmark-ext-admonition/pom.xml
+++ b/flexmark-ext-admonition/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-admonition
diff --git a/flexmark-ext-anchorlink/pom.xml b/flexmark-ext-anchorlink/pom.xml
index 2edb4690d8..2b95c61d25 100644
--- a/flexmark-ext-anchorlink/pom.xml
+++ b/flexmark-ext-anchorlink/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-anchorlink
@@ -28,7 +28,7 @@
com.vladsch.flexmark
flexmark-jira-converter
- 0.35.6
+ 0.36.8
test
diff --git a/flexmark-ext-aside/pom.xml b/flexmark-ext-aside/pom.xml
index 084b792379..bd55b4e467 100644
--- a/flexmark-ext-aside/pom.xml
+++ b/flexmark-ext-aside/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-aside
diff --git a/flexmark-ext-attributes/pom.xml b/flexmark-ext-attributes/pom.xml
index 6e629cdba7..26de2915d6 100644
--- a/flexmark-ext-attributes/pom.xml
+++ b/flexmark-ext-attributes/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-attributes
diff --git a/flexmark-ext-autolink/pom.xml b/flexmark-ext-autolink/pom.xml
index 575cdc97ec..2045390f0f 100644
--- a/flexmark-ext-autolink/pom.xml
+++ b/flexmark-ext-autolink/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-autolink
diff --git a/flexmark-ext-definition/pom.xml b/flexmark-ext-definition/pom.xml
index 07b473de4f..1ede282709 100644
--- a/flexmark-ext-definition/pom.xml
+++ b/flexmark-ext-definition/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-definition
diff --git a/flexmark-ext-emoji/pom.xml b/flexmark-ext-emoji/pom.xml
index 71baad9249..c3c1e5511b 100644
--- a/flexmark-ext-emoji/pom.xml
+++ b/flexmark-ext-emoji/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-emoji
diff --git a/flexmark-ext-enumerated-reference/pom.xml b/flexmark-ext-enumerated-reference/pom.xml
index c81eb7db62..9ecdbf6021 100644
--- a/flexmark-ext-enumerated-reference/pom.xml
+++ b/flexmark-ext-enumerated-reference/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-enumerated-reference
diff --git a/flexmark-ext-escaped-character/pom.xml b/flexmark-ext-escaped-character/pom.xml
index bdce52b82b..febf382fc8 100644
--- a/flexmark-ext-escaped-character/pom.xml
+++ b/flexmark-ext-escaped-character/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-escaped-character
diff --git a/flexmark-ext-footnotes/pom.xml b/flexmark-ext-footnotes/pom.xml
index 24364b1353..d35b43acb3 100644
--- a/flexmark-ext-footnotes/pom.xml
+++ b/flexmark-ext-footnotes/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-footnotes
diff --git a/flexmark-ext-gfm-issues/pom.xml b/flexmark-ext-gfm-issues/pom.xml
index 734b3b0e8b..09e4f2286a 100644
--- a/flexmark-ext-gfm-issues/pom.xml
+++ b/flexmark-ext-gfm-issues/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-gfm-issues
diff --git a/flexmark-ext-gfm-strikethrough/pom.xml b/flexmark-ext-gfm-strikethrough/pom.xml
index c786703fe0..d2c5b83382 100644
--- a/flexmark-ext-gfm-strikethrough/pom.xml
+++ b/flexmark-ext-gfm-strikethrough/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-gfm-strikethrough
diff --git a/flexmark-ext-gfm-tables/pom.xml b/flexmark-ext-gfm-tables/pom.xml
index e3b75522a3..2a8d9a4b82 100644
--- a/flexmark-ext-gfm-tables/pom.xml
+++ b/flexmark-ext-gfm-tables/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-gfm-tables
diff --git a/flexmark-ext-gfm-tasklist/pom.xml b/flexmark-ext-gfm-tasklist/pom.xml
index 00c66b926d..a8bee452d0 100644
--- a/flexmark-ext-gfm-tasklist/pom.xml
+++ b/flexmark-ext-gfm-tasklist/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-gfm-tasklist
diff --git a/flexmark-ext-gfm-users/pom.xml b/flexmark-ext-gfm-users/pom.xml
index 8d9d9fbb1f..f3d1757a68 100644
--- a/flexmark-ext-gfm-users/pom.xml
+++ b/flexmark-ext-gfm-users/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-gfm-users
diff --git a/flexmark-ext-gitlab/pom.xml b/flexmark-ext-gitlab/pom.xml
index 9036de37f8..dea1819702 100644
--- a/flexmark-ext-gitlab/pom.xml
+++ b/flexmark-ext-gitlab/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-gitlab
diff --git a/flexmark-ext-ins/pom.xml b/flexmark-ext-ins/pom.xml
index faac494af7..bce003d33b 100644
--- a/flexmark-ext-ins/pom.xml
+++ b/flexmark-ext-ins/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-ins
diff --git a/flexmark-ext-jekyll-front-matter/pom.xml b/flexmark-ext-jekyll-front-matter/pom.xml
index b48abf45ff..4f7b25fdc0 100644
--- a/flexmark-ext-jekyll-front-matter/pom.xml
+++ b/flexmark-ext-jekyll-front-matter/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-jekyll-front-matter
diff --git a/flexmark-ext-jekyll-tag/pom.xml b/flexmark-ext-jekyll-tag/pom.xml
index a785c2694e..b82a921d61 100644
--- a/flexmark-ext-jekyll-tag/pom.xml
+++ b/flexmark-ext-jekyll-tag/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-jekyll-tag
diff --git a/flexmark-ext-macros/pom.xml b/flexmark-ext-macros/pom.xml
index 98dc8c04ee..1dff36ffa0 100644
--- a/flexmark-ext-macros/pom.xml
+++ b/flexmark-ext-macros/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-macros
diff --git a/flexmark-ext-media-tags/pom.xml b/flexmark-ext-media-tags/pom.xml
index 1029d08083..4f720edd4c 100644
--- a/flexmark-ext-media-tags/pom.xml
+++ b/flexmark-ext-media-tags/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-media-tags
@@ -19,6 +19,7 @@
com.vladsch.flexmark
flexmark-test-util
+ test
diff --git a/flexmark-ext-spec-example/pom.xml b/flexmark-ext-spec-example/pom.xml
index 4bcc61b4da..84ad382618 100644
--- a/flexmark-ext-spec-example/pom.xml
+++ b/flexmark-ext-spec-example/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-spec-example
diff --git a/flexmark-ext-superscript/pom.xml b/flexmark-ext-superscript/pom.xml
index 42e5017b46..58f5caf2d9 100644
--- a/flexmark-ext-superscript/pom.xml
+++ b/flexmark-ext-superscript/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-superscript
diff --git a/flexmark-ext-tables/pom.xml b/flexmark-ext-tables/pom.xml
index 71469d3ae6..6af38d1ac0 100644
--- a/flexmark-ext-tables/pom.xml
+++ b/flexmark-ext-tables/pom.xml
@@ -5,7 +5,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-tables
diff --git a/flexmark-ext-toc/pom.xml b/flexmark-ext-toc/pom.xml
index aab25690f1..b6493cb9bc 100644
--- a/flexmark-ext-toc/pom.xml
+++ b/flexmark-ext-toc/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-toc
diff --git a/flexmark-ext-typographic/pom.xml b/flexmark-ext-typographic/pom.xml
index 8108ee2ab6..b0976aff88 100644
--- a/flexmark-ext-typographic/pom.xml
+++ b/flexmark-ext-typographic/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-typographic
diff --git a/flexmark-ext-wikilink/pom.xml b/flexmark-ext-wikilink/pom.xml
index 3d5d1a4e01..b590a3477e 100644
--- a/flexmark-ext-wikilink/pom.xml
+++ b/flexmark-ext-wikilink/pom.xml
@@ -5,7 +5,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-wikilink
diff --git a/flexmark-ext-xwiki-macros/pom.xml b/flexmark-ext-xwiki-macros/pom.xml
index aa6782af80..1107981fd5 100644
--- a/flexmark-ext-xwiki-macros/pom.xml
+++ b/flexmark-ext-xwiki-macros/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-xwiki-macros
diff --git a/flexmark-ext-yaml-front-matter/pom.xml b/flexmark-ext-yaml-front-matter/pom.xml
index ac67959cf0..6bdc464e5b 100644
--- a/flexmark-ext-yaml-front-matter/pom.xml
+++ b/flexmark-ext-yaml-front-matter/pom.xml
@@ -4,7 +4,7 @@
flexmark-java
com.vladsch.flexmark
- 0.35.6
+ 0.36.8
flexmark-ext-yaml-front-matter
diff --git a/flexmark-ext-youtube-embedded/pom.xml b/flexmark-ext-youtube-embedded/pom.xml
index 2610f4b806..7f8dc43c0b 100644
--- a/flexmark-ext-youtube-embedded/pom.xml
+++ b/flexmark-ext-youtube-embedded/pom.xml
@@ -4,7 +4,7 @@
flexmark-java
com.vladsch.flexmark
- 0.35.6
+ 0.36.8
4.0.0
diff --git a/flexmark-ext-zzzzzz/pom.xml b/flexmark-ext-zzzzzz/pom.xml
index d0fde10f3c..c929dbcb2b 100644
--- a/flexmark-ext-zzzzzz/pom.xml
+++ b/flexmark-ext-zzzzzz/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-ext-zzzzzz
diff --git a/flexmark-formatter/pom.xml b/flexmark-formatter/pom.xml
index 2df9154507..91b6028554 100644
--- a/flexmark-formatter/pom.xml
+++ b/flexmark-formatter/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-formatter
diff --git a/flexmark-html-parser/pom.xml b/flexmark-html-parser/pom.xml
index 3805bb73e7..b5da7ef535 100644
--- a/flexmark-html-parser/pom.xml
+++ b/flexmark-html-parser/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-html-parser
diff --git a/flexmark-integration-test/pom.xml b/flexmark-integration-test/pom.xml
index b6f72fea16..4b22b56cad 100644
--- a/flexmark-integration-test/pom.xml
+++ b/flexmark-integration-test/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-integration-test
diff --git a/flexmark-jira-converter/pom.xml b/flexmark-jira-converter/pom.xml
index 97e4005f48..b5742acd0d 100644
--- a/flexmark-jira-converter/pom.xml
+++ b/flexmark-jira-converter/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-jira-converter
diff --git a/flexmark-osgi/pom.xml b/flexmark-osgi/pom.xml
index c0d565c08b..62ff455bf1 100644
--- a/flexmark-osgi/pom.xml
+++ b/flexmark-osgi/pom.xml
@@ -7,7 +7,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-osgi
diff --git a/flexmark-pdf-converter/pom.xml b/flexmark-pdf-converter/pom.xml
index 217953ca6e..bbfca20335 100644
--- a/flexmark-pdf-converter/pom.xml
+++ b/flexmark-pdf-converter/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-pdf-converter
diff --git a/flexmark-profile-pegdown/pom.xml b/flexmark-profile-pegdown/pom.xml
index 0f2edfb776..22609dcaba 100644
--- a/flexmark-profile-pegdown/pom.xml
+++ b/flexmark-profile-pegdown/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-profile-pegdown
diff --git a/flexmark-test-util/pom.xml b/flexmark-test-util/pom.xml
index 04114e3944..a6aac2252e 100644
--- a/flexmark-test-util/pom.xml
+++ b/flexmark-test-util/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-test-util
diff --git a/flexmark-util/pom.xml b/flexmark-util/pom.xml
index af96905537..e1bd987d77 100644
--- a/flexmark-util/pom.xml
+++ b/flexmark-util/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-util
diff --git a/flexmark-youtrack-converter/pom.xml b/flexmark-youtrack-converter/pom.xml
index 17dbc3f509..bab074a3f4 100644
--- a/flexmark-youtrack-converter/pom.xml
+++ b/flexmark-youtrack-converter/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-youtrack-converter
diff --git a/flexmark/pom.xml b/flexmark/pom.xml
index a5688b473e..8df9e18ea1 100644
--- a/flexmark/pom.xml
+++ b/flexmark/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark
@@ -15,6 +15,7 @@
com.vladsch.flexmark
flexmark-test-util
+ test
com.vladsch.flexmark
diff --git a/flexmark/src/main/java/com/vladsch/flexmark/internal/DocumentParser.java b/flexmark/src/main/java/com/vladsch/flexmark/internal/DocumentParser.java
index 8e83c540aa..ad8cc9a815 100644
--- a/flexmark/src/main/java/com/vladsch/flexmark/internal/DocumentParser.java
+++ b/flexmark/src/main/java/com/vladsch/flexmark/internal/DocumentParser.java
@@ -1,12 +1,6 @@
package com.vladsch.flexmark.internal;
-import com.vladsch.flexmark.ast.BlankLine;
-import com.vladsch.flexmark.ast.BlankLineContainer;
-import com.vladsch.flexmark.ast.Block;
-import com.vladsch.flexmark.ast.Document;
-import com.vladsch.flexmark.ast.KeepTrailingBlankLineContainer;
-import com.vladsch.flexmark.ast.Node;
-import com.vladsch.flexmark.ast.Paragraph;
+import com.vladsch.flexmark.ast.*;
import com.vladsch.flexmark.ast.util.ClassifyingBlockTracker;
import com.vladsch.flexmark.ast.util.Parsing;
import com.vladsch.flexmark.parser.InlineParser;
@@ -15,7 +9,6 @@
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.parser.block.*;
import com.vladsch.flexmark.parser.delimiter.DelimiterProcessor;
-import com.vladsch.flexmark.test.AstCollectingVisitor;
import com.vladsch.flexmark.util.Computable;
import com.vladsch.flexmark.util.collection.ItemFactoryMap;
import com.vladsch.flexmark.util.collection.iteration.ReversibleIterable;
@@ -28,18 +21,11 @@
import com.vladsch.flexmark.util.sequence.CharSubSequence;
import com.vladsch.flexmark.util.sequence.PrefixedSubSequence;
import com.vladsch.flexmark.util.sequence.SubSequence;
-import org.apache.log4j.Logger;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import static com.vladsch.flexmark.parser.Parser.BLANK_LINES_IN_AST;
import static com.vladsch.flexmark.parser.Parser.TRACK_DOCUMENT_LINES;
@@ -1145,37 +1131,37 @@ private void preProcessBlocks() {
}
}
- private static Logger LOG = Logger.getLogger(DocumentParser.class);
+ //private static Logger LOG = Logger.getLogger(DocumentParser.class);
private Document finalizeAndProcess() {
finalizeBlocks(this.activeBlockParsers);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Parsed\n" + new AstCollectingVisitor().collectAndGetAstText(documentBlockParser.getBlock()));
- }
+ //if (LOG.isDebugEnabled()) {
+ // LOG.debug("Parsed\n" + new AstCollectingVisitor().collectAndGetAstText(documentBlockParser.getBlock()));
+ //}
// need to run block pre-processors at this point, before inline processing
currentPhase = ParserPhase.PRE_PROCESS_PARAGRAPHS;
this.preProcessParagraphs();
- if (LOG.isDebugEnabled()) {
- LOG.debug("Paragraphs PreProcessed\n" + new AstCollectingVisitor().collectAndGetAstText(documentBlockParser.getBlock()));
- }
+ //if (LOG.isDebugEnabled()) {
+ // LOG.debug("Paragraphs PreProcessed\n" + new AstCollectingVisitor().collectAndGetAstText(documentBlockParser.getBlock()));
+ //}
currentPhase = ParserPhase.PRE_PROCESS_BLOCKS;
this.preProcessBlocks();
- if (LOG.isDebugEnabled()) {
- LOG.debug("Blocks PreProcessed\n" + new AstCollectingVisitor().collectAndGetAstText(documentBlockParser.getBlock()));
- }
+ //if (LOG.isDebugEnabled()) {
+ // LOG.debug("Blocks PreProcessed\n" + new AstCollectingVisitor().collectAndGetAstText(documentBlockParser.getBlock()));
+ //}
// can naw run inline processing
currentPhase = ParserPhase.PARSE_INLINES;
this.processInlines();
- if (LOG.isDebugEnabled()) {
- LOG.debug("Inline Processed\n" + new AstCollectingVisitor().collectAndGetAstText(documentBlockParser.getBlock()));
- }
+ //if (LOG.isDebugEnabled()) {
+ // LOG.debug("Inline Processed\n" + new AstCollectingVisitor().collectAndGetAstText(documentBlockParser.getBlock()));
+ //}
currentPhase = ParserPhase.DONE;
Document document = this.documentBlockParser.getBlock();
diff --git a/pom.xml b/pom.xml
index 5fc3ef8bcc..3fc7c59ff8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
com.vladsch.flexmark
flexmark-java
- 0.35.6
+ 0.36.8
flexmark-java
Java re-implementation of commonmark-java based parser, with AST reflecting source elements, full source position tracking, greater parser extensibility.
@@ -217,217 +217,217 @@
com.vladsch.flexmark
flexmark
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-docx-converter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-abbreviation
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-anchorlink
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-admonition
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-aside
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-attributes
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-autolink
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-definition
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-emoji
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-enumerated-reference
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-escaped-character
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-footnotes
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-issues
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-strikethrough
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-tables
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-tasklist
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gfm-users
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-gitlab
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-ins
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-jekyll-front-matter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-jekyll-tag
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-macros
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-media-tags
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-xwiki-macros
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-spec-example
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-superscript
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-tables
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-toc
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-typographic
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-wikilink
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-yaml-front-matter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-youtube-embedded
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-ext-zzzzzz
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-formatter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-html-parser
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-jira-converter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-pdf-converter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-profile-pegdown
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-test-util
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-util
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-youtrack-converter
- 0.35.6
+ 0.36.8
com.vladsch.flexmark
flexmark-all
- 0.35.6
+ 0.36.8
From fc854b9e766cb206033776fbb43c1b17fc8a0f16 Mon Sep 17 00:00:00 2001
From: Vladimir Schneider
Date: Mon, 24 Dec 2018 17:17:26 -0500
Subject: [PATCH 2/3] update version
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 2ab81aa915..e73139ab9a 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,7 @@ following sample:
com.vladsch.flexmark
flexmark-all
- 0.35.6
+ 0.35.8
```
@@ -86,7 +86,7 @@ public class BasicSample {
#### Building via Gradle
```shell
-compile 'com.vladsch.flexmark:flexmark-all:0.35.6'
+compile 'com.vladsch.flexmark:flexmark-all:0.35.8'
```
#### Building with Android Studio
From a38856c1d28a08d8bb5b9a131467c04461fef3d4 Mon Sep 17 00:00:00 2001
From: Vladimir Schneider
Date: Wed, 27 Mar 2019 00:35:00 -0400
Subject: [PATCH 3/3] prep release 0.35.10
---
.idea/markdown-exported-files.xml | 89 +-
.idea/markdown-navigator/COPY_HTML_MIME.xml | 7 +-
.idea/markdown-navigator/GitHub_Templates.xml | 7 +-
.idea/markdown-navigator/OVERVIEW.xml | 7 +-
.../markdown-navigator/profiles_settings.xml | 2 +-
VERSION.md | 6 +
flexmark-all/pom.xml | 78 +-
flexmark-docx-converter/pom.xml | 2 +-
.../internal/CoreNodeDocxRenderer.java | 115 +-
.../ComboDeDocxConverterSpec2Test.java | 333 +
.../ComboDocxConverterSpec2Test.java | 331 +
.../ComboEnDocxConverterSpec2Test.java | 333 +
.../converter/DocxConverterTestSuite.java | 3 +
.../test/resources/docx_converter_ast_spec.md | 6280 ---------------
.../resources/docx_converter_ast_spec2.md | 6877 +++++++++++++++++
.../docx_converter_issues_ast_spec.md | 2 +-
flexmark-ext-abbreviation/pom.xml | 2 +-
flexmark-ext-admonition/pom.xml | 2 +-
flexmark-ext-anchorlink/pom.xml | 4 +-
flexmark-ext-aside/pom.xml | 2 +-
.../flexmark-ext-attributes.iml | 2 +
flexmark-ext-attributes/pom.xml | 190 +-
.../ext/attributes/AttributeNode.java | 4 +-
.../ext/attributes/AttributesDelimiter.java | 27 +
.../ext/attributes/AttributesExtension.java | 2 +
.../ext/attributes/AttributesNode.java | 4 +-
.../attributes/internal/AttributeParsing.java | 16 +-
.../AttributesInlineParserExtension.java | 9 +-
.../internal/AttributesNodeFormatter.java | 7 +
.../internal/AttributesNodePostProcessor.java | 136 +-
.../internal/AttributesOptions.java | 6 +
.../src/main/javadoc/overview.md | 3 +
.../ComboExtAttributesSpecTest.java | 6 +
.../test/resources/ext_attributes_ast_spec.md | 686 +-
flexmark-ext-autolink/pom.xml | 2 +-
flexmark-ext-definition/pom.xml | 2 +-
flexmark-ext-emoji/pom.xml | 2 +-
flexmark-ext-enumerated-reference/pom.xml | 2 +-
.../reference/EnumeratedOrdinalRenderer.java | 25 +
.../reference/EnumeratedReferenceBase.java | 2 +-
.../reference/EnumeratedReferenceBlock.java | 2 +-
.../EnumeratedReferenceRendering.java | 13 +
.../EnumRefTextCollectingVisitor.java | 82 +-
.../EnumeratedReferenceBlockParser.java | 2 +-
.../EnumeratedReferenceLinkRefProcessor.java | 2 +-
.../EnumeratedReferenceNodePostProcessor.java | 23 +-
.../EnumeratedReferenceNodeRenderer.java | 109 +-
.../EnumeratedReferenceRepository.java | 2 +-
.../internal/EnumeratedReferences.java | 120 +-
.../src/main/javadoc/information_source.png | Bin 0 -> 5756 bytes
.../src/main/javadoc/overview.html | 75 +-
.../src/main/javadoc/overview.md | 92 +-
.../ext_enumerated_reference_ast_spec.md | 306 +
flexmark-ext-escaped-character/pom.xml | 2 +-
flexmark-ext-footnotes/pom.xml | 2 +-
flexmark-ext-gfm-issues/pom.xml | 2 +-
flexmark-ext-gfm-strikethrough/pom.xml | 2 +-
flexmark-ext-gfm-tables/pom.xml | 2 +-
flexmark-ext-gfm-tasklist/pom.xml | 2 +-
flexmark-ext-gfm-users/pom.xml | 2 +-
flexmark-ext-gitlab/pom.xml | 2 +-
flexmark-ext-ins/pom.xml | 2 +-
flexmark-ext-jekyll-front-matter/pom.xml | 2 +-
flexmark-ext-jekyll-tag/pom.xml | 2 +-
flexmark-ext-macros/pom.xml | 2 +-
flexmark-ext-media-tags/pom.xml | 2 +-
flexmark-ext-spec-example/pom.xml | 2 +-
flexmark-ext-superscript/pom.xml | 2 +-
flexmark-ext-tables/pom.xml | 2 +-
.../src/main/javadoc/overview.html | 2 +-
flexmark-ext-toc/pom.xml | 2 +-
flexmark-ext-typographic/pom.xml | 2 +-
flexmark-ext-wikilink/pom.xml | 2 +-
flexmark-ext-xwiki-macros/pom.xml | 2 +-
.../src/main/javadoc/overview.html | 2 +-
flexmark-ext-yaml-front-matter/pom.xml | 2 +-
flexmark-ext-youtube-embedded/pom.xml | 2 +-
flexmark-ext-zzzzzz/pom.xml | 2 +-
flexmark-formatter/pom.xml | 2 +-
flexmark-html-parser/pom.xml | 2 +-
flexmark-integration-test/pom.xml | 2 +-
flexmark-jira-converter/pom.xml | 2 +-
flexmark-osgi/pom.xml | 2 +-
flexmark-pdf-converter/pom.xml | 2 +-
flexmark-profile-pegdown/pom.xml | 2 +-
flexmark-test-util/pom.xml | 2 +-
flexmark-util/pom.xml | 2 +-
.../flexmark/ast/DoNotAttributeDecorate.java | 7 +
flexmark-youtrack-converter/pom.xml | 2 +-
flexmark/pom.xml | 2 +-
.../vladsch/flexmark/ast/util/Parsing.java | 9 +
pom.xml | 88 +-
92 files changed, 9959 insertions(+), 6660 deletions(-)
create mode 100644 flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboDeDocxConverterSpec2Test.java
create mode 100644 flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboDocxConverterSpec2Test.java
create mode 100644 flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboEnDocxConverterSpec2Test.java
create mode 100644 flexmark-docx-converter/src/test/resources/docx_converter_ast_spec2.md
create mode 100644 flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesDelimiter.java
create mode 100644 flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedOrdinalRenderer.java
create mode 100644 flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceRendering.java
create mode 100644 flexmark-ext-enumerated-reference/src/main/javadoc/information_source.png
create mode 100644 flexmark-util/src/main/java/com/vladsch/flexmark/ast/DoNotAttributeDecorate.java
diff --git a/.idea/markdown-exported-files.xml b/.idea/markdown-exported-files.xml
index a404d7591c..9319bc56a1 100644
--- a/.idea/markdown-exported-files.xml
+++ b/.idea/markdown-exported-files.xml
@@ -2,52 +2,53 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
diff --git a/.idea/markdown-navigator/COPY_HTML_MIME.xml b/.idea/markdown-navigator/COPY_HTML_MIME.xml
index bc8aaad07d..b53f944f93 100644
--- a/.idea/markdown-navigator/COPY_HTML_MIME.xml
+++ b/.idea/markdown-navigator/COPY_HTML_MIME.xml
@@ -1,6 +1,6 @@
-
+
@@ -55,10 +55,12 @@
+
+
-
+
@@ -78,6 +80,7 @@
code { background-color:#f0f0f0;border-radius:2px;padding:1px 2px 0 2px;border:1px solid #e0e0e0;font-family:Consolas,Inconsolata,Courier,monospace;font-size:0.9em;color:#bb002f; }
+
diff --git a/.idea/markdown-navigator/GitHub_Templates.xml b/.idea/markdown-navigator/GitHub_Templates.xml
index fb3a1e3d2b..a54e43ed13 100644
--- a/.idea/markdown-navigator/GitHub_Templates.xml
+++ b/.idea/markdown-navigator/GitHub_Templates.xml
@@ -1,6 +1,6 @@
-
+
@@ -55,10 +55,12 @@
+
+
-
+
@@ -105,6 +107,7 @@ code {
}
+
diff --git a/.idea/markdown-navigator/OVERVIEW.xml b/.idea/markdown-navigator/OVERVIEW.xml
index 314b9b6a5a..f037b2d465 100644
--- a/.idea/markdown-navigator/OVERVIEW.xml
+++ b/.idea/markdown-navigator/OVERVIEW.xml
@@ -1,6 +1,6 @@
-
+
@@ -55,10 +55,12 @@
+
+
-
+
@@ -103,6 +105,7 @@ code {
}
+
diff --git a/.idea/markdown-navigator/profiles_settings.xml b/.idea/markdown-navigator/profiles_settings.xml
index 33a1ecc7e1..5f9d0cd4e8 100644
--- a/.idea/markdown-navigator/profiles_settings.xml
+++ b/.idea/markdown-navigator/profiles_settings.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/VERSION.md b/VERSION.md
index 9ecf5b70ed..c88e941c2d 100644
--- a/VERSION.md
+++ b/VERSION.md
@@ -7,6 +7,7 @@ flexmark-java
- [To Do](#to-do)
- [Docx Converter](#docx-converter)
+- [0.35.10](#03510)
- [0.35.8](#0358)
- [0.35.6](#0356)
- [0.35.4](#0354)
@@ -266,6 +267,11 @@ flexmark-java
+0.35.10
+-------
+
+* Add: compound enum refs and enum refs in headings without element reference.
+
0.35.8
------
diff --git a/flexmark-all/pom.xml b/flexmark-all/pom.xml
index 2bbe50390f..dbc35528f2 100644
--- a/flexmark-all/pom.xml
+++ b/flexmark-all/pom.xml
@@ -7,7 +7,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-all
@@ -21,192 +21,192 @@
com.vladsch.flexmark
flexmark
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-abbreviation
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-admonition
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-anchorlink
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-aside
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-attributes
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-autolink
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-definition
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-emoji
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-enumerated-reference
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-escaped-character
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-footnotes
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-gfm-issues
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-gfm-strikethrough
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-gfm-tables
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-gfm-tasklist
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-gfm-users
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-gitlab
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-jekyll-front-matter
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-jekyll-tag
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-media-tags
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-macros
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-ins
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-xwiki-macros
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-superscript
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-tables
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-toc
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-typographic
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-wikilink
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-yaml-front-matter
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-ext-youtube-embedded
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-formatter
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-html-parser
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-jira-converter
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-pdf-converter
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-profile-pegdown
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-util
- 0.36.8
+ 0.35.10
com.vladsch.flexmark
flexmark-youtrack-converter
- 0.36.8
+ 0.35.10
diff --git a/flexmark-docx-converter/pom.xml b/flexmark-docx-converter/pom.xml
index 5c6660f4eb..c63c42a670 100644
--- a/flexmark-docx-converter/pom.xml
+++ b/flexmark-docx-converter/pom.xml
@@ -5,7 +5,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-docx-converter
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 93ed6ef0c3..d0005dfbb5 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
@@ -15,10 +15,7 @@
import com.vladsch.flexmark.ext.emoji.EmojiExtension;
import com.vladsch.flexmark.ext.emoji.internal.EmojiOptions;
import com.vladsch.flexmark.ext.emoji.internal.EmojiResolvedShortcut;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceBlock;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceLink;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceText;
+import com.vladsch.flexmark.ext.enumerated.reference.*;
import com.vladsch.flexmark.ext.enumerated.reference.internal.EnumRefTextCollectingVisitor;
import com.vladsch.flexmark.ext.enumerated.reference.internal.EnumeratedReferenceRepository;
import com.vladsch.flexmark.ext.enumerated.reference.internal.EnumeratedReferences;
@@ -36,9 +33,7 @@
import com.vladsch.flexmark.ext.toc.SimTocBlock;
import com.vladsch.flexmark.ext.toc.TocBlock;
import com.vladsch.flexmark.ext.toc.TocBlockBase;
-import com.vladsch.flexmark.html.renderer.AttributablePart;
-import com.vladsch.flexmark.html.renderer.LinkType;
-import com.vladsch.flexmark.html.renderer.ResolvedLink;
+import com.vladsch.flexmark.html.renderer.*;
import com.vladsch.flexmark.parser.ListOptions;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.superscript.Superscript;
@@ -110,6 +105,7 @@ public class CoreNodeDocxRenderer implements PhasedNodeDocxRenderer {
private long[] bulletLists = new long[128];
private EnumeratedReferences enumeratedOrdinals;
int ordinal;
+ private final HtmlIdGenerator headerIdGenerator; // used for enumerated text reference
private void ensureNumberedListLength(int level) {
if (numberedLists.length < level) {
@@ -147,6 +143,7 @@ public CoreNodeDocxRenderer(DataHolder options) {
final MutableScopedDataSet options1 = new MutableScopedDataSet(options);
options1.set(EmojiExtension.ROOT_IMAGE_PATH, DocxRenderer.DOC_EMOJI_ROOT_IMAGE_PATH.getFrom(options));
emojiOptions = new EmojiOptions(options1);
+ headerIdGenerator = new HeaderIdGenerator.Factory().create();
}
@Override
@@ -161,6 +158,7 @@ public void renderDocument(final DocxRendererContext docx, final Document docume
case COLLECT:
// get resolved styles
options = docx.getDocxRendererOptions();
+ headerIdGenerator.generateIds(document);
break;
case DOCUMENT_TOP:
@@ -1699,39 +1697,57 @@ private void render(SimTocBlock node, final DocxRendererContext docx) {
}
private void render(EnumeratedReferenceText node, final DocxRendererContext docx) {
- final String text = node.getText().toString();
+ String text = node.getText().toString();
if (text.isEmpty()) {
// placeholder for ordinal
docx.text(String.valueOf(ordinal));
} else {
- Node referenceFormat = enumeratedOrdinals.getFormatNode(text);
+ String type = EnumeratedReferenceRepository.getType(text.toString());
+ if (type.isEmpty() || text.equals(type + ":")) {
+ Node parent = node.getAncestorOfType(Heading.class);
- int wasOrdinal = ordinal;
- ordinal = enumeratedOrdinals.getOrdinal(text);
- if (referenceFormat != null) {
- docx.renderChildren(referenceFormat);
- } else {
- // no format, just output ordinal
- docx.text(String.valueOf(ordinal));
+ if (parent instanceof Heading) {
+ text = (type.isEmpty() ? text : type) + ":" + headerIdGenerator.getId(parent);
+ }
}
- ordinal = wasOrdinal;
+
+ enumeratedOrdinals.renderReferenceOrdinals(text, null, new EnumeratedOrdinalRenderer() {
+ @Override
+ public void startRendering(final EnumeratedReferenceRendering[] renderings) {
+
+ }
+
+ @Override
+ public void render(final int referenceOrdinal, final EnumeratedReferenceBlock referenceFormat, final String defaultText, final boolean needSeparator) {
+ if (needSeparator) docx.text(".");
+
+ if (referenceFormat != null) {
+ CoreNodeDocxRenderer.this.ordinal = referenceOrdinal;
+ docx.renderChildren(referenceFormat);
+ } else {
+ docx.text(defaultText.toString());
+ }
+ }
+
+ @Override
+ public void endRendering() {
+
+ }
+ });
}
}
- private void render(EnumeratedReferenceLink node, final DocxRendererContext docx) {
+ private void render(final EnumeratedReferenceLink node, final DocxRendererContext docx) {
final String text = node.getText().toString();
if (text.isEmpty()) {
// placeholder for ordinal
docx.text(String.valueOf(ordinal));
} else {
- final Node referenceFormat = enumeratedOrdinals.getFormatNode(text);
- int wasOrdinal = ordinal;
- ordinal = enumeratedOrdinals.getOrdinal(text);
+ final EnumeratedReferenceRendering[] renderings = enumeratedOrdinals.getEnumeratedReferenceOrdinals(text);
- final String defaultText = String.format("%s %d", EnumeratedReferenceRepository.getType(text), ordinal);
- String title = referenceFormat != null ? new EnumRefTextCollectingVisitor(ordinal).collectAndGetText(referenceFormat) : defaultText;
+ String title = new EnumRefTextCollectingVisitor().collectAndGetText(node.getChars().getBaseSequence(), renderings, null);
Attributes attributes = new Attributes();
if (title != null) {
@@ -1739,8 +1755,35 @@ private void render(EnumeratedReferenceLink node, final DocxRendererContext docx
}
attributes = docx.extendRenderingNodeAttributes(AttributablePart.NODE, attributes);
- renderURL(node.getText(), docx, "#" + text, attributes, new EnumeratedReferenceRenderer(docx, referenceFormat, defaultText));
- ordinal = wasOrdinal;
+ renderURL(node.getText(), docx, "#" + text, attributes, new Runnable() {
+ @Override
+ public void run() {
+ EnumeratedReferences.renderReferenceOrdinals(renderings, null, new EnumeratedOrdinalRenderer() {
+ @Override
+ public void startRendering(final EnumeratedReferenceRendering[] renderings) {
+
+ }
+
+ @Override
+ public void render(final int referenceOrdinal, final EnumeratedReferenceBlock referenceFormat, final String defaultText, final boolean needSeparator) {
+ if (needSeparator) docx.text(".");
+
+ if (referenceFormat != null) {
+ CoreNodeDocxRenderer.this.ordinal = referenceOrdinal;
+ docx.renderChildren(referenceFormat);
+ } else {
+ // no format, just output ordinal
+ docx.text(defaultText);
+ }
+ }
+
+ @Override
+ public void endRendering() {
+
+ }
+ });
+ }
+ });
}
}
@@ -1875,28 +1918,6 @@ public void addContentElement(final Object element) {
}
}
- private static class EnumeratedReferenceRenderer implements Runnable {
- private final DocxRendererContext myDocx;
- private final Node myReferenceFormat;
- private final String myDefaultText;
-
- public EnumeratedReferenceRenderer(final DocxRendererContext docx, final Node referenceFormat, final String defaultText) {
- myDocx = docx;
- myReferenceFormat = referenceFormat;
- myDefaultText = defaultText;
- }
-
- @Override
- public void run() {
- if (myReferenceFormat != null) {
- myDocx.renderChildren(myReferenceFormat);
- } else {
- // no format, just output ordinal
- myDocx.text(myDefaultText);
- }
- }
- }
-
private static class TableCaptionRenderer implements Runnable {
private final DocxRendererContext myDocx;
private final TableCaption myNode;
diff --git a/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboDeDocxConverterSpec2Test.java b/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboDeDocxConverterSpec2Test.java
new file mode 100644
index 0000000000..3119335efe
--- /dev/null
+++ b/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboDeDocxConverterSpec2Test.java
@@ -0,0 +1,333 @@
+package com.vladsch.flexmark.docx.converter;
+
+import com.vladsch.flexmark.IRender;
+import com.vladsch.flexmark.ast.Node;
+import com.vladsch.flexmark.docx.converter.internal.DocxRenderer;
+import com.vladsch.flexmark.docx.converter.util.DocxContextImpl;
+import com.vladsch.flexmark.docx.converter.util.RunFormatProvider;
+import com.vladsch.flexmark.docx.converter.util.XmlDocxSorter;
+import com.vladsch.flexmark.ext.aside.AsideExtension;
+import com.vladsch.flexmark.ext.attributes.AttributesExtension;
+import com.vladsch.flexmark.ext.definition.DefinitionExtension;
+import com.vladsch.flexmark.ext.emoji.EmojiExtension;
+import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension;
+import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
+import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
+import com.vladsch.flexmark.ext.gitlab.GitLabExtension;
+import com.vladsch.flexmark.ext.ins.InsExtension;
+import com.vladsch.flexmark.ext.macros.MacrosExtension;
+import com.vladsch.flexmark.ext.tables.TablesExtension;
+import com.vladsch.flexmark.ext.toc.SimTocExtension;
+import com.vladsch.flexmark.ext.toc.TocExtension;
+import com.vladsch.flexmark.ext.wikilink.WikiLinkExtension;
+import com.vladsch.flexmark.html.HtmlRenderer;
+import com.vladsch.flexmark.html.renderer.AttributablePart;
+import com.vladsch.flexmark.parser.Parser;
+import com.vladsch.flexmark.spec.SpecExample;
+import com.vladsch.flexmark.spec.SpecReader;
+import com.vladsch.flexmark.superscript.SuperscriptExtension;
+import com.vladsch.flexmark.test.ComboSpecTestCase;
+import com.vladsch.flexmark.util.html.Attributes;
+import com.vladsch.flexmark.util.options.DataHolder;
+import com.vladsch.flexmark.util.options.MutableDataSet;
+import org.apache.log4j.Logger;
+import org.apache.log4j.varia.NullAppender;
+import org.docx4j.Docx4J;
+import org.docx4j.openpackaging.exceptions.Docx4JException;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.docx4j.wml.Text;
+import org.junit.runners.Parameterized;
+
+import java.io.*;
+import java.util.*;
+
+public class ComboDeDocxConverterSpec2Test extends ComboSpecTestCase {
+ // set to false to dump DOCX and XML files to pre-determined location
+ // RELEASE : change to true for release
+ static final boolean SKIP_IGNORED_TESTS = ComboDocxConverterSpecTest.SKIP_IGNORED_TESTS;
+ private static final boolean DUMP_TEST_CASE_FILES = !SKIP_IGNORED_TESTS;
+ private static final boolean DUMP_ALL_TESTS_FILES = !SKIP_IGNORED_TESTS;
+ private static final String PROJECT_ROOT_DIRECTORY = ComboDocxConverterSpecTest.PROJECT_ROOT_DIRECTORY;
+ private static final String FILE_TEST_CASE_DUMP_LOCATION = "/flexmark-docx-converter/src/test/resources/docx_converter_de_ast_spec/";
+ private static final String FILE_ALL_TESTS_DUMP_NAME = FILE_TEST_CASE_DUMP_LOCATION + "AllTests2";
+
+ private static final String SPEC_RESOURCE = "/docx_converter_ast_spec2.md";
+ private static final DataHolder OPTIONS = new MutableDataSet()
+ .set(HtmlRenderer.INDENT_SIZE, 2)
+ .set(Parser.EXTENSIONS, Arrays.asList(
+ AsideExtension.create(),
+ AttributesExtension.create(),
+ DefinitionExtension.create(),
+ EmojiExtension.create(),
+ EnumeratedReferenceExtension.create(),
+ FootnoteExtension.create(),
+ GitLabExtension.create(),
+ InsExtension.create(),
+ MacrosExtension.create(),
+ StrikethroughSubscriptExtension.create(),
+ SuperscriptExtension.create(),
+ TablesExtension.create(),
+ TocExtension.create(),
+ SimTocExtension.create(),
+ WikiLinkExtension.create()
+ ))
+ .set(DocxRenderer.RENDER_BODY_ONLY, true)
+ .set(DocxRenderer.DOC_RELATIVE_URL, String.format("file://%s", PROJECT_ROOT_DIRECTORY))
+ .set(DocxRenderer.DOC_ROOT_URL, String.format("file://%s/assets", PROJECT_ROOT_DIRECTORY))
+ .set(DocxRenderer.SUPPRESS_HTML, true)
+ //.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
+ ;
+
+ private static final Map optionsMap = new HashMap();
+ //private static WordprocessingMLPackage ourPackage = new WordprocessingMLPackage();;
+
+ private static final Parser PARSER = Parser.builder(OPTIONS).build();
+ // The spec says URL-escaping is optional, but the examples assume that it's enabled.
+ private static final DocxRenderer RENDERER = DocxRenderer.builder(OPTIONS).build();
+ private static final String TEMPLATE_XML = "/DE-Template.xml";
+
+ static {
+ //optionsMap.put("src-pos", new MutableDataSet().set(HtmlRenderer.SOURCE_POSITION_ATTRIBUTE, "md-pos"));
+ //optionsMap.put("option1", new MutableDataSet().set(DocxConverterExtension.DOCX_CONVERTER_OPTION1, true));
+ optionsMap.put("IGNORED", new MutableDataSet().set(IGNORE, SKIP_IGNORED_TESTS));
+ optionsMap.put("url", new MutableDataSet().set(DocxRenderer.DOC_RELATIVE_URL, String.format("file://%s", PROJECT_ROOT_DIRECTORY)));
+ optionsMap.put("caption-before", new MutableDataSet().set(DocxRenderer.TABLE_CAPTION_BEFORE_TABLE, true));
+ optionsMap.put("highlight-code", new MutableDataSet().set(DocxRenderer.CODE_HIGHLIGHT_SHADING, "yellow"));
+ optionsMap.put("highlight-shade", new MutableDataSet().set(DocxRenderer.CODE_HIGHLIGHT_SHADING, "shade"));
+ optionsMap.put("hyperlink-suffix", new MutableDataSet().set(DocxRenderer.LOCAL_HYPERLINK_SUFFIX, "_1"));
+ optionsMap.put("yellow-missing-hyperlink", new MutableDataSet().set(DocxRenderer.LOCAL_HYPERLINK_MISSING_HIGHLIGHT, ""));
+ optionsMap.put("table-no-span", new MutableDataSet().set(TablesExtension.COLUMN_SPANS, false));
+ //optionsMap.put("heading-id-suffix", new MutableDataSet().set(DocxRenderer.FIRST_HEADING_ID_SUFFIX, "_1"));
+
+ // Set up a simple configuration that logs on the console.
+ //BasicConfigurator.configure();
+ Logger root = Logger.getRootLogger();
+ root.addAppender(new NullAppender());
+ }
+ private static DataHolder optionsSet(String optionSet) {
+ if (optionSet == null) return null;
+ return optionsMap.get(optionSet);
+ }
+
+ public ComboDeDocxConverterSpec2Test(SpecExample example) {
+ super(example);
+ }
+
+ @Parameterized.Parameters(name = "{0}")
+ public static List data() {
+ List examples = SpecReader.readExamples(SPEC_RESOURCE);
+ List data = new ArrayList();
+
+ // NULL example runs full spec test
+ data.add(new Object[] { SpecExample.NULL });
+
+ for (SpecExample example : examples) {
+ data.add(new Object[] { example });
+ }
+ return data;
+ }
+
+ @Override
+ public DataHolder options(String optionSet) {
+ return optionsSet(optionSet);
+ }
+
+ @Override
+ public String getSpecResourceName() {
+ return SPEC_RESOURCE;
+ }
+
+ @Override
+ public Parser parser() {
+ return PARSER;
+ }
+
+ @Override
+ public IRender renderer() {
+ return RENDERER;
+ }
+
+ @Override
+ protected void testCase(final Node node, final DataHolder options) {
+ if (!DUMP_TEST_CASE_FILES) return;
+
+ final SpecExample specExample = example();
+ if (!specExample.isFullSpecExample() && !specExample.getSection().isEmpty()) {
+ // write it out to file, hard-coded for now IGNORE
+ File file = new File(String.format("%s%s%s_%d.docx", PROJECT_ROOT_DIRECTORY, FILE_TEST_CASE_DUMP_LOCATION, specExample.getSection(), specExample.getExampleNumber()));
+ File file2 = new File(String.format("%s%s%s_%d.xml", PROJECT_ROOT_DIRECTORY, FILE_TEST_CASE_DUMP_LOCATION, specExample.getSection(), specExample.getExampleNumber()));
+ WordprocessingMLPackage mlPackage = DocxRenderer.getDefaultTemplate(TEMPLATE_XML);
+ RENDERER.withOptions(options).render(node, mlPackage);
+
+ File parentDir = file.getParentFile();
+ if (!parentDir.exists()) {
+ parentDir.mkdirs();
+ }
+
+ try {
+ mlPackage.save(file, Docx4J.FLAG_SAVE_ZIP_FILE);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ try {
+ mlPackage.save(outputStream, Docx4J.FLAG_SAVE_FLAT_XML);
+ final String xml = outputStream.toString("UTF-8");
+ final String s = XmlDocxSorter.sortDocumentParts(xml);
+ FileWriter fileWriter = new FileWriter(file2);
+ fileWriter.append(s);
+ fileWriter.append('\n');
+ fileWriter.close();
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public void addSpecExample(SpecExample example, Node node, DataHolder options, boolean ignoredCase, String actualHTML, String actualAST) {
+ if (!DUMP_ALL_TESTS_FILES) return;
+
+ final boolean failed = !ignoredCase && !actualHTML.equals(example.getHtml());
+
+ // add source information
+ myDocxContext.createP(myDocxContext.getRenderingOptions().HEADING_3);
+
+ if (ignoredCase) {
+ // does not match, need more stuff
+
+ myDocxContext.createColor().setVal("BB002F");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Ignored ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ } else if (failed) {
+ // does not match, need more stuff
+ myDocxContext.createColor().setVal("BB002F");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Failed ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ } else {
+ // does not match, need more stuff
+ myDocxContext.createColor().setVal("008000");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Passed ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ }
+
+ StringBuilder header = new StringBuilder();
+ final String section = example.getSection();
+
+ header.append(section == null ? "" : section.trim()).append(": ").append(example.getExampleNumber());
+ final String optionsSet = example.getOptionsSet();
+ myDocxContext.text(header.toString());
+
+ if (optionsSet != null) {
+ myDocxContext.createHpsMeasure(28);
+ myDocxContext.createColor().setVal("7B56A0");
+ Text text = myDocxContext.addWrappedText();
+ text.setValue((SpecReader.OPTIONS_STRING + "(") + optionsSet + ")");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ }
+
+ myDocxContext.createHorizontalLine();
+ RENDERER.withOptions(options).render(node, myPackage);
+ myDocxContext.createHorizontalLine();
+
+ if (example.hasComment()) {
+ final String comment = example.getComment();
+ String[] lines = comment.split("\n\\s*\n");
+ for (String line : lines) {
+ String trimmed = line.trim();
+ if (!trimmed.isEmpty()) {
+ myDocxContext.createP(myDocxContext.getRenderingOptions().LOOSE_PARAGRAPH_STYLE);
+ myDocxContext.createColor().setVal("808080");
+ Text text = myDocxContext.addWrappedText();
+ text.setValue(trimmed);
+ }
+ }
+ }
+
+ myDocxContext.renderFencedCodeLines(example.getSource().split("\n"));
+
+ //noinspection StatementWithEmptyBody
+ if (failed) {
+ // could add expected and actual text but that would be too much
+ }
+ }
+
+ private DocxContextImpl myDocxContext;
+ private WordprocessingMLPackage myPackage;
+ private String myVisibleLineBreak;
+
+ @Override
+ public boolean fullTestSpecStarting() {
+ if (!DUMP_ALL_TESTS_FILES) return true;
+
+ myPackage = DocxRenderer.getDefaultTemplate(TEMPLATE_XML);
+ if (myPackage == null) return true;
+
+ myDocxContext = new DocxContextImpl(myPackage, null) {
+ @Override
+ public Attributes extendRenderingNodeAttributes(final AttributablePart part, final Attributes attributes) {
+ return null;
+ }
+
+ @Override
+ public Attributes extendRenderingNodeAttributes(final Node node, final AttributablePart part, final Attributes attributes) {
+ return null;
+ }
+
+ @Override
+ public String getNodeId(final Node node) {
+ return null;
+ }
+
+ @Override
+ public String getValidBookmarkName(final String id) {
+ return null;
+ }
+
+ @Override
+ public Node getNodeFromId(final String nodeId) {
+ return null;
+ }
+ };
+ myVisibleLineBreak = "¶";
+ return true;
+ }
+
+ @Override
+ protected void fullTestSpecComplete() {
+ if (!DUMP_ALL_TESTS_FILES || myPackage == null) return;
+
+ // write it out to file, hard-coded for now IGNORE
+ File file = new File(String.format("%s%s.docx", PROJECT_ROOT_DIRECTORY, FILE_ALL_TESTS_DUMP_NAME));
+ File file2 = new File(String.format("%s%s.xml", PROJECT_ROOT_DIRECTORY, FILE_ALL_TESTS_DUMP_NAME));
+ WordprocessingMLPackage mlPackage = myPackage;
+
+ try {
+ mlPackage.save(file, Docx4J.FLAG_SAVE_ZIP_FILE);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ mlPackage.save(outputStream, Docx4J.FLAG_SAVE_FLAT_XML);
+ final String xml = outputStream.toString("UTF-8");
+ final String s = XmlDocxSorter.sortDocumentParts(xml);
+ FileWriter fileWriter = new FileWriter(file2);
+ fileWriter.append(s);
+ fileWriter.append('\n');
+ fileWriter.close();
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboDocxConverterSpec2Test.java b/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboDocxConverterSpec2Test.java
new file mode 100644
index 0000000000..fb296d39cc
--- /dev/null
+++ b/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboDocxConverterSpec2Test.java
@@ -0,0 +1,331 @@
+package com.vladsch.flexmark.docx.converter;
+
+import com.vladsch.flexmark.IRender;
+import com.vladsch.flexmark.ast.Node;
+import com.vladsch.flexmark.docx.converter.internal.DocxRenderer;
+import com.vladsch.flexmark.docx.converter.util.DocxContextImpl;
+import com.vladsch.flexmark.docx.converter.util.RunFormatProvider;
+import com.vladsch.flexmark.docx.converter.util.XmlDocxSorter;
+import com.vladsch.flexmark.ext.aside.AsideExtension;
+import com.vladsch.flexmark.ext.attributes.AttributesExtension;
+import com.vladsch.flexmark.ext.definition.DefinitionExtension;
+import com.vladsch.flexmark.ext.emoji.EmojiExtension;
+import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension;
+import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
+import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
+import com.vladsch.flexmark.ext.gitlab.GitLabExtension;
+import com.vladsch.flexmark.ext.ins.InsExtension;
+import com.vladsch.flexmark.ext.macros.MacrosExtension;
+import com.vladsch.flexmark.ext.tables.TablesExtension;
+import com.vladsch.flexmark.ext.toc.SimTocExtension;
+import com.vladsch.flexmark.ext.toc.TocExtension;
+import com.vladsch.flexmark.ext.wikilink.WikiLinkExtension;
+import com.vladsch.flexmark.html.HtmlRenderer;
+import com.vladsch.flexmark.html.renderer.AttributablePart;
+import com.vladsch.flexmark.parser.Parser;
+import com.vladsch.flexmark.spec.SpecExample;
+import com.vladsch.flexmark.spec.SpecReader;
+import com.vladsch.flexmark.superscript.SuperscriptExtension;
+import com.vladsch.flexmark.test.ComboSpecTestCase;
+import com.vladsch.flexmark.util.html.Attributes;
+import com.vladsch.flexmark.util.options.DataHolder;
+import com.vladsch.flexmark.util.options.MutableDataSet;
+import org.apache.log4j.Logger;
+import org.apache.log4j.varia.NullAppender;
+import org.docx4j.Docx4J;
+import org.docx4j.openpackaging.exceptions.Docx4JException;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.docx4j.wml.Text;
+import org.junit.runners.Parameterized;
+
+import java.io.*;
+import java.util.*;
+
+public class ComboDocxConverterSpec2Test extends ComboSpecTestCase {
+ // set to false to dump DOCX and XML files to pre-determined location
+ // RELEASE : change to true for release
+ static final boolean SKIP_IGNORED_TESTS = ComboDocxConverterSpecTest.SKIP_IGNORED_TESTS;
+ static final boolean DUMP_TEST_CASE_FILES = !SKIP_IGNORED_TESTS;
+ static final boolean DUMP_ALL_TESTS_FILES = !SKIP_IGNORED_TESTS;
+ static final String PROJECT_ROOT_DIRECTORY = "/Users/vlad/src/projects/flexmark-java";
+ static final String FILE_TEST_CASE_DUMP_LOCATION = "/flexmark-docx-converter/src/test/resources/docx_converter_ast_spec/";
+ static final String FILE_ALL_TESTS_DUMP_NAME = FILE_TEST_CASE_DUMP_LOCATION + "AllTests2";
+
+ private static final String SPEC_RESOURCE = "/docx_converter_ast_spec2.md";
+ private static final DataHolder OPTIONS = new MutableDataSet()
+ .set(HtmlRenderer.INDENT_SIZE, 2)
+ .set(Parser.EXTENSIONS, Arrays.asList(
+ AsideExtension.create(),
+ AttributesExtension.create(),
+ DefinitionExtension.create(),
+ EmojiExtension.create(),
+ EnumeratedReferenceExtension.create(),
+ FootnoteExtension.create(),
+ GitLabExtension.create(),
+ InsExtension.create(),
+ MacrosExtension.create(),
+ StrikethroughSubscriptExtension.create(),
+ SuperscriptExtension.create(),
+ TablesExtension.create(),
+ TocExtension.create(),
+ SimTocExtension.create(),
+ WikiLinkExtension.create()
+ ))
+ .set(DocxRenderer.RENDER_BODY_ONLY, true)
+ .set(DocxRenderer.DOC_RELATIVE_URL, String.format("file://%s", PROJECT_ROOT_DIRECTORY))
+ .set(DocxRenderer.DOC_ROOT_URL, String.format("file://%s/assets", PROJECT_ROOT_DIRECTORY))
+ .set(DocxRenderer.SUPPRESS_HTML, true)
+ //.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
+ ;
+
+ private static final Map optionsMap = new HashMap();
+ //private static WordprocessingMLPackage ourPackage = new WordprocessingMLPackage();;
+
+ private static final Parser PARSER = Parser.builder(OPTIONS).build();
+ // The spec says URL-escaping is optional, but the examples assume that it's enabled.
+ private static final DocxRenderer RENDERER = DocxRenderer.builder(OPTIONS).build();
+ static {
+ //optionsMap.put("src-pos", new MutableDataSet().set(HtmlRenderer.SOURCE_POSITION_ATTRIBUTE, "md-pos"));
+ //optionsMap.put("option1", new MutableDataSet().set(DocxConverterExtension.DOCX_CONVERTER_OPTION1, true));
+ optionsMap.put("IGNORED", new MutableDataSet().set(IGNORE, SKIP_IGNORED_TESTS));
+ optionsMap.put("url", new MutableDataSet().set(DocxRenderer.DOC_RELATIVE_URL, String.format("file://%s", PROJECT_ROOT_DIRECTORY)));
+ optionsMap.put("caption-before", new MutableDataSet().set(DocxRenderer.TABLE_CAPTION_BEFORE_TABLE, true));
+ optionsMap.put("highlight-code", new MutableDataSet().set(DocxRenderer.CODE_HIGHLIGHT_SHADING, "yellow"));
+ optionsMap.put("highlight-shade", new MutableDataSet().set(DocxRenderer.CODE_HIGHLIGHT_SHADING, "shade"));
+ optionsMap.put("hyperlink-suffix", new MutableDataSet().set(DocxRenderer.LOCAL_HYPERLINK_SUFFIX, "_1"));
+ optionsMap.put("yellow-missing-hyperlink", new MutableDataSet().set(DocxRenderer.LOCAL_HYPERLINK_MISSING_HIGHLIGHT, ""));
+ optionsMap.put("table-no-span", new MutableDataSet().set(TablesExtension.COLUMN_SPANS, false));
+ //optionsMap.put("heading-id-suffix", new MutableDataSet().set(DocxRenderer.FIRST_HEADING_ID_SUFFIX, "_1"));
+
+ // Set up a simple configuration that logs on the console.
+ //BasicConfigurator.configure();
+ Logger root = Logger.getRootLogger();
+ root.addAppender(new NullAppender());
+ }
+ private static DataHolder optionsSet(String optionSet) {
+ if (optionSet == null) return null;
+ return optionsMap.get(optionSet);
+ }
+
+ public ComboDocxConverterSpec2Test(SpecExample example) {
+ super(example);
+ }
+
+ @Parameterized.Parameters(name = "{0}")
+ public static List data() {
+ List examples = SpecReader.readExamples(SPEC_RESOURCE);
+ List data = new ArrayList();
+
+ // NULL example runs full spec test
+ data.add(new Object[] { SpecExample.NULL });
+
+ for (SpecExample example : examples) {
+ data.add(new Object[] { example });
+ }
+ return data;
+ }
+
+ @Override
+ public DataHolder options(String optionSet) {
+ return optionsSet(optionSet);
+ }
+
+ @Override
+ public String getSpecResourceName() {
+ return SPEC_RESOURCE;
+ }
+
+ @Override
+ public Parser parser() {
+ return PARSER;
+ }
+
+ @Override
+ public IRender renderer() {
+ return RENDERER;
+ }
+
+ @Override
+ protected void testCase(final Node node, final DataHolder options) {
+ if (!DUMP_TEST_CASE_FILES) return;
+
+ final SpecExample specExample = example();
+ if (!specExample.isFullSpecExample() && !specExample.getSection().isEmpty()) {
+ // write it out to file, hard-coded for now IGNORE
+ File file = new File(String.format("%s%s%s_%d.docx", PROJECT_ROOT_DIRECTORY, FILE_TEST_CASE_DUMP_LOCATION, specExample.getSection(), specExample.getExampleNumber()));
+ File file2 = new File(String.format("%s%s%s_%d.xml", PROJECT_ROOT_DIRECTORY, FILE_TEST_CASE_DUMP_LOCATION, specExample.getSection(), specExample.getExampleNumber()));
+ WordprocessingMLPackage mlPackage = DocxRenderer.getDefaultTemplate();
+ RENDERER.withOptions(options).render(node, mlPackage);
+
+ File parentDir = file.getParentFile();
+ if (!parentDir.exists()) {
+ parentDir.mkdirs();
+ }
+
+ try {
+ mlPackage.save(file, Docx4J.FLAG_SAVE_ZIP_FILE);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ try {
+ mlPackage.save(outputStream, Docx4J.FLAG_SAVE_FLAT_XML);
+ final String xml = outputStream.toString("UTF-8");
+ final String s = XmlDocxSorter.sortDocumentParts(xml);
+ FileWriter fileWriter = new FileWriter(file2);
+ fileWriter.append(s);
+ fileWriter.append('\n');
+ fileWriter.close();
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public void addSpecExample(SpecExample example, Node node, DataHolder options, boolean ignoredCase, String actualHTML, String actualAST) {
+ if (!DUMP_ALL_TESTS_FILES) return;
+
+ final boolean failed = !ignoredCase && !actualHTML.equals(example.getHtml());
+
+ // add source information
+ myDocxContext.createP(myDocxContext.getRenderingOptions().HEADING_3);
+
+ if (ignoredCase) {
+ // does not match, need more stuff
+
+ myDocxContext.createColor().setVal("BB002F");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Ignored ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ } else if (failed) {
+ // does not match, need more stuff
+ myDocxContext.createColor().setVal("BB002F");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Failed ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ } else {
+ // does not match, need more stuff
+ myDocxContext.createColor().setVal("008000");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Passed ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ }
+
+ StringBuilder header = new StringBuilder();
+ final String section = example.getSection();
+
+ header.append(section == null ? "" : section.trim()).append(": ").append(example.getExampleNumber());
+ final String optionsSet = example.getOptionsSet();
+ myDocxContext.text(header.toString());
+
+ if (optionsSet != null) {
+ myDocxContext.createHpsMeasure(28);
+ myDocxContext.createColor().setVal("7B56A0");
+ Text text = myDocxContext.addWrappedText();
+ text.setValue((SpecReader.OPTIONS_STRING + "(") + optionsSet + ")");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ }
+
+ myDocxContext.createHorizontalLine();
+ RENDERER.withOptions(options).render(node, myPackage);
+ myDocxContext.createHorizontalLine();
+
+ if (example.hasComment()) {
+ final String comment = example.getComment();
+ String[] lines = comment.split("\n\\s*\n");
+ for (String line : lines) {
+ String trimmed = line.trim();
+ if (!trimmed.isEmpty()) {
+ myDocxContext.createP(myDocxContext.getRenderingOptions().LOOSE_PARAGRAPH_STYLE);
+ myDocxContext.createColor().setVal("808080");
+ Text text = myDocxContext.addWrappedText();
+ text.setValue(trimmed);
+ }
+ }
+ }
+
+ myDocxContext.renderFencedCodeLines(example.getSource().split("\n"));
+
+ //noinspection StatementWithEmptyBody
+ if (failed) {
+ // could add expected and actual text but that would be too much
+ }
+ }
+
+ private DocxContextImpl myDocxContext;
+ private WordprocessingMLPackage myPackage;
+ private String myVisibleLineBreak;
+
+ @Override
+ public boolean fullTestSpecStarting() {
+ if (!DUMP_ALL_TESTS_FILES) return true;
+
+ myPackage = DocxRenderer.getDefaultTemplate();
+ if (myPackage == null) return true;
+
+ myDocxContext = new DocxContextImpl(myPackage, null) {
+ @Override
+ public Attributes extendRenderingNodeAttributes(final AttributablePart part, final Attributes attributes) {
+ return null;
+ }
+
+ @Override
+ public Attributes extendRenderingNodeAttributes(final Node node, final AttributablePart part, final Attributes attributes) {
+ return null;
+ }
+
+ @Override
+ public String getNodeId(final Node node) {
+ return null;
+ }
+
+ @Override
+ public String getValidBookmarkName(final String id) {
+ return null;
+ }
+
+ @Override
+ public Node getNodeFromId(final String nodeId) {
+ return null;
+ }
+ };
+ myVisibleLineBreak = "¶";
+ return true;
+ }
+
+ @Override
+ protected void fullTestSpecComplete() {
+ if (!DUMP_ALL_TESTS_FILES || myPackage == null) return;
+
+ // write it out to file, hard-coded for now IGNORE
+ File file = new File(String.format("%s%s.docx", PROJECT_ROOT_DIRECTORY, FILE_ALL_TESTS_DUMP_NAME));
+ File file2 = new File(String.format("%s%s.xml", PROJECT_ROOT_DIRECTORY, FILE_ALL_TESTS_DUMP_NAME));
+ WordprocessingMLPackage mlPackage = myPackage;
+
+ try {
+ mlPackage.save(file, Docx4J.FLAG_SAVE_ZIP_FILE);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ mlPackage.save(outputStream, Docx4J.FLAG_SAVE_FLAT_XML);
+ final String xml = outputStream.toString("UTF-8");
+ final String s = XmlDocxSorter.sortDocumentParts(xml);
+ FileWriter fileWriter = new FileWriter(file2);
+ fileWriter.append(s);
+ fileWriter.append('\n');
+ fileWriter.close();
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboEnDocxConverterSpec2Test.java b/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboEnDocxConverterSpec2Test.java
new file mode 100644
index 0000000000..243ea11137
--- /dev/null
+++ b/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/ComboEnDocxConverterSpec2Test.java
@@ -0,0 +1,333 @@
+package com.vladsch.flexmark.docx.converter;
+
+import com.vladsch.flexmark.IRender;
+import com.vladsch.flexmark.ast.Node;
+import com.vladsch.flexmark.docx.converter.internal.DocxRenderer;
+import com.vladsch.flexmark.docx.converter.util.DocxContextImpl;
+import com.vladsch.flexmark.docx.converter.util.RunFormatProvider;
+import com.vladsch.flexmark.docx.converter.util.XmlDocxSorter;
+import com.vladsch.flexmark.ext.aside.AsideExtension;
+import com.vladsch.flexmark.ext.attributes.AttributesExtension;
+import com.vladsch.flexmark.ext.definition.DefinitionExtension;
+import com.vladsch.flexmark.ext.emoji.EmojiExtension;
+import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension;
+import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
+import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
+import com.vladsch.flexmark.ext.gitlab.GitLabExtension;
+import com.vladsch.flexmark.ext.ins.InsExtension;
+import com.vladsch.flexmark.ext.macros.MacrosExtension;
+import com.vladsch.flexmark.ext.tables.TablesExtension;
+import com.vladsch.flexmark.ext.toc.SimTocExtension;
+import com.vladsch.flexmark.ext.toc.TocExtension;
+import com.vladsch.flexmark.ext.wikilink.WikiLinkExtension;
+import com.vladsch.flexmark.html.HtmlRenderer;
+import com.vladsch.flexmark.html.renderer.AttributablePart;
+import com.vladsch.flexmark.parser.Parser;
+import com.vladsch.flexmark.spec.SpecExample;
+import com.vladsch.flexmark.spec.SpecReader;
+import com.vladsch.flexmark.superscript.SuperscriptExtension;
+import com.vladsch.flexmark.test.ComboSpecTestCase;
+import com.vladsch.flexmark.util.html.Attributes;
+import com.vladsch.flexmark.util.options.DataHolder;
+import com.vladsch.flexmark.util.options.MutableDataSet;
+import org.apache.log4j.Logger;
+import org.apache.log4j.varia.NullAppender;
+import org.docx4j.Docx4J;
+import org.docx4j.openpackaging.exceptions.Docx4JException;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.docx4j.wml.Text;
+import org.junit.runners.Parameterized;
+
+import java.io.*;
+import java.util.*;
+
+public class ComboEnDocxConverterSpec2Test extends ComboSpecTestCase {
+ // set to false to dump DOCX and XML files to pre-determined location
+ // RELEASE : change to true for release
+ static final boolean SKIP_IGNORED_TESTS = ComboDocxConverterSpecTest.SKIP_IGNORED_TESTS;
+ private static final boolean DUMP_TEST_CASE_FILES = !SKIP_IGNORED_TESTS;
+ private static final boolean DUMP_ALL_TESTS_FILES = !SKIP_IGNORED_TESTS;
+ private static final String PROJECT_ROOT_DIRECTORY = ComboDocxConverterSpecTest.PROJECT_ROOT_DIRECTORY;
+ private static final String FILE_TEST_CASE_DUMP_LOCATION = "/flexmark-docx-converter/src/test/resources/docx_converter_en_ast_spec/";
+ private static final String FILE_ALL_TESTS_DUMP_NAME = FILE_TEST_CASE_DUMP_LOCATION + "AllTests2";
+
+ private static final String SPEC_RESOURCE = "/docx_converter_ast_spec2.md";
+ private static final DataHolder OPTIONS = new MutableDataSet()
+ .set(HtmlRenderer.INDENT_SIZE, 2)
+ .set(Parser.EXTENSIONS, Arrays.asList(
+ AsideExtension.create(),
+ AttributesExtension.create(),
+ DefinitionExtension.create(),
+ EmojiExtension.create(),
+ EnumeratedReferenceExtension.create(),
+ FootnoteExtension.create(),
+ GitLabExtension.create(),
+ InsExtension.create(),
+ MacrosExtension.create(),
+ StrikethroughSubscriptExtension.create(),
+ SuperscriptExtension.create(),
+ TablesExtension.create(),
+ TocExtension.create(),
+ SimTocExtension.create(),
+ WikiLinkExtension.create()
+ ))
+ .set(DocxRenderer.RENDER_BODY_ONLY, true)
+ .set(DocxRenderer.DOC_RELATIVE_URL, String.format("file://%s", PROJECT_ROOT_DIRECTORY))
+ .set(DocxRenderer.DOC_ROOT_URL, String.format("file://%s/assets", PROJECT_ROOT_DIRECTORY))
+ .set(DocxRenderer.SUPPRESS_HTML, true)
+ //.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
+ ;
+
+ private static final Map optionsMap = new HashMap();
+ //private static WordprocessingMLPackage ourPackage = new WordprocessingMLPackage();;
+
+ private static final Parser PARSER = Parser.builder(OPTIONS).build();
+ // The spec says URL-escaping is optional, but the examples assume that it's enabled.
+ private static final DocxRenderer RENDERER = DocxRenderer.builder(OPTIONS).build();
+ private static final String TEMPLATE_XML = "/EN-Template.xml";
+
+ static {
+ //optionsMap.put("src-pos", new MutableDataSet().set(HtmlRenderer.SOURCE_POSITION_ATTRIBUTE, "md-pos"));
+ //optionsMap.put("option1", new MutableDataSet().set(DocxConverterExtension.DOCX_CONVERTER_OPTION1, true));
+ optionsMap.put("IGNORED", new MutableDataSet().set(IGNORE, SKIP_IGNORED_TESTS));
+ optionsMap.put("url", new MutableDataSet().set(DocxRenderer.DOC_RELATIVE_URL, String.format("file://%s", PROJECT_ROOT_DIRECTORY)));
+ optionsMap.put("caption-before", new MutableDataSet().set(DocxRenderer.TABLE_CAPTION_BEFORE_TABLE, true));
+ optionsMap.put("highlight-code", new MutableDataSet().set(DocxRenderer.CODE_HIGHLIGHT_SHADING, "yellow"));
+ optionsMap.put("highlight-shade", new MutableDataSet().set(DocxRenderer.CODE_HIGHLIGHT_SHADING, "shade"));
+ optionsMap.put("hyperlink-suffix", new MutableDataSet().set(DocxRenderer.LOCAL_HYPERLINK_SUFFIX, "_1"));
+ optionsMap.put("yellow-missing-hyperlink", new MutableDataSet().set(DocxRenderer.LOCAL_HYPERLINK_MISSING_HIGHLIGHT, ""));
+ optionsMap.put("table-no-span", new MutableDataSet().set(TablesExtension.COLUMN_SPANS, false));
+ //optionsMap.put("heading-id-suffix", new MutableDataSet().set(DocxRenderer.FIRST_HEADING_ID_SUFFIX, "_1"));
+
+ // Set up a simple configuration that logs on the console.
+ //BasicConfigurator.configure();
+ Logger root = Logger.getRootLogger();
+ root.addAppender(new NullAppender());
+ }
+ private static DataHolder optionsSet(String optionSet) {
+ if (optionSet == null) return null;
+ return optionsMap.get(optionSet);
+ }
+
+ public ComboEnDocxConverterSpec2Test(SpecExample example) {
+ super(example);
+ }
+
+ @Parameterized.Parameters(name = "{0}")
+ public static List data() {
+ List examples = SpecReader.readExamples(SPEC_RESOURCE);
+ List data = new ArrayList();
+
+ // NULL example runs full spec test
+ data.add(new Object[] { SpecExample.NULL });
+
+ for (SpecExample example : examples) {
+ data.add(new Object[] { example });
+ }
+ return data;
+ }
+
+ @Override
+ public DataHolder options(String optionSet) {
+ return optionsSet(optionSet);
+ }
+
+ @Override
+ public String getSpecResourceName() {
+ return SPEC_RESOURCE;
+ }
+
+ @Override
+ public Parser parser() {
+ return PARSER;
+ }
+
+ @Override
+ public IRender renderer() {
+ return RENDERER;
+ }
+
+ @Override
+ protected void testCase(final Node node, final DataHolder options) {
+ if (!DUMP_TEST_CASE_FILES) return;
+
+ final SpecExample specExample = example();
+ if (!specExample.isFullSpecExample() && !specExample.getSection().isEmpty()) {
+ // write it out to file, hard-coded for now IGNORE
+ File file = new File(String.format("%s%s%s_%d.docx", PROJECT_ROOT_DIRECTORY, FILE_TEST_CASE_DUMP_LOCATION, specExample.getSection(), specExample.getExampleNumber()));
+ File file2 = new File(String.format("%s%s%s_%d.xml", PROJECT_ROOT_DIRECTORY, FILE_TEST_CASE_DUMP_LOCATION, specExample.getSection(), specExample.getExampleNumber()));
+ WordprocessingMLPackage mlPackage = DocxRenderer.getDefaultTemplate(TEMPLATE_XML);
+ RENDERER.withOptions(options).render(node, mlPackage);
+
+ File parentDir = file.getParentFile();
+ if (!parentDir.exists()) {
+ parentDir.mkdirs();
+ }
+
+ try {
+ mlPackage.save(file, Docx4J.FLAG_SAVE_ZIP_FILE);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ try {
+ mlPackage.save(outputStream, Docx4J.FLAG_SAVE_FLAT_XML);
+ final String xml = outputStream.toString("UTF-8");
+ final String s = XmlDocxSorter.sortDocumentParts(xml);
+ FileWriter fileWriter = new FileWriter(file2);
+ fileWriter.append(s);
+ fileWriter.append('\n');
+ fileWriter.close();
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public void addSpecExample(SpecExample example, Node node, DataHolder options, boolean ignoredCase, String actualHTML, String actualAST) {
+ if (!DUMP_ALL_TESTS_FILES) return;
+
+ final boolean failed = !ignoredCase && !actualHTML.equals(example.getHtml());
+
+ // add source information
+ myDocxContext.createP(myDocxContext.getRenderingOptions().HEADING_3);
+
+ if (ignoredCase) {
+ // does not match, need more stuff
+
+ myDocxContext.createColor().setVal("BB002F");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Ignored ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ } else if (failed) {
+ // does not match, need more stuff
+ myDocxContext.createColor().setVal("BB002F");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Failed ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ } else {
+ // does not match, need more stuff
+ myDocxContext.createColor().setVal("008000");
+ myDocxContext.addBold();
+ Text text = myDocxContext.addWrappedText();
+ text.setValue("Passed ");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ }
+
+ StringBuilder header = new StringBuilder();
+ final String section = example.getSection();
+
+ header.append(section == null ? "" : section.trim()).append(": ").append(example.getExampleNumber());
+ final String optionsSet = example.getOptionsSet();
+ myDocxContext.text(header.toString());
+
+ if (optionsSet != null) {
+ myDocxContext.createHpsMeasure(28);
+ myDocxContext.createColor().setVal("7B56A0");
+ Text text = myDocxContext.addWrappedText();
+ text.setValue((SpecReader.OPTIONS_STRING + "(") + optionsSet + ")");
+ text.setSpace(RunFormatProvider.SPACE_PRESERVE);
+ }
+
+ myDocxContext.createHorizontalLine();
+ RENDERER.withOptions(options).render(node, myPackage);
+ myDocxContext.createHorizontalLine();
+
+ if (example.hasComment()) {
+ final String comment = example.getComment();
+ String[] lines = comment.split("\n\\s*\n");
+ for (String line : lines) {
+ String trimmed = line.trim();
+ if (!trimmed.isEmpty()) {
+ myDocxContext.createP(myDocxContext.getRenderingOptions().LOOSE_PARAGRAPH_STYLE);
+ myDocxContext.createColor().setVal("808080");
+ Text text = myDocxContext.addWrappedText();
+ text.setValue(trimmed);
+ }
+ }
+ }
+
+ myDocxContext.renderFencedCodeLines(example.getSource().split("\n"));
+
+ //noinspection StatementWithEmptyBody
+ if (failed) {
+ // could add expected and actual text but that would be too much
+ }
+ }
+
+ private DocxContextImpl myDocxContext;
+ private WordprocessingMLPackage myPackage;
+ private String myVisibleLineBreak;
+
+ @Override
+ public boolean fullTestSpecStarting() {
+ if (!DUMP_ALL_TESTS_FILES) return true;
+
+ myPackage = DocxRenderer.getDefaultTemplate(TEMPLATE_XML);
+ if (myPackage == null) return true;
+
+ myDocxContext = new DocxContextImpl(myPackage, null) {
+ @Override
+ public Attributes extendRenderingNodeAttributes(final AttributablePart part, final Attributes attributes) {
+ return null;
+ }
+
+ @Override
+ public Attributes extendRenderingNodeAttributes(final Node node, final AttributablePart part, final Attributes attributes) {
+ return null;
+ }
+
+ @Override
+ public String getNodeId(final Node node) {
+ return null;
+ }
+
+ @Override
+ public String getValidBookmarkName(final String id) {
+ return null;
+ }
+
+ @Override
+ public Node getNodeFromId(final String nodeId) {
+ return null;
+ }
+ };
+ myVisibleLineBreak = "¶";
+ return true;
+ }
+
+ @Override
+ protected void fullTestSpecComplete() {
+ if (!DUMP_ALL_TESTS_FILES || myPackage == null) return;
+
+ // write it out to file, hard-coded for now IGNORE
+ File file = new File(String.format("%s%s.docx", PROJECT_ROOT_DIRECTORY, FILE_ALL_TESTS_DUMP_NAME));
+ File file2 = new File(String.format("%s%s.xml", PROJECT_ROOT_DIRECTORY, FILE_ALL_TESTS_DUMP_NAME));
+ WordprocessingMLPackage mlPackage = myPackage;
+
+ try {
+ mlPackage.save(file, Docx4J.FLAG_SAVE_ZIP_FILE);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ mlPackage.save(outputStream, Docx4J.FLAG_SAVE_FLAT_XML);
+ final String xml = outputStream.toString("UTF-8");
+ final String s = XmlDocxSorter.sortDocumentParts(xml);
+ FileWriter fileWriter = new FileWriter(file2);
+ fileWriter.append(s);
+ fileWriter.append('\n');
+ fileWriter.close();
+ } catch (Docx4JException e) {
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/DocxConverterTestSuite.java b/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/DocxConverterTestSuite.java
index e48bfad03b..122157be97 100644
--- a/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/DocxConverterTestSuite.java
+++ b/flexmark-docx-converter/src/test/java/com/vladsch/flexmark/docx/converter/DocxConverterTestSuite.java
@@ -7,6 +7,9 @@
ComboDocxConverterSpecTest.class,
ComboEnDocxConverterSpecTest.class,
ComboDeDocxConverterSpecTest.class,
+ ComboDocxConverterSpec2Test.class,
+ ComboEnDocxConverterSpec2Test.class,
+ ComboDeDocxConverterSpec2Test.class,
ComboDocxConverterIssuesSpecTest.class,
//ComboDocxUserSpecDisabled.class, // added to test suite so it runs locally but not on the travis
})
diff --git a/flexmark-docx-converter/src/test/resources/docx_converter_ast_spec.md b/flexmark-docx-converter/src/test/resources/docx_converter_ast_spec.md
index 47295d8431..caa57a8df3 100644
--- a/flexmark-docx-converter/src/test/resources/docx_converter_ast_spec.md
+++ b/flexmark-docx-converter/src/test/resources/docx_converter_ast_spec.md
@@ -8465,6283 +8465,3 @@ list with aside block
````````````````````````````````
-## Footnotes
-
-```````````````````````````````` example Footnotes: 1
-Paragraph text[^1]
-
-[^1]: Footnote text
-
-.
-
-
-
-
-
-
- Paragraph text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Footnote text
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Footnotes: 2
-Paragraph text[^1]
-
-[^1]: Footnote text that will be wrapped and should have a hanging indent to align the overflow
- to the level of the text after the footnote anchor at the left margin.
-
- * list as part of footnote
- * another item
-
- | table |
- |-------|
- | data |
-
-.
-
-
-
-
-
-
- Paragraph text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Footnote text that will be wrapped and should have a hanging indent to align the overflow
-
-
-
-
-
- to the level of the text after the footnote anchor at the left margin.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- list as part of footnote
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- another item
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- table
-
-
-
-
-
-
-
-
-
-
-
-
-
- data
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Footnotes: 3
-Paragraph text[^1]
-
-Paragraph text, repeated footnote[^1]
-
-[^1]: Footnote text that will be wrapped and should have a hanging indent to align the overflow
- to the level of the text after the footnote anchor at the left margin.
-
-.
-
-
-
-
-
-
- Paragraph text
-
-
-
-
-
-
-
-
-
-
-
-
-
- Paragraph text, repeated footnote
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Footnote text that will be wrapped and should have a hanging indent to align the overflow
-
-
-
-
-
- to the level of the text after the footnote anchor at the left margin.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Footnote text that will be wrapped and should have a hanging indent to align the overflow
-
-
-
-
-
- to the level of the text after the footnote anchor at the left margin.
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Footnotes: 4
-Paragraph text[^1]
-
-Paragraph text, repeated footnote[^1]
-
-[^1]: Footnote text that will be wrapped and should have a hanging indent to align the overflow
- to the level of the text after the footnote anchor at the left margin. [Test](http://example.com)
-
-.
-
-
-
-
-
-
- Paragraph text
-
-
-
-
-
-
-
-
-
-
-
-
-
- Paragraph text, repeated footnote
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Footnote text that will be wrapped and should have a hanging indent to align the overflow
-
-
-
-
-
- to the level of the text after the footnote anchor at the left margin.
-
-
-
-
-
-
- Test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Footnote text that will be wrapped and should have a hanging indent to align the overflow
-
-
-
-
-
- to the level of the text after the footnote anchor at the left margin.
-
-
-
-
-
-
- Test
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Footnotes: 5
-|ID|
-|:--:|
-|Der Hersteller[^C1-04]|
-
-[^C1-04]: Beispiele [DREAD](https://en.wikipedia.org/wiki/DREAD_(risk_assessment_model))
-
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ID
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Der Hersteller
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Beispiele
-
-
-
-
-
-
- DREAD
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Footnotes: 6
-|ID|
-|:--:|
-|Der Hersteller|
-
-Der Hersteller[^C1-04]
-
-[^C1-04]: Beispiele [DREAD](https://en.wikipedia.org/wiki/DREAD_(risk_assessment_model))
-
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ID
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Der Hersteller
-
-
-
-
-
-
-
-
-
-
- Der Hersteller
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Beispiele
-
-
-
-
-
-
- DREAD
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Footnotes: 7
-|ID|
-|:--:|
-|Der Hersteller[^C1-04]|
-
-[^C1-04]: Beispiele DREAD
-
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ID
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Der Hersteller
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
- Beispiele DREAD
-
-
-
-
-
-````````````````````````````````
-
-
-with same links in different parts
-
-```````````````````````````````` example Footnotes: 8
-Text [^id] with link [link](http://example.com)
-
-[^id]: [link](http://example.com)
-.
-
-
-
-
-
-
- Text
-
-
-
-
-
-
-
-
- with link
-
-
-
-
-
-
- link
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
-
-
-
-
- link
-
-
-
-
-
-
-````````````````````````````````
-
-
-with diff links in different parts
-
-```````````````````````````````` example Footnotes: 9
-Text [^id] with link [link](http://example.com)
-
-[^id]: [link](http://example.com/another)
-.
-
-
-
-
-
-
- Text
-
-
-
-
-
-
-
-
- with link
-
-
-
-
-
-
- link
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- →
-
-
-
-
-
-
- link
-
-
-
-
-
-
-````````````````````````````````
-
-
-## TOC
-
-```````````````````````````````` example(TOC: 1) options(IGNORED)
-[TOC]
-
-# Heading **some bold** 1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
-
-Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
-
-## Heading 1.1 _some italic_
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 1.1.1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 1.1.2 **_some bold italic_**
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-## Heading 1.2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-## Heading 1.3
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-# Heading 2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 2.0.1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 2.0.2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Contents
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- TOC \o "1-3" \h \z \u
-
-
-
-
-
-
-
-
-
- Heading
-
-
-
-
-
-
-
-
- some bold
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698210 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1
-
-
-
-
-
-
-
-
- some italic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698211 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698212 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.2
-
-
-
-
-
-
-
-
- some bold italic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698213 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698214 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698215 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698216 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698217 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc56698218 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading
-
-
-
-
-
- some bold
-
-
- 1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
- Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-
-
-
-
-
-
- Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
-
-
-
-
-
-
-
- Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1
-
-
-
-
-
- some italic
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.2
-
-
-
-
-
- some bold italic
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
- Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.3
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-````````````````````````````````
-
-
-sim toc
-
-```````````````````````````````` example(TOC: 2) options(IGNORED)
-[TOC]: #
-
-
-# Heading **some bold** 1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
-
-Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
-
-## Heading 1.1 _some italic_
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 1.1.1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 1.1.2 **_some bold italic_**
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-## Heading 1.2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-## Heading 1.3
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-# Heading 2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 2.0.1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 2.0.2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Contents
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- TOC \o "1-3" \h \z \u
-
-
-
-
-
-
-
-
-
- Heading
-
-
-
-
-
-
-
-
- some bold
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158210 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1
-
-
-
-
-
-
-
-
- some italic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158211 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158212 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.2
-
-
-
-
-
-
-
-
- some bold italic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158213 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158214 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158215 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158216 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158217 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73158218 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading
-
-
-
-
-
- some bold
-
-
- 1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
- Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-
-
-
-
-
-
- Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
-
-
-
-
-
-
-
- Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1
-
-
-
-
-
- some italic
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.2
-
-
-
-
-
- some bold italic
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
- Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.3
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-````````````````````````````````
-
-
-sim toc
-
-```````````````````````````````` example(TOC: 3) options(IGNORED)
-[TOC]: #
-
-
-# Heading **some bold** 1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
-
-Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
-
-## Heading 1.1 _some italic_
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 1.1.1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 1.1.2 **_some bold italic_**
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-## Heading 1.2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-## Heading 1.3
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-# Heading 2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 2.0.1
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-### Heading 2.0.2
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Contents
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- TOC \o "1-3" \h \z \u
-
-
-
-
-
-
-
-
-
- Heading
-
-
-
-
-
-
-
-
- some bold
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244810 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1
-
-
-
-
-
-
-
-
- some italic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244811 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244812 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.2
-
-
-
-
-
-
-
-
- some bold italic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244813 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244814 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244815 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244816 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244817 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PAGEREF _Toc73244818 \h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading
-
-
-
-
-
- some bold
-
-
- 1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
- Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-
-
-
-
-
-
- Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
-
-
-
-
-
-
-
- Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1
-
-
-
-
-
- some italic
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.1.2
-
-
-
-
-
- some bold italic
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
- Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1.3
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.1
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2.0.2
-
-
-
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
-
-
-
-
-
-
-
- Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
-
-
-
-````````````````````````````````
-
-
-## Enumerated References
-
-```````````````````````````````` example(Enumerated References: 1) options(IGNORED)
-{#fig:test}
-[#fig:test]
-
-{#fig:test2}
-[#fig:test2]
-
-| table |
-|-------|
-| data |
-[[#tbl:test] caption]
-{#tbl:test}
-
-See [@fig:test2]
-
-See [@fig:test]
-
-See [@tbl:test]
-
-
-[@fig]: Figure [#].
-
-[@tbl]: Table [#].
-
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Figure
-
-
- 1
-
-
- .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Figure
-
-
- 2
-
-
- .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- table
-
-
-
-
-
-
-
-
-
-
-
-
-
- data
-
-
-
-
-
-
-
-
-
-
- Table
-
-
- 1
-
-
- .
-
-
- caption
-
-
-
-
-
-
-
- See
-
-
-
-
-
-
- HYPERLINK "#fig:test2" \o "Figure 2."
-
-
-
-
-
-
-
-
- Figure
-
-
-
-
-
- 2
-
-
-
-
-
- .
-
-
-
-
-
-
-
-
-
-
-
- See
-
-
-
-
-
-
- HYPERLINK "#fig:test" \o "Figure 1."
-
-
-
-
-
-
-
-
- Figure
-
-
-
-
-
- 1
-
-
-
-
-
- .
-
-
-
-
-
-
-
-
-
-
-
- See
-
-
-
-
-
-
- HYPERLINK "#tbl:test" \o "Table 1."
-
-
-
-
-
-
-
-
- Table
-
-
-
-
-
- 1
-
-
-
-
-
- .
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Enumerated References: 2
-
-{#abc}
-
-[@fig]: Figure [#].
-
-[@tbl]: Table [#].
-.
-
-````````````````````````````````
-
-
-test with suffix
-
-```````````````````````````````` example(Enumerated References: 3) options(hyperlink-suffix)
-
-test{#fig:abc}
-
-See [@fig:abc]
-
-[@fig]: Figure [#].
-
-[@tbl]: Table [#].
-.
-
-
-
-
-
-
-
- test
-
-
-
-
-
-
-
-
- See
-
-
-
-
-
-
- HYPERLINK "#fig:abc_1" \o "Figure 1."
-
-
-
-
-
-
-
-
- Figure
-
-
-
-
-
- 1
-
-
-
-
-
- .
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Enumerated References: 4
-
-| table |
-|-------|
-| data |
-[[#tbl:test] caption]
-{#tbl:test}
-
-[@fig]: Figure [#].
-
-[@tbl]: Table [#].
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- table
-
-
-
-
-
-
-
-
-
-
-
-
-
- data
-
-
-
-
-
-
-
-
-
-
- Table
-
-
- 1
-
-
- .
-
-
- caption
-
-
-
-````````````````````````````````
-
-
-missing definition
-
-```````````````````````````````` example Enumerated References: 5
-abc{#fig:test}
-
-[#fig:test]
-
-[@fig:test]
-
-.
-
-
-
-
-
-
-
- abc
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
- HYPERLINK "#fig:test" \o "fig 1"
-
-
-
-
-
-
-
-
- fig 1
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-## Heading and Link Ids
-
-Suffix links
-
-```````````````````````````````` example(Heading and Link Ids: 1) options(hyperlink-suffix)
-# Heading 1
-
-## Heading 2
-
-[Top](#heading-1)
-[Heading 2](#heading-2)
-.
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
-
-
-
- Top
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-````````````````````````````````
-
-
-Suffix first heading links
-
-```````````````````````````````` example(Heading and Link Ids: 2) options(IGNORE, heading-id-suffix)
-# Heading 1
-
-## Heading 2
-
-[Top](#heading-1)
-[Heading 2](#heading-2)
-.
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
-
-
-
- Top
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-````````````````````````````````
-
-
-Suffix hyperlinks and first heading links
-
-```````````````````````````````` example(Heading and Link Ids: 3) options(IGNORE, hyperlink-suffix, heading-id-suffix)
-# Heading 1
-
-## Heading 2
-
-[Top](#heading-1)
-[Heading 2](#heading-2)
-.
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-
-
-
-
-
-
-
- Top
-
-
-
-
-
-
-
-
-
-
- Heading 2
-
-
-
-
-````````````````````````````````
-
-
-## Aside
-
-lazy continuation
-
-```````````````````````````````` example Aside: 1
-* list item
- | aside block
- lazy continuation
-.
-
-
-
-
-
-
-
-
-
-
- list item
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- aside block
-
-
-
-
-
- lazy continuation
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-with hyperlink
-
-```````````````````````````````` example Aside: 2
-| [flexmark-icon-logo](https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png "Title: flexmark-java logo")
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HYPERLINK "https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png" \o "Title: flexmark-java logo"
-
-
-
-
-
-
-
-
- flexmark-icon-logo
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-with hard break
-
-```````````````````````````````` example Aside: 3
-| aside block 1
-| with a link [flexmark-icon-logo](https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png "Title: flexmark-java logo")
-.
-
-
-
-
-
-
-
-
-
-
-
-
- aside block 1
-
-
-
-
-
- with a link
-
-
-
-
-
-
- HYPERLINK "https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png" \o "Title: flexmark-java logo"
-
-
-
-
-
-
-
-
- flexmark-icon-logo
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-with child paragraphs
-
-```````````````````````````````` example Aside: 4
-| aside block 1
-|
-| with a link [flexmark-icon-logo](https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png "Title: flexmark-java logo")
-.
-
-
-
-
-
-
-
-
-
-
-
-
- aside block 1
-
-
-
-
-
-
-
- with a link
-
-
-
-
-
-
- HYPERLINK "https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png" \o "Title: flexmark-java logo"
-
-
-
-
-
-
-
-
- flexmark-icon-logo
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-with child aside blocks
-
-```````````````````````````````` example Aside: 5
-| aside block 1
-|
-|| another aside block
-.
-
-
-
-
-
-
-
-
-
-
-
-
- aside block 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- another aside block
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-with child block quote
-
-```````````````````````````````` example Aside: 6
-| aside block 1
-|
-|> block quote
-.
-
-
-
-
-
-
-
-
-
-
-
-
- aside block 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- block quote
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-as child of block quote
-
-```````````````````````````````` example Aside: 7
-> block quote 1
->
->| aside block
-.
-
-
-
-
-
-
-
-
-
-
-
-
- block quote 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- aside block
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-with child paragraphs
-
-```````````````````````````````` example Aside: 8
-| aside block 1
-|
-| with a link [flexmark-icon-logo](https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png "Title: flexmark-java logo")
-|| another aside block
-.
-
-
-
-
-
-
-
-
-
-
-
-
- aside block 1
-
-
-
-
-
-
-
- with a link
-
-
-
-
-
-
- HYPERLINK "https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png" \o "Title: flexmark-java logo"
-
-
-
-
-
-
-
-
- flexmark-icon-logo
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- another aside block
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-
-
-## Macros
-
-```````````````````````````````` example Macros: 1
->>>macro
-Simple Text
-<<<
-
-Plain Text <<>>
-.
-
-
-
-
-
-
- Plain Text
-
-
- Simple Text
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Macros: 2
->>>macro
-1. Item 1
-1. Item 2
-<<<
-
-Plain Text <<>>
-.
-
-
-
-
-
-
- Plain Text
-
-
-
-
-
-
-
-
-
-
-
- Item 1
-
-
-
-
-
-
-
-
-
-
-
- Item 2
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Macros: 3
->>>macro
-| Heading |
-|:-------|
-| Data |
-<<<
-
-Plain Text <<>>
-.
-
-
-
-
-
-
- Plain Text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Data
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Macros: 4
->>>macro
-> Block Quote
-<<<
-
-| outer first | outer heading |
-|:-------------|:--------------|
-| Regular Text | <<>> |
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- outer first
-
-
-
-
-
-
-
-
-
-
-
-
-
- outer heading
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Regular Text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Block Quote
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Macros: 5
->>>macro
-1. Item 1
-1. Item 2
-<<<
-
-| outer first | outer heading |
-|:-------------|:--------------|
-| Regular Text | <<>> |
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- outer first
-
-
-
-
-
-
-
-
-
-
-
-
-
- outer heading
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Regular Text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Item 1
-
-
-
-
-
-
-
-
-
-
-
- Item 2
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-```````````````````````````````` example Macros: 6
->>>macro
-| heading |
-|:------------|
-| column `data` |
-| column **data** 2 |
-<<<
-
-| outer first | outer heading |
-|:-------------|:--------------|
-| Regular Text | <<>> |
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- outer first
-
-
-
-
-
-
-
-
-
-
-
-
-
- outer heading
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Regular Text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- heading
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- column
-
-
-
-
-
- data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- column
-
-
-
-
-
- data
-
-
- 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-````````````````````````````````
-
-
-Recursion cut short
-
-```````````````````````````````` example Macros: 7
->>>macro1
-Macro 1
-<<>>
-<<<
-
->>>macro2
-Macro 2
-<<>>
-<<<
-
-Plain text <<>>
-
-Plain text <<>>
-.
-
-
-
-
-
-
- Plain text
-
-
- Macro 1
-
-
-
-
-
- Macro 2
-
-
-
-
-
-
-
-
-
-
- Plain text
-
-
- Macro 2
-
-
-
-
-
- Macro 1
-
-
-
-
-
-
-````````````````````````````````
-
-```````````````````````````````` example Macros: 8
->>>macro
-- item 1
-- item 2
-
-
-| Column |
-|--------|
-| Data |
-<<<
-
-
-| Complex | Simple |
-|-------------|-------------|
-| <<>> | Simple Data |
-
-.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Complex
-
-
-
-
-
-
-
-
-
-
-
-
- Simple
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- item 1
-
-
-
-
-
-
-
-
-
-
-
- item 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Column
-
-
-
-
-
-
-
-
-
-
-
-
-
- Data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Simple Data
-
-
-
-
-
-
-````````````````````````````````
-
-
diff --git a/flexmark-docx-converter/src/test/resources/docx_converter_ast_spec2.md b/flexmark-docx-converter/src/test/resources/docx_converter_ast_spec2.md
new file mode 100644
index 0000000000..5497396bb6
--- /dev/null
+++ b/flexmark-docx-converter/src/test/resources/docx_converter_ast_spec2.md
@@ -0,0 +1,6877 @@
+---
+title: DocxConverter Extension Spec
+author: Vladimir Schneider
+version: 1.0
+date: '2017-09-06'
+license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)'
+...
+
+---
+
+## DocxConverter
+
+Converts markdown to docx
+
+## Footnotes
+
+```````````````````````````````` example Footnotes: 1
+Paragraph text[^1]
+
+[^1]: Footnote text
+
+.
+
+
+
+
+
+
+ Paragraph text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Footnote text
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Footnotes: 2
+Paragraph text[^1]
+
+[^1]: Footnote text that will be wrapped and should have a hanging indent to align the overflow
+ to the level of the text after the footnote anchor at the left margin.
+
+ * list as part of footnote
+ * another item
+
+ | table |
+ |-------|
+ | data |
+
+.
+
+
+
+
+
+
+ Paragraph text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Footnote text that will be wrapped and should have a hanging indent to align the overflow
+
+
+
+
+
+ to the level of the text after the footnote anchor at the left margin.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ list as part of footnote
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another item
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ table
+
+
+
+
+
+
+
+
+
+
+
+
+
+ data
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Footnotes: 3
+Paragraph text[^1]
+
+Paragraph text, repeated footnote[^1]
+
+[^1]: Footnote text that will be wrapped and should have a hanging indent to align the overflow
+ to the level of the text after the footnote anchor at the left margin.
+
+.
+
+
+
+
+
+
+ Paragraph text
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Paragraph text, repeated footnote
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Footnote text that will be wrapped and should have a hanging indent to align the overflow
+
+
+
+
+
+ to the level of the text after the footnote anchor at the left margin.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Footnote text that will be wrapped and should have a hanging indent to align the overflow
+
+
+
+
+
+ to the level of the text after the footnote anchor at the left margin.
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Footnotes: 4
+Paragraph text[^1]
+
+Paragraph text, repeated footnote[^1]
+
+[^1]: Footnote text that will be wrapped and should have a hanging indent to align the overflow
+ to the level of the text after the footnote anchor at the left margin. [Test](http://example.com)
+
+.
+
+
+
+
+
+
+ Paragraph text
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Paragraph text, repeated footnote
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Footnote text that will be wrapped and should have a hanging indent to align the overflow
+
+
+
+
+
+ to the level of the text after the footnote anchor at the left margin.
+
+
+
+
+
+
+ Test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Footnote text that will be wrapped and should have a hanging indent to align the overflow
+
+
+
+
+
+ to the level of the text after the footnote anchor at the left margin.
+
+
+
+
+
+
+ Test
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Footnotes: 5
+|ID|
+|:--:|
+|Der Hersteller[^C1-04]|
+
+[^C1-04]: Beispiele [DREAD](https://en.wikipedia.org/wiki/DREAD_(risk_assessment_model))
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Der Hersteller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Beispiele
+
+
+
+
+
+
+ DREAD
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Footnotes: 6
+|ID|
+|:--:|
+|Der Hersteller|
+
+Der Hersteller[^C1-04]
+
+[^C1-04]: Beispiele [DREAD](https://en.wikipedia.org/wiki/DREAD_(risk_assessment_model))
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Der Hersteller
+
+
+
+
+
+
+
+
+
+
+ Der Hersteller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Beispiele
+
+
+
+
+
+
+ DREAD
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Footnotes: 7
+|ID|
+|:--:|
+|Der Hersteller[^C1-04]|
+
+[^C1-04]: Beispiele DREAD
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Der Hersteller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+ Beispiele DREAD
+
+
+
+
+
+````````````````````````````````
+
+
+with same links in different parts
+
+```````````````````````````````` example Footnotes: 8
+Text [^id] with link [link](http://example.com)
+
+[^id]: [link](http://example.com)
+.
+
+
+
+
+
+
+ Text
+
+
+
+
+
+
+
+
+ with link
+
+
+
+
+
+
+ link
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+
+
+
+ link
+
+
+
+
+
+
+````````````````````````````````
+
+
+with diff links in different parts
+
+```````````````````````````````` example Footnotes: 9
+Text [^id] with link [link](http://example.com)
+
+[^id]: [link](http://example.com/another)
+.
+
+
+
+
+
+
+ Text
+
+
+
+
+
+
+
+
+ with link
+
+
+
+
+
+
+ link
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+
+
+
+ link
+
+
+
+
+
+
+````````````````````````````````
+
+
+## TOC
+
+```````````````````````````````` example(TOC: 1) options(IGNORED)
+[TOC]
+
+# Heading **some bold** 1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
+
+Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
+
+## Heading 1.1 _some italic_
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 1.1.1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 1.1.2 **_some bold italic_**
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+## Heading 1.2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+## Heading 1.3
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+# Heading 2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 2.0.1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 2.0.2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TOC \o "1-3" \h \z \u
+
+
+
+
+
+
+
+
+
+ Heading
+
+
+
+
+
+
+
+
+ some bold
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102910 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1
+
+
+
+
+
+
+
+
+ some italic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102911 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102912 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.2
+
+
+
+
+
+
+
+
+ some bold italic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102913 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102914 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102915 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102916 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102917 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc62102918 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading
+
+
+
+
+
+ some bold
+
+
+ 1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+ Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+
+
+
+
+
+
+ Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
+
+
+
+
+
+
+
+ Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1
+
+
+
+
+
+ some italic
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.2
+
+
+
+
+
+ some bold italic
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+ Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.3
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+````````````````````````````````
+
+
+sim toc
+
+```````````````````````````````` example(TOC: 2) options(IGNORED)
+[TOC]: #
+
+
+# Heading **some bold** 1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
+
+Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
+
+## Heading 1.1 _some italic_
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 1.1.1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 1.1.2 **_some bold italic_**
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+## Heading 1.2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+## Heading 1.3
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+# Heading 2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 2.0.1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 2.0.2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TOC \o "1-3" \h \z \u
+
+
+
+
+
+
+
+
+
+ Heading
+
+
+
+
+
+
+
+
+ some bold
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971010 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1
+
+
+
+
+
+
+
+
+ some italic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971011 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971012 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.2
+
+
+
+
+
+
+
+
+ some bold italic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971013 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971014 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971015 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971016 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971017 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc6971018 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading
+
+
+
+
+
+ some bold
+
+
+ 1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+ Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+
+
+
+
+
+
+ Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
+
+
+
+
+
+
+
+ Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1
+
+
+
+
+
+ some italic
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.2
+
+
+
+
+
+ some bold italic
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+ Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.3
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+````````````````````````````````
+
+
+sim toc
+
+```````````````````````````````` example(TOC: 3) options(IGNORED)
+[TOC]: #
+
+
+# Heading **some bold** 1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
+
+Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
+
+## Heading 1.1 _some italic_
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 1.1.1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 1.1.2 **_some bold italic_**
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+## Heading 1.2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+## Heading 1.3
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+# Heading 2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 2.0.1
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+### Heading 2.0.2
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TOC \o "1-3" \h \z \u
+
+
+
+
+
+
+
+
+
+ Heading
+
+
+
+
+
+
+
+
+ some bold
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986410 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1
+
+
+
+
+
+
+
+
+ some italic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986411 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986412 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.2
+
+
+
+
+
+
+
+
+ some bold italic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986413 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986414 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986415 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986416 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986417 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PAGEREF _Toc18986418 \h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading
+
+
+
+
+
+ some bold
+
+
+ 1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+ Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+
+
+
+
+
+
+ Quisque dapibus sit amet nunc ac pulvinar. Aenean lacus augue, vehicula id tellus sit amet, congue pellentesque felis. Aenean in ipsum ligula. Ut finibus laoreet risus eu egestas. Aenean et diam eget arcu luctus venenatis sed et elit. Sed porta ipsum quis varius facilisis. Sed at neque ex. Duis vel sapien eleifend, volutpat enim sit amet, elementum nulla. Sed fermentum ullamcorper tempor. Pellentesque nec ante aliquet, pulvinar risus non, efficitur magna. Duis ut ornare nisl. In vel blandit eros. Duis eget rhoncus nisi. Etiam nec justo id eros sodales convallis eget sit amet metus.
+
+
+
+
+
+
+
+ Mauris luctus gravida risus, ac iaculis tellus varius at. Nullam vulputate ullamcorper risus vel ultricies. Quisque nec purus sit amet est consectetur suscipit. Pellentesque volutpat orci mauris, vitae pretium mi faucibus in. Proin pretium id est rhoncus congue. In tellus purus, gravida nec egestas non, auctor vitae tortor. Proin dolor nisl, placerat quis egestas in, ornare sit amet lectus. Nullam sem lorem, venenatis sed ipsum vel, egestas convallis ligula. Vestibulum vel finibus leo. Proin ullamcorper vulputate nibh eget pharetra. Etiam enim ipsum, vestibulum at ultrices ac, bibendum eu mauris. Sed eu tellus porta, feugiat elit ac, faucibus nunc. Duis sollicitudin tristique augue eget suscipit. Cras dignissim arcu ac porta ornare. Mauris dignissim nisl eu mattis malesuada. Proin feugiat est non eros hendrerit, sed congue ligula convallis.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1
+
+
+
+
+
+ some italic
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.1.2
+
+
+
+
+
+ some bold italic
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+ Fusce eget sagittis lorem. Quisque quis blandit ante. Nunc neque erat, mollis ut sem efficitur, luctus tempor turpis. Nunc a nisi cursus, faucibus tortor at, ornare lectus. Nullam nibh magna, rutrum eu tincidunt ut, iaculis at augue. In congue ligula pulvinar purus tincidunt, in placerat magna interdum. Nunc mollis arcu vel metus dapibus lacinia.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1.3
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.1
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2.0.2
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ex nunc, interdum et volutpat hendrerit, consectetur in leo. Vivamus elit urna, interdum id ullamcorper non, pulvinar eget ex. Nunc non sodales ligula. Praesent tincidunt dapibus eleifend. Pellentesque fringilla placerat luctus. Duis dictum ac leo at iaculis. Praesent a cursus dolor, et dapibus tellus. Fusce porttitor tristique gravida.
+
+
+
+
+
+
+
+ Proin maximus ante ac justo rutrum consectetur. Praesent ultrices in lacus id faucibus. Praesent consectetur lorem lorem, ac imperdiet orci pharetra in. Nulla placerat neque a neque ultrices, vitae auctor nisi fermentum. Donec et odio non ipsum ultricies dictum euismod sed urna. Maecenas maximus tellus tempor felis sagittis pulvinar. Maecenas bibendum, purus egestas accumsan porta, ipsum turpis viverra lorem, a gravida nibh ipsum convallis nibh. Aliquam at ante ligula. Quisque et dolor eget magna mollis blandit. Quisque in enim finibus, elementum nunc sit amet, blandit est. Donec consectetur urna in turpis pulvinar efficitur. Vivamus molestie massa id tortor cursus, eu auctor metus tincidunt. Aenean dictum turpis in convallis consectetur. Nam dui nisl, consequat non tincidunt eu, hendrerit at tellus. Pellentesque sit amet diam et leo sollicitudin blandit eu eget metus.
+
+
+
+````````````````````````````````
+
+
+## Enumerated References
+
+```````````````````````````````` example(Enumerated References: 1) options(IGNORED)
+{#fig:test}
+[#fig:test]
+
+{#fig:test2}
+[#fig:test2]
+
+| table |
+|-------|
+| data |
+[[#tbl:test] caption]
+{#tbl:test}
+
+See [@fig:test2]
+
+See [@fig:test]
+
+See [@tbl:test]
+
+
+[@fig]: Figure [#].
+
+[@tbl]: Table [#].
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Figure
+
+
+ 1
+
+
+ .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Figure
+
+
+ 2
+
+
+ .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ table
+
+
+
+
+
+
+
+
+
+
+
+
+
+ data
+
+
+
+
+
+
+
+
+
+
+ Table
+
+
+ 1
+
+
+ .
+
+
+ caption
+
+
+
+
+
+
+
+ See
+
+
+
+
+
+
+ HYPERLINK "#fig:test2" \o "Figure 2."
+
+
+
+
+
+
+
+
+ Figure
+
+
+
+
+
+ 2
+
+
+
+
+
+ .
+
+
+
+
+
+
+
+
+
+
+
+ See
+
+
+
+
+
+
+ HYPERLINK "#fig:test" \o "Figure 1."
+
+
+
+
+
+
+
+
+ Figure
+
+
+
+
+
+ 1
+
+
+
+
+
+ .
+
+
+
+
+
+
+
+
+
+
+
+ See
+
+
+
+
+
+
+ HYPERLINK "#tbl:test" \o "Table 1."
+
+
+
+
+
+
+
+
+ Table
+
+
+
+
+
+ 1
+
+
+
+
+
+ .
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Enumerated References: 2
+
+{#abc}
+
+[@fig]: Figure [#].
+
+[@tbl]: Table [#].
+.
+
+````````````````````````````````
+
+
+test with suffix
+
+```````````````````````````````` example(Enumerated References: 3) options(hyperlink-suffix)
+
+test{#fig:abc}
+
+See [@fig:abc]
+
+[@fig]: Figure [#].
+
+[@tbl]: Table [#].
+.
+
+
+
+
+
+
+
+ test
+
+
+
+
+
+
+
+
+ See
+
+
+
+
+
+
+ HYPERLINK "#fig:abc_1" \o "Figure 1."
+
+
+
+
+
+
+
+
+ Figure
+
+
+
+
+
+ 1
+
+
+
+
+
+ .
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Enumerated References: 4
+
+| table |
+|-------|
+| data |
+[[#tbl:test] caption]
+{#tbl:test}
+
+[@fig]: Figure [#].
+
+[@tbl]: Table [#].
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ table
+
+
+
+
+
+
+
+
+
+
+
+
+
+ data
+
+
+
+
+
+
+
+
+
+
+ Table
+
+
+ 1
+
+
+ .
+
+
+ caption
+
+
+
+````````````````````````````````
+
+
+missing definition
+
+```````````````````````````````` example Enumerated References: 5
+abc{#fig:test}
+
+[#fig:test]
+
+[@fig:test]
+
+.
+
+
+
+
+
+
+
+ abc
+
+
+
+
+
+
+
+
+ fig 1
+
+
+
+
+
+
+
+
+
+
+
+ HYPERLINK "#fig:test" \o "fig 1"
+
+
+
+
+
+
+
+
+ fig 1
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+## Heading and Link Ids
+
+Suffix links
+
+```````````````````````````````` example(Heading and Link Ids: 1) options(hyperlink-suffix)
+# Heading 1
+
+## Heading 2
+
+[Top](#heading-1)
+[Heading 2](#heading-2)
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+
+
+
+ Top
+
+
+
+
+
+
+
+
+
+
+ Heading 2
+
+
+
+
+````````````````````````````````
+
+
+## Heading
+
+Allow using empty format ref in heading
+
+```````````````````````````````` example Heading: 1
+# [#hdr] Numbered Heading
+
+[@hdr]: [#].
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ Numbered Heading
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Heading: 2
+# [#hdr] Numbered Heading
+
+# [#hdr] Numbered Heading
+
+[@hdr]: [#].
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ Numbered Heading
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ Numbered Heading
+
+
+
+````````````````````````````````
+
+
+Compound numbering
+
+```````````````````````````````` example Heading: 3
+# [#hdr1] Numbered Heading 1
+
+## [#hdr1:hdr2:] Numbered Heading 1.1
+
+# [#hdr1] Numbered Heading 2
+
+## [#hdr1:hdr2:] Numbered Heading 2.1
+
+[@hdr1]: [#].
+
+[@hdr2]: [#].
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ Numbered Heading 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ Numbered Heading 1.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ Numbered Heading 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ Numbered Heading 2.1
+
+
+
+````````````````````````````````
+
+
+`.` appended by default if last element for format is empty Enumerated Reference Text or Link
+
+```````````````````````````````` example Heading: 4
+# [#hdr1] Numbered Heading 1
+
+## [#hdr1:hdr2:] Numbered Heading 1.1
+
+# [#hdr1] Numbered Heading 2
+
+## [#hdr1:hdr2:] Numbered Heading 2.1
+
+[@hdr1]: [#]
+
+[@hdr2]: [#]
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ Numbered Heading 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ 1
+
+
+ Numbered Heading 1.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ Numbered Heading 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ 1
+
+
+ Numbered Heading 2.1
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Heading: 5
+# [#hd1] Heading 1
+
+# [#hd1] Heading 2
+
+# [#hd1] Heading 3
+
+[@hd1]: [#].
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ Heading 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 3
+
+
+ .
+
+
+ Heading 3
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Heading: 6
+# [#hd1] Heading 1
+
+## [#hd1:hd2:] Heading 1.1
+
+### [#hd1:hd2:hd3:] Heading 1.1.1
+
+### [#hd1:hd2:hd3:] Heading 1.1.2
+
+## [#hd1:hd2:] Heading 1.2
+
+### [#hd1:hd2:hd3:] Heading 1.2.1
+
+### [#hd1:hd2:hd3:] Heading 1.2.2
+
+# [#hd1] Heading 2
+
+## [#hd1:hd2:] Heading 2.1
+
+### [#hd1:hd2:hd3:] Heading 2.1.1
+
+### [#hd1:hd2:hd3:] Heading 2.1.2
+
+[@hd1]: [#].
+[@hd2]: [#].
+[@hd3]: [#].
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ Heading 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ Heading 1.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ Heading 1.1.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ 2
+
+
+ .
+
+
+ Heading 1.1.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ 2
+
+
+ .
+
+
+ Heading 1.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ 2
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ Heading 1.2.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ .
+
+
+ 2
+
+
+ .
+
+
+ 2
+
+
+ .
+
+
+ Heading 1.2.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ Heading 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ Heading 2.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ Heading 2.1.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ .
+
+
+ 1
+
+
+ .
+
+
+ 2
+
+
+ .
+
+
+ Heading 2.1.2
+
+
+
+````````````````````````````````
+
+
+## Aside
+
+lazy continuation
+
+```````````````````````````````` example Aside: 1
+* list item
+ | aside block
+ lazy continuation
+.
+
+
+
+
+
+
+
+
+
+
+ list item
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ aside block
+
+
+
+
+
+ lazy continuation
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+with hyperlink
+
+```````````````````````````````` example Aside: 2
+| [flexmark-icon-logo](https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png "Title: flexmark-java logo")
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HYPERLINK "https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png" \o "Title: flexmark-java logo"
+
+
+
+
+
+
+
+
+ flexmark-icon-logo
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+with hard break
+
+```````````````````````````````` example Aside: 3
+| aside block 1
+| with a link [flexmark-icon-logo](https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png "Title: flexmark-java logo")
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ aside block 1
+
+
+
+
+
+ with a link
+
+
+
+
+
+
+ HYPERLINK "https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png" \o "Title: flexmark-java logo"
+
+
+
+
+
+
+
+
+ flexmark-icon-logo
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+with child paragraphs
+
+```````````````````````````````` example Aside: 4
+| aside block 1
+|
+| with a link [flexmark-icon-logo](https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png "Title: flexmark-java logo")
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ aside block 1
+
+
+
+
+
+
+
+ with a link
+
+
+
+
+
+
+ HYPERLINK "https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png" \o "Title: flexmark-java logo"
+
+
+
+
+
+
+
+
+ flexmark-icon-logo
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+with child aside blocks
+
+```````````````````````````````` example Aside: 5
+| aside block 1
+|
+|| another aside block
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ aside block 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another aside block
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+with child block quote
+
+```````````````````````````````` example Aside: 6
+| aside block 1
+|
+|> block quote
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ aside block 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ block quote
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+as child of block quote
+
+```````````````````````````````` example Aside: 7
+> block quote 1
+>
+>| aside block
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ block quote 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ aside block
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+with child paragraphs
+
+```````````````````````````````` example Aside: 8
+| aside block 1
+|
+| with a link [flexmark-icon-logo](https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png "Title: flexmark-java logo")
+|| another aside block
+.
+
+
+
+
+
+
+
+
+
+
+
+
+ aside block 1
+
+
+
+
+
+
+
+ with a link
+
+
+
+
+
+
+ HYPERLINK "https://raw.githubusercontent.com/vsch/flexmark-java/master/assets/images/flexmark-icon-logo%402x.png" \o "Title: flexmark-java logo"
+
+
+
+
+
+
+
+
+ flexmark-icon-logo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another aside block
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+## Macros
+
+```````````````````````````````` example Macros: 1
+>>>macro
+Simple Text
+<<<
+
+Plain Text <<>>
+.
+
+
+
+
+
+
+ Plain Text
+
+
+ Simple Text
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Macros: 2
+>>>macro
+1. Item 1
+1. Item 2
+<<<
+
+Plain Text <<>>
+.
+
+
+
+
+
+
+ Plain Text
+
+
+
+
+
+
+
+
+
+
+
+ Item 1
+
+
+
+
+
+
+
+
+
+
+
+ Item 2
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Macros: 3
+>>>macro
+| Heading |
+|:-------|
+| Data |
+<<<
+
+Plain Text <<>>
+.
+
+
+
+
+
+
+ Plain Text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Heading
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Data
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Macros: 4
+>>>macro
+> Block Quote
+<<<
+
+| outer first | outer heading |
+|:-------------|:--------------|
+| Regular Text | <<>> |
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outer first
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outer heading
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Regular Text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Block Quote
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Macros: 5
+>>>macro
+1. Item 1
+1. Item 2
+<<<
+
+| outer first | outer heading |
+|:-------------|:--------------|
+| Regular Text | <<>> |
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outer first
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outer heading
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Regular Text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Item 1
+
+
+
+
+
+
+
+
+
+
+
+ Item 2
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Macros: 6
+>>>macro
+| heading |
+|:------------|
+| column `data` |
+| column **data** 2 |
+<<<
+
+| outer first | outer heading |
+|:-------------|:--------------|
+| Regular Text | <<>> |
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outer first
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outer heading
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Regular Text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ heading
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ column
+
+
+
+
+
+ data
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ column
+
+
+
+
+
+ data
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+````````````````````````````````
+
+
+Recursion cut short
+
+```````````````````````````````` example Macros: 7
+>>>macro1
+Macro 1
+<<>>
+<<<
+
+>>>macro2
+Macro 2
+<<>>
+<<<
+
+Plain text <<>>
+
+Plain text <<>>
+.
+
+
+
+
+
+
+ Plain text
+
+
+ Macro 1
+
+
+
+
+
+ Macro 2
+
+
+
+
+
+
+
+
+
+
+ Plain text
+
+
+ Macro 2
+
+
+
+
+
+ Macro 1
+
+
+
+
+
+
+````````````````````````````````
+
+
+```````````````````````````````` example Macros: 8
+>>>macro
+- item 1
+- item 2
+
+
+| Column |
+|--------|
+| Data |
+<<<
+
+
+| Complex | Simple |
+|-------------|-------------|
+| <<>> | Simple Data |
+
+.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Complex
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ item 1
+
+
+
+
+
+
+
+
+
+
+
+ item 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Column
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Data
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple Data
+
+
+
+
+
+
+````````````````````````````````
+
+
diff --git a/flexmark-docx-converter/src/test/resources/docx_converter_issues_ast_spec.md b/flexmark-docx-converter/src/test/resources/docx_converter_issues_ast_spec.md
index f466775319..e2fb85d039 100644
--- a/flexmark-docx-converter/src/test/resources/docx_converter_issues_ast_spec.md
+++ b/flexmark-docx-converter/src/test/resources/docx_converter_issues_ast_spec.md
@@ -3235,7 +3235,7 @@ TEXT :+1: TEXT
````````````````````````````````
-```````````````````````````````` example(Emoji: 4) options(emoji-github)
+```````````````````````````````` example(Emoji: 4) options(emoji-github, IGNORE)
# Heading 1 :basecamp:
## Heading 2 :basecamp:
diff --git a/flexmark-ext-abbreviation/pom.xml b/flexmark-ext-abbreviation/pom.xml
index 290dbaffd7..cbe41c3986 100644
--- a/flexmark-ext-abbreviation/pom.xml
+++ b/flexmark-ext-abbreviation/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-ext-abbreviation
diff --git a/flexmark-ext-admonition/pom.xml b/flexmark-ext-admonition/pom.xml
index 7cd818bc4d..fa6b7ba01a 100644
--- a/flexmark-ext-admonition/pom.xml
+++ b/flexmark-ext-admonition/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-ext-admonition
diff --git a/flexmark-ext-anchorlink/pom.xml b/flexmark-ext-anchorlink/pom.xml
index 2b95c61d25..95a352085c 100644
--- a/flexmark-ext-anchorlink/pom.xml
+++ b/flexmark-ext-anchorlink/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-ext-anchorlink
@@ -28,7 +28,7 @@
com.vladsch.flexmark
flexmark-jira-converter
- 0.36.8
+ 0.35.10
test
diff --git a/flexmark-ext-aside/pom.xml b/flexmark-ext-aside/pom.xml
index bd55b4e467..eb3c718bc0 100644
--- a/flexmark-ext-aside/pom.xml
+++ b/flexmark-ext-aside/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-ext-aside
diff --git a/flexmark-ext-attributes/flexmark-ext-attributes.iml b/flexmark-ext-attributes/flexmark-ext-attributes.iml
index 64600b4f41..2754ba46ab 100644
--- a/flexmark-ext-attributes/flexmark-ext-attributes.iml
+++ b/flexmark-ext-attributes/flexmark-ext-attributes.iml
@@ -36,5 +36,7 @@
+
+
\ No newline at end of file
diff --git a/flexmark-ext-attributes/pom.xml b/flexmark-ext-attributes/pom.xml
index 26de2915d6..5e2aa1081f 100644
--- a/flexmark-ext-attributes/pom.xml
+++ b/flexmark-ext-attributes/pom.xml
@@ -1,58 +1,138 @@
- 4.0.0
-
- com.vladsch.flexmark
- flexmark-java
- 0.36.8
-
-
- flexmark-ext-attributes
- flexmark-java extension for attributes
- flexmark-java extension for attributes
-
-
-
- com.vladsch.flexmark
- flexmark-util
-
-
- com.vladsch.flexmark
- flexmark
-
-
- com.vladsch.flexmark
- flexmark-test-util
- test
-
-
- com.vladsch.flexmark
- flexmark-ext-anchorlink
- test
-
-
- com.vladsch.flexmark
- flexmark-ext-toc
- test
-
-
- com.vladsch.flexmark
- flexmark-ext-definition
- test
-
-
- com.vladsch.flexmark
- flexmark-ext-tables
- test
-
-
- com.vladsch.flexmark
- flexmark-ext-emoji
- test
-
-
- com.vladsch.flexmark
- flexmark-formatter
-
-
+
+ 4.0.0
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-java
+
+ 0.35.10
+
+
+ flexmark-ext-attributes
+
+
+ flexmark-java extension for attributes
+
+
+ flexmark-java extension for attributes
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-util
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-test-util
+
+
+ test
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-ext-anchorlink
+
+
+ test
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-ext-toc
+
+
+ test
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-ext-definition
+
+
+ test
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-ext-escaped-character
+
+
+ test
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-ext-tables
+
+
+ test
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-ext-typographic
+
+
+ test
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-ext-emoji
+
+
+ test
+
+
+
+
+ com.vladsch.flexmark
+
+
+ flexmark-formatter
+
+
+
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributeNode.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributeNode.java
index cd2591bd27..db7dee5a7a 100644
--- a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributeNode.java
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributeNode.java
@@ -1,6 +1,6 @@
package com.vladsch.flexmark.ext.attributes;
-import com.vladsch.flexmark.ast.CustomNode;
+import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.ast.DoNotDecorate;
import com.vladsch.flexmark.util.html.Attribute;
import com.vladsch.flexmark.util.sequence.BasedSequence;
@@ -8,7 +8,7 @@
/**
* An Attribute node representing a single attribute name and value in attributes node
*/
-public class AttributeNode extends CustomNode implements DoNotDecorate {
+public class AttributeNode extends Node implements DoNotDecorate {
protected BasedSequence name = BasedSequence.NULL;
protected BasedSequence attributeSeparator = BasedSequence.NULL;
protected BasedSequence openingMarker = BasedSequence.NULL;
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesDelimiter.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesDelimiter.java
new file mode 100644
index 0000000000..2bbd1c0a4e
--- /dev/null
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesDelimiter.java
@@ -0,0 +1,27 @@
+package com.vladsch.flexmark.ext.attributes;
+
+import com.vladsch.flexmark.ast.DelimitedNode;
+import com.vladsch.flexmark.ast.Node;
+import com.vladsch.flexmark.ast.DoNotDecorate;
+import com.vladsch.flexmark.ast.NonRenderingInline;
+import com.vladsch.flexmark.util.sequence.BasedSequence;
+
+/**
+ * A empty implicit AttributesNode used to mark attribute span start
+ */
+public class AttributesDelimiter extends AttributesNode {
+ public AttributesDelimiter() {
+ }
+
+ public AttributesDelimiter(final BasedSequence chars) {
+ super(chars);
+ }
+
+ public AttributesDelimiter(final BasedSequence openingMarker, final BasedSequence text, final BasedSequence closingMarker) {
+ super(openingMarker, text, closingMarker);
+ }
+
+ public AttributesDelimiter(final BasedSequence chars, final String attributesBlockText) {
+ super(chars, attributesBlockText);
+ }
+}
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesExtension.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesExtension.java
index 75c7d27045..a55a5abd5a 100644
--- a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesExtension.java
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesExtension.java
@@ -36,6 +36,8 @@ public class AttributesExtension implements Parser.ParserExtension
});
public static final DataKey ATTRIBUTES_KEEP = new DataKey<>("ATTRIBUTES_KEEP", KeepType.FIRST); // standard option to allow control over how to handle duplicates
public static final DataKey ASSIGN_TEXT_ATTRIBUTES = new DataKey<>("ASSIGN_TEXT_ATTRIBUTES", true); // assign attributes to text if previous is not a space
+ public static final DataKey WRAP_NON_ATTRIBUTE_TEXT = new DataKey<>("WRAP_NON_ATTRIBUTE_TEXT", true);
+ public static final DataKey USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER = new DataKey<>("USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER", false);
private AttributesExtension() {
}
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesNode.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesNode.java
index c486c4fe88..d341c47d0a 100644
--- a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesNode.java
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/AttributesNode.java
@@ -1,6 +1,6 @@
package com.vladsch.flexmark.ext.attributes;
-import com.vladsch.flexmark.ast.CustomNode;
+import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.ast.DelimitedNode;
import com.vladsch.flexmark.ast.DoNotDecorate;
import com.vladsch.flexmark.ast.NonRenderingInline;
@@ -9,7 +9,7 @@
/**
* A AttributesNode node
*/
-public class AttributesNode extends CustomNode implements DelimitedNode, DoNotDecorate, NonRenderingInline {
+public class AttributesNode extends Node implements DelimitedNode, DoNotDecorate, NonRenderingInline {
protected BasedSequence openingMarker = BasedSequence.NULL;
protected BasedSequence text = BasedSequence.NULL;
protected BasedSequence closingMarker = BasedSequence.NULL;
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributeParsing.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributeParsing.java
index a0ddba1f01..50fa2f91ba 100644
--- a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributeParsing.java
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributeParsing.java
@@ -4,6 +4,8 @@
import java.util.regex.Pattern;
+import static com.vladsch.flexmark.ext.attributes.AttributesExtension.USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER;
+
class AttributeParsing {
final Parsing myParsing;
final Pattern ATTRIBUTES_TAG;
@@ -13,7 +15,17 @@ public AttributeParsing(Parsing parsing) {
this.myParsing = parsing;
String unquotedValue = myParsing.UNQUOTEDVALUE;//.replace("]+","}{"); // exclude braces
this.ATTRIBUTE = Pattern.compile("\\s*([#.]" + unquotedValue + "|" + myParsing.ATTRIBUTENAME + ")\\s*(?:=\\s*(" + myParsing.ATTRIBUTEVALUE + ")?" + ")?");
- this.ATTRIBUTES_TAG = Pattern.compile("\\{((?:" + "\\s*([#.]" + unquotedValue + "|" + myParsing.ATTRIBUTENAME + ")\\s*(?:=\\s*(" + myParsing.ATTRIBUTEVALUE + ")?" + ")?" + ")" +
- "(?:" + "\\s+([#.]" + unquotedValue + "|" + myParsing.ATTRIBUTENAME + ")\\s*(?:=\\s*(" + myParsing.ATTRIBUTEVALUE + ")?" + ")?" + ")*" + ")\\s*\\}");
+
+ if (USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER.getFrom(parsing.options)) {
+ this.ATTRIBUTES_TAG = Pattern.compile(
+ "^\\{((?:[#.])|(?:" + "\\s*([#.]" + unquotedValue + "|" + myParsing.ATTRIBUTENAME + ")\\s*(?:=\\s*(" + myParsing.ATTRIBUTEVALUE + ")?" + ")?" + ")" +
+ "(?:" + "\\s+([#.]" + unquotedValue + "|" + myParsing.ATTRIBUTENAME + ")\\s*(?:=\\s*(" + myParsing.ATTRIBUTEVALUE + ")?" + ")?" + ")*" + "\\s*)\\}"
+ );
+ } else {
+ this.ATTRIBUTES_TAG = Pattern.compile(
+ "^\\{((?:" + "\\s*([#.]" + unquotedValue + "|" + myParsing.ATTRIBUTENAME + ")\\s*(?:=\\s*(" + myParsing.ATTRIBUTEVALUE + ")?" + ")?" + ")" +
+ "(?:" + "\\s+([#.]" + unquotedValue + "|" + myParsing.ATTRIBUTENAME + ")\\s*(?:=\\s*(" + myParsing.ATTRIBUTEVALUE + ")?" + ")?" + ")*" + "\\s*)\\}"
+ );
+ }
}
}
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesInlineParserExtension.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesInlineParserExtension.java
index 56d5d5ef49..ac544f0cc5 100644
--- a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesInlineParserExtension.java
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesInlineParserExtension.java
@@ -1,6 +1,7 @@
package com.vladsch.flexmark.ext.attributes.internal;
import com.vladsch.flexmark.ext.attributes.AttributeNode;
+import com.vladsch.flexmark.ext.attributes.AttributesDelimiter;
import com.vladsch.flexmark.ext.attributes.AttributesNode;
import com.vladsch.flexmark.parser.InlineParser;
import com.vladsch.flexmark.parser.InlineParserExtension;
@@ -38,13 +39,15 @@ public boolean parse(final InlineParser inlineParser) {
// see what we have
// open, see if open/close
BasedSequence attributesText = input.subSequence(matcher.start(1), matcher.end(1));
- AttributesNode attributes = new AttributesNode(attributesOpen.subSequence(0, 1), attributesText, attributesOpen.endSequence(1));
+ AttributesNode attributes = attributesText.equals("#") || attributesText.equals(".") ? new AttributesDelimiter(attributesOpen.subSequence(0, 1), attributesText, attributesOpen.endSequence(1))
+ : new AttributesNode(attributesOpen.subSequence(0, 1), attributesText, attributesOpen.endSequence(1));
+
attributes.setCharsFromContent();
int leadingSpaces = attributesText.countLeading(" \t");
// give it to the text node
if (leadingSpaces > 0) {
- inlineParser.appendText(attributesText,0,leadingSpaces);
+ inlineParser.appendText(attributesText, 0, leadingSpaces);
attributesText = attributesText.subSequence(leadingSpaces);
}
@@ -52,7 +55,7 @@ public boolean parse(final InlineParser inlineParser) {
inlineParser.getBlock().appendChild(attributes);
BasedSequence attributeText = attributesText.trim();
- if (!attributeText.isEmpty()) {
+ if (!attributeText.isEmpty() && attributes instanceof AttributesNode) {
// have some attribute text
// parse attributes
Matcher attributeMatcher = parsing.ATTRIBUTE.matcher(attributeText);
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesNodeFormatter.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesNodeFormatter.java
index 8aa0f96228..43eb856a61 100644
--- a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesNodeFormatter.java
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesNodeFormatter.java
@@ -1,5 +1,6 @@
package com.vladsch.flexmark.ext.attributes.internal;
+import com.vladsch.flexmark.ext.attributes.AttributesDelimiter;
import com.vladsch.flexmark.ast.Document;
import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.ext.attributes.AttributeNode;
@@ -67,6 +68,12 @@ public void render(AttributesNode node, NodeFormatterContext context, MarkdownWr
AttributesNodeFormatter.this.render(node, context, markdown);
}
}));
+ set.add(new NodeFormattingHandler(AttributesDelimiter.class, new CustomNodeFormatter() {
+ @Override
+ public void render(AttributesDelimiter node, NodeFormatterContext context, MarkdownWriter markdown) {
+ AttributesNodeFormatter.this.render(node, context, markdown);
+ }
+ }));
return set;
}
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesNodePostProcessor.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesNodePostProcessor.java
index bac6716272..e00623c6f9 100644
--- a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesNodePostProcessor.java
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesNodePostProcessor.java
@@ -2,12 +2,15 @@
import com.vladsch.flexmark.ast.*;
import com.vladsch.flexmark.ext.attributes.AttributeNode;
+import com.vladsch.flexmark.ext.attributes.AttributesDelimiter;
import com.vladsch.flexmark.ext.attributes.AttributesExtension;
import com.vladsch.flexmark.ext.attributes.AttributesNode;
import com.vladsch.flexmark.parser.block.NodePostProcessor;
import com.vladsch.flexmark.parser.block.NodePostProcessorFactory;
import com.vladsch.flexmark.util.NodeTracker;
+import java.util.ArrayList;
+
public class AttributesNodePostProcessor extends NodePostProcessor {
private final NodeAttributeRepository nodeAttributeRepository;
private final AttributesOptions myOptions;
@@ -18,7 +21,7 @@ public AttributesNodePostProcessor(Document document) {
}
public Node getAttributeOwner(NodeTracker state, AttributesNode attributesNode) {
- Node previous = attributesNode.getPreviousAnyNot(BlankLine.class);
+ Node previous = attributesNode.getPreviousAnyNot(BlankLine.class, DoNotAttributeDecorate.class);
Node next = attributesNode.getNext();
Node attributeOwner;
Node parent = attributesNode.getParent();
@@ -81,14 +84,50 @@ public Node getAttributeOwner(NodeTracker state, AttributesNode attributesNode)
} else {
if ((!myOptions.assignTextAttributes && (previous instanceof Text || previous instanceof TextBase)) || previous.getChars().getEndOffset() < attributesNode.getStartOffset()) {
// either previous is text and no text attributes or not attached to the previous node
- // then attributes go to parent
- if (parent instanceof Paragraph && parent.getParent() instanceof ParagraphItemContainer) {
+ // then attributes go to parent unless overridden by delimited attribute spans
+
+ if (myOptions.useEmptyImplicitAsSpanDelimiter) {
+ // find first previous not delimited by unmatched attribute
+ previous = matchDelimitedSpans(state, attributesNode, previous);
+ }
+
+ if (previous instanceof TextBase) {
+ // use delimited span
+ attributeOwner = previous;
+ } else if (parent instanceof Paragraph && parent.getParent() instanceof ParagraphItemContainer) {
attributeOwner = parent.getParent();
} else {
attributeOwner = parent;
}
} else {
- // attached, attributes go to previous node
+ // attached, attributes go to previous node, but may need to wrap spans containing DoNotAttributeDecorate in TextBase
+ if (myOptions.wrapNonAttributeText) {
+ // find first previous not delimited by attribute
+ Node first = attributesNode.getPrevious();
+ Node lastNonAttributesNode = null;
+ boolean hadDoNotDecorate = false;
+
+ while (first != null && (first instanceof Text || first instanceof DoNotAttributeDecorate)) {
+ if (first instanceof DoNotAttributeDecorate) {
+ hadDoNotDecorate = true;
+ }
+ lastNonAttributesNode = first;
+ first = first.getPrevious();
+ }
+
+ if (hadDoNotDecorate) {
+ // need to wrap in text base from first to attribute node
+ TextBase textBase = new TextBase();
+ textBaseWrap(state, lastNonAttributesNode, attributesNode, textBase);
+ previous = textBase;
+ }
+ }
+
+ if (myOptions.useEmptyImplicitAsSpanDelimiter) {
+ // find first previous not delimited by unmatched attribute
+ previous = matchDelimitedSpans(state, attributesNode, previous);
+ }
+
if (previous instanceof Text) {
// insert text base where text was
TextBase textBase = new TextBase(previous.getChars());
@@ -99,6 +138,9 @@ public Node getAttributeOwner(NodeTracker state, AttributesNode attributesNode)
textBase.appendChild(previous);
state.nodeAddedWithChildren(textBase);
attributeOwner = textBase;
+ } else if (previous instanceof AttributesDelimiter) {
+ // no owner, attributes go into aether
+ attributeOwner = null;
} else {
if (previous instanceof AttributesNode) {
// we are spliced right up against previous attributes, give our attributes to the owner of previous attributes
@@ -112,6 +154,72 @@ public Node getAttributeOwner(NodeTracker state, AttributesNode attributesNode)
return attributeOwner;
}
+ static Node matchDelimitedSpans(NodeTracker state, AttributesNode attributesNode, Node previous) {
+ Node first = attributesNode.getPrevious();
+ Node lastNonAttributesNode = null;
+ ArrayList unmatchedAttributes = new ArrayList<>();
+
+ while (first != null) {
+ if (first instanceof AttributesDelimiter) {
+ if (!unmatchedAttributes.isEmpty()) {
+ // match it and wrap in text
+ Node lastNode = unmatchedAttributes.remove(unmatchedAttributes.size() - 1);
+ lastNonAttributesNode = first.getNext();
+ if (lastNode != lastNonAttributesNode) {
+ TextBase textBase = new TextBase();
+
+ textBaseWrap(state, lastNonAttributesNode, lastNode, textBase);
+ lastNonAttributesNode = textBase;
+ } else {
+ previous = first;
+ }
+ } else {
+ // unmatched delimiter is our start span
+ TextBase textBase = new TextBase();
+ lastNonAttributesNode = first.getNext();
+
+ if (lastNonAttributesNode != attributesNode) {
+ textBaseWrap(state, lastNonAttributesNode, attributesNode, textBase);
+ previous = textBase;
+ } else {
+ previous = first;
+ }
+ break;
+ }
+ } else if (first instanceof AttributesNode) {
+ unmatchedAttributes.add(first);
+ } else {
+ lastNonAttributesNode = first;
+ }
+
+ first = first.getPrevious();
+ }
+
+ if (!unmatchedAttributes.isEmpty()) {
+ // use the first unmatched as our end of attribute span
+ previous = unmatchedAttributes.get(0);
+ Node previousNext = previous.getNext();
+ if (previousNext != null && previousNext != attributesNode) {
+ previous = previousNext;
+ }
+ }
+
+ return previous;
+ }
+
+ static void textBaseWrap(final NodeTracker state, Node lastNonAttributesNode, final Node lastNode, final TextBase textBase) {
+ while (lastNonAttributesNode != lastNode) {
+ Node nextNode = lastNonAttributesNode.getNext();
+ lastNonAttributesNode.unlink();
+ state.nodeRemoved(lastNonAttributesNode);
+ textBase.appendChild(lastNonAttributesNode);
+ lastNonAttributesNode = nextNode;
+ }
+ textBase.setCharsFromContent();
+ lastNode.insertBefore(textBase);
+ state.nodeAddedWithDescendants(textBase);
+ }
+
@Override
public void process(NodeTracker state, Node node) {
if (node instanceof AttributesNode) {
@@ -154,15 +262,17 @@ public void process(NodeTracker state, Node node) {
}
Node attributeOwner = getAttributeOwner(state, attributesNode);
- nodeAttributeRepository.put(attributeOwner, attributesNode);
-
- // set the heading id for this node so the correct id will be used
- if (attributeOwner instanceof AnchorRefTarget) {
- for (Node attributeNode : attributesNode.getReversedChildren()) {
- if (attributeNode instanceof AttributeNode) {
- if (((AttributeNode) attributeNode).isId()) {
- ((AnchorRefTarget) attributeOwner).setAnchorRefId(((AttributeNode) attributeNode).getValue().toString());
- break;
+ if (attributeOwner != null) {
+ nodeAttributeRepository.put(attributeOwner, attributesNode);
+
+ // set the heading id for this node so the correct id will be used
+ if (attributeOwner instanceof AnchorRefTarget) {
+ for (Node attributeNode : attributesNode.getReversedChildren()) {
+ if (attributeNode instanceof AttributeNode) {
+ if (((AttributeNode) attributeNode).isId()) {
+ ((AnchorRefTarget) attributeOwner).setAnchorRefId(((AttributeNode) attributeNode).getValue().toString());
+ break;
+ }
}
}
}
diff --git a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesOptions.java b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesOptions.java
index ff85020e6b..154ba965c0 100644
--- a/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesOptions.java
+++ b/flexmark-ext-attributes/src/main/java/com/vladsch/flexmark/ext/attributes/internal/AttributesOptions.java
@@ -7,14 +7,20 @@
class AttributesOptions implements MutableDataSetter {
public final boolean assignTextAttributes;
+ public final boolean wrapNonAttributeText;
+ public final boolean useEmptyImplicitAsSpanDelimiter;
public AttributesOptions(DataHolder options) {
assignTextAttributes = AttributesExtension.ASSIGN_TEXT_ATTRIBUTES.getFrom(options);
+ wrapNonAttributeText = AttributesExtension.WRAP_NON_ATTRIBUTE_TEXT.getFrom(options);
+ useEmptyImplicitAsSpanDelimiter = AttributesExtension.USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER.getFrom(options);
}
@Override
public MutableDataHolder setIn(final MutableDataHolder dataHolder) {
dataHolder.set(AttributesExtension.ASSIGN_TEXT_ATTRIBUTES, assignTextAttributes);
+ dataHolder.set(AttributesExtension.WRAP_NON_ATTRIBUTE_TEXT, wrapNonAttributeText);
+ dataHolder.set(AttributesExtension.USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER, useEmptyImplicitAsSpanDelimiter);
return dataHolder;
}
}
diff --git a/flexmark-ext-attributes/src/main/javadoc/overview.md b/flexmark-ext-attributes/src/main/javadoc/overview.md
index bb6518a29d..527be484e0 100644
--- a/flexmark-ext-attributes/src/main/javadoc/overview.md
+++ b/flexmark-ext-attributes/src/main/javadoc/overview.md
@@ -41,3 +41,6 @@ Attribute which starts with `#` such as `#id-string` is equivalent to `id="id-st
* `style` values are accumulated as a semicolon (`;`) separated list.
* all others override any previous values of the same name.
+Setting `USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER` to `true`, will treat `{.}` or `{#}` as markers
+for start of closest matching attributes node to give greater control of where attributes are
+attached in text.
diff --git a/flexmark-ext-attributes/src/test/java/com/vladsch/flexmark/ext/attributes/ComboExtAttributesSpecTest.java b/flexmark-ext-attributes/src/test/java/com/vladsch/flexmark/ext/attributes/ComboExtAttributesSpecTest.java
index 1b7ec9f8b6..6eb1e1d76d 100644
--- a/flexmark-ext-attributes/src/test/java/com/vladsch/flexmark/ext/attributes/ComboExtAttributesSpecTest.java
+++ b/flexmark-ext-attributes/src/test/java/com/vladsch/flexmark/ext/attributes/ComboExtAttributesSpecTest.java
@@ -3,8 +3,10 @@
import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension;
import com.vladsch.flexmark.ext.definition.DefinitionExtension;
import com.vladsch.flexmark.ext.emoji.EmojiExtension;
+import com.vladsch.flexmark.ext.escaped.character.EscapedCharacterExtension;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.ext.toc.TocExtension;
+import com.vladsch.flexmark.ext.typographic.TypographicExtension;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.spec.SpecExample;
@@ -28,6 +30,8 @@ public class ComboExtAttributesSpecTest extends ComboSpecTestCase {
TocExtension.create(),
EmojiExtension.create(),
DefinitionExtension.create(),
+ EscapedCharacterExtension.create(),
+ TypographicExtension.create(),
TablesExtension.create()
));
@@ -40,6 +44,8 @@ public class ComboExtAttributesSpecTest extends ComboSpecTestCase {
);
optionsMap.put("text-attributes", new MutableDataSet().set(AttributesExtension.ASSIGN_TEXT_ATTRIBUTES, true));
optionsMap.put("no-text-attributes", new MutableDataSet().set(AttributesExtension.ASSIGN_TEXT_ATTRIBUTES, false));
+ optionsMap.put("dont-wrap-non-attributes", new MutableDataSet().set(AttributesExtension.WRAP_NON_ATTRIBUTE_TEXT, false));
+ optionsMap.put("empty-implicit-delimiters", new MutableDataSet().set(AttributesExtension.USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER, true));
optionsMap.put("src-pos", new MutableDataSet().set(HtmlRenderer.SOURCE_POSITION_ATTRIBUTE, "md-pos"));
}
diff --git a/flexmark-ext-attributes/src/test/resources/ext_attributes_ast_spec.md b/flexmark-ext-attributes/src/test/resources/ext_attributes_ast_spec.md
index 250910f69a..ecbac94836 100644
--- a/flexmark-ext-attributes/src/test/resources/ext_attributes_ast_spec.md
+++ b/flexmark-ext-attributes/src/test/resources/ext_attributes_ast_spec.md
@@ -95,6 +95,14 @@ For the rest of the specification the `options` following the example will conta
* else
* Cond 1.3 attributes are assigned to the text element
+To allow greater control of attribute assignment it is possible to set
+`USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER` to `true`, will treat `{.}` or `{#}` as markers for start
+of closest matching attributes node to give greater control of where attributes are attached in
+text.
+
+**NOTE**: If `ASSIGN_TEXT_ATTRIBUTES` is set to `false` then
+`USE_EMPTY_IMPLICIT_AS_SPAN_DELIMITER` option is ignored.
+
attributes assigned to paragraph
```````````````````````````````` example(Text Node Previous Sibling: 1) options(no-text-attributes)
@@ -1774,9 +1782,595 @@ Document[0, 162]
````````````````````````````````
-## Trailing Spaces
+## Non-Attributes
+
+wrap non-attributes by default
+
+```````````````````````````````` example Non-Attributes: 1
+This is a test. It works fine until a word like don't appears.{.style} Another style might follow.{.style2}
+.
+This is a test. It works fine until a word like don’t appears. Another style might follow.
+.
+Document[0, 108]
+ Paragraph[0, 108]
+ Text[0, 51] chars:[0, 51, "This … e don"]
+ TypographicSmarts[51, 52] typographic: ’
+ TextBase[52, 62] chars:[52, 62, "t appears."]
+ Text[52, 62] chars:[52, 62, "t appears."]
+ AttributesNode[62, 70] textOpen:[62, 63, "{"] text:[63, 69, ".style"] textClose:[69, 70, "}"]
+ AttributeNode[63, 69] name:[63, 64, "."] value:[64, 69, "style"] isImplicit isClass
+ TextBase[70, 98] chars:[70, 98, " Anot … llow."]
+ Text[70, 98] chars:[70, 98, " Anot … llow."]
+ AttributesNode[98, 107] textOpen:[98, 99, "{"] text:[99, 106, ".style2"] textClose:[106, 107, "}"]
+ AttributeNode[99, 106] name:[99, 100, "."] value:[100, 106, "style2"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example Non-Attributes: 2
+This is a test. It works fine until a word like 'don't' appears.{.style} Another style might
+follow.{.style2}
+.
+This is a test. It works fine until a word like ‘don’t’ appears. Another style might
+follow.
+.
+Document[0, 110]
+ Paragraph[0, 110]
+ Text[0, 48] chars:[0, 48, "This … like "]
+ TypographicQuotes[48, 55] typographicOpening: ‘ typographicClosing: ’ textOpen:[48, 49, "'"] text:[49, 54, "don't"] textClose:[54, 55, "'"]
+ Text[49, 52] chars:[49, 52, "don"]
+ TypographicSmarts[52, 53] typographic: ’
+ Text[53, 54] chars:[53, 54, "t"]
+ TextBase[55, 64] chars:[55, 64, " appears."]
+ Text[55, 64] chars:[55, 64, " appears."]
+ AttributesNode[64, 72] textOpen:[64, 65, "{"] text:[65, 71, ".style"] textClose:[71, 72, "}"]
+ AttributeNode[65, 71] name:[65, 66, "."] value:[66, 71, "style"] isImplicit isClass
+ Text[72, 92] chars:[72, 92, " Anot … might"]
+ SoftLineBreak[92, 93]
+ TextBase[93, 100] chars:[93, 100, "follow."]
+ Text[93, 100] chars:[93, 100, "follow."]
+ AttributesNode[100, 109] textOpen:[100, 101, "{"] text:[101, 108, ".style2"] textClose:[108, 109, "}"]
+ AttributeNode[101, 108] name:[101, 102, "."] value:[102, 108, "style2"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example Non-Attributes: 3
+This is a test. It works fine until a word like don\'t appears.{.style} Another style might
+follow.{.style2}
+.
+This is a test. It works fine until a word like don't appears. Another style might
+follow.
+.
+Document[0, 109]
+ Paragraph[0, 109]
+ TextBase[0, 63] chars:[0, 63, "This … ears."]
+ Text[0, 51] chars:[0, 51, "This … e don"]
+ EscapedCharacter[51, 53] textOpen:[51, 52, "\"] text:[52, 53, "'"]
+ Text[53, 63] chars:[53, 63, "t appears."]
+ AttributesNode[63, 71] textOpen:[63, 64, "{"] text:[64, 70, ".style"] textClose:[70, 71, "}"]
+ AttributeNode[64, 70] name:[64, 65, "."] value:[65, 70, "style"] isImplicit isClass
+ Text[71, 91] chars:[71, 91, " Anot … might"]
+ SoftLineBreak[91, 92]
+ TextBase[92, 99] chars:[92, 99, "follow."]
+ Text[92, 99] chars:[92, 99, "follow."]
+ AttributesNode[99, 108] textOpen:[99, 100, "{"] text:[100, 107, ".style2"] textClose:[107, 108, "}"]
+ AttributeNode[100, 107] name:[100, 101, "."] value:[101, 107, "style2"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Non-Attributes: 4) options(dont-wrap-non-attributes)
+This is a test. It works fine until a word like don't appears.{.style} Another style might follow.{.style2}
+.
+This is a test. It works fine until a word like don’t appears. Another style might follow.
+.
+Document[0, 107]
+ Paragraph[0, 107]
+ Text[0, 51] chars:[0, 51, "This … e don"]
+ TypographicSmarts[51, 52] typographic: ’
+ TextBase[52, 62] chars:[52, 62, "t appears."]
+ Text[52, 62] chars:[52, 62, "t appears."]
+ AttributesNode[62, 70] textOpen:[62, 63, "{"] text:[63, 69, ".style"] textClose:[69, 70, "}"]
+ AttributeNode[63, 69] name:[63, 64, "."] value:[64, 69, "style"] isImplicit isClass
+ TextBase[70, 98] chars:[70, 98, " Anot … llow."]
+ Text[70, 98] chars:[70, 98, " Anot … llow."]
+ AttributesNode[98, 107] textOpen:[98, 99, "{"] text:[99, 106, ".style2"] textClose:[106, 107, "}"]
+ AttributeNode[99, 106] name:[99, 100, "."] value:[100, 106, "style2"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Non-Attributes: 5) options(dont-wrap-non-attributes)
+This is a test. It works fine until a word like 'don't' appears.{.style} Another style might follow.{.style2}
+.
+This is a test. It works fine until a word like ‘don’t’ appears. Another style might follow.
+.
+Document[0, 109]
+ Paragraph[0, 109]
+ Text[0, 48] chars:[0, 48, "This … like "]
+ TypographicQuotes[48, 55] typographicOpening: ‘ typographicClosing: ’ textOpen:[48, 49, "'"] text:[49, 54, "don't"] textClose:[54, 55, "'"]
+ Text[49, 52] chars:[49, 52, "don"]
+ TypographicSmarts[52, 53] typographic: ’
+ Text[53, 54] chars:[53, 54, "t"]
+ TextBase[55, 64] chars:[55, 64, " appears."]
+ Text[55, 64] chars:[55, 64, " appears."]
+ AttributesNode[64, 72] textOpen:[64, 65, "{"] text:[65, 71, ".style"] textClose:[71, 72, "}"]
+ AttributeNode[65, 71] name:[65, 66, "."] value:[66, 71, "style"] isImplicit isClass
+ TextBase[72, 100] chars:[72, 100, " Anot … llow."]
+ Text[72, 100] chars:[72, 100, " Anot … llow."]
+ AttributesNode[100, 109] textOpen:[100, 101, "{"] text:[101, 108, ".style2"] textClose:[108, 109, "}"]
+ AttributeNode[101, 108] name:[101, 102, "."] value:[102, 108, "style2"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Non-Attributes: 6) options(dont-wrap-non-attributes)
+This is a test. It works fine until a word like don\'t appears.{.style} Another style might
+follow.{.style2}
+.
+This is a test. It works fine until a word like don't appears. Another style might
+follow.
+.
+Document[0, 108]
+ Paragraph[0, 108]
+ TextBase[0, 63] chars:[0, 63, "This … ears."]
+ Text[0, 51] chars:[0, 51, "This … e don"]
+ EscapedCharacter[51, 53] textOpen:[51, 52, "\"] text:[52, 53, "'"]
+ Text[53, 63] chars:[53, 63, "t appears."]
+ AttributesNode[63, 71] textOpen:[63, 64, "{"] text:[64, 70, ".style"] textClose:[70, 71, "}"]
+ AttributeNode[64, 70] name:[64, 65, "."] value:[65, 70, "style"] isImplicit isClass
+ Text[71, 91] chars:[71, 91, " Anot … might"]
+ SoftLineBreak[91, 92]
+ TextBase[92, 99] chars:[92, 99, "follow."]
+ Text[92, 99] chars:[92, 99, "follow."]
+ AttributesNode[99, 108] textOpen:[99, 100, "{"] text:[100, 107, ".style2"] textClose:[107, 108, "}"]
+ AttributeNode[100, 107] name:[100, 101, "."] value:[101, 107, "style2"] isImplicit isClass
+````````````````````````````````
+
+
+## Attribute Span
+
+```````````````````````````````` example Attribute Span: 1
+Cond 1.2 text node{.red}
+.
+Cond 1.2 text node
+.
+Document[0, 25]
+ Paragraph[0, 25]
+ TextBase[0, 18] chars:[0, 18, "Cond … node"]
+ Text[0, 18] chars:[0, 18, "Cond … node"]
+ AttributesNode[18, 24] textOpen:[18, 19, "{"] text:[19, 23, ".red"] textClose:[23, 24, "}"]
+ AttributeNode[19, 23] name:[19, 20, "."] value:[20, 23, "red"] isImplicit isClass
+````````````````````````````````
+
+
+can use empty for braces
+
+```````````````````````````````` example Attribute Span: 2
+Cond 1.2 text {}node
+.
+Cond 1.2 text {}node
+.
+Document[0, 21]
+ Paragraph[0, 21]
+ Text[0, 20] chars:[0, 20, "Cond … }node"]
+````````````````````````````````
+
+
+empty attributes are just text
+
+```````````````````````````````` example Attribute Span: 3
+Cond 1.2 text {}node{.red}
+.
+Cond 1.2 text {}node
+.
+Document[0, 27]
+ Paragraph[0, 27]
+ TextBase[0, 20] chars:[0, 20, "Cond … }node"]
+ Text[0, 20] chars:[0, 20, "Cond … }node"]
+ AttributesNode[20, 26] textOpen:[20, 21, "{"] text:[21, 25, ".red"] textClose:[25, 26, "}"]
+ AttributeNode[21, 25] name:[21, 22, "."] value:[22, 25, "red"] isImplicit isClass
+````````````````````````````````
+
+
+empty attributes are just text
+
+```````````````````````````````` example Attribute Span: 4
+Cond 1.2 text { }node{.red}
+.
+Cond 1.2 text { }node
+.
+Document[0, 28]
+ Paragraph[0, 28]
+ TextBase[0, 21] chars:[0, 21, "Cond … }node"]
+ Text[0, 21] chars:[0, 21, "Cond … }node"]
+ AttributesNode[21, 27] textOpen:[21, 22, "{"] text:[22, 26, ".red"] textClose:[26, 27, "}"]
+ AttributeNode[22, 26] name:[22, 23, "."] value:[23, 26, "red"] isImplicit isClass
+````````````````````````````````
+
+
+can use empty class is just text
+
+```````````````````````````````` example Attribute Span: 5
+Cond 1.2 text {.}node{.red}
+.
+Cond 1.2 text {.}node
+.
+Document[0, 28]
+ Paragraph[0, 28]
+ TextBase[0, 21] chars:[0, 21, "Cond … }node"]
+ Text[0, 21] chars:[0, 21, "Cond … }node"]
+ AttributesNode[21, 27] textOpen:[21, 22, "{"] text:[22, 26, ".red"] textClose:[26, 27, "}"]
+ AttributeNode[22, 26] name:[22, 23, "."] value:[23, 26, "red"] isImplicit isClass
+````````````````````````````````
+
+
+spaces in empty id is just text
+
+```````````````````````````````` example Attribute Span: 6
+Cond 1.2 text { #}node{.red}
+.
+Cond 1.2 text { #}node
+.
+Document[0, 29]
+ Paragraph[0, 29]
+ TextBase[0, 22] chars:[0, 22, "Cond … }node"]
+ Text[0, 22] chars:[0, 22, "Cond … }node"]
+ AttributesNode[22, 28] textOpen:[22, 23, "{"] text:[23, 27, ".red"] textClose:[27, 28, "}"]
+ AttributeNode[23, 27] name:[23, 24, "."] value:[24, 27, "red"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example Attribute Span: 7
+Cond 1.2 text {# }node{.red}
+.
+Cond 1.2 text {# }node
+.
+Document[0, 29]
+ Paragraph[0, 29]
+ TextBase[0, 22] chars:[0, 22, "Cond … }node"]
+ Text[0, 22] chars:[0, 22, "Cond … }node"]
+ AttributesNode[22, 28] textOpen:[22, 23, "{"] text:[23, 27, ".red"] textClose:[27, 28, "}"]
+ AttributeNode[23, 27] name:[23, 24, "."] value:[24, 27, "red"] isImplicit isClass
+````````````````````````````````
+
+
+spaces in empty class is just text
+
+```````````````````````````````` example(Attribute Span: 8) options(empty-implicit-delimiters)
+Cond 1.2 text { .}node{.red}
+.
+Cond 1.2 text { .}node
+.
+Document[0, 28]
+ Paragraph[0, 28]
+ TextBase[0, 22] chars:[0, 22, "Cond … }node"]
+ Text[0, 22] chars:[0, 22, "Cond … }node"]
+ AttributesNode[22, 28] textOpen:[22, 23, "{"] text:[23, 27, ".red"] textClose:[27, 28, "}"]
+ AttributeNode[23, 27] name:[23, 24, "."] value:[24, 27, "red"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Attribute Span: 9) options(empty-implicit-delimiters)
+Cond 1.2 text {. }node{.red}
+.
+Cond 1.2 text {. }node
+.
+Document[0, 28]
+ Paragraph[0, 28]
+ TextBase[0, 22] chars:[0, 22, "Cond … }node"]
+ Text[0, 22] chars:[0, 22, "Cond … }node"]
+ AttributesNode[22, 28] textOpen:[22, 23, "{"] text:[23, 27, ".red"] textClose:[27, 28, "}"]
+ AttributeNode[23, 27] name:[23, 24, "."] value:[24, 27, "red"] isImplicit isClass
+````````````````````````````````
+
+
+can use empty id is just text
+
+```````````````````````````````` example Attribute Span: 10
+Cond 1.2 text {#}node{.red}
+.
+Cond 1.2 text {#}node
+.
+Document[0, 28]
+ Paragraph[0, 28]
+ TextBase[0, 21] chars:[0, 21, "Cond … }node"]
+ Text[0, 21] chars:[0, 21, "Cond … }node"]
+ AttributesNode[21, 27] textOpen:[21, 22, "{"] text:[22, 26, ".red"] textClose:[26, 27, "}"]
+ AttributeNode[22, 26] name:[22, 23, "."] value:[23, 26, "red"] isImplicit isClass
+````````````````````````````````
+
+
+can use empty class as delimiter
+
+```````````````````````````````` example(Attribute Span: 11) options(empty-implicit-delimiters)
+Cond 1.2 text {.}node{.red}
+.
+Cond 1.2 text node
+.
+Document[0, 27]
+ Paragraph[0, 27]
+ Text[0, 14] chars:[0, 14, "Cond … text "]
+ AttributesDelimiter[14, 17] textOpen:[14, 15, "{"] text:[15, 16, "."] textClose:[16, 17, "}"]
+ TextBase[17, 21] chars:[17, 21, "node"]
+ Text[17, 21] chars:[17, 21, "node"]
+ AttributesNode[21, 27] textOpen:[21, 22, "{"] text:[22, 26, ".red"] textClose:[26, 27, "}"]
+ AttributeNode[22, 26] name:[22, 23, "."] value:[23, 26, "red"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Attribute Span: 12) options(empty-implicit-delimiters)
+Cond 1.2 {.}text node{.red}
+.
+Cond 1.2 text node
+.
+Document[0, 27]
+ Paragraph[0, 27]
+ Text[0, 9] chars:[0, 9, "Cond 1.2 "]
+ AttributesDelimiter[9, 12] textOpen:[9, 10, "{"] text:[10, 11, "."] textClose:[11, 12, "}"]
+ TextBase[12, 21] chars:[12, 21, "text node"]
+ Text[12, 21] chars:[12, 21, "text node"]
+ AttributesNode[21, 27] textOpen:[21, 22, "{"] text:[22, 26, ".red"] textClose:[26, 27, "}"]
+ AttributeNode[22, 26] name:[22, 23, "."] value:[23, 26, "red"] isImplicit isClass
+````````````````````````````````
+
+
+can use empty id as delimiter
+
+```````````````````````````````` example(Attribute Span: 13) options(empty-implicit-delimiters)
+Cond 1.2 {#}text node{.red}
+.
+Cond 1.2 text node
+.
+Document[0, 27]
+ Paragraph[0, 27]
+ Text[0, 9] chars:[0, 9, "Cond 1.2 "]
+ AttributesDelimiter[9, 12] textOpen:[9, 10, "{"] text:[10, 11, "#"] textClose:[11, 12, "}"]
+ TextBase[12, 21] chars:[12, 21, "text node"]
+ Text[12, 21] chars:[12, 21, "text node"]
+ AttributesNode[21, 27] textOpen:[21, 22, "{"] text:[22, 26, ".red"] textClose:[26, 27, "}"]
+ AttributeNode[22, 26] name:[22, 23, "."] value:[23, 26, "red"] isImplicit isClass
+````````````````````````````````
+
+
+nesting is allowed
+
+```````````````````````````````` example(Attribute Span: 14) options(empty-implicit-delimiters)
+Cond {.}1.2 {#}text node{.red}{.green}
+.
+Cond 1.2 text node
+.
+Document[0, 38]
+ Paragraph[0, 38]
+ Text[0, 5] chars:[0, 5, "Cond "]
+ AttributesDelimiter[5, 8] textOpen:[5, 6, "{"] text:[6, 7, "."] textClose:[7, 8, "}"]
+ TextBase[8, 30] chars:[8, 30, "1.2 { … .red}"]
+ Text[8, 12] chars:[8, 12, "1.2 "]
+ AttributesDelimiter[12, 15] textOpen:[12, 13, "{"] text:[13, 14, "#"] textClose:[14, 15, "}"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ Text[15, 24] chars:[15, 24, "text node"]
+ AttributesNode[24, 30] textOpen:[24, 25, "{"] text:[25, 29, ".red"] textClose:[29, 30, "}"]
+ AttributeNode[25, 29] name:[25, 26, "."] value:[26, 29, "red"] isImplicit isClass
+ AttributesNode[30, 38] textOpen:[30, 31, "{"] text:[31, 37, ".green"] textClose:[37, 38, "}"]
+ AttributeNode[31, 37] name:[31, 32, "."] value:[32, 37, "green"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Attribute Span: 15) options(empty-implicit-delimiters)
+Cond {#}1.2 {.}text node{.red}{.green}
+.
+Cond 1.2 text node
+.
+Document[0, 38]
+ Paragraph[0, 38]
+ Text[0, 5] chars:[0, 5, "Cond "]
+ AttributesDelimiter[5, 8] textOpen:[5, 6, "{"] text:[6, 7, "#"] textClose:[7, 8, "}"]
+ TextBase[8, 30] chars:[8, 30, "1.2 { … .red}"]
+ Text[8, 12] chars:[8, 12, "1.2 "]
+ AttributesDelimiter[12, 15] textOpen:[12, 13, "{"] text:[13, 14, "."] textClose:[14, 15, "}"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ Text[15, 24] chars:[15, 24, "text node"]
+ AttributesNode[24, 30] textOpen:[24, 25, "{"] text:[25, 29, ".red"] textClose:[29, 30, "}"]
+ AttributeNode[25, 29] name:[25, 26, "."] value:[26, 29, "red"] isImplicit isClass
+ AttributesNode[30, 38] textOpen:[30, 31, "{"] text:[31, 37, ".green"] textClose:[37, 38, "}"]
+ AttributeNode[31, 37] name:[31, 32, "."] value:[32, 37, "green"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Attribute Span: 16) options(empty-implicit-delimiters)
+Cond {#}1.2 {#}text node{.red}{.green}
+.
+Cond 1.2 text node
+.
+Document[0, 38]
+ Paragraph[0, 38]
+ Text[0, 5] chars:[0, 5, "Cond "]
+ AttributesDelimiter[5, 8] textOpen:[5, 6, "{"] text:[6, 7, "#"] textClose:[7, 8, "}"]
+ TextBase[8, 30] chars:[8, 30, "1.2 { … .red}"]
+ Text[8, 12] chars:[8, 12, "1.2 "]
+ AttributesDelimiter[12, 15] textOpen:[12, 13, "{"] text:[13, 14, "#"] textClose:[14, 15, "}"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ Text[15, 24] chars:[15, 24, "text node"]
+ AttributesNode[24, 30] textOpen:[24, 25, "{"] text:[25, 29, ".red"] textClose:[29, 30, "}"]
+ AttributeNode[25, 29] name:[25, 26, "."] value:[26, 29, "red"] isImplicit isClass
+ AttributesNode[30, 38] textOpen:[30, 31, "{"] text:[31, 37, ".green"] textClose:[37, 38, "}"]
+ AttributeNode[31, 37] name:[31, 32, "."] value:[32, 37, "green"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Attribute Span: 17) options(empty-implicit-delimiters)
+Cond {.}1.2 {.}text node{.red}{.green}
+.
+Cond 1.2 text node
+.
+Document[0, 38]
+ Paragraph[0, 38]
+ Text[0, 5] chars:[0, 5, "Cond "]
+ AttributesDelimiter[5, 8] textOpen:[5, 6, "{"] text:[6, 7, "."] textClose:[7, 8, "}"]
+ TextBase[8, 30] chars:[8, 30, "1.2 { … .red}"]
+ Text[8, 12] chars:[8, 12, "1.2 "]
+ AttributesDelimiter[12, 15] textOpen:[12, 13, "{"] text:[13, 14, "."] textClose:[14, 15, "}"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ Text[15, 24] chars:[15, 24, "text node"]
+ AttributesNode[24, 30] textOpen:[24, 25, "{"] text:[25, 29, ".red"] textClose:[29, 30, "}"]
+ AttributeNode[25, 29] name:[25, 26, "."] value:[26, 29, "red"] isImplicit isClass
+ AttributesNode[30, 38] textOpen:[30, 31, "{"] text:[31, 37, ".green"] textClose:[37, 38, "}"]
+ AttributeNode[31, 37] name:[31, 32, "."] value:[32, 37, "green"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Attribute Span: 18) options(empty-implicit-delimiters)
+Cond {.}1.2 {.}text node{.red}{.green}
+.
+Cond 1.2 text node
+.
+Document[0, 38]
+ Paragraph[0, 38]
+ Text[0, 5] chars:[0, 5, "Cond "]
+ AttributesDelimiter[5, 8] textOpen:[5, 6, "{"] text:[6, 7, "."] textClose:[7, 8, "}"]
+ TextBase[8, 30] chars:[8, 30, "1.2 { … .red}"]
+ Text[8, 12] chars:[8, 12, "1.2 "]
+ AttributesDelimiter[12, 15] textOpen:[12, 13, "{"] text:[13, 14, "."] textClose:[14, 15, "}"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ TextBase[15, 24] chars:[15, 24, "text node"]
+ Text[15, 24] chars:[15, 24, "text node"]
+ AttributesNode[24, 30] textOpen:[24, 25, "{"] text:[25, 29, ".red"] textClose:[29, 30, "}"]
+ AttributeNode[25, 29] name:[25, 26, "."] value:[26, 29, "red"] isImplicit isClass
+ AttributesNode[30, 38] textOpen:[30, 31, "{"] text:[31, 37, ".green"] textClose:[37, 38, "}"]
+ AttributeNode[31, 37] name:[31, 32, "."] value:[32, 37, "green"] isImplicit isClass
+````````````````````````````````
+
+
+delimiters override assignment to parent
+
+```````````````````````````````` example(Attribute Span: 19) options(empty-implicit-delimiters)
+Cond {.}1.2 {.}decorated text {.red} {.green}
+.
+Cond 1.2 decorated text
+.
+Document[0, 45]
+ Paragraph[0, 45]
+ Text[0, 5] chars:[0, 5, "Cond "]
+ AttributesDelimiter[5, 8] textOpen:[5, 6, "{"] text:[6, 7, "."] textClose:[7, 8, "}"]
+ TextBase[8, 36] chars:[8, 36, "1.2 { … .red}"]
+ Text[8, 12] chars:[8, 12, "1.2 "]
+ AttributesDelimiter[12, 15] textOpen:[12, 13, "{"] text:[13, 14, "."] textClose:[14, 15, "}"]
+ TextBase[15, 30] chars:[15, 30, "decor … text "]
+ TextBase[15, 30] chars:[15, 30, "decor … text "]
+ Text[15, 30] chars:[15, 30, "decor … text "]
+ AttributesNode[30, 36] textOpen:[30, 31, "{"] text:[31, 35, ".red"] textClose:[35, 36, "}"]
+ AttributeNode[31, 35] name:[31, 32, "."] value:[32, 35, "red"] isImplicit isClass
+ AttributesNode[37, 45] textOpen:[37, 38, "{"] text:[38, 44, ".green"] textClose:[44, 45, "}"]
+ AttributeNode[38, 44] name:[38, 39, "."] value:[39, 44, "green"] isImplicit isClass
+````````````````````````````````
-```````````````````````````````` example Trailing Spaces: 1
+
+unmatched goes to parent
+
+```````````````````````````````` example(Attribute Span: 20) options(empty-implicit-delimiters)
+Cond 1.2 {.}decorated text {.red} {.green}
+.
+Cond 1.2 decorated text
+.
+Document[0, 42]
+ Paragraph[0, 42]
+ Text[0, 9] chars:[0, 9, "Cond 1.2 "]
+ AttributesDelimiter[9, 12] textOpen:[9, 10, "{"] text:[10, 11, "."] textClose:[11, 12, "}"]
+ TextBase[12, 27] chars:[12, 27, "decor … text "]
+ TextBase[12, 27] chars:[12, 27, "decor … text "]
+ Text[12, 27] chars:[12, 27, "decor … text "]
+ AttributesNode[27, 33] textOpen:[27, 28, "{"] text:[28, 32, ".red"] textClose:[32, 33, "}"]
+ AttributeNode[28, 32] name:[28, 29, "."] value:[29, 32, "red"] isImplicit isClass
+ AttributesNode[34, 42] textOpen:[34, 35, "{"] text:[35, 41, ".green"] textClose:[41, 42, "}"]
+ AttributeNode[35, 41] name:[35, 36, "."] value:[36, 41, "green"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Attribute Span: 21) options(empty-implicit-delimiters)
+Cond {.}blue {.}green {.}red{.red}{.green}{.blue}{.rgb}
+.
+Cond blue green red
+.
+Document[0, 55]
+ Paragraph[0, 55]
+ Text[0, 5] chars:[0, 5, "Cond "]
+ AttributesDelimiter[5, 8] textOpen:[5, 6, "{"] text:[6, 7, "."] textClose:[7, 8, "}"]
+ TextBase[8, 42] chars:[8, 42, "blue … reen}"]
+ TextBase[8, 42] chars:[8, 42, "blue … reen}"]
+ TextBase[8, 42] chars:[8, 42, "blue … reen}"]
+ Text[8, 13] chars:[8, 13, "blue "]
+ AttributesDelimiter[13, 16] textOpen:[13, 14, "{"] text:[14, 15, "."] textClose:[15, 16, "}"]
+ TextBase[16, 34] chars:[16, 34, "green … .red}"]
+ TextBase[16, 34] chars:[16, 34, "green … .red}"]
+ Text[16, 22] chars:[16, 22, "green "]
+ AttributesDelimiter[22, 25] textOpen:[22, 23, "{"] text:[23, 24, "."] textClose:[24, 25, "}"]
+ TextBase[25, 28] chars:[25, 28, "red"]
+ TextBase[25, 28] chars:[25, 28, "red"]
+ Text[25, 28] chars:[25, 28, "red"]
+ AttributesNode[28, 34] textOpen:[28, 29, "{"] text:[29, 33, ".red"] textClose:[33, 34, "}"]
+ AttributeNode[29, 33] name:[29, 30, "."] value:[30, 33, "red"] isImplicit isClass
+ AttributesNode[34, 42] textOpen:[34, 35, "{"] text:[35, 41, ".green"] textClose:[41, 42, "}"]
+ AttributeNode[35, 41] name:[35, 36, "."] value:[36, 41, "green"] isImplicit isClass
+ AttributesNode[42, 49] textOpen:[42, 43, "{"] text:[43, 48, ".blue"] textClose:[48, 49, "}"]
+ AttributeNode[43, 48] name:[43, 44, "."] value:[44, 48, "blue"] isImplicit isClass
+ AttributesNode[49, 55] textOpen:[49, 50, "{"] text:[50, 54, ".rgb"] textClose:[54, 55, "}"]
+ AttributeNode[50, 54] name:[50, 51, "."] value:[51, 54, "rgb"] isImplicit isClass
+````````````````````````````````
+
+
+```````````````````````````````` example(Attribute Span: 22) options(empty-implicit-delimiters)
+Cond {.}blue {.}green {.}red{.red}{.green}{.blue} rgb{.rgb}
+.
+Cond blue green red rgb
+.
+Document[0, 59]
+ Paragraph[0, 59]
+ Text[0, 5] chars:[0, 5, "Cond "]
+ AttributesDelimiter[5, 8] textOpen:[5, 6, "{"] text:[6, 7, "."] textClose:[7, 8, "}"]
+ TextBase[8, 42] chars:[8, 42, "blue … reen}"]
+ TextBase[8, 42] chars:[8, 42, "blue … reen}"]
+ Text[8, 13] chars:[8, 13, "blue "]
+ AttributesDelimiter[13, 16] textOpen:[13, 14, "{"] text:[14, 15, "."] textClose:[15, 16, "}"]
+ TextBase[16, 34] chars:[16, 34, "green … .red}"]
+ TextBase[16, 34] chars:[16, 34, "green … .red}"]
+ Text[16, 22] chars:[16, 22, "green "]
+ AttributesDelimiter[22, 25] textOpen:[22, 23, "{"] text:[23, 24, "."] textClose:[24, 25, "}"]
+ TextBase[25, 28] chars:[25, 28, "red"]
+ TextBase[25, 28] chars:[25, 28, "red"]
+ Text[25, 28] chars:[25, 28, "red"]
+ AttributesNode[28, 34] textOpen:[28, 29, "{"] text:[29, 33, ".red"] textClose:[33, 34, "}"]
+ AttributeNode[29, 33] name:[29, 30, "."] value:[30, 33, "red"] isImplicit isClass
+ AttributesNode[34, 42] textOpen:[34, 35, "{"] text:[35, 41, ".green"] textClose:[41, 42, "}"]
+ AttributeNode[35, 41] name:[35, 36, "."] value:[36, 41, "green"] isImplicit isClass
+ AttributesNode[42, 49] textOpen:[42, 43, "{"] text:[43, 48, ".blue"] textClose:[48, 49, "}"]
+ AttributeNode[43, 48] name:[43, 44, "."] value:[44, 48, "blue"] isImplicit isClass
+ TextBase[49, 53] chars:[49, 53, " rgb"]
+ Text[49, 53] chars:[49, 53, " rgb"]
+ AttributesNode[53, 59] textOpen:[53, 54, "{"] text:[54, 58, ".rgb"] textClose:[58, 59, "}"]
+ AttributeNode[54, 58] name:[54, 55, "."] value:[55, 58, "rgb"] isImplicit isClass
+````````````````````````````````
+
+
+## Embedded Spaces
+
+leading spaces
+
+```````````````````````````````` example Embedded Spaces: 1
+text { attribute=value}
+.
+text
+.
+Document[0, 26]
+ Paragraph[0, 26]
+ Text[0, 4] chars:[0, 4, "text"]
+ AttributesNode[5, 25] textOpen:[5, 6, "{"] text:[6, 24, " attribute=value"] textClose:[24, 25, "}"]
+ AttributeNode[9, 24] name:[9, 18, "attribute"] sep:[18, 19, "="] value:[19, 24, "value"]
+````````````````````````````````
+
+
+trailing spaces
+
+```````````````````````````````` example Embedded Spaces: 2
text {attribute=value }
.
text
@@ -1784,11 +2378,95 @@ text {attribute=value }
Document[0, 26]
Paragraph[0, 26]
Text[0, 4] chars:[0, 4, "text"]
- AttributesNode[5, 25] textOpen:[5, 6, "{"] text:[6, 21, "attribute=value"] textClose:[24, 25, "}"]
+ AttributesNode[5, 25] textOpen:[5, 6, "{"] text:[6, 24, "attribute=value "] textClose:[24, 25, "}"]
AttributeNode[6, 21] name:[6, 15, "attribute"] sep:[15, 16, "="] value:[16, 21, "value"]
````````````````````````````````
+Attributes go to link or element
+
+```````````````````````````````` example Embedded Spaces: 3
+Work with
+[Markdown]{style="color:[[LINK]]"} files like you do with other languages in the IDE:
+
+[Markdown]: https://example.com
+.
+Work with
+Markdown files like you do with other languages in the IDE:
+.
+Document[0, 129]
+ Paragraph[0, 96] isTrailingBlankLine
+ Text[0, 9] chars:[0, 9, "Work with"]
+ SoftLineBreak[9, 10]
+ LinkRef[10, 20] referenceOpen:[10, 11, "["] reference:[11, 19, "Markdown"] referenceClose:[19, 20, "]"]
+ Text[11, 19] chars:[11, 19, "Markdown"]
+ AttributesNode[20, 44] textOpen:[20, 21, "{"] text:[21, 43, "style=\"color:[[LINK]]\""] textClose:[43, 44, "}"]
+ AttributeNode[21, 43] name:[21, 26, "style"] sep:[26, 27, "="] valueOpen:[27, 28, "\""] value:[28, 42, "color:[[LINK]]"] valueClose:[42, 43, "\""]
+ Text[44, 95] chars:[44, 95, " file … IDE:"]
+ Reference[97, 128] refOpen:[97, 98, "["] ref:[98, 106, "Markdown"] refClose:[106, 108, "]:"] url:[109, 128, "https://example.com"]
+````````````````````````````````
+
+
+```````````````````````````````` example Embedded Spaces: 4
+Work with
+![Markdown]{style="color:[[LINK]]"} files like you do with other languages in the IDE:
+
+[Markdown]: https://example.com/image.png
+.
+Work with
+ files like you do with other languages in the IDE:
+.
+Document[0, 140]
+ Paragraph[0, 97] isTrailingBlankLine
+ Text[0, 9] chars:[0, 9, "Work with"]
+ SoftLineBreak[9, 10]
+ ImageRef[10, 21] referenceOpen:[10, 12, "!["] reference:[12, 20, "Markdown"] referenceClose:[20, 21, "]"]
+ Text[12, 20] chars:[12, 20, "Markdown"]
+ AttributesNode[21, 45] textOpen:[21, 22, "{"] text:[22, 44, "style=\"color:[[LINK]]\""] textClose:[44, 45, "}"]
+ AttributeNode[22, 44] name:[22, 27, "style"] sep:[27, 28, "="] valueOpen:[28, 29, "\""] value:[29, 43, "color:[[LINK]]"] valueClose:[43, 44, "\""]
+ Text[45, 96] chars:[45, 96, " file … IDE:"]
+ Reference[98, 139] refOpen:[98, 99, "["] ref:[99, 107, "Markdown"] refClose:[107, 109, "]:"] url:[110, 139, "https://example.com/image.png"]
+````````````````````````````````
+
+
+```````````````````````````````` example Embedded Spaces: 5
+Work with
+[Markdown](https://example.com){style="color:[[LINK]]"} files like you do with other languages in the IDE:
+.
+Work with
+Markdown files like you do with other languages in the IDE:
+.
+Document[0, 117]
+ Paragraph[0, 117]
+ Text[0, 9] chars:[0, 9, "Work with"]
+ SoftLineBreak[9, 10]
+ Link[10, 41] textOpen:[10, 11, "["] text:[11, 19, "Markdown"] textClose:[19, 20, "]"] linkOpen:[20, 21, "("] url:[21, 40, "https://example.com"] pageRef:[21, 40, "https://example.com"] linkClose:[40, 41, ")"]
+ Text[11, 19] chars:[11, 19, "Markdown"]
+ AttributesNode[41, 65] textOpen:[41, 42, "{"] text:[42, 64, "style=\"color:[[LINK]]\""] textClose:[64, 65, "}"]
+ AttributeNode[42, 64] name:[42, 47, "style"] sep:[47, 48, "="] valueOpen:[48, 49, "\""] value:[49, 63, "color:[[LINK]]"] valueClose:[63, 64, "\""]
+ Text[65, 116] chars:[65, 116, " file … IDE:"]
+````````````````````````````````
+
+
+```````````````````````````````` example Embedded Spaces: 6
+Work with
+{style="color:[[LINK]]"} files like you do with other languages in the IDE:
+.
+Work with
+ files like you do with other languages in the IDE:
+.
+Document[0, 128]
+ Paragraph[0, 128]
+ Text[0, 9] chars:[0, 9, "Work with"]
+ SoftLineBreak[9, 10]
+ Image[10, 52] textOpen:[10, 12, "!["] text:[12, 20, "Markdown"] textClose:[20, 21, "]"] linkOpen:[21, 22, "("] url:[22, 51, "https://example.com/image.png"] pageRef:[22, 51, "https://example.com/image.png"] linkClose:[51, 52, ")"]
+ Text[12, 20] chars:[12, 20, "Markdown"]
+ AttributesNode[52, 76] textOpen:[52, 53, "{"] text:[53, 75, "style=\"color:[[LINK]]\""] textClose:[75, 76, "}"]
+ AttributeNode[53, 75] name:[53, 58, "style"] sep:[58, 59, "="] valueOpen:[59, 60, "\""] value:[60, 74, "color:[[LINK]]"] valueClose:[74, 75, "\""]
+ Text[76, 127] chars:[76, 127, " file … IDE:"]
+````````````````````````````````
+
+
## Translator Encoding
```````````````````````````````` example Translator Encoding: 1
@@ -1836,3 +2514,5 @@ Document[0, 28]
````````````````````````````````
+[Markdown]: https://daringfireball.net/projects/markdown
+
diff --git a/flexmark-ext-autolink/pom.xml b/flexmark-ext-autolink/pom.xml
index 2045390f0f..07e9b4e0b8 100644
--- a/flexmark-ext-autolink/pom.xml
+++ b/flexmark-ext-autolink/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-ext-autolink
diff --git a/flexmark-ext-definition/pom.xml b/flexmark-ext-definition/pom.xml
index 1ede282709..6385963fa7 100644
--- a/flexmark-ext-definition/pom.xml
+++ b/flexmark-ext-definition/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-ext-definition
diff --git a/flexmark-ext-emoji/pom.xml b/flexmark-ext-emoji/pom.xml
index c3c1e5511b..7512b406b9 100644
--- a/flexmark-ext-emoji/pom.xml
+++ b/flexmark-ext-emoji/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-ext-emoji
diff --git a/flexmark-ext-enumerated-reference/pom.xml b/flexmark-ext-enumerated-reference/pom.xml
index 9ecdbf6021..f150dc14e7 100644
--- a/flexmark-ext-enumerated-reference/pom.xml
+++ b/flexmark-ext-enumerated-reference/pom.xml
@@ -4,7 +4,7 @@
com.vladsch.flexmark
flexmark-java
- 0.36.8
+ 0.35.10
flexmark-ext-enumerated-reference
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedOrdinalRenderer.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedOrdinalRenderer.java
new file mode 100644
index 0000000000..995b8e35b8
--- /dev/null
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedOrdinalRenderer.java
@@ -0,0 +1,25 @@
+package com.vladsch.flexmark.ext.enumerated.reference;
+
+public interface EnumeratedOrdinalRenderer {
+ /**
+ * Start of rendering for all renderings
+ *
+ * @param renderings renderings which will be rendered
+ */
+ void startRendering(EnumeratedReferenceRendering[] renderings);
+
+ /**
+ * Render final reference format
+ *
+ * @param referenceOrdinal ordinal for the reference
+ * @param referenceFormat reference format or null
+ * @param defaultText default text to use if referenceFormat is null or not being used
+ * @param needSeparator true if need to add separator character before adding text or rendering reference format
+ */
+ void render(final int referenceOrdinal, EnumeratedReferenceBlock referenceFormat, final String defaultText, final boolean needSeparator);
+
+ /**
+ * After Rendering is complete
+ */
+ void endRendering();
+}
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceBase.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceBase.java
index f5c110e328..961d1aeb83 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceBase.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceBase.java
@@ -7,7 +7,7 @@
/**
* A EnumeratedReference node
*/
-public class EnumeratedReferenceBase extends CustomNode implements DelimitedNode, DoNotDecorate, ReferencingNode {
+public class EnumeratedReferenceBase extends Node implements DelimitedNode, DoNotDecorate, ReferencingNode {
protected BasedSequence openingMarker = BasedSequence.NULL;
protected BasedSequence text = BasedSequence.NULL;
protected BasedSequence closingMarker = BasedSequence.NULL;
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceBlock.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceBlock.java
index 7bfffe71c2..d728fe930f 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceBlock.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceBlock.java
@@ -9,7 +9,7 @@
/**
* A EnumeratedReference block node
*/
-public class EnumeratedReferenceBlock extends CustomBlock implements ReferenceNode, ParagraphItemContainer {
+public class EnumeratedReferenceBlock extends Block implements ReferenceNode, ParagraphItemContainer {
protected BasedSequence openingMarker = BasedSequence.NULL;
protected BasedSequence text = BasedSequence.NULL;
protected BasedSequence closingMarker = BasedSequence.NULL;
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceRendering.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceRendering.java
new file mode 100644
index 0000000000..67e7bbda6e
--- /dev/null
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/EnumeratedReferenceRendering.java
@@ -0,0 +1,13 @@
+package com.vladsch.flexmark.ext.enumerated.reference;
+
+public class EnumeratedReferenceRendering {
+ public final EnumeratedReferenceBlock referenceFormat;
+ public final String referenceType;
+ public final int referenceOrdinal;
+
+ public EnumeratedReferenceRendering(final EnumeratedReferenceBlock referenceFormat, final String referenceType, final int referenceOrdinal) {
+ this.referenceFormat = referenceFormat;
+ this.referenceType = referenceType;
+ this.referenceOrdinal = referenceOrdinal;
+ }
+}
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumRefTextCollectingVisitor.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumRefTextCollectingVisitor.java
index 6f498cf953..a777052598 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumRefTextCollectingVisitor.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumRefTextCollectingVisitor.java
@@ -1,8 +1,7 @@
package com.vladsch.flexmark.ext.enumerated.reference.internal;
import com.vladsch.flexmark.ast.*;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceLink;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceText;
+import com.vladsch.flexmark.ext.enumerated.reference.*;
import com.vladsch.flexmark.util.sequence.BasedSequence;
import com.vladsch.flexmark.util.sequence.SegmentedSequenceBuilder;
@@ -10,9 +9,15 @@
public class EnumRefTextCollectingVisitor {
private SegmentedSequenceBuilder out;
private final NodeVisitor myVisitor;
- private final int ordinal;
+ private int myOrdinal;
+
+ public EnumRefTextCollectingVisitor() {
+ this(0);
+ }
public EnumRefTextCollectingVisitor(int ordinal) {
+ myOrdinal = ordinal;
+
myVisitor = new NodeVisitor(
new VisitHandler(Text.class, new Visitor() {
@Override
@@ -57,39 +62,102 @@ public void visit(EnumeratedReferenceLink node) {
}
})
);
- this.ordinal = ordinal;
}
public String getText() {
return out.toString();
}
+ /**
+ * @param node format node
+ * @deprecated use {@link #collect(BasedSequence, EnumeratedReferenceRendering[], String)}
+ */
+ @Deprecated
public void collect(Node node) {
out = new SegmentedSequenceBuilder(node.getChars());
myVisitor.visit(node);
}
+ /**
+ * @param node format node
+ * @deprecated use {@link #collectAndGetText(BasedSequence, EnumeratedReferenceRendering[], String)}
+ */
+ @Deprecated
public String collectAndGetText(Node node) {
collect(node);
return out.toString();
}
+ /**
+ * @param node format node
+ * @deprecated use {@link #collectAndGetSegments(BasedSequence, EnumeratedReferenceRendering[], String)}
+ */
+ @Deprecated
public BasedSequence[] collectAndGetSegments(Node node) {
collect(node);
return out.toSegments();
}
+ /**
+ * @param node format node
+ * @deprecated use {@link #collectAndGetSequence(BasedSequence, EnumeratedReferenceRendering[], String)}
+ */
+ @Deprecated
public BasedSequence collectAndGetSequence(Node node) {
collect(node);
return out.toBasedSequence();
}
+ public void collect(BasedSequence basedSequence, final EnumeratedReferenceRendering[] renderings, final String defaultFormat) {
+ out = new SegmentedSequenceBuilder(basedSequence);
+
+ EnumeratedReferences.renderReferenceOrdinals(renderings, defaultFormat, new EnumeratedOrdinalRenderer() {
+ @Override
+ public void startRendering(final EnumeratedReferenceRendering[] renderings) {
+
+ }
+
+ @Override
+ public void render(final int referenceOrdinal, final EnumeratedReferenceBlock referenceFormat, final String defaultText, final boolean needSeparator) {
+ if (needSeparator) out.append(".");
+
+ if (referenceFormat != null) {
+ myOrdinal = referenceOrdinal;
+ collect(referenceFormat);
+ } else {
+ // use default text
+ out.append(defaultText);
+ }
+ }
+
+ @Override
+ public void endRendering() {
+
+ }
+ });
+ }
+
+ public String collectAndGetText(BasedSequence basedSequence, EnumeratedReferenceRendering[] renderings, final String defaultFormat) {
+ collect(basedSequence, renderings, defaultFormat);
+ return out.toString();
+ }
+
+ public BasedSequence[] collectAndGetSegments(BasedSequence basedSequence, EnumeratedReferenceRendering[] renderings, final String defaultFormat) {
+ collect(basedSequence, renderings, defaultFormat);
+ return out.toSegments();
+ }
+
+ public BasedSequence collectAndGetSequence(BasedSequence basedSequence, EnumeratedReferenceRendering[] renderings, final String defaultFormat) {
+ collect(basedSequence, renderings, defaultFormat);
+ return out.toBasedSequence();
+ }
+
private void visit(EnumeratedReferenceText node) {
final String text = node.getText().toString();
if (text.isEmpty()) {
// placeholder for ordinal
- out.append(String.valueOf(ordinal));
+ out.append(String.valueOf(myOrdinal));
}
}
@@ -98,7 +166,7 @@ private void visit(EnumeratedReferenceLink node) {
if (text.isEmpty()) {
// placeholder for ordinal
- out.append(String.valueOf(ordinal));
+ out.append(String.valueOf(myOrdinal));
}
}
@@ -108,7 +176,7 @@ private void visit(SoftLineBreak node) {
private void visit(HardLineBreak node) {
final BasedSequence chars = node.getChars();
- out.append(chars.subSequence(chars.length()-1, chars.length()));
+ out.append(chars.subSequence(chars.length() - 1, chars.length()));
}
private void visit(HtmlEntity node) {
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceBlockParser.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceBlockParser.java
index 7a53378ec4..26f81007a0 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceBlockParser.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceBlockParser.java
@@ -13,7 +13,7 @@
import java.util.regex.Pattern;
public class EnumeratedReferenceBlockParser extends AbstractBlockParser {
- static String ENUM_REF_ID = ".*";
+ static String ENUM_REF_ID = "(?:[^0-9].*)?";
static Pattern ENUM_REF_ID_PATTERN = Pattern.compile("\\[[\\@|#]\\s*(" + ENUM_REF_ID + ")\\s*\\]");
static Pattern ENUM_REF_DEF_PATTERN = Pattern.compile("^\\[[\\@]\\s*(" + ENUM_REF_ID + ")\\s*\\]:");
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceLinkRefProcessor.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceLinkRefProcessor.java
index 1f9813e89b..6077f7607b 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceLinkRefProcessor.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceLinkRefProcessor.java
@@ -30,7 +30,7 @@ public int getBracketNestingLevel() {
@Override
public boolean isMatch(BasedSequence nodeChars) {
- return nodeChars.length() >= 3 && nodeChars.charAt(0) == '[' && (nodeChars.charAt(1) == '@' || nodeChars.charAt(1) == '#') && nodeChars.endCharAt(1) == ']';
+ return nodeChars.length() >= 3 && nodeChars.charAt(0) == '[' && (nodeChars.charAt(1) == '@' || nodeChars.charAt(1) == '#') && nodeChars.endCharAt(1) == ']' && (nodeChars.length() == 3 || !Character.isDigit(nodeChars.charAt(2)));
}
@Override
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceNodePostProcessor.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceNodePostProcessor.java
index c8f6f1ddc3..ab6880821c 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceNodePostProcessor.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceNodePostProcessor.java
@@ -1,19 +1,27 @@
package com.vladsch.flexmark.ext.enumerated.reference.internal;
import com.vladsch.flexmark.ast.Document;
+import com.vladsch.flexmark.ast.Heading;
import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.ext.attributes.AttributeNode;
import com.vladsch.flexmark.ext.attributes.AttributesNode;
import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension;
+import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceText;
+import com.vladsch.flexmark.html.renderer.HeaderIdGenerator;
+import com.vladsch.flexmark.html.renderer.HtmlIdGenerator;
import com.vladsch.flexmark.parser.block.NodePostProcessor;
import com.vladsch.flexmark.parser.block.NodePostProcessorFactory;
import com.vladsch.flexmark.util.NodeTracker;
+import com.vladsch.flexmark.util.sequence.BasedSequence;
public class EnumeratedReferenceNodePostProcessor extends NodePostProcessor {
private final EnumeratedReferences enumeratedReferences;
+ private final HtmlIdGenerator headerIdGenerator;
public EnumeratedReferenceNodePostProcessor(Document document) {
enumeratedReferences = EnumeratedReferenceExtension.ENUMERATED_REFERENCE_ORDINALS.getFrom(document);
+ headerIdGenerator = new HeaderIdGenerator.Factory().create();
+ headerIdGenerator.generateIds(document);
}
@Override
@@ -26,6 +34,19 @@ public void process(NodeTracker state, Node node) {
if (((AttributeNode) attributeNode).isId()) {
final String text = ((AttributeNode) attributeNode).getValue().toString();
enumeratedReferences.add(text);
+ break;
+ }
+ }
+ }
+ } else if (node instanceof Heading) {
+ // see if it has bare enum reference text
+ for (Node child : node.getChildren()) {
+ if (child instanceof EnumeratedReferenceText) {
+ BasedSequence text = ((EnumeratedReferenceText) child).getText();
+ String type = EnumeratedReferenceRepository.getType(text.toString());
+ if (type.isEmpty() || text.equals(type + ":")) {
+ String id = (type.isEmpty() ? text : type) + ":" + headerIdGenerator.getId(node);
+ enumeratedReferences.add(id);
}
}
}
@@ -35,7 +56,7 @@ public void process(NodeTracker state, Node node) {
public static class Factory extends NodePostProcessorFactory {
public Factory() {
super(false);
- addNodes(AttributesNode.class);
+ addNodes(AttributesNode.class, Heading.class);
}
@Override
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceNodeRenderer.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceNodeRenderer.java
index c8091bc47f..e2824b49d2 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceNodeRenderer.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceNodeRenderer.java
@@ -1,11 +1,9 @@
package com.vladsch.flexmark.ext.enumerated.reference.internal;
import com.vladsch.flexmark.ast.Document;
+import com.vladsch.flexmark.ast.Heading;
import com.vladsch.flexmark.ast.Node;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceBlock;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceLink;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceText;
+import com.vladsch.flexmark.ext.enumerated.reference.*;
import com.vladsch.flexmark.html.CustomNodeRenderer;
import com.vladsch.flexmark.html.HtmlWriter;
import com.vladsch.flexmark.html.renderer.*;
@@ -15,30 +13,33 @@
import java.util.LinkedHashSet;
import java.util.Set;
-import static com.vladsch.flexmark.html.renderer.RenderingPhase.BODY_TOP;
-
public class EnumeratedReferenceNodeRenderer implements PhasedNodeRenderer
// , PhasedNodeRenderer
{
private final EnumeratedReferenceOptions options;
private EnumeratedReferences enumeratedOrdinals;
private int ordinal;
+ private final HtmlIdGenerator headerIdGenerator; // used for enumerated text reference
public EnumeratedReferenceNodeRenderer(DataHolder options) {
this.options = new EnumeratedReferenceOptions(options);
ordinal = 0;
+ headerIdGenerator = new HeaderIdGenerator.Factory().create();
}
@Override
public Set getRenderingPhases() {
LinkedHashSet phaseSet = new LinkedHashSet<>();
- phaseSet.add(BODY_TOP);
+ phaseSet.add(RenderingPhase.HEAD_TOP);
+ phaseSet.add(RenderingPhase.BODY_TOP);
return phaseSet;
}
@Override
public void renderDocument(final NodeRendererContext context, final HtmlWriter html, final Document document, final RenderingPhase phase) {
- if (phase == BODY_TOP) {
+ if (phase == RenderingPhase.HEAD_TOP) {
+ headerIdGenerator.generateIds(document);
+ } else if (phase == RenderingPhase.BODY_TOP) {
enumeratedOrdinals = EnumeratedReferenceExtension.ENUMERATED_REFERENCE_ORDINALS.getFrom(document);
}
}
@@ -54,52 +55,82 @@ public Set> getNodeRenderingHandlers() {
return set;
}
- private void render(EnumeratedReferenceLink node, NodeRendererContext context, HtmlWriter html) {
+ private void render(final EnumeratedReferenceLink node, final NodeRendererContext context, final HtmlWriter html) {
final String text = node.getText().toString();
if (text.isEmpty()) {
// placeholder for ordinal
html.text(String.valueOf(ordinal));
} else {
- Node referenceFormat = enumeratedOrdinals.getFormatNode(text);
- int wasOrdinal = ordinal;
- ordinal = enumeratedOrdinals.getOrdinal(text);
- if (referenceFormat != null) {
- String title = new EnumRefTextCollectingVisitor(ordinal).collectAndGetText(referenceFormat);
- html.withAttr().attr("href", "#" + text).attr("title", title).tag("a");
- context.renderChildren(referenceFormat);
- html.tag("/a");
- } else {
- // no format, just output type space ordinal
- final String defaultText = String.format("%s %d", EnumeratedReferenceRepository.getType(text), ordinal);
- html.withAttr().attr("href", "#" + text).attr("title", defaultText).tag("a");
- html.text(defaultText);
- html.tag("/a");
- }
- ordinal = wasOrdinal;
+ enumeratedOrdinals.renderReferenceOrdinals(text, null, new EnumeratedOrdinalRenderer() {
+ @Override
+ public void startRendering(final EnumeratedReferenceRendering[] renderings) {
+ String title = new EnumRefTextCollectingVisitor().collectAndGetText(node.getChars().getBaseSequence(), renderings, null);
+ html.withAttr().attr("href", "#" + text).attr("title", title).tag("a");
+ }
+
+ @Override
+ public void render(final int referenceOrdinal, final EnumeratedReferenceBlock referenceFormat, final String defaultText, final boolean needSeparator) {
+ EnumeratedReferenceNodeRenderer.this.ordinal = referenceOrdinal;
+ if (needSeparator) {
+ html.text(".");
+ }
+
+ if (referenceFormat != null) {
+ context.renderChildren(referenceFormat);
+ } else {
+ html.text(defaultText);
+ }
+ }
+
+ @Override
+ public void endRendering() {
+ html.tag("/a");
+ }
+ });
}
}
- private void render(EnumeratedReferenceText node, NodeRendererContext context, HtmlWriter html) {
- final String text = node.getText().toString();
+ private void render(EnumeratedReferenceText node, final NodeRendererContext context, final HtmlWriter html) {
+ String text = node.getText().toString();
if (text.isEmpty()) {
// placeholder for ordinal
html.text(String.valueOf(ordinal));
} else {
- Node referenceFormat = enumeratedOrdinals.getFormatNode(text);
- int wasOrdinal = ordinal;
- ordinal = enumeratedOrdinals.getOrdinal(text);
-
- final String defaultText = String.format("%s %d", EnumeratedReferenceRepository.getType(text), ordinal);
-
- if (referenceFormat != null) {
- context.renderChildren(referenceFormat);
- } else {
- // no format, just output ordinal
- html.text(defaultText);
+ String type = EnumeratedReferenceRepository.getType(text.toString());
+
+ if (type.isEmpty() || text.equals(type + ":")) {
+ Node parent = node.getAncestorOfType(Heading.class);
+
+ if (parent instanceof Heading) {
+ text = (type.isEmpty() ? text : type) + ":" + headerIdGenerator.getId(parent);
+ }
}
- ordinal = wasOrdinal;
+
+ enumeratedOrdinals.renderReferenceOrdinals(text, null, new EnumeratedOrdinalRenderer() {
+ @Override
+ public void startRendering(final EnumeratedReferenceRendering[] renderings) {
+
+ }
+
+ @Override
+ public void render(final int referenceOrdinal, final EnumeratedReferenceBlock referenceFormat, final String defaultText, final boolean needSeparator) {
+ if (needSeparator) html.text(".");
+
+ if (referenceFormat != null) {
+ EnumeratedReferenceNodeRenderer.this.ordinal = referenceOrdinal;
+ context.renderChildren(referenceFormat);
+ } else {
+ html.text(defaultText);
+ }
+ }
+
+ @Override
+ public void endRendering() {
+
+ }
+ });
}
}
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceRepository.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceRepository.java
index e781cce849..3130915fea 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceRepository.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferenceRepository.java
@@ -18,7 +18,7 @@ public class EnumeratedReferenceRepository extends NodeRepository referencedEnumeratedReferenceBlocks = new ArrayList();
public static String getType(final String text) {
- int pos = text.indexOf(':');
+ int pos = text.lastIndexOf(':');
if (pos > 0) {
return text.subSequence(0, pos).toString();
} else {
diff --git a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferences.java b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferences.java
index 18535a5e3c..9992a30679 100644
--- a/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferences.java
+++ b/flexmark-ext-enumerated-reference/src/main/java/com/vladsch/flexmark/ext/enumerated/reference/internal/EnumeratedReferences.java
@@ -1,16 +1,18 @@
package com.vladsch.flexmark.ext.enumerated.reference.internal;
import com.vladsch.flexmark.ast.Node;
-import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension;
+import com.vladsch.flexmark.ext.enumerated.reference.*;
import com.vladsch.flexmark.util.options.DataHolder;
import java.util.HashMap;
public class EnumeratedReferences {
public static final String EMPTY_TYPE = "";
+ public static final int[] EMPTY_ORDINALS = new int[0];
+
private final EnumeratedReferenceRepository referenceRepository;
private final HashMap enumerationCounters;
- private final HashMap enumeratedReferenceOrdinals;
+ private final HashMap enumeratedReferenceOrdinals;
public EnumeratedReferences(DataHolder options) {
referenceRepository = EnumeratedReferenceExtension.ENUMERATED_REFERENCES.getFrom(options);
@@ -20,22 +22,56 @@ public EnumeratedReferences(DataHolder options) {
public void add(final String text) {
String type = EnumeratedReferenceRepository.getType(text);
- int ordinal;
- if (!enumerationCounters.containsKey(type)) {
- enumerationCounters.put(type, 2);
- ordinal = 1;
- } else {
- ordinal = enumerationCounters.get(type);
- enumerationCounters.put(type, ordinal + 1);
+
+ String[] types = type.split(":");
+ int[] ordinals = new int[types.length];
+
+ // replace all types but the last with ordinal of that type
+ StringBuilder nestedType = new StringBuilder();
+
+ int iMax = types.length;
+ for (int i = 0; i < iMax; i++) {
+ String typeText = types[i];
+ nestedType.append(typeText);
+
+ String nestedTypeKey = nestedType.toString();
+
+ if (i < iMax - 1) {
+ Integer ordinalInt = enumerationCounters.get(nestedTypeKey);
+ int typeOrdinal = ordinalInt == null ? 0 : ordinalInt;
+
+ nestedType.append(':').append(typeOrdinal).append(':');
+ ordinals[i] = typeOrdinal;
+ } else {
+ // last type gets defined if it does not exist
+ int ordinal;
+
+ if (!enumerationCounters.containsKey(nestedTypeKey)) {
+ enumerationCounters.put(nestedTypeKey, 1);
+ ordinal = 1;
+ } else {
+ ordinal = enumerationCounters.get(nestedTypeKey) + 1;
+ enumerationCounters.put(nestedTypeKey, ordinal);
+ }
+
+ ordinals[i] = ordinal;
+ }
}
// save the ordinal for this reference and type
- enumeratedReferenceOrdinals.put(text, ordinal);
+ enumeratedReferenceOrdinals.put(text, ordinals);
}
+ /**
+ * @param text anchor id with type reference
+ * @return ordinal or 0 for anchor id
+ * @deprecated only returns the last ordinal for the text, does not support compound ordinal numbering
+ * use {@link #getEnumeratedReferenceOrdinals(String)} to get compound ordinals
+ */
+ @Deprecated
public int getOrdinal(final String text) {
- final Integer ordinal = enumeratedReferenceOrdinals.get(text);
- return ordinal == null ? 0 : ordinal;
+ final int[] ordinals = enumeratedReferenceOrdinals.get(text);
+ return ordinals == null ? 0 : ordinals[ordinals.length - 1];
}
/**
@@ -43,9 +79,69 @@ public int getOrdinal(final String text) {
*
* @param text reference text
* @return enumerated reference block or null if not defined
+ * @deprecated use {@link #getEnumeratedReferenceOrdinals(String)} instead which supports compound enumerated ordinals
*/
+ @Deprecated
public Node getFormatNode(final String text) {
String type = EnumeratedReferenceRepository.getType(text);
return referenceRepository.get(type);
}
+
+ public EnumeratedReferenceRendering[] getEnumeratedReferenceOrdinals(final String text) {
+ String type = EnumeratedReferenceRepository.getType(text);
+
+ String[] types = type.split(":");
+ EnumeratedReferenceRendering[] renderings = new EnumeratedReferenceRendering[types.length];
+
+ int[] ordinals = enumeratedReferenceOrdinals.get(text);
+
+ if (ordinals == null) {
+ ordinals = EMPTY_ORDINALS;
+ }
+
+ int iMax = types.length;
+ for (int i = 0; i < iMax; i++) {
+ String typeText = types[i];
+ EnumeratedReferenceBlock referenceFormat = referenceRepository.get(typeText);
+ int ordinal = i < ordinals.length ? ordinals[i] : 0;
+ renderings[i] = new EnumeratedReferenceRendering(referenceFormat, typeText, ordinal);
+ }
+
+ return renderings;
+ }
+
+ public void renderReferenceOrdinals(final String text, final String defaultFormat, EnumeratedOrdinalRenderer renderer) {
+ EnumeratedReferenceRendering[] renderings = getEnumeratedReferenceOrdinals(text);
+ renderReferenceOrdinals(renderings, defaultFormat, renderer);
+ }
+
+ public static void renderReferenceOrdinals(EnumeratedReferenceRendering[] renderings, final String defaultFormat, EnumeratedOrdinalRenderer renderer) {
+ boolean needSeparator = false;
+
+ String useDefaultFormat = defaultFormat == null ? "%s %d" : defaultFormat;
+
+ renderer.startRendering(renderings);
+
+ for (EnumeratedReferenceRendering rendering : renderings) {
+ int ordinal = rendering.referenceOrdinal;
+
+ String defaultText = String.format(useDefaultFormat, rendering.referenceType, rendering.referenceOrdinal);
+
+ renderer.render(ordinal, rendering.referenceFormat, defaultText, needSeparator);
+
+ if (rendering.referenceFormat != null) {
+ Node lastChild = rendering.referenceFormat.getLastChild();
+ while (lastChild != null && !(lastChild instanceof EnumeratedReferenceBase)) {
+ lastChild = lastChild.getLastChild();
+ }
+
+ needSeparator = lastChild instanceof EnumeratedReferenceBase && ((EnumeratedReferenceBase) lastChild).getText().isEmpty();
+ } else {
+ char c = defaultText.charAt(defaultText.length() - 1);
+ needSeparator = Character.isUnicodeIdentifierPart(c);
+ }
+ }
+
+ renderer.endRendering();
+ }
}
diff --git a/flexmark-ext-enumerated-reference/src/main/javadoc/information_source.png b/flexmark-ext-enumerated-reference/src/main/javadoc/information_source.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1e8ede6ebe55041bead9337aaf4fc1b8c841cf7
GIT binary patch
literal 5756
zcmY*dXEYpKw;pY@K|=IbCkQg4_ufVCC1&(ah(5|NLbMPqMkH#q=rR($#por75mBQ?
zo#eQ|D7bj+qGB0ei#6t
zQ`J^eHVv8Ed+Y9Hx*66lR3Gnci4SZ{_SQ12tStXjJ#B+RO_zF@nH|P28dN{f&8m!S
zeo&dac0byQdW1Te(Q(9qS(t%D7hhkCgj-M|rw={MaNxyyunUS^JDS>5JPi#UN1o*&
zAH740Zv68LygoPnr{iYxENX0o5hBdbKelfBf5UNYNYH!Cq1qwTGOL%Yj!%WCB=Frz
zd&55sr=TCBL-twq;YP7?#ustpJxCwkXth|o$-L3S2Am(syfs#Mjpv8<{WuGa!IUgP
zus~N)-Q0r8@aa;KGx60&oEDpqqKuMne#k$s43oqyljQ3x)Lbb;5&c>E4#hMrNm;#z
z&k?Bwcjj#R*(QJR=1(P>biS;t<2|LM1jcdVgwNyJTl2Uz>Dv0Yea7dfSld+Z4kaGg
zC5J8B_qqP`3W2{Ct|eo2y~9b`k%IucSoVRcb5L#=c}VZKpWHU0!=}L|9}bnH7RMc4-ltt#@`_v;5jT+uC1_R1J1A
zQBx6`feM|Hgpqb!w)L=QB0=~J!bun*oR>LVy+K6h$5wSM<7sfGTAA;K^VydCkl;a4
zvOJ5^eDFuYC@BKhl@YgyBFWvtS!O}>_4wWS*6@efm{GkQ)5*uk_zQi460MWHqvc#s
zN2AJVQpVGu2}xK2T6U&jb3(owy~*@prPWG-Zg7Zir(~TL4|v4MDfDMs!Fjh;9UWnM
zx!Nwd6-+DXKHBFq)H!)n(frsiL5l4ATNyPl^AHRvjM#;^wf+#r_soDx4QCEScvF*1Phh{WqUA}9#
zBAve21rP-Nft$@(k}C2NQb)dchVyfRQ=XIqNUt_4egu?Xur7pQy{7T0c=Mi%`ZfI$
zhIW02am&XL~EgsuWD859ZeEN|qaQ|(J^DTCe?L+oz!fiU9YfHaXjAO*8bbi=cll2u|
zDSSh^xNNk}B47CF=@sIYLxj~~d{hXuWR$qjJW#&D8>`X%;XAvUKMmY$lCs-aVu+LD
zIwT`>7f+~n!MkXL#$d3$H6>ujvQvJ-VMkUW-GcBKx=Y?(f`rJIIEN%k8UYm_73+U`i7FjZtTZ@Gpbk?4qpv4K!#+6>1d&Oww#Mbt1fCPC
zbmN-ZkW82F?nhuX3VDxRcIiPH!i1-n0d-C=RdX#z%>x^Wjfbr)_^VNoZK`MQt{->e
z4u^B@g{h{ZJGy%gHSDv|;!vLq?9M_JfSFV8SNtVksRVUH_b^gFY2ctrmUVP3Sf9Il3Z}A_vn-!_twoo}pa&I=Ftt)gu85nYl5l
zNZp3zfBEO~)7}}vl@TFHCSIO`VmtOaKJq7-#!X((#CC&cdG~K*EsaeNvM8F*78@u#
zKl7~BBx#-#KkcXerum-0FGOAC0Byk~+`xn{JVSx!nwEy8r~l^Ks5M0`@$UDD$&l3V
z$Nb@tny9nkna^$WKYg;tDZ+%jxz4)nbQJx;d^pJtm#UTwR}%B80kZ&{TEXR%+7y
zh6z}Xw=gzM$WctY!WWpfygQx>mkCY!73ar}!3RK6rm-ix@HS7@bKTk;UyaFPT
zZz~L39%48%KF4;t*+kGKi3#z$7Y9g`r2jEgyv5$@-;6e(fqS@uo3QTpJWzqNTy~M&
zz+@*EsN2S~gtcduR(=d{nNF#vFs|lQdDHlDNdK8L;x~xRp;kqg>bS19>@F$la4sYa
z$n~V$=uyp4zf5>4<#wdv`yR
z{e?slwa?vuY};1BrQG7jr>D~+f&)tA}sKlQk|JTz79
zf>;*md~g0$mZunT7Zjd+v-8kgi69-F;Q|Dw4Mrc0_bO)uXQp1*K>DQk7d@kbSz`-GCl7l;1IQNj!rI72(P7!RNm8}
zbGL3wJ;*IiRgJA34&3xvD9ew!{%&6B##lfryB(-trb6Mdx54&UGo45zJPQw-n1VIh
z#;UFty8mGM68&A%#*5fss%sTM`(&rIQ(&{Tq(Fl=oMK5e<;fMI8qGLjX2s6s#6tl;
zqXib+FTk@loktVPkr`pTweg!f3o%WAj3-cmMj*`W{(w#;c`_f4XffC8)+p0O-K11G
zvadaFg^D)Db(r%C90Y}DLJ;i_Xq=2U5Z{d
zCO^PU3t{F3Co|1A%G7aB?Wbdk?i(E)^xM3J|KzTl`OHONCNc1M><&^x6d-;0Q$2n^
zp0x*(;d%P)Y~pBhoTX10%HpjsAa;m1&}oh4bW?tnO85IuvXMJ%Kh2x~MJ3lHR5!2F
zj?s!0585NHa;_av$-3K+vCVk{dwz6Odud51#P_R2jL>HyhDE64o70}>N1-YucJ^=$
z0ohJ6c=N!EMnjh`-?gvKix>g*PgfQnu5VNjVbn+eC@uy7*~jpojk+JC{EntN1@SkfaPeR}_;0-)ujq
zhbyX9vI`0B%y`fL!IH|uPDh%4zKf;n>3qIsEqg||(PH5-#yzjZ^+OBTRg9O@Ia(H*
zY3*;KWZhIfGgA;lP;=#6)`Fws=XiL)#
zXd_H(DH9MZ5#76LA{GyxaxR=cRQ|8ZUJ6N(OwS%lI0$;ZUsIQsho`j*h~1%J91^eH
z1cdup@de%#ykDEc_y9Hz*q)AG73GSJg4>4;fhydXJa^qVytFWf8}oEeZ$-d}-RXxR
z4+TYn0r3?GUdhi;Ilv10TlbyfGK2g%Yc3W*>lxAMN|NbeaX3I)Lcb9bhs~7&@!=%a0%m)l>NM!*caLG_VDXlR8cMzcG
zBo4HmizTRwCXYXHc|@gT^%q@Cv2eULNMoaW`eD1jO7edd`s;BM+?hz+^zk)OowMbV
zIL1xe!wefGZSRFOR*f6~N6+1du0=y+j5-8&t~I;oL*4_S`%Nx9CDIodqLQ1d4)JCn
z)HnZqx;voD?kMrGsTGH6McGg}5UQ_SOg))bt>-WmH3vBWDa8<;ate&8A!%J1_5dMY
zVsO?crRrc_U-wAVp7N+Qghwpcp!WTm^h^6w4ogYIQ@cW1w8j@YqbeJe|7oL74TC~
z7<1Bxj6F6fs#R{fdo>89r}xZlN92q7VVK2sl7@?1z75jZ^!itSpw4Y#f#xKZz#=8FzoVS#{=2^>*l1R{CoA8ww{>CE^C)m!AwbayA)gc3kbyY
zr(UBjPVCLf)|Xp;Ndzz5G6%9bOQlh__3zt4vDLklU~^*X1DLir-)T&o%c`?wu6>ak
zB|p0iQpzKo$<@S^dJZY1A?L|OQnrH$vG|=*PS4(6rd5x&sD=j{vkH%%p@Zco%{
z`FmnLz3|LJUS9O!#@a|p%T`p190AsY-KD11oIqfI63-^07|0`RVgH75ZfyHa6DxpT&SqeY0MOK8m-8>fe@ofLe4(I%TX=oU
zR@B*T`4HE%pDu-6SU?>wcN5sSqc=C7+v3vQd75W@BH+~n2&6!Kj;M
zj2;nmGgs-wthZ!zJcLnnx!%gRwg}$(TR|+$qD?n|&5DEwBe0}=JC)y-gBDj14~RYo
z>w0<-`O3g1#WJq``uc5Q{INRa2-8Rw!3d+aD$b)*kcl2K@D)$c%Od8@tEFsU(uGLbgTIWD6jhh`JqG0um;U!_?g8XItH)=`WMqE$rgylS8f)&=toA94
zI1evGJ(|Ok402xaE+N>7>q66|_-GuB)nH{D0YzS#GGP}d@Nie8`9kdaj^JFEuCl*W
z973$h0&}Ty8b=NU4tPypkFv+DI1q^mPhlVuL@y2o?+Dnm(kKGnHL8dP&EIC(8@DAW
zZ)0+dYy;Cml+4TMkO1~iO_dynf6{Evg09tDzE2sP?Jwx&XvhE(jzKQavZFDttPW}N
zW=gA+%TDHjH!YTUek74!-0=Ov?ApgBqQb564RcHsuQ>o1Innm{q3+OPkt%_Yg?{P-Z_B?9;)MgkmgxY$kzJZpM<5V>m}!GCGCgpMH-EFlUAt~AdbfaN$3Ll>R8&gYAa@TR
z6#t0(g=Bz|3Fe8`z@4^kSI=A^gf88a=B@(6;7Hd*fF-j1A^F&S9#;C^iZo@tg=r{R
zz&3rLOnE1NRq5D%hZI$pfyz{(kCjeMN|~lG9y5!Di|bGpau_wh&0|O3>sODDKU0SL
zT3qn$-uCo~MIbb)@q{|?@{b!7%Kk97VS~4@;>W+}*NSxj8syy^B;|uf;Ij%=tIx(i
zLmw4*G0rgOn|+<`(Ko3(@36fon|~VLd4^&G2m_MtWV^5;>tFFSXlZ}xBZdW{F;7rp
z3hIvtH**irkpS}>DbBt*`Y_2jMV|STFUb@uFca#)N8I$oys9uqM;6JaCe_s}VtpnR
z2)U>|X&Klm<;mGu|6?u|xMi5i_|}u)`;B;9qLIE{<>Fz4Fbf?{u*9+pQGhC(_#T6~
z_9H^Wm5Z62?(1b{$n=V%UKOqYlO~EJoz3xgER7R~?(5h0_GvUEQ?%D##D$7h@i$wj
zu;YG2TYDUAC;WQ*TB}gAV{-WdddDbbiTPF@W|uPPs&@U6_{FNIvmmwgXv&88*UT9GXX~FP*9^dE
zJ}d&yRzv5)YIxjx~~&^DD4Zs{PfoLFdEk
z07OmGV&S`Y?>>{bt~}23-VoSAwrfsvHIj&sF7Wa?3)<2s;y99Mp|2)1L2ged^yVg6
z?QmUU?pJ}i161lQ@}SEM9QiRM-qU@&&)lPVLEIzS5xkqw?iZIu91@Eu*whMh1VZg+
ziK`ln(UW}?%~lJ;+#_F=Sc+>m>|OV7KqTR&aPQM~qSe+Y=o76!H&Ffl0fWm|wYY3j~$ESskC+=SB%EyO$3$^3XbN
zrgmL+)P!Z;x2NA#J2YG8)=0Y~`52h}_^Zp6lkThOO|!=#Ec;B*cFx281}(V!f#4!j7d9
zKEy3wnLNynr-d55P&ki9M;WWr%pASV!gzq|c|*v?MasThitmpw9xODQIv=l@I1dagv|hS%
zDL#G3R7J6WcQ6!u5ENqji<@rB{`?_q9<~%}6-mcqd0jw%y2hRH!an3cR#G6|41L(g
z@pK7mB{j9j4IM8W_}hy`w+A=)TjJ5Fmv;@{wh%tQK0+=u=MDdNphr$__%x&7rth{|
RZ@bC>ZFPOM8Wm{F{{W#H83zCW
literal 0
HcmV?d00001
diff --git a/flexmark-ext-enumerated-reference/src/main/javadoc/overview.html b/flexmark-ext-enumerated-reference/src/main/javadoc/overview.html
index 70898e6e29..c45d9712aa 100644
--- a/flexmark-ext-enumerated-reference/src/main/javadoc/overview.html
+++ b/flexmark-ext-enumerated-reference/src/main/javadoc/overview.html
@@ -9,6 +9,7 @@
the category and reference is used to uniquely identify an element in the category. The anchor
id of the element will be type:reference and this must be used by the enumerated reference
label or link.
+ type must not start with a digit.
To refer to the element in the document use the enumerated reference elements:
@@ -34,10 +35,10 @@
For example:
-{#fig:test}
+{#fig:test}
[#fig:test]
-{#fig:test2}
+{#fig:test2}
[#fig:test2]
| heading | heading | heading |
@@ -58,10 +59,10 @@
is equivalent to the following without having to manually keep track of numbering of individual
elements:
-{#fig:test}
+{#fig:test}
Figure 1.
-{#fig:test2}
+{#fig:test2}
Figure 2.
| table |
@@ -96,5 +97,71 @@
<p>See <a href="#fig:test"><span>Figure 1.</span></a></p>
<p>See <a href="#tbl:test"><span>Table 1.</span></a></p>
+Enumerated Reference Text in Headings
+Because headings contain their own anchor id an enumerated reference with only a type is
+allowed in headings and has the effect of adding an incremented counter to heading text.
+# [#hd1] Heading 1
+
+# [#hd1] Heading 2
+
+# [#hd1] Heading 3
+
+[@hd1]: [#].
+
+Will render as:
+<h1>1. Heading 1</h1>
+<h1>2. Heading 2</h1>
+<h1>3. Heading 3</h1>
+
+Compound Types
+Compound enumerated reference types are created by including more than one type reference with
+: separating each type.
+The effect of compound reference is that all child reference counters are reset to 1 for change
+in parent type’s ordinal allowing creation of legal numbering using enumerated references.
+ When combining enumerated type ordinal strings for compound enumerated
+reference if the last element of the enumerated format definition is an empty enumerated
+reference text [#] or empty enumerated reference link [@] then a . will be added after the
+parent enumerated ordinal text.
+ For compound type for headings without an element id, a trailing : is
+needed to prevent the last type from being interpreted as the element id.
+# [#hd1] Heading 1
+
+## [#hd1:hd2:] Heading 1.1
+
+### [#hd1:hd2:hd3:] Heading 1.1.1
+
+### [#hd1:hd2:hd3:] Heading 1.1.2
+
+## [#hd1:hd2:] Heading 1.2
+
+### [#hd1:hd2:hd3:] Heading 1.2.1
+
+### [#hd1:hd2:hd3:] Heading 1.2.2
+
+# [#hd1] Heading 2
+
+## [#hd1:hd2:] Heading 2.1
+
+### [#hd1:hd2:hd3:] Heading 2.1.1
+
+### [#hd1:hd2:hd3:] Heading 2.1.2
+
+[@hd1]: [#].
+[@hd2]: [#].
+[@hd2]: [#].
+
+Will render as:
+<h1>1. Heading 1</h1>
+<h2>1.1. Heading 1.1</h2>
+<h3>1.1.1. Heading 1.1.1</h3>
+<h3>1.1.2. Heading 1.1.2</h3>
+<h2>1.2. Heading 1.2</h2>
+<h3>1.2.1. Heading 1.2.1</h3>
+<h3>1.2.2. Heading 1.2.2</h3>
+<h1>2. Heading 2</h1>
+<h2>2.1. Heading 2.1</h2>
+<h3>2.1.1. Heading 2.1.1</h3>
+<h3>2.1.2. Heading 2.1.2</h3>
+