Fix newline handling in markdownCellFormat
Fixes https://github.com/bazelbuild/stardoc/issues/6
RELNOTES: None.
PiperOrigin-RevId: 270938140
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
index 67e6eca..decfb46 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
@@ -44,7 +44,9 @@
* <li>Transforms the string using {@link #htmlEscape}.
* <li>Transforms multline code (```) tags into preformatted code HTML tags.
* <li>Transforms single-tick code (`) tags into code HTML tags.
- * <li>Transforms newline characters into line break HTML tags.
+ * <li>Transforms 'new paraphgraph' patterns (two or more sequential newline characters) into
+ * line break HTML tags.
+ * <li>Turns lingering new line tags into spaces (as they generally indicate intended line wrap.
* </ul>
*/
public String markdownCellFormat(String docString) {
@@ -53,7 +55,7 @@
resultString = replaceWithTag(resultString, "```", "<pre><code>", "</code></pre>");
resultString = replaceWithTag(resultString, "`", "<code>", "</code>");
- return resultString.replace("\n", "<br>");
+ return resultString.replaceAll("\n(\\s*\n)+", "<br><br>").replace('\n', ' ');
}
private static String replaceWithTag(
diff --git a/src/test/java/com/google/devtools/build/skydoc/MarkdownRendererTest.java b/src/test/java/com/google/devtools/build/skydoc/MarkdownRendererTest.java
index 62c6997..8c02e99 100644
--- a/src/test/java/com/google/devtools/build/skydoc/MarkdownRendererTest.java
+++ b/src/test/java/com/google/devtools/build/skydoc/MarkdownRendererTest.java
@@ -99,11 +99,17 @@
ProviderFieldInfo.newBuilder()
.setName("one")
.setDocString(
- "This field <is totally> the `one`.\na **second** line.\n"
+ "This field <is totally> the `one`.\n"
+ + "\n"
+ + "a **second** line.\n"
+ + " \n"
+ + " \n"
+ "For example:\n"
+ + "\n"
+ "```thisfield > otherfield\n"
+ " otherotherfield < thisfield```\n"
- + "Usage: `thisfield.<some method>`")
+ + "\n"
+ + "Usage: `thisfield.<some method>`\n")
.build();
ProviderInfo providerInfo =
@@ -129,9 +135,9 @@
+ "| Name | Description |\n"
+ "| :-------------: | :-------------: |\n"
+ "| one | This field <is totally> the "
- + "<code>one</code>.<br>a **second** line.<br>For example:<br>"
- + "<pre><code>thisfield > otherfield<br> otherotherfield <"
- + " thisfield</code></pre><br>Usage: <code>thisfield.<some "
+ + "<code>one</code>.<br><br>a **second** line.<br><br>For example:<br><br>"
+ + "<pre><code>thisfield > otherfield otherotherfield <"
+ + " thisfield</code></pre><br><br>Usage: <code>thisfield.<some "
+ "method></code> |\n");
}