From c364b0e7c3731c6543649f0ff7c25900a046c5e8 Mon Sep 17 00:00:00 2001
From: Robin Stocker <rstocker@atlassian.com>
Date: Wed, 1 Mar 2023 11:12:39 +1100
Subject: [PATCH] Modular JAR: Add module-info module descriptor and require
 Java 9+

We've waited long enough for the ecosystem and tools such as Android to
catch up. Making it proper modular means people can run jlink on it.
Fixes #125.
---
 CHANGELOG.md                                   |  9 +++++++++
 README.md                                      |  5 +++--
 commonmark-ext-autolink/pom.xml                | 18 +-----------------
 .../src/main/java/module-info.java             |  4 ++++
 commonmark-ext-gfm-strikethrough/pom.xml       | 16 ----------------
 .../src/main/java/module-info.java             |  3 +++
 commonmark-ext-gfm-tables/pom.xml              | 16 ----------------
 .../src/main/java/module-info.java             |  3 +++
 .../gfm/tables/internal/TableBlockParser.java  |  2 +-
 commonmark-ext-heading-anchor/pom.xml          | 16 ----------------
 .../src/main/java/module-info.java             |  3 +++
 commonmark-ext-image-attributes/pom.xml        | 16 ----------------
 .../src/main/java/module-info.java             |  3 +++
 commonmark-ext-ins/pom.xml                     | 16 ----------------
 .../src/main/java/module-info.java             |  3 +++
 commonmark-ext-task-list-items/pom.xml         | 16 ----------------
 .../src/main/java/module-info.java             |  3 +++
 commonmark-ext-yaml-front-matter/pom.xml       | 16 ----------------
 .../src/main/java/module-info.java             |  3 +++
 .../internal/YamlFrontMatterBlockParser.java   |  4 ++--
 commonmark-test-util/pom.xml                   | 16 ----------------
 .../src/main/java/module-info.java             |  3 +++
 commonmark/pom.xml                             | 16 ----------------
 commonmark/src/main/java/module-info.java      | 11 +++++++++++
 .../commonmark/internal/BlockQuoteParser.java  |  2 +-
 .../java/org/commonmark/internal/Bracket.java  |  2 +-
 .../commonmark/internal/DocumentParser.java    |  2 +-
 .../internal/FencedCodeBlockParser.java        |  2 +-
 .../org/commonmark/internal/HeadingParser.java |  6 +++---
 .../commonmark/internal/HtmlBlockParser.java   |  2 +-
 .../internal/IndentedCodeBlockParser.java      |  2 +-
 .../commonmark/internal/InlineParserImpl.java  |  5 +++--
 .../LinkReferenceDefinitionParser.java         |  4 ++--
 .../commonmark/internal/ListBlockParser.java   |  2 +-
 .../internal/inline/AutolinkInlineParser.java  |  2 ++
 .../internal/inline/BackslashInlineParser.java |  2 +-
 .../internal/inline/BackticksInlineParser.java |  4 +++-
 .../internal/inline/EntityInlineParser.java    |  2 ++
 .../internal/inline/HtmlInlineParser.java      |  2 ++
 .../internal/inline/InlineParserState.java     |  3 +++
 .../internal/inline/ParsedInline.java          |  1 +
 .../internal/inline/ParsedInlineImpl.java      |  1 +
 .../commonmark/internal/util/LinkScanner.java  |  3 ++-
 .../util => parser/beta}/Parsing.java          |  2 +-
 .../inline => parser/beta}/Position.java       |  2 +-
 .../inline => parser/beta}/Scanner.java        |  2 +-
 .../util => parser/beta}/ParsingTest.java      |  2 +-
 .../inline => parser/beta}/ScannerTest.java    |  4 +++-
 pom.xml                                        |  2 ++
 49 files changed, 96 insertions(+), 188 deletions(-)
 create mode 100644 commonmark-ext-autolink/src/main/java/module-info.java
 create mode 100644 commonmark-ext-gfm-strikethrough/src/main/java/module-info.java
 create mode 100644 commonmark-ext-gfm-tables/src/main/java/module-info.java
 create mode 100644 commonmark-ext-heading-anchor/src/main/java/module-info.java
 create mode 100644 commonmark-ext-image-attributes/src/main/java/module-info.java
 create mode 100644 commonmark-ext-ins/src/main/java/module-info.java
 create mode 100644 commonmark-ext-task-list-items/src/main/java/module-info.java
 create mode 100644 commonmark-ext-yaml-front-matter/src/main/java/module-info.java
 create mode 100644 commonmark-test-util/src/main/java/module-info.java
 create mode 100644 commonmark/src/main/java/module-info.java
 rename commonmark/src/main/java/org/commonmark/{internal/util => parser/beta}/Parsing.java (99%)
 rename commonmark/src/main/java/org/commonmark/{internal/inline => parser/beta}/Position.java (89%)
 rename commonmark/src/main/java/org/commonmark/{internal/inline => parser/beta}/Scanner.java (99%)
 rename commonmark/src/test/java/org/commonmark/{internal/util => parser/beta}/ParsingTest.java (94%)
 rename commonmark/src/test/java/org/commonmark/{internal/inline => parser/beta}/ScannerTest.java (97%)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index f558a360..f3eec62d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,14 @@ 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
+### Changed
+- Modular JAR: Require at least Java 9 and add a module descriptor (module-info),
+  remove no longer necessary `Automatic-Module-Name` header
+- New package `org.commonmark.parser.beta` containing classes that are not part of
+  the stable API but are exported from the module (because they might be useful for
+  extension parsers).
+
 ## [0.21.0] - 2022-11-17
 ### Added
 - GitHub strikethrough: With the previous version we adjusted the
@@ -379,6 +387,7 @@ API breaking changes (caused by changes in spec):
 Initial release of commonmark-java, a port of commonmark.js with extensions
 for autolinking URLs, GitHub flavored strikethrough and tables.
 
+[0.22.0]: https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.21.0...commonmark-parent-0.22.0
 [0.21.0]: https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.20.0...commonmark-parent-0.21.0
 [0.20.0]: https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.19.0...commonmark-parent-0.20.0
 [0.19.0]: https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.18.2...commonmark-parent-0.19.0
diff --git a/README.md b/README.md
index da7a07dd..4182ee24 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,8 @@ The module names to use in Java 9 are `org.commonmark`,
 
 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.
+be followed. A package containing `beta` means it's not subject to stable API
+guarantees yet; but for normal usage it should not be necessary to use.
 
 See the [spec.txt](commonmark-test-util/src/main/resources/spec.txt)
 file if you're wondering which version of the spec is currently
@@ -399,7 +400,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) file.
 License
 -------
 
-Copyright (c) 2015-2019 Atlassian and others.
+Copyright (c) Atlassian and others.
 
 BSD (2-clause) licensed, see LICENSE.txt file.
 
diff --git a/commonmark-ext-autolink/pom.xml b/commonmark-ext-autolink/pom.xml
index c82ecdae..2f70f7a0 100644
--- a/commonmark-ext-autolink/pom.xml
+++ b/commonmark-ext-autolink/pom.xml
@@ -12,7 +12,7 @@
     <description>commonmark-java extension for turning plain URLs and email addresses into links</description>
 
     <properties>
-        <autolink.version>0.10.0</autolink.version>
+        <autolink.version>0.11.0</autolink.version>
     </properties>
 
     <dependencies>
@@ -33,20 +33,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.ext.autolink</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-ext-autolink/src/main/java/module-info.java b/commonmark-ext-autolink/src/main/java/module-info.java
new file mode 100644
index 00000000..264d02ae
--- /dev/null
+++ b/commonmark-ext-autolink/src/main/java/module-info.java
@@ -0,0 +1,4 @@
+module org.commonmark.ext.autolink {
+    requires org.commonmark;
+    requires org.nibor.autolink;
+}
diff --git a/commonmark-ext-gfm-strikethrough/pom.xml b/commonmark-ext-gfm-strikethrough/pom.xml
index 878a1e58..b452073a 100644
--- a/commonmark-ext-gfm-strikethrough/pom.xml
+++ b/commonmark-ext-gfm-strikethrough/pom.xml
@@ -24,20 +24,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.ext.gfm.strikethrough</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-ext-gfm-strikethrough/src/main/java/module-info.java b/commonmark-ext-gfm-strikethrough/src/main/java/module-info.java
new file mode 100644
index 00000000..cebaa098
--- /dev/null
+++ b/commonmark-ext-gfm-strikethrough/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module org.commonmark.ext.gfm.strikethrough {
+    requires org.commonmark;
+}
diff --git a/commonmark-ext-gfm-tables/pom.xml b/commonmark-ext-gfm-tables/pom.xml
index c6448889..01fe2b23 100644
--- a/commonmark-ext-gfm-tables/pom.xml
+++ b/commonmark-ext-gfm-tables/pom.xml
@@ -24,20 +24,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.ext.gfm.tables</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-ext-gfm-tables/src/main/java/module-info.java b/commonmark-ext-gfm-tables/src/main/java/module-info.java
new file mode 100644
index 00000000..da1dac5e
--- /dev/null
+++ b/commonmark-ext-gfm-tables/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module org.commonmark.ext.gfm.tables {
+    requires org.commonmark;
+}
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 b7cea14d..14e461db 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
@@ -1,13 +1,13 @@
 package org.commonmark.ext.gfm.tables.internal;
 
 import org.commonmark.ext.gfm.tables.*;
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.Block;
 import org.commonmark.node.Node;
 import org.commonmark.node.SourceSpan;
 import org.commonmark.parser.InlineParser;
 import org.commonmark.parser.SourceLine;
 import org.commonmark.parser.SourceLines;
+import org.commonmark.parser.beta.Parsing;
 import org.commonmark.parser.block.*;
 
 import java.util.ArrayList;
diff --git a/commonmark-ext-heading-anchor/pom.xml b/commonmark-ext-heading-anchor/pom.xml
index 49bc4a03..330490ea 100644
--- a/commonmark-ext-heading-anchor/pom.xml
+++ b/commonmark-ext-heading-anchor/pom.xml
@@ -24,20 +24,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.ext.heading.anchor</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-ext-heading-anchor/src/main/java/module-info.java b/commonmark-ext-heading-anchor/src/main/java/module-info.java
new file mode 100644
index 00000000..8b6c7b6b
--- /dev/null
+++ b/commonmark-ext-heading-anchor/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module org.commonmark.ext.heading.anchor {
+    requires org.commonmark;
+}
diff --git a/commonmark-ext-image-attributes/pom.xml b/commonmark-ext-image-attributes/pom.xml
index 959b1406..6fbec900 100644
--- a/commonmark-ext-image-attributes/pom.xml
+++ b/commonmark-ext-image-attributes/pom.xml
@@ -24,20 +24,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.ext.image.attributes</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-ext-image-attributes/src/main/java/module-info.java b/commonmark-ext-image-attributes/src/main/java/module-info.java
new file mode 100644
index 00000000..2af5cac9
--- /dev/null
+++ b/commonmark-ext-image-attributes/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module org.commonmark.ext.image.attributes {
+    requires org.commonmark;
+}
diff --git a/commonmark-ext-ins/pom.xml b/commonmark-ext-ins/pom.xml
index 70853247..68e5f627 100644
--- a/commonmark-ext-ins/pom.xml
+++ b/commonmark-ext-ins/pom.xml
@@ -24,20 +24,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.ext.ins</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-ext-ins/src/main/java/module-info.java b/commonmark-ext-ins/src/main/java/module-info.java
new file mode 100644
index 00000000..3527f12d
--- /dev/null
+++ b/commonmark-ext-ins/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module org.commonmark.ext.ins {
+    requires org.commonmark;
+}
diff --git a/commonmark-ext-task-list-items/pom.xml b/commonmark-ext-task-list-items/pom.xml
index ec3ac1a1..3e3bebf3 100644
--- a/commonmark-ext-task-list-items/pom.xml
+++ b/commonmark-ext-task-list-items/pom.xml
@@ -24,20 +24,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.ext.task.list.items</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-ext-task-list-items/src/main/java/module-info.java b/commonmark-ext-task-list-items/src/main/java/module-info.java
new file mode 100644
index 00000000..3acc7ba9
--- /dev/null
+++ b/commonmark-ext-task-list-items/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module org.commonmark.ext.task.list.items {
+    requires org.commonmark;
+}
diff --git a/commonmark-ext-yaml-front-matter/pom.xml b/commonmark-ext-yaml-front-matter/pom.xml
index e5e120ca..97bdc5c4 100644
--- a/commonmark-ext-yaml-front-matter/pom.xml
+++ b/commonmark-ext-yaml-front-matter/pom.xml
@@ -24,20 +24,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.ext.front.matter</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-ext-yaml-front-matter/src/main/java/module-info.java b/commonmark-ext-yaml-front-matter/src/main/java/module-info.java
new file mode 100644
index 00000000..159cae2a
--- /dev/null
+++ b/commonmark-ext-yaml-front-matter/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module org.commonmark.ext.front.matter {
+    requires org.commonmark;
+}
diff --git a/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/internal/YamlFrontMatterBlockParser.java b/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/internal/YamlFrontMatterBlockParser.java
index 2010b4f7..469cf4e2 100644
--- a/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/internal/YamlFrontMatterBlockParser.java
+++ b/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/internal/YamlFrontMatterBlockParser.java
@@ -2,8 +2,8 @@ package org.commonmark.ext.front.matter.internal;
 
 import org.commonmark.ext.front.matter.YamlFrontMatterBlock;
 import org.commonmark.ext.front.matter.YamlFrontMatterNode;
-import org.commonmark.internal.DocumentBlockParser;
 import org.commonmark.node.Block;
+import org.commonmark.node.Document;
 import org.commonmark.parser.InlineParser;
 import org.commonmark.parser.SourceLine;
 import org.commonmark.parser.block.*;
@@ -119,7 +119,7 @@ public class YamlFrontMatterBlockParser extends AbstractBlockParser {
             CharSequence line = state.getLine().getContent();
             BlockParser parentParser = matchedBlockParser.getMatchedBlockParser();
             // check whether this line is the first line of whole document or not
-            if (parentParser instanceof DocumentBlockParser && parentParser.getBlock().getFirstChild() == null &&
+            if (parentParser.getBlock() instanceof Document && parentParser.getBlock().getFirstChild() == null &&
                     REGEX_BEGIN.matcher(line).matches()) {
                 return BlockStart.of(new YamlFrontMatterBlockParser()).atIndex(state.getNextNonSpaceIndex());
             }
diff --git a/commonmark-test-util/pom.xml b/commonmark-test-util/pom.xml
index c6100041..ce332e6c 100644
--- a/commonmark-test-util/pom.xml
+++ b/commonmark-test-util/pom.xml
@@ -18,20 +18,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark.testutil</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/commonmark-test-util/src/main/java/module-info.java b/commonmark-test-util/src/main/java/module-info.java
new file mode 100644
index 00000000..dba6945c
--- /dev/null
+++ b/commonmark-test-util/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module org.commonmark.testutil {
+    requires junit;
+}
diff --git a/commonmark/pom.xml b/commonmark/pom.xml
index 9988370a..524ba9c4 100644
--- a/commonmark/pom.xml
+++ b/commonmark/pom.xml
@@ -29,22 +29,6 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <Automatic-Module-Name>org.commonmark</Automatic-Module-Name>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
     <profiles>
         <profile>
             <id>benchmark</id>
diff --git a/commonmark/src/main/java/module-info.java b/commonmark/src/main/java/module-info.java
new file mode 100644
index 00000000..4101708c
--- /dev/null
+++ b/commonmark/src/main/java/module-info.java
@@ -0,0 +1,11 @@
+module org.commonmark {
+    exports org.commonmark;
+    exports org.commonmark.node;
+    exports org.commonmark.parser;
+    exports org.commonmark.parser.beta;
+    exports org.commonmark.parser.block;
+    exports org.commonmark.parser.delimiter;
+    exports org.commonmark.renderer;
+    exports org.commonmark.renderer.html;
+    exports org.commonmark.renderer.text;
+}
diff --git a/commonmark/src/main/java/org/commonmark/internal/BlockQuoteParser.java b/commonmark/src/main/java/org/commonmark/internal/BlockQuoteParser.java
index 00cdbc11..8dd56a20 100644
--- a/commonmark/src/main/java/org/commonmark/internal/BlockQuoteParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/BlockQuoteParser.java
@@ -1,8 +1,8 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.Block;
 import org.commonmark.node.BlockQuote;
+import org.commonmark.parser.beta.Parsing;
 import org.commonmark.parser.block.*;
 
 public class BlockQuoteParser extends AbstractBlockParser {
diff --git a/commonmark/src/main/java/org/commonmark/internal/Bracket.java b/commonmark/src/main/java/org/commonmark/internal/Bracket.java
index 46296262..9c73a132 100644
--- a/commonmark/src/main/java/org/commonmark/internal/Bracket.java
+++ b/commonmark/src/main/java/org/commonmark/internal/Bracket.java
@@ -1,7 +1,7 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.inline.Position;
 import org.commonmark.node.Text;
+import org.commonmark.parser.beta.Position;
 
 /**
  * Opening bracket for links (<code>[</code>) or images (<code>![</code>).
diff --git a/commonmark/src/main/java/org/commonmark/internal/DocumentParser.java b/commonmark/src/main/java/org/commonmark/internal/DocumentParser.java
index 086c3dbc..cb5aa4b4 100644
--- a/commonmark/src/main/java/org/commonmark/internal/DocumentParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/DocumentParser.java
@@ -1,8 +1,8 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.*;
 import org.commonmark.parser.*;
+import org.commonmark.parser.beta.Parsing;
 import org.commonmark.parser.block.*;
 import org.commonmark.parser.delimiter.DelimiterProcessor;
 
diff --git a/commonmark/src/main/java/org/commonmark/internal/FencedCodeBlockParser.java b/commonmark/src/main/java/org/commonmark/internal/FencedCodeBlockParser.java
index 2d7d2c0c..8a56198f 100644
--- a/commonmark/src/main/java/org/commonmark/internal/FencedCodeBlockParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/FencedCodeBlockParser.java
@@ -1,9 +1,9 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.Block;
 import org.commonmark.node.FencedCodeBlock;
 import org.commonmark.parser.SourceLine;
+import org.commonmark.parser.beta.Parsing;
 import org.commonmark.parser.block.*;
 
 import static org.commonmark.internal.util.Escaping.unescapeString;
diff --git a/commonmark/src/main/java/org/commonmark/internal/HeadingParser.java b/commonmark/src/main/java/org/commonmark/internal/HeadingParser.java
index 81c60d0d..f6b93703 100644
--- a/commonmark/src/main/java/org/commonmark/internal/HeadingParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/HeadingParser.java
@@ -1,13 +1,13 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.inline.Position;
-import org.commonmark.internal.inline.Scanner;
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.Block;
 import org.commonmark.node.Heading;
 import org.commonmark.parser.InlineParser;
 import org.commonmark.parser.SourceLine;
 import org.commonmark.parser.SourceLines;
+import org.commonmark.parser.beta.Parsing;
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
 import org.commonmark.parser.block.*;
 
 public class HeadingParser extends AbstractBlockParser {
diff --git a/commonmark/src/main/java/org/commonmark/internal/HtmlBlockParser.java b/commonmark/src/main/java/org/commonmark/internal/HtmlBlockParser.java
index 0e205056..8ee233f7 100644
--- a/commonmark/src/main/java/org/commonmark/internal/HtmlBlockParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/HtmlBlockParser.java
@@ -1,10 +1,10 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.Block;
 import org.commonmark.node.HtmlBlock;
 import org.commonmark.node.Paragraph;
 import org.commonmark.parser.SourceLine;
+import org.commonmark.parser.beta.Parsing;
 import org.commonmark.parser.block.*;
 
 import java.util.regex.Pattern;
diff --git a/commonmark/src/main/java/org/commonmark/internal/IndentedCodeBlockParser.java b/commonmark/src/main/java/org/commonmark/internal/IndentedCodeBlockParser.java
index af74a587..521963f5 100644
--- a/commonmark/src/main/java/org/commonmark/internal/IndentedCodeBlockParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/IndentedCodeBlockParser.java
@@ -1,10 +1,10 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.Block;
 import org.commonmark.node.IndentedCodeBlock;
 import org.commonmark.node.Paragraph;
 import org.commonmark.parser.SourceLine;
+import org.commonmark.parser.beta.Parsing;
 import org.commonmark.parser.block.*;
 
 import java.util.ArrayList;
diff --git a/commonmark/src/main/java/org/commonmark/internal/InlineParserImpl.java b/commonmark/src/main/java/org/commonmark/internal/InlineParserImpl.java
index c14b9e88..84bf55ac 100644
--- a/commonmark/src/main/java/org/commonmark/internal/InlineParserImpl.java
+++ b/commonmark/src/main/java/org/commonmark/internal/InlineParserImpl.java
@@ -1,14 +1,15 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.inline.Scanner;
 import org.commonmark.internal.inline.*;
 import org.commonmark.internal.util.Escaping;
 import org.commonmark.internal.util.LinkScanner;
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.*;
 import org.commonmark.parser.InlineParser;
 import org.commonmark.parser.InlineParserContext;
 import org.commonmark.parser.SourceLines;
+import org.commonmark.parser.beta.Parsing;
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
 import org.commonmark.parser.delimiter.DelimiterProcessor;
 
 import java.util.*;
diff --git a/commonmark/src/main/java/org/commonmark/internal/LinkReferenceDefinitionParser.java b/commonmark/src/main/java/org/commonmark/internal/LinkReferenceDefinitionParser.java
index 2bceb754..d11a6f22 100644
--- a/commonmark/src/main/java/org/commonmark/internal/LinkReferenceDefinitionParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/LinkReferenceDefinitionParser.java
@@ -1,13 +1,13 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.inline.Position;
-import org.commonmark.internal.inline.Scanner;
 import org.commonmark.internal.util.Escaping;
 import org.commonmark.internal.util.LinkScanner;
 import org.commonmark.node.LinkReferenceDefinition;
 import org.commonmark.node.SourceSpan;
 import org.commonmark.parser.SourceLine;
 import org.commonmark.parser.SourceLines;
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/commonmark/src/main/java/org/commonmark/internal/ListBlockParser.java b/commonmark/src/main/java/org/commonmark/internal/ListBlockParser.java
index 0ff644a4..05608c35 100644
--- a/commonmark/src/main/java/org/commonmark/internal/ListBlockParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/ListBlockParser.java
@@ -1,7 +1,7 @@
 package org.commonmark.internal;
 
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.*;
+import org.commonmark.parser.beta.Parsing;
 import org.commonmark.parser.block.*;
 
 public class ListBlockParser extends AbstractBlockParser {
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/AutolinkInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/AutolinkInlineParser.java
index ecfd2d97..36c43e19 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/AutolinkInlineParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/inline/AutolinkInlineParser.java
@@ -3,6 +3,8 @@ package org.commonmark.internal.inline;
 import org.commonmark.node.Link;
 import org.commonmark.node.Text;
 import org.commonmark.parser.SourceLines;
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
 
 import java.util.regex.Pattern;
 
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/BackslashInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/BackslashInlineParser.java
index f57a67a7..02c13695 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/BackslashInlineParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/inline/BackslashInlineParser.java
@@ -2,8 +2,8 @@ package org.commonmark.internal.inline;
 
 import org.commonmark.internal.util.Escaping;
 import org.commonmark.node.HardLineBreak;
-import org.commonmark.node.Node;
 import org.commonmark.node.Text;
+import org.commonmark.parser.beta.Scanner;
 
 import java.util.regex.Pattern;
 
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java
index ad079444..d949fff5 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java
@@ -1,9 +1,11 @@
 package org.commonmark.internal.inline;
 
-import org.commonmark.internal.util.Parsing;
 import org.commonmark.node.Code;
 import org.commonmark.node.Text;
 import org.commonmark.parser.SourceLines;
+import org.commonmark.parser.beta.Parsing;
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
 
 /**
  * Attempt to parse backticks, returning either a backtick code span or a literal sequence of backticks.
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/EntityInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/EntityInlineParser.java
index c29b8694..90aff896 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/EntityInlineParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/inline/EntityInlineParser.java
@@ -3,6 +3,8 @@ package org.commonmark.internal.inline;
 import org.commonmark.internal.util.AsciiMatcher;
 import org.commonmark.internal.util.Html5Entities;
 import org.commonmark.node.Text;
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
 
 /**
  * Attempts to parse a HTML entity or numeric character reference.
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java
index 605901c2..f0e7f848 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java
+++ b/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java
@@ -2,6 +2,8 @@ package org.commonmark.internal.inline;
 
 import org.commonmark.internal.util.AsciiMatcher;
 import org.commonmark.node.HtmlInline;
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
 
 /**
  * Attempt to parse inline HTML.
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/InlineParserState.java b/commonmark/src/main/java/org/commonmark/internal/inline/InlineParserState.java
index f6cb6bf4..ea8689be 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/InlineParserState.java
+++ b/commonmark/src/main/java/org/commonmark/internal/inline/InlineParserState.java
@@ -1,5 +1,8 @@
 package org.commonmark.internal.inline;
 
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
+
 public interface InlineParserState {
 
     /**
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/ParsedInline.java b/commonmark/src/main/java/org/commonmark/internal/inline/ParsedInline.java
index 7e6ece88..7223c168 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/ParsedInline.java
+++ b/commonmark/src/main/java/org/commonmark/internal/inline/ParsedInline.java
@@ -1,6 +1,7 @@
 package org.commonmark.internal.inline;
 
 import org.commonmark.node.Node;
+import org.commonmark.parser.beta.Position;
 
 public abstract class ParsedInline {
 
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/ParsedInlineImpl.java b/commonmark/src/main/java/org/commonmark/internal/inline/ParsedInlineImpl.java
index aea325f2..55f9cc4d 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/ParsedInlineImpl.java
+++ b/commonmark/src/main/java/org/commonmark/internal/inline/ParsedInlineImpl.java
@@ -1,6 +1,7 @@
 package org.commonmark.internal.inline;
 
 import org.commonmark.node.Node;
+import org.commonmark.parser.beta.Position;
 
 public class ParsedInlineImpl extends ParsedInline {
     private final Node node;
diff --git a/commonmark/src/main/java/org/commonmark/internal/util/LinkScanner.java b/commonmark/src/main/java/org/commonmark/internal/util/LinkScanner.java
index 3ca34c5f..641572de 100644
--- a/commonmark/src/main/java/org/commonmark/internal/util/LinkScanner.java
+++ b/commonmark/src/main/java/org/commonmark/internal/util/LinkScanner.java
@@ -1,6 +1,7 @@
 package org.commonmark.internal.util;
 
-import org.commonmark.internal.inline.Scanner;
+import org.commonmark.parser.beta.Parsing;
+import org.commonmark.parser.beta.Scanner;
 
 public class LinkScanner {
 
diff --git a/commonmark/src/main/java/org/commonmark/internal/util/Parsing.java b/commonmark/src/main/java/org/commonmark/parser/beta/Parsing.java
similarity index 99%
rename from commonmark/src/main/java/org/commonmark/internal/util/Parsing.java
rename to commonmark/src/main/java/org/commonmark/parser/beta/Parsing.java
index 8b02e99b..68aa0c3c 100644
--- a/commonmark/src/main/java/org/commonmark/internal/util/Parsing.java
+++ b/commonmark/src/main/java/org/commonmark/parser/beta/Parsing.java
@@ -1,4 +1,4 @@
-package org.commonmark.internal.util;
+package org.commonmark.parser.beta;
 
 public class Parsing {
 
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/Position.java b/commonmark/src/main/java/org/commonmark/parser/beta/Position.java
similarity index 89%
rename from commonmark/src/main/java/org/commonmark/internal/inline/Position.java
rename to commonmark/src/main/java/org/commonmark/parser/beta/Position.java
index 5f06a063..3dbb4870 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/Position.java
+++ b/commonmark/src/main/java/org/commonmark/parser/beta/Position.java
@@ -1,4 +1,4 @@
-package org.commonmark.internal.inline;
+package org.commonmark.parser.beta;
 
 /**
  * Position within a {@link Scanner}. This is intentionally kept opaque so as not to expose the internal structure of
diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/Scanner.java b/commonmark/src/main/java/org/commonmark/parser/beta/Scanner.java
similarity index 99%
rename from commonmark/src/main/java/org/commonmark/internal/inline/Scanner.java
rename to commonmark/src/main/java/org/commonmark/parser/beta/Scanner.java
index 9de96a58..a941ef4e 100644
--- a/commonmark/src/main/java/org/commonmark/internal/inline/Scanner.java
+++ b/commonmark/src/main/java/org/commonmark/parser/beta/Scanner.java
@@ -1,4 +1,4 @@
-package org.commonmark.internal.inline;
+package org.commonmark.parser.beta;
 
 import org.commonmark.internal.util.CharMatcher;
 import org.commonmark.node.SourceSpan;
diff --git a/commonmark/src/test/java/org/commonmark/internal/util/ParsingTest.java b/commonmark/src/test/java/org/commonmark/parser/beta/ParsingTest.java
similarity index 94%
rename from commonmark/src/test/java/org/commonmark/internal/util/ParsingTest.java
rename to commonmark/src/test/java/org/commonmark/parser/beta/ParsingTest.java
index f51c8647..85eeb7f8 100644
--- a/commonmark/src/test/java/org/commonmark/internal/util/ParsingTest.java
+++ b/commonmark/src/test/java/org/commonmark/parser/beta/ParsingTest.java
@@ -1,4 +1,4 @@
-package org.commonmark.internal.util;
+package org.commonmark.parser.beta;
 
 import org.junit.Test;
 
diff --git a/commonmark/src/test/java/org/commonmark/internal/inline/ScannerTest.java b/commonmark/src/test/java/org/commonmark/parser/beta/ScannerTest.java
similarity index 97%
rename from commonmark/src/test/java/org/commonmark/internal/inline/ScannerTest.java
rename to commonmark/src/test/java/org/commonmark/parser/beta/ScannerTest.java
index 030a765a..668f852c 100644
--- a/commonmark/src/test/java/org/commonmark/internal/inline/ScannerTest.java
+++ b/commonmark/src/test/java/org/commonmark/parser/beta/ScannerTest.java
@@ -1,8 +1,10 @@
-package org.commonmark.internal.inline;
+package org.commonmark.parser.beta;
 
 import org.commonmark.node.SourceSpan;
 import org.commonmark.parser.SourceLine;
 import org.commonmark.parser.SourceLines;
+import org.commonmark.parser.beta.Position;
+import org.commonmark.parser.beta.Scanner;
 import org.junit.Test;
 
 import java.util.Arrays;
diff --git a/pom.xml b/pom.xml
index da06b2c2..85aec053 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,8 @@
                     <version>3.12.1</version>
                     <configuration>
                         <release>11</release>
+                        <source>9</source>
+                        <target>9</target>
                     </configuration>
                 </plugin>
                 <plugin>
-- 
GitLab