From 1c94b1a6115dfc1035574720ba6a2ed43bb65bfb Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Thu, 19 Oct 2017 14:52:12 -0700
Subject: [PATCH 001/551] README: Add badge for javadoc.io
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 221319aa8..aac78a543 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@ Java library for parsing and rendering [Markdown] text according to the
[CommonMark] specification (and some extensions).
[](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.atlassian.commonmark%22)
+[](https://www.javadoc.io/doc/com.atlassian.commonmark/commonmark)
[](https://travis-ci.org/atlassian/commonmark-java)
[](https://codecov.io/gh/atlassian/commonmark-java)
@@ -206,7 +207,7 @@ report an issue.
### API documentation
Javadocs are available online on
-[javadoc.io](http://www.javadoc.io/doc/com.atlassian.commonmark/commonmark).
+[javadoc.io](https://www.javadoc.io/doc/com.atlassian.commonmark/commonmark).
Extensions
From e800d276275b90c1088790e12c103003808424b2 Mon Sep 17 00:00:00 2001
From: Antek Jaworski
Date: Fri, 8 Dec 2017 20:40:50 +0100
Subject: [PATCH 002/551] Issue 80: TextContent extension for GFM tables
---
...xtension.java => HtmlTablesExtension.java} | 10 +-
.../tables/TextContentTablesExtension.java | 46 +++++
...nderer.java => HtmlTableNodeRenderer.java} | 4 +-
.../TextContentTableNodeRenderer.java | 104 ++++++++++
.../{TablesTest.java => HtmlTablesTest.java} | 4 +-
.../ext/gfm/tables/TextContentTablesTest.java | 179 ++++++++++++++++++
.../integration/SpecIntegrationTest.java | 4 +-
.../commonmark/test/RenderingTestCase.java | 8 +-
8 files changed, 344 insertions(+), 15 deletions(-)
rename commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/{TablesExtension.java => HtmlTablesExtension.java} (80%)
create mode 100644 commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TextContentTablesExtension.java
rename commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/{TableNodeRenderer.java => HtmlTableNodeRenderer.java} (96%)
create mode 100644 commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TextContentTableNodeRenderer.java
rename commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/{TablesTest.java => HtmlTablesTest.java} (99%)
create mode 100644 commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TextContentTablesTest.java
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/HtmlTablesExtension.java
similarity index 80%
rename from commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java
rename to commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/HtmlTablesExtension.java
index 5f562fc63..6073b5282 100644
--- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/HtmlTablesExtension.java
@@ -2,7 +2,7 @@
import org.commonmark.Extension;
import org.commonmark.ext.gfm.tables.internal.TableBlockParser;
-import org.commonmark.ext.gfm.tables.internal.TableNodeRenderer;
+import org.commonmark.ext.gfm.tables.internal.HtmlTableNodeRenderer;
import org.commonmark.renderer.html.HtmlRenderer;
import org.commonmark.renderer.html.HtmlNodeRendererContext;
import org.commonmark.renderer.html.HtmlNodeRendererFactory;
@@ -20,13 +20,13 @@
* The parsed tables are turned into {@link TableBlock} blocks.
*
*/
-public class TablesExtension implements Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension {
+public class HtmlTablesExtension implements Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension {
- private TablesExtension() {
+ private HtmlTablesExtension() {
}
public static Extension create() {
- return new TablesExtension();
+ return new HtmlTablesExtension();
}
@Override
@@ -39,7 +39,7 @@ public void extend(HtmlRenderer.Builder rendererBuilder) {
rendererBuilder.nodeRendererFactory(new HtmlNodeRendererFactory() {
@Override
public NodeRenderer create(HtmlNodeRendererContext context) {
- return new TableNodeRenderer(context);
+ return new HtmlTableNodeRenderer(context);
}
});
}
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TextContentTablesExtension.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TextContentTablesExtension.java
new file mode 100644
index 000000000..9ca89ae93
--- /dev/null
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TextContentTablesExtension.java
@@ -0,0 +1,46 @@
+package org.commonmark.ext.gfm.tables;
+
+import org.commonmark.Extension;
+import org.commonmark.ext.gfm.tables.internal.TableBlockParser;
+import org.commonmark.ext.gfm.tables.internal.TextContentTableNodeRenderer;
+import org.commonmark.parser.Parser;
+import org.commonmark.renderer.NodeRenderer;
+import org.commonmark.renderer.text.TextContentNodeRendererContext;
+import org.commonmark.renderer.text.TextContentNodeRendererFactory;
+import org.commonmark.renderer.text.TextContentRenderer;
+
+/**
+ * Extension for GFM tables using "|" pipes (GitHub Flavored Markdown).
+ *
+ * Create it with {@link #create()} and then configure it on the builders
+ * ({@link org.commonmark.parser.Parser.Builder#extensions(Iterable)},
+ * {@link TextContentRenderer.Builder#extensions(Iterable)}).
+ *
+ *
+ * The parsed tables are turned into {@link TableBlock} blocks.
+ *
+ * Create it with {@link #create()} and then configure it on the builders
+ * ({@link org.commonmark.parser.Parser.Builder#extensions(Iterable)},
+ * {@link TextContentRenderer.Builder#extensions(Iterable)}).
+ *
+ */
+public class TextTablesExtension implements Parser.ParserExtension, TextContentRenderer.TextContentRendererExtension {
+
+ private TextTablesExtension() {
+ }
+
+ public static Extension create() {
+ return new TextTablesExtension();
+ }
+
+ @Override
+ public void extend(Parser.Builder parserBuilder) {
+ parserBuilder.customBlockParserFactory(new TableBlockParser.Factory());
+ }
+
+ @Override
+ public void extend(TextContentRenderer.Builder rendererBuilder) {
+ rendererBuilder.nodeRendererFactory(new TextContentNodeRendererFactory() {
+ @Override
+ public NodeRenderer create(TextContentNodeRendererContext context) {
+ return new TextTableNodeRenderer(context);
+ }
+ });
+ }
+}
diff --git a/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java b/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java
new file mode 100644
index 000000000..d5fc92f49
--- /dev/null
+++ b/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java
@@ -0,0 +1,104 @@
+package org.commonmark.ext.gfm.tables.text.internal;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.commonmark.ext.gfm.tables.TableBlock;
+import org.commonmark.ext.gfm.tables.TableBody;
+import org.commonmark.ext.gfm.tables.TableCell;
+import org.commonmark.ext.gfm.tables.TableHead;
+import org.commonmark.ext.gfm.tables.TableRow;
+import org.commonmark.node.Node;
+import org.commonmark.renderer.NodeRenderer;
+import org.commonmark.renderer.text.TextContentNodeRendererContext;
+import org.commonmark.renderer.text.TextContentWriter;
+
+/**
+ * The Table node renderer that is needed for rendering GFM tables (GitHub Flavored Markdown) to text.
+ */
+public class TextTableNodeRenderer implements NodeRenderer {
+
+ private final TextContentWriter textContentWriter;
+ private final TextContentNodeRendererContext context;
+
+ public TextTableNodeRenderer(TextContentNodeRendererContext context) {
+ this.textContentWriter = context.getWriter();
+ this.context = context;
+ }
+
+ @Override
+ public Set> getNodeTypes() {
+ return new HashSet<>(Arrays.asList(
+ TableBlock.class,
+ TableHead.class,
+ TableBody.class,
+ TableRow.class,
+ TableCell.class
+ ));
+ }
+
+ @Override
+ public void render(Node node) {
+ // We don't render the table header (node instanceof TableHead) and its children for the text content.
+
+ if (node instanceof TableBlock) {
+ renderBlock((TableBlock) node);
+ } else if (node instanceof TableHead) {
+ renderHead((TableHead) node);
+ } else if (node instanceof TableBody) {
+ renderBody((TableBody) node);
+ } else if (node instanceof TableRow) {
+ renderRow((TableRow) node);
+ } else if (node instanceof TableCell) {
+ renderCell((TableCell) node);
+ }
+ }
+
+ private void renderBlock(TableBlock tableBlock) {
+ renderChildren(tableBlock);
+ if (tableBlock.getNext() != null) {
+ textContentWriter.write("\n");
+ }
+ }
+
+ private void renderHead(TableHead tableHead) {
+ renderChildren(tableHead);
+ }
+
+ private void renderBody(TableBody tableBody) {
+ renderChildren(tableBody);
+ }
+
+ private void renderRow(TableRow tableRow) {
+ textContentWriter.line();
+ renderChildren(tableRow);
+ textContentWriter.line();
+ }
+
+ private void renderCell(TableCell tableCell) {
+ renderChildren(tableCell);
+ textContentWriter.pipe();
+ textContentWriter.whitespace();
+ }
+
+ private void renderLastCell(TableCell tableCell) {
+ renderChildren(tableCell);
+ }
+
+ private void renderChildren(Node parent) {
+ Node node = parent.getFirstChild();
+ while (node != null) {
+ Node next = node.getNext();
+
+ // For last cell in row, we dont render the delimiter.
+ if (node instanceof TableCell && next == null) {
+ renderLastCell((TableCell) node);
+ } else {
+ context.render(node);
+ }
+
+ node = next;
+ }
+ }
+}
diff --git a/commonmark-ext-gfm-tables-text/src/main/javadoc/overview.html b/commonmark-ext-gfm-tables-text/src/main/javadoc/overview.html
new file mode 100644
index 000000000..ce9020657
--- /dev/null
+++ b/commonmark-ext-gfm-tables-text/src/main/javadoc/overview.html
@@ -0,0 +1,6 @@
+
+
+Extension for rendering GFM tables as text using "|" pipes (GitHub Flavored Markdown)
+
See {@link org.commonmark.ext.gfm.tables.text.TextTablesExtension}
- * Create it with {@link #create()} and then configure it on the builders
- * ({@link org.commonmark.parser.Parser.Builder#extensions(Iterable)},
- * {@link TextContentRenderer.Builder#extensions(Iterable)}).
- *
- *
- * The parsed tables are turned into {@link TableBlock} blocks.
- *
- */
-public class TextContentTablesExtension implements Parser.ParserExtension, TextContentRenderer.TextContentRendererExtension {
-
- private TextContentTablesExtension() {
- }
-
- public static Extension create() {
- return new TextContentTablesExtension();
- }
-
- @Override
- public void extend(Parser.Builder parserBuilder) {
- parserBuilder.customBlockParserFactory(new TableBlockParser.Factory());
- }
-
- @Override
- public void extend(TextContentRenderer.Builder rendererBuilder) {
- rendererBuilder.nodeRendererFactory(new TextContentNodeRendererFactory() {
- @Override
- public NodeRenderer create(TextContentNodeRendererContext context) {
- return new TextContentTableNodeRenderer(context);
- }
- });
- }
-}
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/HtmlTableNodeRenderer.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java
similarity index 96%
rename from commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/HtmlTableNodeRenderer.java
rename to commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java
index 2be284d66..1bff26e19 100644
--- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/HtmlTableNodeRenderer.java
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java
@@ -8,12 +8,12 @@
import java.util.*;
-public class HtmlTableNodeRenderer implements NodeRenderer {
+public class TableNodeRenderer implements NodeRenderer {
private final HtmlWriter htmlWriter;
private final HtmlNodeRendererContext context;
- public HtmlTableNodeRenderer(HtmlNodeRendererContext context) {
+ public TableNodeRenderer(HtmlNodeRendererContext context) {
this.htmlWriter = context.getWriter();
this.context = context;
}
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TextContentTableNodeRenderer.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TextContentTableNodeRenderer.java
deleted file mode 100644
index f3088867d..000000000
--- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TextContentTableNodeRenderer.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.commonmark.ext.gfm.tables.internal;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.commonmark.ext.gfm.tables.TableBlock;
-import org.commonmark.ext.gfm.tables.TableBody;
-import org.commonmark.ext.gfm.tables.TableCell;
-import org.commonmark.ext.gfm.tables.TableHead;
-import org.commonmark.ext.gfm.tables.TableRow;
-import org.commonmark.node.Node;
-import org.commonmark.renderer.NodeRenderer;
-import org.commonmark.renderer.text.TextContentNodeRendererContext;
-import org.commonmark.renderer.text.TextContentWriter;
-
-/**
- * The Table node renderer that is needed for rendering GFM tables (GitHub Flavored Markdown) to text.
- */
-public class TextContentTableNodeRenderer implements NodeRenderer {
-
- private final TextContentWriter textContentWriter;
- private final TextContentNodeRendererContext context;
-
- public TextContentTableNodeRenderer(TextContentNodeRendererContext context) {
- this.textContentWriter = context.getWriter();
- this.context = context;
- }
-
- @Override
- public Set> getNodeTypes() {
- return new HashSet<>(Arrays.asList(
- TableBlock.class,
- TableHead.class,
- TableBody.class,
- TableRow.class,
- TableCell.class
- ));
- }
-
- @Override
- public void render(Node node) {
- // We don't render the table header (node instanceof TableHead) and its children for the text content.
-
- if (node instanceof TableBlock) {
- renderBlock((TableBlock) node);
- } else if (node instanceof TableHead) {
- renderHead((TableHead) node);
- } else if (node instanceof TableBody) {
- renderBody((TableBody) node);
- } else if (node instanceof TableRow) {
- renderRow((TableRow) node);
- } else if (node instanceof TableCell) {
- renderCell((TableCell) node);
- }
- }
-
- private void renderBlock(TableBlock tableBlock) {
- renderChildren(tableBlock);
- if (tableBlock.getNext() != null) {
- textContentWriter.write("\n");
- }
- }
-
- private void renderHead(TableHead tableHead) {
- renderChildren(tableHead);
- }
-
- private void renderBody(TableBody tableBody) {
- renderChildren(tableBody);
- }
-
- private void renderRow(TableRow tableRow) {
- textContentWriter.line();
- renderChildren(tableRow);
- textContentWriter.line();
- }
-
- private void renderCell(TableCell tableCell) {
- renderChildren(tableCell);
- textContentWriter.colon();
- textContentWriter.whitespace();
- }
-
- private void renderLastCell(TableCell tableCell) {
- renderChildren(tableCell);
- }
-
- private void renderChildren(Node parent) {
- Node node = parent.getFirstChild();
- while (node != null) {
- Node next = node.getNext();
-
- // For last cell in row, we dont render the delimiter.
- if (node instanceof TableCell && next == null) {
- renderLastCell((TableCell) node);
- } else {
- context.render(node);
- }
-
- node = next;
- }
- }
-}
diff --git a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/HtmlTablesTest.java b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
similarity index 99%
rename from commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/HtmlTablesTest.java
rename to commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
index eb2ed14fc..9925959f4 100644
--- a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/HtmlTablesTest.java
+++ b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
@@ -17,9 +17,9 @@
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
-public class HtmlTablesTest extends RenderingTestCase {
+public class TablesTest extends RenderingTestCase {
- private static final Set EXTENSIONS = Collections.singleton(HtmlTablesExtension.create());
+ private static final Set EXTENSIONS = Collections.singleton(TablesExtension.create());
private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS).build();
private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS).build();
diff --git a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TextContentTablesTest.java b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TextContentTablesTest.java
deleted file mode 100644
index c3c239ce1..000000000
--- a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TextContentTablesTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package org.commonmark.ext.gfm.tables;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-import org.commonmark.Extension;
-import org.commonmark.node.Node;
-import org.commonmark.parser.Parser;
-import org.commonmark.renderer.html.AttributeProvider;
-import org.commonmark.renderer.html.AttributeProviderContext;
-import org.commonmark.renderer.html.AttributeProviderFactory;
-import org.commonmark.renderer.html.HtmlRenderer;
-import org.commonmark.renderer.text.TextContentNodeRendererFactory;
-import org.commonmark.renderer.text.TextContentRenderer;
-import org.commonmark.test.RenderingTestCase;
-import org.junit.Test;
-
-public class TextContentTablesTest extends RenderingTestCase {
-
- private static final Set EXTENSIONS = Collections.singleton(TextContentTablesExtension.create());
- private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS).build();
- private static final TextContentRenderer RENDERER = TextContentRenderer.builder().extensions(EXTENSIONS).build();
-
- @Test
- public void mustHaveHeaderAndSeparator() {
- assertRendering("Abc|Def", "Abc|Def");
- assertRendering("Abc | Def", "Abc | Def");
- }
-
- @Test
- public void separatorMustBeThreeOrMore() {
- assertRendering("Abc|Def\n-|-", "Abc|Def\n-|-");
- assertRendering("Abc|Def\n--|--", "Abc|Def\n--|--");
- }
-
- @Test
- public void separatorCanNotHaveLeadingSpaceThenPipe() {
- assertRendering("Abc|Def\n |---|---", "Abc|Def\n|---|---");
- }
-
- @Test
- public void headerMustBeOneLine() {
- assertRendering("No\nAbc|Def\n---|---", "No\nAbc|Def\n---|---");
- }
-
- @Test
- public void oneHeadNoBody() {
- assertRendering("Abc|Def\n---|---", "Abc: Def\n");
- }
-
- @Test
- public void oneColumnOneHeadNoBody() {
- String expected = "Abc\n";
- assertRendering("|Abc\n|---\n", expected);
- assertRendering("|Abc|\n|---|\n", expected);
- assertRendering("Abc|\n---|\n", expected);
-
- // Pipe required on separator
- assertRendering("|Abc\n---\n", "|Abc");
- // Pipe required on head
- assertRendering("Abc\n|---\n", "Abc\n|---");
- }
-
- @Test
- public void oneColumnOneHeadOneBody() {
- String expected = "Abc\n1\n";
- assertRendering("|Abc\n|---\n|1", expected);
- assertRendering("|Abc|\n|---|\n|1|", expected);
- assertRendering("Abc|\n---|\n1|", expected);
-
- // Pipe required on separator
- assertRendering("|Abc\n---\n|1", "|Abc\n|1");
-
- // Pipe required on body
- assertRendering("|Abc\n|---\n1\n", "Abc\n\n1");
- }
-
- @Test
- public void oneHeadOneBody() {
- assertRendering("Abc|Def\n---|---\n1|2", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void separatorMustNotHaveLessPartsThanHead() {
- assertRendering("Abc|Def|Ghi\n---|---\n1|2|3", "Abc|Def|Ghi\n---|---\n1|2|3");
- }
-
- @Test
- public void padding() {
- assertRendering(" Abc | Def \n --- | --- \n 1 | 2 ", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void paddingWithCodeBlockIndentation() {
- assertRendering("Abc|Def\n---|---\n 1|2", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void pipesOnOutside() {
- assertRendering("|Abc|Def|\n|---|---|\n|1|2|", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void inlineElements() {
- assertRendering("*Abc*|Def\n---|---\n1|2", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void escapedPipe() {
- assertRendering("Abc|Def\n---|---\n1\\|2|20", "Abc: Def\n1|2: 20\n");
- }
-
- @Test
- public void escapedBackslash() {
- assertRendering("Abc|Def\n---|---\n1\\\\|2", "Abc: Def\n1\\: 2\n");
- }
-
- @Test
- public void alignLeft() {
- assertRendering("Abc|Def\n:---|---\n1|2", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void alignRight() {
- assertRendering("Abc|Def\n---:|---\n1|2", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void alignCenter() {
- assertRendering("Abc|Def\n:---:|---\n1|2", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void alignCenterSecond() {
- assertRendering("Abc|Def\n---|:---:\n1|2", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void alignLeftWithSpaces() {
- assertRendering("Abc|Def\n :--- |---\n1|2", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void alignmentMarkerMustBeNextToDashes() {
- assertRendering("Abc|Def\n: ---|---", "Abc|Def\n: ---|---");
- assertRendering("Abc|Def\n--- :|---", "Abc|Def\n--- :|---");
- assertRendering("Abc|Def\n---|: ---", "Abc|Def\n---|: ---");
- assertRendering("Abc|Def\n---|--- :", "Abc|Def\n---|--- :");
- }
-
- @Test
- public void bodyCanNotHaveMoreColumnsThanHead() {
- assertRendering("Abc|Def\n---|---\n1|2|3", "Abc: Def\n1: 2\n");
- }
-
- @Test
- public void bodyWithFewerColumnsThanHeadResultsInEmptyCells() {
- assertRendering("Abc|Def|Ghi\n---|---|---\n1|2", "Abc: Def: Ghi\n1: 2: \n");
- }
-
- @Test
- public void insideBlockQuote() {
- assertRendering("> Abc|Def\n> ---|---\n> 1|2", "«\nAbc: Def\n1: 2\n»");
- }
-
- @Test
- public void tableEndWithoutEmptyLine() {
- assertRendering("Abc|Def\n---|---\n1|2\ntable, you are over", "Abc: Def\n1: 2\n\ntable, you are over");
- }
-
- @Override
- protected String render(String source) {
- return RENDERER.render(PARSER.parse(source));
- }
-}
diff --git a/commonmark-integration-test/src/test/java/org/commonmark/integration/SpecIntegrationTest.java b/commonmark-integration-test/src/test/java/org/commonmark/integration/SpecIntegrationTest.java
index c3dd08d02..af4edf23d 100644
--- a/commonmark-integration-test/src/test/java/org/commonmark/integration/SpecIntegrationTest.java
+++ b/commonmark-integration-test/src/test/java/org/commonmark/integration/SpecIntegrationTest.java
@@ -4,7 +4,7 @@
import org.commonmark.ext.autolink.AutolinkExtension;
import org.commonmark.ext.ins.InsExtension;
import org.commonmark.ext.gfm.strikethrough.StrikethroughExtension;
-import org.commonmark.ext.gfm.tables.HtmlTablesExtension;
+import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.ext.front.matter.YamlFrontMatterExtension;
import org.commonmark.renderer.html.HtmlRenderer;
import org.commonmark.parser.Parser;
@@ -23,7 +23,7 @@ public class SpecIntegrationTest extends SpecTestCase {
AutolinkExtension.create(),
InsExtension.create(),
StrikethroughExtension.create(),
- HtmlTablesExtension.create(),
+ TablesExtension.create(),
YamlFrontMatterExtension.create());
private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS).build();
// The spec says URL-escaping is optional, but the examples assume that it's enabled.
diff --git a/commonmark-test-util/src/main/java/org/commonmark/test/RenderingTestCase.java b/commonmark-test-util/src/main/java/org/commonmark/test/RenderingTestCase.java
index b182cc735..1ee19dbb2 100644
--- a/commonmark-test-util/src/main/java/org/commonmark/test/RenderingTestCase.java
+++ b/commonmark-test-util/src/main/java/org/commonmark/test/RenderingTestCase.java
@@ -6,12 +6,12 @@ public abstract class RenderingTestCase {
protected abstract String render(String source);
- protected void assertRendering(String source, String expectedResult) {
- String renderedContent = render(source);
+ protected void assertRendering(String source, String expectedHtml) {
+ String html = render(source);
// include source for better assertion errors
- String expected = showTabs(expectedResult + "\n\n" + source);
- String actual = showTabs(renderedContent + "\n\n" + source);
+ String expected = showTabs(expectedHtml + "\n\n" + source);
+ String actual = showTabs(html + "\n\n" + source);
assertEquals(expected, actual);
}
From b4c2f51306d9f82b861c3d5028b2f3ae007e856b Mon Sep 17 00:00:00 2001
From: Antek Jaworski
Date: Sat, 23 Dec 2017 08:23:05 +0100
Subject: [PATCH 008/551] Issue 80: TextContent extension for GFM tables,
processed review comment
---
.../ext/gfm/tables/text/internal/TextTableNodeRenderer.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java b/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java
index d5fc92f49..abc307068 100644
--- a/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java
+++ b/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java
@@ -40,8 +40,6 @@ public Set> getNodeTypes() {
@Override
public void render(Node node) {
- // We don't render the table header (node instanceof TableHead) and its children for the text content.
-
if (node instanceof TableBlock) {
renderBlock((TableBlock) node);
} else if (node instanceof TableHead) {
From d997b21159e1f3e9f0ae24f876c68efb6a969fd6 Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Thu, 11 Jan 2018 16:56:02 +1100
Subject: [PATCH 009/551] Bump autolink to version with Automatic-Module-Name
---
commonmark-ext-autolink/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/commonmark-ext-autolink/pom.xml b/commonmark-ext-autolink/pom.xml
index f1ff149de..54a8ffc92 100644
--- a/commonmark-ext-autolink/pom.xml
+++ b/commonmark-ext-autolink/pom.xml
@@ -12,7 +12,7 @@
commonmark-java extension for turning plain URLs and email addresses into links
- 0.7.0
+ 0.8.0
From bf47c35dbad7a6113b10cd36bf8bc48d67bb5a39 Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Fri, 12 Jan 2018 14:16:56 +1100
Subject: [PATCH 010/551] Change Java 7 to "best effort" support
With the new parent poms, the build requires Java 8, so it fails
building on Java 7. So remove the openjdk7 build and change the Android
one to openjdk8.
---
.travis.yml | 4 +---
README.md | 11 +++++------
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 42dba458e..9476c64d9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,9 +4,7 @@ matrix:
include:
- jdk: oraclejdk8
env: TEST=java
- - jdk: openjdk7
- env: TEST=java
- - jdk: openjdk7
+ - jdk: openjdk8
env: TEST=android
dist: precise
android:
diff --git a/README.md b/README.md
index aac78a543..5836c5e91 100644
--- a/README.md
+++ b/README.md
@@ -17,16 +17,15 @@ Provides classes for parsing input to an abstract syntax tree of nodes
started out as a port of [commonmark.js], but has since evolved into a
full library with a nice API and the following features:
-* Small (minimal dependencies)
+* Small (core has no dependencies, extensions in separate artifacts)
* Fast (10-20 times faster than pegdown, see benchmarks in repo)
* Flexible (manipulate the AST after parsing, customize HTML rendering)
* Extensible (tables, strikethrough, autolinking and more, see below)
-Requirements:
-
-* Java 7 or above
-* Works on Android, minimum API level 15 (see [commonmark-android-test](commonmark-android-test) directory)
-* The core has no dependencies; for extensions, see below
+The library is supported on Java 8 or higher. It should work on Java 7
+and Android too, but that is on a "best effort" basis, please report
+problems. For Android the minimum API level is 15, see the
+[commonmark-android-test](commonmark-android-test) directory.
Coordinates for core library (see all on [Maven Central]):
From d7ba261223b31fa71c705acbbc2262a731137bcc Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Fri, 12 Jan 2018 14:28:31 +1100
Subject: [PATCH 011/551] Use oraclejdk8 for Android build
---
.travis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index 9476c64d9..023c2cd1c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,7 +4,7 @@ matrix:
include:
- jdk: oraclejdk8
env: TEST=java
- - jdk: openjdk8
+ - jdk: oraclejdk8
env: TEST=android
dist: precise
android:
From c637dd37c467b858b4d39bfa2079b7fae7d43502 Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Fri, 12 Jan 2018 14:40:12 +1100
Subject: [PATCH 012/551] CHANGELOG: Add note about Java 7 support
---
CHANGELOG.md | 2 ++
README.md | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 221b32ad4..390ef92ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,8 @@ with the exception that 0.x versions can break between minor versions.
- Add `Automatic-Module-Name` manifest entries so that library can be used
nicely in Java 9 modules. The module names correspond to the root
package name: `org.commonmark`, `org.commonmark.ext.autolink`, etc.
+- Java 7 is now only supported on a best-effort basis (but it has been
+ EOL for quite some time, so yeah)
## [0.10.0] - 2017-09-14
### Added
diff --git a/README.md b/README.md
index 5836c5e91..fd05a69d2 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ full library with a nice API and the following features:
* Extensible (tables, strikethrough, autolinking and more, see below)
The library is supported on Java 8 or higher. It should work on Java 7
-and Android too, but that is on a "best effort" basis, please report
+and Android too, but that is on a best-effort basis, please report
problems. For Android the minimum API level is 15, see the
[commonmark-android-test](commonmark-android-test) directory.
From 66e2d3f9d93bd4a4cdb924ea20275df053fa3344 Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Fri, 12 Jan 2018 15:04:56 +1100
Subject: [PATCH 013/551] Add links to CLA in README and add COC
---
CODE_OF_CONDUCT.md | 27 +++++++++++++++++++++++++++
README.md | 15 ++++++++++++++-
2 files changed, 41 insertions(+), 1 deletion(-)
create mode 100644 CODE_OF_CONDUCT.md
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..ce3a9d1d8
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,27 @@
+# Contributor Code of Conduct
+
+As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
+
+We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery
+* Personal attacks
+* Trolling or insulting/derogatory comments
+* Public or private harassment
+* Publishing other's private information, such as physical or electronic addresses, without explicit permission
+* Submitting contributions or comments that you know to violate the intellectual property or privacy rights of others
+* Other unethical or unprofessional conduct
+
+Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.
+
+This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a project maintainer. Complaints will result in a response and be reviewed and investigated in a way that is deemed necessary and appropriate to the circumstances. Maintainers are obligated to maintain confidentiality with regard to the reporter of an incident.
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.3.0, available at [http://contributor-covenant.org/version/1/3/0/][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/3/0/
diff --git a/README.md b/README.md
index fd05a69d2..b5f77b451 100644
--- a/README.md
+++ b/README.md
@@ -325,11 +325,24 @@ See the existing "help wanted" issues for things to start contributing.
For bigger changes, make sure you start a discussion first by creating
an issue and explaining the intended change.
+Atlassian requires contributors to sign a Contributor License Agreement,
+known as a CLA. This serves as a record stating that the contributor is
+entitled to contribute the code/documentation/translation to the project
+and is willing to have it used in distributions and derivative works
+(or is willing to transfer ownership).
+
+Prior to accepting your first contribution we ask that you please follow the
+appropriate link below to digitally sign the CLA. The Corporate CLA is for those
+who are contributing as a member of an organization and the individual CLA is
+for those contributing as an individual.
+
+* [CLA for corporate contributors](https://na2.docusign.net/Member/PowerFormSigning.aspx?PowerFormId=e1c17c66-ca4d-4aab-a953-2c231af4a20b)
+* [CLA for individuals](https://na2.docusign.net/Member/PowerFormSigning.aspx?PowerFormId=3f94fbdc-2fbe-46ac-b14c-5d152700ae5d)
License
-------
-Copyright (c) 2015-2017 Atlassian and others.
+Copyright (c) 2015-2018 Atlassian and others.
BSD (2-clause) licensed, see LICENSE.txt file.
From 2e37b5f9a8ed8a23a6687fd47bcee455c148524c Mon Sep 17 00:00:00 2001
From: Antek Jaworski
Date: Sun, 14 Jan 2018 09:15:20 +0100
Subject: [PATCH 014/551] Issue 80: TextContent extension for GFM tables,
processed review comments
---
README.md | 6 --
commonmark-ext-gfm-tables-text/pom.xml | 31 ------
.../gfm/tables/text/TextTablesExtension.java | 43 ---------
.../src/main/javadoc/overview.html | 6 --
.../ext/gfm/tables/TablesExtension.java | 21 +++-
.../internal/TableHtmlNodeRenderer.java | 96 +++++++++++++++++++
.../tables/internal/TableNodeRenderer.java | 96 +++----------------
.../TableTextContentNodeRenderer.java | 49 ++--------
.../commonmark/ext/gfm/tables/TablesTest.java | 20 ++--
.../ext/gfm/tables/TablesTextContentTest.java | 6 +-
.../commonmark/test/RenderingTestCase.java | 8 +-
pom.xml | 6 --
12 files changed, 155 insertions(+), 233 deletions(-)
delete mode 100644 commonmark-ext-gfm-tables-text/pom.xml
delete mode 100644 commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/TextTablesExtension.java
delete mode 100644 commonmark-ext-gfm-tables-text/src/main/javadoc/overview.html
create mode 100644 commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableHtmlNodeRenderer.java
rename commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java => commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableTextContentNodeRenderer.java (54%)
rename commonmark-ext-gfm-tables-text/src/test/java/org/commonmark/ext/gfm/tables/text/TextTablesTest.java => commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTextContentTest.java (96%)
diff --git a/README.md b/README.md
index 03cffb68e..aac78a543 100644
--- a/README.md
+++ b/README.md
@@ -267,12 +267,6 @@ Enables tables using pipes as in [GitHub Flavored Markdown][gfm-tables].
Use class `TablesExtension` in artifact `commonmark-ext-gfm-tables`.
-### Tables as text
-
-Enables text rendering tables using pipes as in [GitHub Flavored Markdown][gfm-tables].
-
-Use class `TextTablesExtension` in artifact `commonmark-ext-gfm-tables-text`.
-
### Heading anchor
Enables adding auto generated "id" attributes to heading tags. The "id"
diff --git a/commonmark-ext-gfm-tables-text/pom.xml b/commonmark-ext-gfm-tables-text/pom.xml
deleted file mode 100644
index 23b2bb557..000000000
--- a/commonmark-ext-gfm-tables-text/pom.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
- 4.0.0
-
- com.atlassian.commonmark
- commonmark-parent
- 0.10.1-SNAPSHOT
-
-
- commonmark-ext-gfm-tables-text
- commonmark-java extension for GFM tables as text
- commonmark-java extension to render GFM tables as text using "|" pipes (GitHub Flavored Markdown)
-
-
-
- com.atlassian.commonmark
- commonmark
-
-
- com.atlassian.commonmark
- commonmark-ext-gfm-tables
-
-
-
- com.atlassian.commonmark
- commonmark-test-util
- test
-
-
-
-
diff --git a/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/TextTablesExtension.java b/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/TextTablesExtension.java
deleted file mode 100644
index 59b8adb1f..000000000
--- a/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/TextTablesExtension.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.commonmark.ext.gfm.tables.text;
-
-import org.commonmark.Extension;
-import org.commonmark.ext.gfm.tables.internal.TableBlockParser;
-import org.commonmark.ext.gfm.tables.text.internal.TextTableNodeRenderer;
-import org.commonmark.parser.Parser;
-import org.commonmark.renderer.NodeRenderer;
-import org.commonmark.renderer.text.TextContentNodeRendererContext;
-import org.commonmark.renderer.text.TextContentNodeRendererFactory;
-import org.commonmark.renderer.text.TextContentRenderer;
-
-/**
- * Extension for GFM tables using "|" pipes (GitHub Flavored Markdown).
- *
- * Create it with {@link #create()} and then configure it on the builders
- * ({@link org.commonmark.parser.Parser.Builder#extensions(Iterable)},
- * {@link TextContentRenderer.Builder#extensions(Iterable)}).
- *
- */
-public class TextTablesExtension implements Parser.ParserExtension, TextContentRenderer.TextContentRendererExtension {
-
- private TextTablesExtension() {
- }
-
- public static Extension create() {
- return new TextTablesExtension();
- }
-
- @Override
- public void extend(Parser.Builder parserBuilder) {
- parserBuilder.customBlockParserFactory(new TableBlockParser.Factory());
- }
-
- @Override
- public void extend(TextContentRenderer.Builder rendererBuilder) {
- rendererBuilder.nodeRendererFactory(new TextContentNodeRendererFactory() {
- @Override
- public NodeRenderer create(TextContentNodeRendererContext context) {
- return new TextTableNodeRenderer(context);
- }
- });
- }
-}
diff --git a/commonmark-ext-gfm-tables-text/src/main/javadoc/overview.html b/commonmark-ext-gfm-tables-text/src/main/javadoc/overview.html
deleted file mode 100644
index ce9020657..000000000
--- a/commonmark-ext-gfm-tables-text/src/main/javadoc/overview.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-Extension for rendering GFM tables as text using "|" pipes (GitHub Flavored Markdown)
-
See {@link org.commonmark.ext.gfm.tables.text.TextTablesExtension}
-
-
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java
index 5f562fc63..6ce6614e9 100644
--- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java
@@ -2,12 +2,16 @@
import org.commonmark.Extension;
import org.commonmark.ext.gfm.tables.internal.TableBlockParser;
-import org.commonmark.ext.gfm.tables.internal.TableNodeRenderer;
+import org.commonmark.ext.gfm.tables.internal.TableHtmlNodeRenderer;
+import org.commonmark.ext.gfm.tables.internal.TableTextContentNodeRenderer;
import org.commonmark.renderer.html.HtmlRenderer;
import org.commonmark.renderer.html.HtmlNodeRendererContext;
import org.commonmark.renderer.html.HtmlNodeRendererFactory;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.NodeRenderer;
+import org.commonmark.renderer.text.TextContentNodeRendererContext;
+import org.commonmark.renderer.text.TextContentNodeRendererFactory;
+import org.commonmark.renderer.text.TextContentRenderer;
/**
* Extension for GFM tables using "|" pipes (GitHub Flavored Markdown).
@@ -20,7 +24,8 @@
* The parsed tables are turned into {@link TableBlock} blocks.
*
*/
-public class TablesExtension implements Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension {
+public class TablesExtension implements Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension,
+ TextContentRenderer.TextContentRendererExtension {
private TablesExtension() {
}
@@ -39,7 +44,17 @@ public void extend(HtmlRenderer.Builder rendererBuilder) {
rendererBuilder.nodeRendererFactory(new HtmlNodeRendererFactory() {
@Override
public NodeRenderer create(HtmlNodeRendererContext context) {
- return new TableNodeRenderer(context);
+ return new TableHtmlNodeRenderer(context);
+ }
+ });
+ }
+
+ @Override
+ public void extend(TextContentRenderer.Builder rendererBuilder) {
+ rendererBuilder.nodeRendererFactory(new TextContentNodeRendererFactory() {
+ @Override
+ public NodeRenderer create(TextContentNodeRendererContext context) {
+ return new TableTextContentNodeRenderer(context);
}
});
}
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableHtmlNodeRenderer.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableHtmlNodeRenderer.java
new file mode 100644
index 000000000..aa393ac15
--- /dev/null
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableHtmlNodeRenderer.java
@@ -0,0 +1,96 @@
+package org.commonmark.ext.gfm.tables.internal;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.commonmark.ext.gfm.tables.TableBlock;
+import org.commonmark.ext.gfm.tables.TableBody;
+import org.commonmark.ext.gfm.tables.TableCell;
+import org.commonmark.ext.gfm.tables.TableHead;
+import org.commonmark.ext.gfm.tables.TableRow;
+import org.commonmark.node.Node;
+import org.commonmark.renderer.html.HtmlNodeRendererContext;
+import org.commonmark.renderer.html.HtmlWriter;
+
+public class TableHtmlNodeRenderer extends TableNodeRenderer {
+
+ private final HtmlWriter htmlWriter;
+ private final HtmlNodeRendererContext context;
+
+ public TableHtmlNodeRenderer(HtmlNodeRendererContext context) {
+ this.htmlWriter = context.getWriter();
+ this.context = context;
+ }
+
+ protected void renderBlock(TableBlock tableBlock) {
+ htmlWriter.line();
+ htmlWriter.tag("table", getAttributes(tableBlock, "table"));
+ renderChildren(tableBlock);
+ htmlWriter.tag("/table");
+ htmlWriter.line();
+ }
+
+ protected void renderHead(TableHead tableHead) {
+ htmlWriter.line();
+ htmlWriter.tag("thead", getAttributes(tableHead, "thead"));
+ renderChildren(tableHead);
+ htmlWriter.tag("/thead");
+ htmlWriter.line();
+ }
+
+ protected void renderBody(TableBody tableBody) {
+ htmlWriter.line();
+ htmlWriter.tag("tbody", getAttributes(tableBody, "tbody"));
+ renderChildren(tableBody);
+ htmlWriter.tag("/tbody");
+ htmlWriter.line();
+ }
+
+ protected void renderRow(TableRow tableRow) {
+ htmlWriter.line();
+ htmlWriter.tag("tr", getAttributes(tableRow, "tr"));
+ renderChildren(tableRow);
+ htmlWriter.tag("/tr");
+ htmlWriter.line();
+ }
+
+ protected void renderCell(TableCell tableCell) {
+ String tagName = tableCell.isHeader() ? "th" : "td";
+ htmlWriter.tag(tagName, getCellAttributes(tableCell, tagName));
+ renderChildren(tableCell);
+ htmlWriter.tag("/" + tagName);
+ }
+
+ private Map getAttributes(Node node, String tagName) {
+ return context.extendAttributes(node, tagName, Collections.emptyMap());
+ }
+
+ private Map getCellAttributes(TableCell tableCell, String tagName) {
+ if (tableCell.getAlignment() != null) {
+ return context.extendAttributes(tableCell, tagName, Collections.singletonMap("align", getAlignValue(tableCell.getAlignment())));
+ } else {
+ return context.extendAttributes(tableCell, tagName, Collections.emptyMap());
+ }
+ }
+
+ private static String getAlignValue(TableCell.Alignment alignment) {
+ switch (alignment) {
+ case LEFT:
+ return "left";
+ case CENTER:
+ return "center";
+ case RIGHT:
+ return "right";
+ }
+ throw new IllegalStateException("Unknown alignment: " + alignment);
+ }
+
+ private void renderChildren(Node parent) {
+ Node node = parent.getFirstChild();
+ while (node != null) {
+ Node next = node.getNext();
+ context.render(node);
+ node = next;
+ }
+ }
+}
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java
index 1bff26e19..93478a30b 100644
--- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java
@@ -1,22 +1,18 @@
package org.commonmark.ext.gfm.tables.internal;
-import org.commonmark.ext.gfm.tables.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.commonmark.ext.gfm.tables.TableBlock;
+import org.commonmark.ext.gfm.tables.TableBody;
+import org.commonmark.ext.gfm.tables.TableCell;
+import org.commonmark.ext.gfm.tables.TableHead;
+import org.commonmark.ext.gfm.tables.TableRow;
import org.commonmark.node.Node;
import org.commonmark.renderer.NodeRenderer;
-import org.commonmark.renderer.html.HtmlNodeRendererContext;
-import org.commonmark.renderer.html.HtmlWriter;
-import java.util.*;
-
-public class TableNodeRenderer implements NodeRenderer {
-
- private final HtmlWriter htmlWriter;
- private final HtmlNodeRendererContext context;
-
- public TableNodeRenderer(HtmlNodeRendererContext context) {
- this.htmlWriter = context.getWriter();
- this.context = context;
- }
+abstract class TableNodeRenderer implements NodeRenderer {
@Override
public Set> getNodeTypes() {
@@ -44,75 +40,13 @@ public void render(Node node) {
}
}
- private void renderBlock(TableBlock tableBlock) {
- htmlWriter.line();
- htmlWriter.tag("table", getAttributes(tableBlock, "table"));
- renderChildren(tableBlock);
- htmlWriter.tag("/table");
- htmlWriter.line();
- }
-
- private void renderHead(TableHead tableHead) {
- htmlWriter.line();
- htmlWriter.tag("thead", getAttributes(tableHead, "thead"));
- renderChildren(tableHead);
- htmlWriter.tag("/thead");
- htmlWriter.line();
- }
-
- private void renderBody(TableBody tableBody) {
- htmlWriter.line();
- htmlWriter.tag("tbody", getAttributes(tableBody, "tbody"));
- renderChildren(tableBody);
- htmlWriter.tag("/tbody");
- htmlWriter.line();
- }
-
- private void renderRow(TableRow tableRow) {
- htmlWriter.line();
- htmlWriter.tag("tr", getAttributes(tableRow, "tr"));
- renderChildren(tableRow);
- htmlWriter.tag("/tr");
- htmlWriter.line();
- }
+ protected abstract void renderBlock(TableBlock node);
- private void renderCell(TableCell tableCell) {
- String tagName = tableCell.isHeader() ? "th" : "td";
- htmlWriter.tag(tagName, getCellAttributes(tableCell, tagName));
- renderChildren(tableCell);
- htmlWriter.tag("/" + tagName);
- }
+ protected abstract void renderHead(TableHead node);
- private Map getAttributes(Node node, String tagName) {
- return context.extendAttributes(node, tagName, Collections.emptyMap());
- }
-
- private Map getCellAttributes(TableCell tableCell, String tagName) {
- if (tableCell.getAlignment() != null) {
- return context.extendAttributes(tableCell, tagName, Collections.singletonMap("align", getAlignValue(tableCell.getAlignment())));
- } else {
- return context.extendAttributes(tableCell, tagName, Collections.emptyMap());
- }
- }
+ protected abstract void renderBody(TableBody node);
- private static String getAlignValue(TableCell.Alignment alignment) {
- switch (alignment) {
- case LEFT:
- return "left";
- case CENTER:
- return "center";
- case RIGHT:
- return "right";
- }
- throw new IllegalStateException("Unknown alignment: " + alignment);
- }
+ protected abstract void renderRow(TableRow node);
- private void renderChildren(Node parent) {
- Node node = parent.getFirstChild();
- while (node != null) {
- Node next = node.getNext();
- context.render(node);
- node = next;
- }
- }
+ protected abstract void renderCell(TableCell node);
}
diff --git a/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableTextContentNodeRenderer.java
similarity index 54%
rename from commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java
rename to commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableTextContentNodeRenderer.java
index abc307068..b9073e53e 100644
--- a/commonmark-ext-gfm-tables-text/src/main/java/org/commonmark/ext/gfm/tables/text/internal/TextTableNodeRenderer.java
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableTextContentNodeRenderer.java
@@ -1,8 +1,4 @@
-package org.commonmark.ext.gfm.tables.text.internal;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
+package org.commonmark.ext.gfm.tables.internal;
import org.commonmark.ext.gfm.tables.TableBlock;
import org.commonmark.ext.gfm.tables.TableBody;
@@ -10,71 +6,44 @@
import org.commonmark.ext.gfm.tables.TableHead;
import org.commonmark.ext.gfm.tables.TableRow;
import org.commonmark.node.Node;
-import org.commonmark.renderer.NodeRenderer;
import org.commonmark.renderer.text.TextContentNodeRendererContext;
import org.commonmark.renderer.text.TextContentWriter;
/**
- * The Table node renderer that is needed for rendering GFM tables (GitHub Flavored Markdown) to text.
+ * The Table node renderer that is needed for rendering GFM tables (GitHub Flavored Markdown) to text content.
*/
-public class TextTableNodeRenderer implements NodeRenderer {
+public class TableTextContentNodeRenderer extends TableNodeRenderer {
private final TextContentWriter textContentWriter;
private final TextContentNodeRendererContext context;
- public TextTableNodeRenderer(TextContentNodeRendererContext context) {
+ public TableTextContentNodeRenderer(TextContentNodeRendererContext context) {
this.textContentWriter = context.getWriter();
this.context = context;
}
- @Override
- public Set> getNodeTypes() {
- return new HashSet<>(Arrays.asList(
- TableBlock.class,
- TableHead.class,
- TableBody.class,
- TableRow.class,
- TableCell.class
- ));
- }
-
- @Override
- public void render(Node node) {
- if (node instanceof TableBlock) {
- renderBlock((TableBlock) node);
- } else if (node instanceof TableHead) {
- renderHead((TableHead) node);
- } else if (node instanceof TableBody) {
- renderBody((TableBody) node);
- } else if (node instanceof TableRow) {
- renderRow((TableRow) node);
- } else if (node instanceof TableCell) {
- renderCell((TableCell) node);
- }
- }
-
- private void renderBlock(TableBlock tableBlock) {
+ protected void renderBlock(TableBlock tableBlock) {
renderChildren(tableBlock);
if (tableBlock.getNext() != null) {
textContentWriter.write("\n");
}
}
- private void renderHead(TableHead tableHead) {
+ protected void renderHead(TableHead tableHead) {
renderChildren(tableHead);
}
- private void renderBody(TableBody tableBody) {
+ protected void renderBody(TableBody tableBody) {
renderChildren(tableBody);
}
- private void renderRow(TableRow tableRow) {
+ protected void renderRow(TableRow tableRow) {
textContentWriter.line();
renderChildren(tableRow);
textContentWriter.line();
}
- private void renderCell(TableCell tableCell) {
+ protected void renderCell(TableCell tableCell) {
renderChildren(tableCell);
textContentWriter.pipe();
textContentWriter.whitespace();
diff --git a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
index 9925959f4..1e701eff7 100644
--- a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
+++ b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
@@ -1,22 +1,22 @@
package org.commonmark.ext.gfm.tables;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
import org.commonmark.Extension;
-import org.commonmark.renderer.html.HtmlRenderer;
+import org.commonmark.node.Node;
+import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.AttributeProvider;
import org.commonmark.renderer.html.AttributeProviderContext;
import org.commonmark.renderer.html.AttributeProviderFactory;
-import org.commonmark.node.Node;
-import org.commonmark.parser.Parser;
+import org.commonmark.renderer.html.HtmlRenderer;
import org.commonmark.test.RenderingTestCase;
import org.junit.Test;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
public class TablesTest extends RenderingTestCase {
private static final Set EXTENSIONS = Collections.singleton(TablesExtension.create());
diff --git a/commonmark-ext-gfm-tables-text/src/test/java/org/commonmark/ext/gfm/tables/text/TextTablesTest.java b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTextContentTest.java
similarity index 96%
rename from commonmark-ext-gfm-tables-text/src/test/java/org/commonmark/ext/gfm/tables/text/TextTablesTest.java
rename to commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTextContentTest.java
index 5a246ab42..a5344a5f9 100644
--- a/commonmark-ext-gfm-tables-text/src/test/java/org/commonmark/ext/gfm/tables/text/TextTablesTest.java
+++ b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTextContentTest.java
@@ -1,4 +1,4 @@
-package org.commonmark.ext.gfm.tables.text;
+package org.commonmark.ext.gfm.tables;
import java.util.Collections;
import java.util.Set;
@@ -9,9 +9,9 @@
import org.commonmark.test.RenderingTestCase;
import org.junit.Test;
-public class TextTablesTest extends RenderingTestCase {
+public class TablesTextContentTest extends RenderingTestCase {
- private static final Set EXTENSIONS = Collections.singleton(TextTablesExtension.create());
+ private static final Set EXTENSIONS = Collections.singleton(TablesExtension.create());
private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS).build();
private static final TextContentRenderer RENDERER = TextContentRenderer.builder().extensions(EXTENSIONS).build();
diff --git a/commonmark-test-util/src/main/java/org/commonmark/test/RenderingTestCase.java b/commonmark-test-util/src/main/java/org/commonmark/test/RenderingTestCase.java
index 1ee19dbb2..b182cc735 100644
--- a/commonmark-test-util/src/main/java/org/commonmark/test/RenderingTestCase.java
+++ b/commonmark-test-util/src/main/java/org/commonmark/test/RenderingTestCase.java
@@ -6,12 +6,12 @@ public abstract class RenderingTestCase {
protected abstract String render(String source);
- protected void assertRendering(String source, String expectedHtml) {
- String html = render(source);
+ protected void assertRendering(String source, String expectedResult) {
+ String renderedContent = render(source);
// include source for better assertion errors
- String expected = showTabs(expectedHtml + "\n\n" + source);
- String actual = showTabs(html + "\n\n" + source);
+ String expected = showTabs(expectedResult + "\n\n" + source);
+ String actual = showTabs(renderedContent + "\n\n" + source);
assertEquals(expected, actual);
}
diff --git a/pom.xml b/pom.xml
index 5e7a56ed4..c5d324779 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,6 @@
commonmark-ext-autolinkcommonmark-ext-gfm-strikethroughcommonmark-ext-gfm-tables
- commonmark-ext-gfm-tables-textcommonmark-ext-heading-anchorcommonmark-ext-inscommonmark-ext-yaml-front-matter
@@ -100,11 +99,6 @@
commonmark-ext-gfm-tables0.10.1-SNAPSHOT
-
- com.atlassian.commonmark
- commonmark-ext-gfm-tables-text
- 0.10.1-SNAPSHOT
- com.atlassian.commonmarkcommonmark-ext-heading-anchor
From 006d43ab2dea8602fb3df45e00e025a29f3c1cc2 Mon Sep 17 00:00:00 2001
From: Antek Jaworski
Date: Sun, 14 Jan 2018 09:36:21 +0100
Subject: [PATCH 015/551] Merge remote-tracking branch
'remotes/upstream/master' into issue-80-textcontent-extension-for-gfm-tables
# Conflicts:
# commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
---
.../org/commonmark/ext/gfm/tables/TablesTextContentTest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTextContentTest.java b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTextContentTest.java
index a5344a5f9..c52bb348b 100644
--- a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTextContentTest.java
+++ b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTextContentTest.java
@@ -6,7 +6,7 @@
import org.commonmark.Extension;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.text.TextContentRenderer;
-import org.commonmark.test.RenderingTestCase;
+import org.commonmark.testutil.RenderingTestCase;
import org.junit.Test;
public class TablesTextContentTest extends RenderingTestCase {
From effebfa91dfd27453ec30e07765b5c6e8686cc07 Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Tue, 16 Jan 2018 12:19:52 +1100
Subject: [PATCH 016/551] Don't add `pipe` method to `TextContentWriter`
I'm not sure how generally useful it would be.
---
.../gfm/tables/internal/TableTextContentNodeRenderer.java | 2 +-
.../org/commonmark/renderer/text/TextContentWriter.java | 6 ------
2 files changed, 1 insertion(+), 7 deletions(-)
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableTextContentNodeRenderer.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableTextContentNodeRenderer.java
index b9073e53e..94b0e8665 100644
--- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableTextContentNodeRenderer.java
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableTextContentNodeRenderer.java
@@ -45,7 +45,7 @@ protected void renderRow(TableRow tableRow) {
protected void renderCell(TableCell tableCell) {
renderChildren(tableCell);
- textContentWriter.pipe();
+ textContentWriter.write('|');
textContentWriter.whitespace();
}
diff --git a/commonmark/src/main/java/org/commonmark/renderer/text/TextContentWriter.java b/commonmark/src/main/java/org/commonmark/renderer/text/TextContentWriter.java
index a99f76ff8..0ea56e621 100644
--- a/commonmark/src/main/java/org/commonmark/renderer/text/TextContentWriter.java
+++ b/commonmark/src/main/java/org/commonmark/renderer/text/TextContentWriter.java
@@ -24,12 +24,6 @@ public void colon() {
}
}
- public void pipe() {
- if (lastChar != 0 && lastChar != '|') {
- append('|');
- }
- }
-
public void line() {
if (lastChar != 0 && lastChar != '\n') {
append('\n');
From 4167c0cb49d4bf4b63dd9fb271e5e260c2fd9de2 Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Tue, 16 Jan 2018 12:26:24 +1100
Subject: [PATCH 017/551] Prepare for 0.11.0
---
CHANGELOG.md | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 390ef92ef..4d1f0001f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
with the exception that 0.x versions can break between minor versions.
-## Unreleased
+## [0.11.0] - 2018-01-16
+### Added
+- The extension for tables now also renders to plain text
+ (when using a `TextContentRenderer`), thanks @ahjaworski
### Changed
- Add `Automatic-Module-Name` manifest entries so that library can be used
nicely in Java 9 modules. The module names correspond to the root
@@ -210,6 +213,7 @@ Initial release of commonmark-java, a port of commonmark.js with extensions
for autolinking URLs, GitHub flavored strikethrough and tables.
+[0.11.0]: https://github.com/atlassian/commonmark-java/compare/commonmark-parent-0.10.0...commonmark-parent-0.11.0
[0.10.0]: https://github.com/atlassian/commonmark-java/compare/commonmark-parent-0.9.0...commonmark-parent-0.10.0
[0.9.0]: https://github.com/atlassian/commonmark-java/compare/commonmark-parent-0.8.0...commonmark-parent-0.9.0
[0.8.0]: https://github.com/atlassian/commonmark-java/compare/commonmark-parent-0.7.1...commonmark-parent-0.8.0
From 11722cc2053b09161e41d748facf34e4d42b2d10 Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Wed, 17 Jan 2018 10:43:59 +1100
Subject: [PATCH 018/551] CHANGELOG: Change date
Maybe it would be a better idea to only do that after the release,
otherwise people might think it's already released, hmm.
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4d1f0001f..f3b70b9eb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
with the exception that 0.x versions can break between minor versions.
-## [0.11.0] - 2018-01-16
+## [0.11.0] - 2018-01-17
### Added
- The extension for tables now also renders to plain text
(when using a `TextContentRenderer`), thanks @ahjaworski
From c8ba11ae9c86e3caaf36121c544e1474c577b257 Mon Sep 17 00:00:00 2001
From: Bamboo Build User
Date: Wed, 17 Jan 2018 00:09:42 +0000
Subject: [PATCH 019/551] [maven-release-plugin] prepare release
commonmark-parent-0.11.0
---
commonmark-ext-autolink/pom.xml | 2 +-
commonmark-ext-gfm-strikethrough/pom.xml | 2 +-
commonmark-ext-gfm-tables/pom.xml | 2 +-
commonmark-ext-heading-anchor/pom.xml | 2 +-
commonmark-ext-ins/pom.xml | 2 +-
commonmark-ext-yaml-front-matter/pom.xml | 2 +-
commonmark-integration-test/pom.xml | 2 +-
commonmark-test-util/pom.xml | 2 +-
commonmark/pom.xml | 2 +-
pom.xml | 20 ++++++++++----------
10 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/commonmark-ext-autolink/pom.xml b/commonmark-ext-autolink/pom.xml
index 54a8ffc92..ef0367ac2 100644
--- a/commonmark-ext-autolink/pom.xml
+++ b/commonmark-ext-autolink/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-ext-autolink
diff --git a/commonmark-ext-gfm-strikethrough/pom.xml b/commonmark-ext-gfm-strikethrough/pom.xml
index 99a1b89c6..ba409335e 100644
--- a/commonmark-ext-gfm-strikethrough/pom.xml
+++ b/commonmark-ext-gfm-strikethrough/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-ext-gfm-strikethrough
diff --git a/commonmark-ext-gfm-tables/pom.xml b/commonmark-ext-gfm-tables/pom.xml
index f05ff6f92..419984900 100644
--- a/commonmark-ext-gfm-tables/pom.xml
+++ b/commonmark-ext-gfm-tables/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-ext-gfm-tables
diff --git a/commonmark-ext-heading-anchor/pom.xml b/commonmark-ext-heading-anchor/pom.xml
index b4f7abed5..12c837fef 100644
--- a/commonmark-ext-heading-anchor/pom.xml
+++ b/commonmark-ext-heading-anchor/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-ext-heading-anchor
diff --git a/commonmark-ext-ins/pom.xml b/commonmark-ext-ins/pom.xml
index e46ff3a3c..07d9b32b9 100644
--- a/commonmark-ext-ins/pom.xml
+++ b/commonmark-ext-ins/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-ext-ins
diff --git a/commonmark-ext-yaml-front-matter/pom.xml b/commonmark-ext-yaml-front-matter/pom.xml
index 875e81af1..963288ff3 100644
--- a/commonmark-ext-yaml-front-matter/pom.xml
+++ b/commonmark-ext-yaml-front-matter/pom.xml
@@ -4,7 +4,7 @@
commonmark-parentcom.atlassian.commonmark
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-ext-yaml-front-matter
diff --git a/commonmark-integration-test/pom.xml b/commonmark-integration-test/pom.xml
index ed1026538..920ea0f66 100644
--- a/commonmark-integration-test/pom.xml
+++ b/commonmark-integration-test/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-integration-test
diff --git a/commonmark-test-util/pom.xml b/commonmark-test-util/pom.xml
index 8162060df..dee9c988f 100644
--- a/commonmark-test-util/pom.xml
+++ b/commonmark-test-util/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-test-util
diff --git a/commonmark/pom.xml b/commonmark/pom.xml
index 5c2d75172..f1025e7e8 100644
--- a/commonmark/pom.xml
+++ b/commonmark/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark
diff --git a/pom.xml b/pom.xml
index cba60af09..655f87c49 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.10.1-SNAPSHOT
+ 0.11.0commonmark-java parent
Java implementation of CommonMark, a specification of the Markdown format for turning plain text into formatted
@@ -82,42 +82,42 @@
com.atlassian.commonmarkcommonmark
- 0.10.1-SNAPSHOT
+ 0.11.0com.atlassian.commonmarkcommonmark-ext-autolink
- 0.10.1-SNAPSHOT
+ 0.11.0com.atlassian.commonmarkcommonmark-ext-ins
- 0.10.1-SNAPSHOT
+ 0.11.0com.atlassian.commonmarkcommonmark-ext-gfm-strikethrough
- 0.10.1-SNAPSHOT
+ 0.11.0com.atlassian.commonmarkcommonmark-ext-gfm-tables
- 0.10.1-SNAPSHOT
+ 0.11.0com.atlassian.commonmarkcommonmark-ext-heading-anchor
- 0.10.1-SNAPSHOT
+ 0.11.0com.atlassian.commonmarkcommonmark-ext-yaml-front-matter
- 0.10.1-SNAPSHOT
+ 0.11.0com.atlassian.commonmarkcommonmark-test-util
- 0.10.1-SNAPSHOT
+ 0.11.0
@@ -190,7 +190,7 @@
scm:git:git@github.com:atlassian/commonmark-java.gitscm:git:git@github.com:atlassian/commonmark-java.githttps://github.com/atlassian/commonmark-java
- HEAD
+ commonmark-parent-0.11.0
From 43aa0e2903d085086c3f70481d12d6eb0e3debbc Mon Sep 17 00:00:00 2001
From: Bamboo Build User
Date: Wed, 17 Jan 2018 00:09:45 +0000
Subject: [PATCH 020/551] [maven-release-plugin] prepare for next development
iteration
---
commonmark-ext-autolink/pom.xml | 2 +-
commonmark-ext-gfm-strikethrough/pom.xml | 2 +-
commonmark-ext-gfm-tables/pom.xml | 2 +-
commonmark-ext-heading-anchor/pom.xml | 2 +-
commonmark-ext-ins/pom.xml | 2 +-
commonmark-ext-yaml-front-matter/pom.xml | 2 +-
commonmark-integration-test/pom.xml | 2 +-
commonmark-test-util/pom.xml | 2 +-
commonmark/pom.xml | 2 +-
pom.xml | 20 ++++++++++----------
10 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/commonmark-ext-autolink/pom.xml b/commonmark-ext-autolink/pom.xml
index ef0367ac2..c590ab7b7 100644
--- a/commonmark-ext-autolink/pom.xml
+++ b/commonmark-ext-autolink/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-ext-autolink
diff --git a/commonmark-ext-gfm-strikethrough/pom.xml b/commonmark-ext-gfm-strikethrough/pom.xml
index ba409335e..bde6bae15 100644
--- a/commonmark-ext-gfm-strikethrough/pom.xml
+++ b/commonmark-ext-gfm-strikethrough/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-ext-gfm-strikethrough
diff --git a/commonmark-ext-gfm-tables/pom.xml b/commonmark-ext-gfm-tables/pom.xml
index 419984900..2e8e687fe 100644
--- a/commonmark-ext-gfm-tables/pom.xml
+++ b/commonmark-ext-gfm-tables/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-ext-gfm-tables
diff --git a/commonmark-ext-heading-anchor/pom.xml b/commonmark-ext-heading-anchor/pom.xml
index 12c837fef..954256dfb 100644
--- a/commonmark-ext-heading-anchor/pom.xml
+++ b/commonmark-ext-heading-anchor/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-ext-heading-anchor
diff --git a/commonmark-ext-ins/pom.xml b/commonmark-ext-ins/pom.xml
index 07d9b32b9..b40673e38 100644
--- a/commonmark-ext-ins/pom.xml
+++ b/commonmark-ext-ins/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-ext-ins
diff --git a/commonmark-ext-yaml-front-matter/pom.xml b/commonmark-ext-yaml-front-matter/pom.xml
index 963288ff3..c5a82c5d5 100644
--- a/commonmark-ext-yaml-front-matter/pom.xml
+++ b/commonmark-ext-yaml-front-matter/pom.xml
@@ -4,7 +4,7 @@
commonmark-parentcom.atlassian.commonmark
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-ext-yaml-front-matter
diff --git a/commonmark-integration-test/pom.xml b/commonmark-integration-test/pom.xml
index 920ea0f66..57dfcb8c8 100644
--- a/commonmark-integration-test/pom.xml
+++ b/commonmark-integration-test/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-integration-test
diff --git a/commonmark-test-util/pom.xml b/commonmark-test-util/pom.xml
index dee9c988f..a3bc7cb2b 100644
--- a/commonmark-test-util/pom.xml
+++ b/commonmark-test-util/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-test-util
diff --git a/commonmark/pom.xml b/commonmark/pom.xml
index f1025e7e8..528bfc820 100644
--- a/commonmark/pom.xml
+++ b/commonmark/pom.xml
@@ -4,7 +4,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark
diff --git a/pom.xml b/pom.xml
index 655f87c49..4ade086aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
com.atlassian.commonmarkcommonmark-parent
- 0.11.0
+ 0.11.1-SNAPSHOTcommonmark-java parent
Java implementation of CommonMark, a specification of the Markdown format for turning plain text into formatted
@@ -82,42 +82,42 @@
com.atlassian.commonmarkcommonmark
- 0.11.0
+ 0.11.1-SNAPSHOTcom.atlassian.commonmarkcommonmark-ext-autolink
- 0.11.0
+ 0.11.1-SNAPSHOTcom.atlassian.commonmarkcommonmark-ext-ins
- 0.11.0
+ 0.11.1-SNAPSHOTcom.atlassian.commonmarkcommonmark-ext-gfm-strikethrough
- 0.11.0
+ 0.11.1-SNAPSHOTcom.atlassian.commonmarkcommonmark-ext-gfm-tables
- 0.11.0
+ 0.11.1-SNAPSHOTcom.atlassian.commonmarkcommonmark-ext-heading-anchor
- 0.11.0
+ 0.11.1-SNAPSHOTcom.atlassian.commonmarkcommonmark-ext-yaml-front-matter
- 0.11.0
+ 0.11.1-SNAPSHOTcom.atlassian.commonmarkcommonmark-test-util
- 0.11.0
+ 0.11.1-SNAPSHOT
@@ -190,7 +190,7 @@
scm:git:git@github.com:atlassian/commonmark-java.gitscm:git:git@github.com:atlassian/commonmark-java.githttps://github.com/atlassian/commonmark-java
- commonmark-parent-0.11.0
+ HEAD
From 0dd689f8378fd21d3e4b2fab5a311d24668776ee Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Thu, 18 Jan 2018 10:34:11 +1100
Subject: [PATCH 021/551] Bump version in README and explicitly mention Java 9
support
---
README.md | 4 ++--
commonmark-android-test/README.md | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index b5f77b451..0e7a83b75 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ full library with a nice API and the following features:
* Flexible (manipulate the AST after parsing, customize HTML rendering)
* Extensible (tables, strikethrough, autolinking and more, see below)
-The library is supported on Java 8 or higher. It should work on Java 7
+The library is supported on Java 8 and Java 9. It should work on Java 7
and Android too, but that is on a best-effort basis, please report
problems. For Android the minimum API level is 15, see the
[commonmark-android-test](commonmark-android-test) directory.
@@ -33,7 +33,7 @@ Coordinates for core library (see all on [Maven Central]):
com.atlassian.commonmarkcommonmark
- 0.10.0
+ 0.11.0
```
diff --git a/commonmark-android-test/README.md b/commonmark-android-test/README.md
index 6d498af5a..84dcffb92 100644
--- a/commonmark-android-test/README.md
+++ b/commonmark-android-test/README.md
@@ -28,14 +28,14 @@ sdk.dir=/path_to_android_sdk
path.report=../report
# Version number of commonmark and extensions in maven central.
-version.maven=0.10.0
+version.maven=0.11.0
# Version number of autolink in maven central (not bundled with extension jar).
-version.maven_autolink=0.7.0
+version.maven_autolink=0.8.0
# Version number of commonmark and extensions in project.
-version.snapshot=0.10.0-SNAPSHOT
+version.snapshot=0.11.1-SNAPSHOT
# Version number of autolink for snapshots (not bundled in extension jar).
-version.snapshot_autolink=0.7.0
+version.snapshot_autolink=0.8.0
```
If you're going to test on device with Android 15 then you can skip downloading emulator.
From 9e8d627719807ea6e32ce2609ddcdee0c9beca23 Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Thu, 18 Jan 2018 10:43:57 +1100
Subject: [PATCH 022/551] README: Add note about Java 9 module names
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index 0e7a83b75..5c079437e 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,9 @@ Coordinates for core library (see all on [Maven Central]):
```
+The module names to use in Java 9 are `org.commonmark`,
+`org.commonmark.ext.autolink`, etc, corresponding to package names.
+
Note that for 0.x releases of this library, the API is not considered stable
yet and may break between minor releases. After 1.0, [Semantic Versioning] will
be followed.
From 6c6228bd56d061a1312d9858b72b0ef12a9b7f4a Mon Sep 17 00:00:00 2001
From: Robin Stocker
Date: Thu, 8 Feb 2018 15:01:21 +1100
Subject: [PATCH 023/551] Add example for parseReader and mention BOM (#121)
---
.../java/org/commonmark/parser/Parser.java | 25 +++++++++++++------
.../org/commonmark/test/UsageExampleTest.java | 15 +++++++++++
2 files changed, 32 insertions(+), 8 deletions(-)
diff --git a/commonmark/src/main/java/org/commonmark/parser/Parser.java b/commonmark/src/main/java/org/commonmark/parser/Parser.java
index b51f10238..349bdbec0 100644
--- a/commonmark/src/main/java/org/commonmark/parser/Parser.java
+++ b/commonmark/src/main/java/org/commonmark/parser/Parser.java
@@ -1,11 +1,5 @@
package org.commonmark.parser;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
import org.commonmark.Extension;
import org.commonmark.internal.DocumentParser;
import org.commonmark.internal.InlineParserImpl;
@@ -13,6 +7,12 @@
import org.commonmark.parser.block.BlockParserFactory;
import org.commonmark.parser.delimiter.DelimiterProcessor;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
/**
* Parses input text to a tree of nodes.
@@ -52,7 +52,7 @@ public static Builder builder() {
/**
* Parse the specified input text into a tree of nodes.
*
- * Note that this method is thread-safe (a new parser state is used for each invocation).
+ * This method is thread-safe (a new parser state is used for each invocation).
*
* @param input the text to parse
* @return the root node
@@ -66,8 +66,17 @@ public Node parse(String input) {
/**
* Parse the specified reader into a tree of nodes. The caller is responsible for closing the reader.
+ *
+ * Note that if you have a file with a byte order mark (BOM), you need to skip it before handing the reader to this
+ * library. There's existing classes that do that, e.g. see {@code BOMInputStream} in Commons IO.
*
- * Note that this method is thread-safe (a new parser state is used for each invocation).
+ * This method is thread-safe (a new parser state is used for each invocation).
*
* @param input the reader to parse
* @return the root node
diff --git a/commonmark/src/test/java/org/commonmark/test/UsageExampleTest.java b/commonmark/src/test/java/org/commonmark/test/UsageExampleTest.java
index 6109c31cf..9ff646630 100644
--- a/commonmark/src/test/java/org/commonmark/test/UsageExampleTest.java
+++ b/commonmark/src/test/java/org/commonmark/test/UsageExampleTest.java
@@ -4,8 +4,13 @@
import org.commonmark.parser.Parser;
import org.commonmark.renderer.NodeRenderer;
import org.commonmark.renderer.html.*;
+import org.junit.Ignore;
import org.junit.Test;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
@@ -22,6 +27,16 @@ public void parseAndRender() {
assertEquals("
This is Sparta
\n", renderer.render(document));
}
+ @Test
+ @Ignore
+ public void parseReaderRender() throws IOException {
+ Parser parser = Parser.builder().build();
+ try (InputStreamReader reader = new InputStreamReader(new FileInputStream("file.md"), StandardCharsets.UTF_8)) {
+ Node document = parser.parseReader(reader);
+ // ...
+ }
+ }
+
@Test
public void visitor() {
Parser parser = Parser.builder().build();
From b577212c7ef8380193e2c4d772125e731ad99f72 Mon Sep 17 00:00:00 2001
From: Justin Leider
Date: Wed, 21 Feb 2018 17:37:38 -0500
Subject: [PATCH 024/551] Update delimiter row to GFM spec
The GFM spec states that any delimiter row is valid if it contains at
least one `-` and no other characters except for whitespace and `:`.
See: https://github.github.com/gfm/#tables-extension-
---
.../gfm/tables/internal/TableBlockParser.java | 2 +-
.../commonmark/ext/gfm/tables/TablesTest.java | 71 ++++++++++++++++++-
2 files changed, 69 insertions(+), 4 deletions(-)
diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableBlockParser.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableBlockParser.java
index a5df15456..70ed0fa7c 100644
--- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableBlockParser.java
+++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableBlockParser.java
@@ -12,7 +12,7 @@
public class TableBlockParser extends AbstractBlockParser {
- private static String COL = "\\s*:?-{3,}:?\\s*";
+ private static String COL = "\\s*:?-{1,}:?\\s*";
private static Pattern TABLE_HEADER_SEPARATOR = Pattern.compile(
// For single column, require at least one pipe, otherwise it's ambiguous with setext headers
"\\|" + COL + "\\|?\\s*" + "|" +
diff --git a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
index 3d6434fdd..1e47300cd 100644
--- a/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
+++ b/commonmark-ext-gfm-tables/src/test/java/org/commonmark/ext/gfm/tables/TablesTest.java
@@ -30,9 +30,26 @@ public void mustHaveHeaderAndSeparator() {
}
@Test
- public void separatorMustBeThreeOrMore() {
- assertRendering("Abc|Def\n-|-", "
Abc|Def\n-|-
\n");
- assertRendering("Abc|Def\n--|--", "
Abc|Def\n--|--
\n");
+ public void separatorMustBeOneOrMore() {
+ assertRendering("Abc|Def\n-|-", "