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());