From 66cff5ce479aae3bbcd9f228a2c4c8068a0db12b Mon Sep 17 00:00:00 2001 From: Vladimir Schneider Date: Thu, 23 Jan 2020 11:36:54 -0500 Subject: [PATCH 1/5] add mail link test --- .../test/resources/docx_converter_ast_spec.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) 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 caa57a8df3..73ced9b405 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 @@ -949,6 +949,38 @@ with some text ```````````````````````````````` +### Mail + +Mail link + +```````````````````````````````` example Links - Mail: 1 +prefix vladimir@vladsch.com suffix + +. + + + + + + + prefix + + + + + + + vladimir@vladsch.com + + + + suffix + + + +```````````````````````````````` + + ## Images From a3fcc755bc1c3d7607beff15f70bd714d6a1f16c Mon Sep 17 00:00:00 2001 From: Vladimir Schneider Date: Thu, 23 Jan 2020 11:38:00 -0500 Subject: [PATCH 2/5] fix deep html parser block interrupts paragraph --- ...omboPegdownDoxiaCompatibilitySpecTest.java | 77 +++++++++++++++ .../pegdown/PegdownProfileTestSuite.java | 1 + .../pegdown_doxia_compatibility_spec.md | 99 +++++++++++++++++++ .../flexmark/parser/core/HtmlBlockParser.java | 5 +- .../parser/internal/HtmlDeepParser.java | 18 ++++ .../src/test/resources/issues_ast_spec.md | 54 ++++++++++ 6 files changed, 252 insertions(+), 2 deletions(-) create mode 100644 flexmark-profile-pegdown/src/test/java/com/vladsch/flexmark/profiles/pegdown/ComboPegdownDoxiaCompatibilitySpecTest.java create mode 100644 flexmark-profile-pegdown/src/test/resources/pegdown_doxia_compatibility_spec.md diff --git a/flexmark-profile-pegdown/src/test/java/com/vladsch/flexmark/profiles/pegdown/ComboPegdownDoxiaCompatibilitySpecTest.java b/flexmark-profile-pegdown/src/test/java/com/vladsch/flexmark/profiles/pegdown/ComboPegdownDoxiaCompatibilitySpecTest.java new file mode 100644 index 0000000000..6e3c5afe92 --- /dev/null +++ b/flexmark-profile-pegdown/src/test/java/com/vladsch/flexmark/profiles/pegdown/ComboPegdownDoxiaCompatibilitySpecTest.java @@ -0,0 +1,77 @@ +package com.vladsch.flexmark.profiles.pegdown; + +import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension; +import com.vladsch.flexmark.html.HtmlRenderer; +import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.spec.SpecExample; +import com.vladsch.flexmark.spec.SpecReader; +import com.vladsch.flexmark.test.ComboSpecTestCase; +import com.vladsch.flexmark.util.builder.BuilderBase; +import com.vladsch.flexmark.util.options.DataHolder; +import com.vladsch.flexmark.util.options.MutableDataSet; +import org.junit.runners.Parameterized; + +import java.util.*; + +import static com.vladsch.flexmark.profiles.pegdown.Extensions.*; + +public class ComboPegdownDoxiaCompatibilitySpecTest extends ComboSpecTestCase { + private static final String SPEC_RESOURCE = "/pegdown_doxia_compatibility_spec.md"; + static final DataHolder OPTIONS = PegdownOptionsAdapter.flexmarkOptions(ALL & ~( HARDWRAPS | ANCHORLINKS )).toMutable() + .set(HtmlRenderer.INDENT_SIZE, 2) + .set(HtmlRenderer.FENCED_CODE_LANGUAGE_CLASS_PREFIX, "") + .set(HtmlRenderer.OBFUSCATE_EMAIL_RANDOM, false) + .set(HtmlRenderer.PERCENT_ENCODE_URLS, true) + ; + + private static final Map optionsMap = new HashMap(); + static { + optionsMap.put("no-deep-parser", new MutableDataSet().set(Parser.HTML_BLOCK_DEEP_PARSER,false )); + } + + 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 HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).build(); + + private static DataHolder optionsSet(String optionSet) { + return optionsMap.get(optionSet); + } + + public ComboPegdownDoxiaCompatibilitySpecTest(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 HtmlRenderer renderer() { + return RENDERER; + } +} diff --git a/flexmark-profile-pegdown/src/test/java/com/vladsch/flexmark/profiles/pegdown/PegdownProfileTestSuite.java b/flexmark-profile-pegdown/src/test/java/com/vladsch/flexmark/profiles/pegdown/PegdownProfileTestSuite.java index ec5744b8c0..d38c1b42a3 100644 --- a/flexmark-profile-pegdown/src/test/java/com/vladsch/flexmark/profiles/pegdown/PegdownProfileTestSuite.java +++ b/flexmark-profile-pegdown/src/test/java/com/vladsch/flexmark/profiles/pegdown/PegdownProfileTestSuite.java @@ -7,6 +7,7 @@ ComboPegdownSpecTest.class, ComboPegdownCompatibilitySpecTest.class, ComboPegdownExtensionCompatibilitySpecTest.class, + ComboPegdownDoxiaCompatibilitySpecTest.class, ComboStackOverflowSpecTest.class, ComboIssueMn236ExceptionSpecTest.class, }) diff --git a/flexmark-profile-pegdown/src/test/resources/pegdown_doxia_compatibility_spec.md b/flexmark-profile-pegdown/src/test/resources/pegdown_doxia_compatibility_spec.md new file mode 100644 index 0000000000..0a0366d788 --- /dev/null +++ b/flexmark-profile-pegdown/src/test/resources/pegdown_doxia_compatibility_spec.md @@ -0,0 +1,99 @@ +--- +title: Pegdown with Doxia Compatibility Spec +author: Vladimir Schneider +version: 0.2 +date: '2017-01-07' +license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' +... + +--- + +## Issue 384 + +Issue #384, + +```````````````````````````````` example Issue 384: 1 +Install Kurento Media server +
+→It should be run under same user as OM +
+. +

Install Kurento Media server

+
+→It should be run under same user as OM +
+. +Document[0, 201] + Paragraph[0, 111] + HtmlInline[0, 78] chars:[0, 78, ""] + Text[78, 106] chars:[78, 106, "Insta … erver"] + HtmlInline[106, 110] chars:[106, 110, ""] + HtmlBlock[111, 201] +```````````````````````````````` + + +```````````````````````````````` example(Issue 384: 2) options(no-deep-parser) +Install Kurento Media server +
+→It should be run under same user as OM +
+. +

Install Kurento Media server

+
+→It should be run under same user as OM +
+. +Document[0, 200] + Paragraph[0, 111] + HtmlInline[0, 78] chars:[0, 78, ""] + Text[78, 106] chars:[78, 106, "Insta … erver"] + HtmlInline[106, 110] chars:[106, 110, ""] + HtmlBlock[111, 200] +```````````````````````````````` + + +```````````````````````````````` example Issue 384: 3 + + +# Media Server Installation + +## Install Kurento Media server + +Install Kurento Media server +
+→It should be run under same user as OM +
+ +## Specify/Install Turn server + +
Optional step
+. + +

Media Server Installation

+

Install Kurento Media server

+

Install Kurento Media server

+
+→It should be run under same user as OM +
+

Specify/Install Turn server

+
Optional step
+. +Document[0, 475] + HtmlCommentBlock[0, 118] + Heading[119, 146] textOpen:[119, 120, "#"] text:[121, 146, "Media Server Installation"] + Text[121, 146] chars:[121, 146, "Media … ation"] + Heading[148, 179] textOpen:[148, 150, "##"] text:[151, 179, "Install Kurento Media server"] + Text[151, 179] chars:[151, 179, "Insta … erver"] + Paragraph[181, 292] + HtmlInline[181, 259] chars:[181, 259, ""] + Text[259, 287] chars:[259, 287, "Insta … erver"] + HtmlInline[287, 291] chars:[287, 291, ""] + HtmlBlock[292, 382] + Heading[383, 413] textOpen:[383, 385, "##"] text:[386, 413, "Specify/Install Turn server"] + Text[386, 413] chars:[386, 413, "Speci … erver"] + HtmlBlock[415, 475] +```````````````````````````````` + + diff --git a/flexmark/src/main/java/com/vladsch/flexmark/parser/core/HtmlBlockParser.java b/flexmark/src/main/java/com/vladsch/flexmark/parser/core/HtmlBlockParser.java index 67f665d127..7f35ef698d 100644 --- a/flexmark/src/main/java/com/vladsch/flexmark/parser/core/HtmlBlockParser.java +++ b/flexmark/src/main/java/com/vladsch/flexmark/parser/core/HtmlBlockParser.java @@ -306,7 +306,8 @@ public BlockStart tryStart(ParserState state, MatchedBlockParser matchedBlockPar deepParser.parseHtmlChunk(line.subSequence(nextNonSpace, line.length()), myHtmlBlockStartOnlyOnBlockTags, myHtmlBlockDeepParseNonBlock, myHtmlBlockDeepParseFirstOpenTagOnOneLine); if (deepParser.hadHtml()) { // have our html block start - if (((deepParser.getHtmlMatch() == OPEN_TAG || (!myHtmlCommentBlocksInterruptParagraph && deepParser.getHtmlMatch() == COMMENT)) && matchedBlockParser.getBlockParser().getBlock() instanceof Paragraph)) { + if ((deepParser.getHtmlMatch() == OPEN_TAG || (!myHtmlCommentBlocksInterruptParagraph && deepParser.getHtmlMatch() == COMMENT)) + && (!deepParser.isFirstBlockTag() && matchedBlockParser.getBlockParser().getBlock() instanceof Paragraph)) { } else { // not paragraph or can interrupt paragraph return BlockStart.of(new HtmlBlockParser(state.getProperties(), null, deepParser.getHtmlMatch() == COMMENT, deepParser)).atIndex(state.getIndex()); @@ -314,7 +315,7 @@ public BlockStart tryStart(ParserState state, MatchedBlockParser matchedBlockPar } } else { for (int blockType = 1; blockType <= 7; blockType++) { - // Type 7 can not interrupt a paragraph or may not start a block altogether + // Type 7 cannot interrupt a paragraph or may not start a block altogether if (blockType == 7 && (myHtmlBlockStartOnlyOnBlockTags || matchedBlockParser.getBlockParser().getBlock() instanceof Paragraph)) { continue; } diff --git a/flexmark/src/main/java/com/vladsch/flexmark/parser/internal/HtmlDeepParser.java b/flexmark/src/main/java/com/vladsch/flexmark/parser/internal/HtmlDeepParser.java index f583f7f2fe..da92eac557 100644 --- a/flexmark/src/main/java/com/vladsch/flexmark/parser/internal/HtmlDeepParser.java +++ b/flexmark/src/main/java/com/vladsch/flexmark/parser/internal/HtmlDeepParser.java @@ -101,6 +101,7 @@ public enum HtmlMatch { private HtmlMatch myHtmlMatch; private int myHtmlCount; final private HashSet myBlockTags; + private boolean myFirstBlockTag; public HtmlDeepParser() { this(Collections.emptyList()); @@ -111,6 +112,7 @@ public HtmlDeepParser(List customTags) { myClosingPattern = null; myHtmlMatch = null; myHtmlCount = 0; + myFirstBlockTag = false; myBlockTags = new HashSet<>(BLOCK_TAGS); myBlockTags.addAll(customTags); @@ -132,6 +134,10 @@ public int getHtmlCount() { return myHtmlCount; } + public boolean isFirstBlockTag() { + return myFirstBlockTag; + } + public boolean isHtmlClosed() { return myClosingPattern == null && myOpenTags.isEmpty(); } @@ -144,6 +150,17 @@ public boolean haveOpenRawTag() { return myClosingPattern != null && myHtmlMatch != HtmlMatch.OPEN_TAG; } + public boolean haveOpenBlockTag() { + if (!myOpenTags.isEmpty()) { + for (String openTag : myOpenTags) { + if (myBlockTags.contains(openTag)) { + return true; + } + } + } + return false; + } + public boolean hadHtml() { return myHtmlCount > 0 || !isHtmlClosed(); } @@ -161,6 +178,7 @@ private void openTag(final String tagName) { } } myOpenTags.add(tagName); + myFirstBlockTag = myBlockTags.contains(tagName); } public void parseHtmlChunk(CharSequence html, boolean blockTagsOnly, final boolean parseNonBlock, final boolean firstOpenTagOnOneLine) { diff --git a/flexmark/src/test/resources/issues_ast_spec.md b/flexmark/src/test/resources/issues_ast_spec.md index e5219293c1..a59be91eb4 100644 --- a/flexmark/src/test/resources/issues_ast_spec.md +++ b/flexmark/src/test/resources/issues_ast_spec.md @@ -1397,6 +1397,60 @@ Document[0, 128] ```````````````````````````````` +## Issue 384 + +Issue #384, + +```````````````````````````````` example(Issue 384: 1) options(keep-blank-lines) + + +# Media Server Installation + +## Install Kurento Media server + +Install Kurento Media server +
+→It should be run under same user as OM +
+ +## Specify/Install Turn server + +
Optional step
+. + +

Media Server Installation

+

Install Kurento Media server

+

Install Kurento Media server

+
+→It should be run under same user as OM +
+

Specify/Install Turn server

+
Optional step
+. +Document[0, 474] + HtmlCommentBlock[0, 118] + BlankLine[118, 119] + Heading[119, 146] textOpen:[119, 120, "#"] text:[121, 146, "Media Server Installation"] + Text[121, 146] chars:[121, 146, "Media … ation"] + BlankLine[147, 148] + Heading[148, 179] textOpen:[148, 150, "##"] text:[151, 179, "Install Kurento Media server"] + Text[151, 179] chars:[151, 179, "Insta … erver"] + BlankLine[180, 181] + Paragraph[181, 292] + HtmlInline[181, 259] chars:[181, 259, ""] + Text[259, 287] chars:[259, 287, "Insta … erver"] + HtmlInline[287, 291] chars:[287, 291, ""] + HtmlBlock[292, 382] + BlankLine[382, 383] + Heading[383, 413] textOpen:[383, 385, "##"] text:[386, 413, "Specify/Install Turn server"] + Text[386, 413] chars:[386, 413, "Speci … erver"] + BlankLine[414, 415] + HtmlBlock[415, 474] +```````````````````````````````` + + ## Issue xxx-2 Issue xxx-2, leading spaces tab not part of indented code, which is correct From a6f7d87b6b22b974d1a6d954dcfb3747b393e4ce Mon Sep 17 00:00:00 2001 From: Vladimir Schneider Date: Thu, 23 Jan 2020 11:38:26 -0500 Subject: [PATCH 3/5] prep build 0.42.14 --- .idea/codeStyles/Project.xml | 5 +- .idea/compiler.xml | 56 +++++++++- .idea/encodings.xml | 49 +++++++++ .idea/libraries/Maven__junit_junit_4_12.xml | 4 +- .../Maven__org_hamcrest_hamcrest_core_1_3.xml | 4 +- .../Maven__org_jsoup_jsoup_1_10_2.xml | 13 +++ ...ven__org_nibor_autolink_autolink_0_6_0.xml | 4 +- .idea/markdown-exported-files.xml | 55 --------- .idea/markdown-history.xml | 35 ------ .idea/markdown-navigator-enh.xml | 104 ++++++++++++++++++ .idea/markdown-navigator.xml | 71 ++++-------- .idea/markdown-navigator/COPY_HTML_MIME.xml | 47 ++++---- .idea/markdown-navigator/GitHub_Templates.xml | 66 ++++------- .idea/markdown-navigator/OVERVIEW.xml | 47 ++++---- .../markdown-navigator/profiles_settings.xml | 2 +- .idea/misc.xml | 19 +--- .idea/modules.xml | 1 + VERSION.md | 7 +- flexmark-all/pom.xml | 78 ++++++------- flexmark-docx-converter/pom.xml | 2 +- flexmark-ext-abbreviation/pom.xml | 2 +- .../flexmark-ext-admonition.iml | 8 +- 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 +- .../src/main/javadoc/overview.html | 6 +- 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/flexmark-ext-gitlab.iml | 7 +- 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.iml | 2 +- flexmark-ext-media-tags/pom.xml | 2 +- .../flexmark-ext-spec-example.iml | 4 +- 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-java-samples.iml | 3 +- flexmark-java.iml | 1 + flexmark-jira-converter/pom.xml | 2 +- flexmark-osgi/flexmark-osgi.iml | 16 +++ 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 | 2 +- pom.xml | 88 +++++++-------- 74 files changed, 483 insertions(+), 413 deletions(-) create mode 100644 .idea/libraries/Maven__org_jsoup_jsoup_1_10_2.xml delete mode 100644 .idea/markdown-exported-files.xml delete mode 100644 .idea/markdown-history.xml create mode 100644 .idea/markdown-navigator-enh.xml create mode 100644 flexmark-osgi/flexmark-osgi.iml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 8dc0c05b09..423c797649 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -33,7 +33,6 @@