Update to commonmark 0.21.0 (was 0.10.0)

gitiles is still using commonmark 0.10.0 from 2017. The latest release
is 0.21.0 from Nov 2022.

Update to the latest version. From the changelog[1], this bring
important performance improvements (7% parsing, 105%[?!] rendering),
support to the latest CommonMark spec (0.30), and many bug fixes.

The code changes came from funronald@. I verified they compile and
pass the tests with the latest versions. Random browsing running gitiles
locally looks fine.

[1] https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md

Change-Id: Ifd31434cd0cfafd15581a29ae5b3f76ed2133648
diff --git a/WORKSPACE b/WORKSPACE
index d0e9e4e..11821e9 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -74,37 +74,37 @@
     sha1 = "f7be08ec23c21485b9b5a1cf1654c2ec8c58168d",
 )
 
-COMMONMARK_VERSION = "0.10.0"
+COMMONMARK_VERSION = "0.21.0"
 
 # When upgrading commonmark it should also be updated in plugins/gitiles
 maven_jar(
     name = "commonmark",
-    artifact = "com.atlassian.commonmark:commonmark:" + COMMONMARK_VERSION,
-    sha1 = "119cb7bedc3570d9ecb64ec69ab7686b5c20559b",
+    artifact = "org.commonmark:commonmark:" + COMMONMARK_VERSION,
+    sha1 = "c98f0473b17c87fe4fa2fc62a7c6523a2fe018f0",
 )
 
 maven_jar(
     name = "cm-autolink",
-    artifact = "com.atlassian.commonmark:commonmark-ext-autolink:" + COMMONMARK_VERSION,
-    sha1 = "a6056a5efbd68f57d420bc51bbc54b28a5d3c56b",
+    artifact = "org.commonmark:commonmark-ext-autolink:" + COMMONMARK_VERSION,
+    sha1 = "55c0312cf443fa3d5af0daeeeca00d6deee3cf90",
 )
 
 maven_jar(
     name = "autolink",
-    artifact = "org.nibor.autolink:autolink:0.7.0",
-    sha1 = "649f9f13422cf50c926febe6035662ae25dc89b2",
+    artifact = "org.nibor.autolink:autolink:0.10.0",
+    sha1 = "6579ea7079be461e5ffa99f33222a632711cc671",
 )
 
 maven_jar(
     name = "gfm-strikethrough",
-    artifact = "com.atlassian.commonmark:commonmark-ext-gfm-strikethrough:" + COMMONMARK_VERSION,
-    sha1 = "40837da951b421b545edddac57012e15fcc9e63c",
+    artifact = "org.commonmark:commonmark-ext-gfm-strikethrough:" + COMMONMARK_VERSION,
+    sha1 = "953f4b71e133a98fcca93f3c3f4e58b895b76d1f",
 )
 
 maven_jar(
     name = "gfm-tables",
-    artifact = "com.atlassian.commonmark:commonmark-ext-gfm-tables:" + COMMONMARK_VERSION,
-    sha1 = "c075db2a3301100cf70c7dced8ecf86b494458a2",
+    artifact = "org.commonmark:commonmark-ext-gfm-tables:" + COMMONMARK_VERSION,
+    sha1 = "fb7d65fa89a4cfcd2f51535d2549b570cf1dbd1a",
 )
 
 maven_jar(
diff --git a/java/com/google/gitiles/doc/BlockNoteExtension.java b/java/com/google/gitiles/doc/BlockNoteExtension.java
index deda75a..fa3cf5f 100644
--- a/java/com/google/gitiles/doc/BlockNoteExtension.java
+++ b/java/com/google/gitiles/doc/BlockNoteExtension.java
@@ -73,7 +73,7 @@
       }
       if (state.getIndent() <= indent) {
         int s = state.getNextNonSpaceIndex();
-        CharSequence line = state.getLine();
+        CharSequence line = state.getLine().getContent();
         if ("***".contentEquals(line.subSequence(s, line.length()))) {
           done = true;
           return BlockContinue.atIndex(line.length());
@@ -97,7 +97,7 @@
     @Override
     public BlockStart tryStart(ParserState state, MatchedBlockParser matched) {
       int s = state.getNextNonSpaceIndex();
-      CharSequence line = state.getLine();
+      CharSequence line = state.getLine().getContent();
       CharSequence text = line.subSequence(s, line.length());
       if (text.length() < 3 || !"***".contentEquals(text.subSequence(0, 3))) {
         return BlockStart.none();
diff --git a/java/com/google/gitiles/doc/GitHubThematicBreakExtension.java b/java/com/google/gitiles/doc/GitHubThematicBreakExtension.java
index 3e32990..a8b8c7b 100644
--- a/java/com/google/gitiles/doc/GitHubThematicBreakExtension.java
+++ b/java/com/google/gitiles/doc/GitHubThematicBreakExtension.java
@@ -55,7 +55,7 @@
     @Override
     public BlockStart tryStart(ParserState state, MatchedBlockParser matched) {
       if (state.getIndent() == 0) {
-        CharSequence line = state.getLine();
+        CharSequence line = state.getLine().getContent();
         int s = state.getNextNonSpaceIndex();
         if ("--".contentEquals(line.subSequence(s, line.length()))) {
           return BlockStart.of(new BreakParser()).atIndex(line.length());
diff --git a/java/com/google/gitiles/doc/MarkdownToHtml.java b/java/com/google/gitiles/doc/MarkdownToHtml.java
index ec9f058..a2d5752 100644
--- a/java/com/google/gitiles/doc/MarkdownToHtml.java
+++ b/java/com/google/gitiles/doc/MarkdownToHtml.java
@@ -49,6 +49,7 @@
 import org.commonmark.node.Image;
 import org.commonmark.node.IndentedCodeBlock;
 import org.commonmark.node.Link;
+import org.commonmark.node.LinkReferenceDefinition;
 import org.commonmark.node.ListBlock;
 import org.commonmark.node.ListItem;
 import org.commonmark.node.Node;
@@ -391,6 +392,11 @@
     html.close("a");
   }
 
+  @Override
+  public void visit(LinkReferenceDefinition node) {
+    // Ignored in rendered output
+  }
+
   @VisibleForTesting
   String href(String target) {
     if (target.startsWith("#")
diff --git a/java/com/google/gitiles/doc/MultiColumnExtension.java b/java/com/google/gitiles/doc/MultiColumnExtension.java
index 4f1ca53..125c9ce 100644
--- a/java/com/google/gitiles/doc/MultiColumnExtension.java
+++ b/java/com/google/gitiles/doc/MultiColumnExtension.java
@@ -86,7 +86,7 @@
       }
       if (state.getIndent() == 0) {
         int s = state.getNextNonSpaceIndex();
-        CharSequence line = state.getLine();
+        CharSequence line = state.getLine().getContent();
         if (MARKER.contentEquals(line.subSequence(s, line.length()))) {
           done = true;
           return BlockContinue.atIndex(line.length());
@@ -157,7 +157,7 @@
       }
 
       int s = state.getNextNonSpaceIndex();
-      CharSequence line = state.getLine();
+      CharSequence line = state.getLine().getContent();
       CharSequence text = line.subSequence(s, line.length());
       if (text.length() < MARKER.length()
           || !MARKER.contentEquals(text.subSequence(0, MARKER.length()))) {
diff --git a/java/com/google/gitiles/doc/NamedAnchorExtension.java b/java/com/google/gitiles/doc/NamedAnchorExtension.java
index e6a3071..cd02733 100644
--- a/java/com/google/gitiles/doc/NamedAnchorExtension.java
+++ b/java/com/google/gitiles/doc/NamedAnchorExtension.java
@@ -56,12 +56,9 @@
     }
 
     @Override
-    public int getDelimiterUse(DelimiterRun opener, DelimiterRun closer) {
-      return 1;
-    }
-
-    @Override
-    public void process(Text opener, Text closer, int delimiterUse) {
+    public int process(DelimiterRun openingRun, DelimiterRun closingRun) {
+      Text opener = openingRun.getOpener();
+      Text closer = closingRun.getCloser();
       Node content = opener.getNext();
       if (content instanceof Text && content.getNext() == closer) {
         Matcher m = ID.matcher(((Text) content).getLiteral());
@@ -72,13 +69,14 @@
           anchor.setName(m.group(1));
           opener.insertAfter(anchor);
           MarkdownUtil.trimPreviousWhitespace(opener);
-          return;
+          return 1;
         }
       }
 
       // If its not exactly one well formed Text node; restore the delimiter text.
       opener.insertAfter(new Text("{"));
       closer.insertBefore(new Text("}"));
+      return 1;
     }
   }
 }
diff --git a/java/com/google/gitiles/doc/SmartQuotedExtension.java b/java/com/google/gitiles/doc/SmartQuotedExtension.java
index 7df0c13..f1b8c02 100644
--- a/java/com/google/gitiles/doc/SmartQuotedExtension.java
+++ b/java/com/google/gitiles/doc/SmartQuotedExtension.java
@@ -77,13 +77,9 @@
     }
 
     @Override
-    public int getDelimiterUse(DelimiterRun opener, DelimiterRun closer) {
+    public int process(DelimiterRun openingRun, DelimiterRun closingRun) {
+      quote(type, openingRun.getOpener(), closingRun.getCloser());
       return 1;
     }
-
-    @Override
-    public void process(Text opener, Text closer, int delimiterUse) {
-      quote(type, opener, closer);
-    }
   }
 }
diff --git a/java/com/google/gitiles/doc/TocExtension.java b/java/com/google/gitiles/doc/TocExtension.java
index 34db0cf..24eabe0 100644
--- a/java/com/google/gitiles/doc/TocExtension.java
+++ b/java/com/google/gitiles/doc/TocExtension.java
@@ -56,7 +56,7 @@
     @Override
     public BlockStart tryStart(ParserState state, MatchedBlockParser matched) {
       if (state.getIndent() == 0) {
-        CharSequence line = state.getLine();
+        CharSequence line = state.getLine().getContent();
         int s = state.getNextNonSpaceIndex();
         if ("[TOC]".contentEquals(line.subSequence(s, line.length()))) {
           return BlockStart.of(new TocParser()).atIndex(line.length());