From 0365f6248d6aaa7c765ac63273c282d16161a623 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 18 Oct 2013 17:46:22 -0400
Subject: [PATCH] Replaced MarkdownPapers with pegdown

---
 src/main/java/com/gitblit/wicket/pages/RepositoryPage.java |    2 
 NOTICE                                                     |   18 +++---
 src/main/java/com/gitblit/wicket/pages/MarkdownPage.java   |    4 
 src/site/design.mkd                                        |    2 
 src/main/java/com/gitblit/wicket/pages/SummaryPage.java    |    4 
 .classpath                                                 |    8 ++
 releases.moxie                                             |    1 
 src/test/java/com/gitblit/tests/MarkdownUtilsTest.java     |   14 ----
 src/main/java/com/gitblit/GitBlit.java                     |    3 
 src/main/java/com/gitblit/utils/MarkdownUtils.java         |   40 ++++---------
 build.moxie                                                |    2 
 gitblit.iml                                                |   72 +++++++++++++++++++++++-
 12 files changed, 108 insertions(+), 62 deletions(-)

diff --git a/.classpath b/.classpath
index ba81e42..08039d6 100644
--- a/.classpath
+++ b/.classpath
@@ -20,7 +20,13 @@
 	<classpathentry kind="lib" path="ext/lucene-memory-3.6.1.jar" sourcepath="ext/src/lucene-memory-3.6.1.jar" />
 	<classpathentry kind="lib" path="ext/lucene-queries-3.6.1.jar" sourcepath="ext/src/lucene-queries-3.6.1.jar" />
 	<classpathentry kind="lib" path="ext/jakarta-regexp-1.4.jar" />
-	<classpathentry kind="lib" path="ext/markdownpapers-core-1.3.2.jar" sourcepath="ext/src/markdownpapers-core-1.3.2.jar" />
+	<classpathentry kind="lib" path="ext/pegdown-1.4.1.jar" sourcepath="ext/src/pegdown-1.4.1.jar" />
+	<classpathentry kind="lib" path="ext/parboiled-java-1.1.5.jar" sourcepath="ext/src/parboiled-java-1.1.5.jar" />
+	<classpathentry kind="lib" path="ext/parboiled-core-1.1.5.jar" sourcepath="ext/src/parboiled-core-1.1.5.jar" />
+	<classpathentry kind="lib" path="ext/asm-4.1.jar" sourcepath="ext/src/asm-4.1.jar" />
+	<classpathentry kind="lib" path="ext/asm-tree-4.1.jar" sourcepath="ext/src/asm-tree-4.1.jar" />
+	<classpathentry kind="lib" path="ext/asm-analysis-4.1.jar" sourcepath="ext/src/asm-analysis-4.1.jar" />
+	<classpathentry kind="lib" path="ext/asm-util-4.1.jar" sourcepath="ext/src/asm-util-4.1.jar" />
 	<classpathentry kind="lib" path="ext/org.eclipse.jgit-3.1.0.201310021548-r.jar" sourcepath="ext/src/org.eclipse.jgit-3.1.0.201310021548-r.jar" />
 	<classpathentry kind="lib" path="ext/jsch-0.1.46.jar" sourcepath="ext/src/jsch-0.1.46.jar" />
 	<classpathentry kind="lib" path="ext/JavaEWAH-0.5.6.jar" sourcepath="ext/src/JavaEWAH-0.5.6.jar" />
diff --git a/NOTICE b/NOTICE
index 6468c49..750af00 100644
--- a/NOTICE
+++ b/NOTICE
@@ -56,14 +56,6 @@
    https://github.com/wicketstuff/core/wiki/GoogleCharts   
    
 ---------------------------------------------------------------------------
-MarkdownPapers
----------------------------------------------------------------------------
-   MarkdownPapers, released under the
-   Apache Software License, Version 2.0.
-
-   http://markdown.tautua.org
-   
----------------------------------------------------------------------------
 Jetty
 ---------------------------------------------------------------------------
    Jetty, released under the
@@ -318,4 +310,12 @@
    Apache License 2.0.
    
    http://commons.apache.org/proper/commons-codec
-    
\ No newline at end of file
+
+---------------------------------------------------------------------------
+pegdown
+---------------------------------------------------------------------------
+   pegdown, release under the
+   Apache License 2.0.
+   
+   https://github.com/sirthias/pegdown
+        
\ No newline at end of file
diff --git a/build.moxie b/build.moxie
index df0a36d..44f6d05 100644
--- a/build.moxie
+++ b/build.moxie
@@ -135,7 +135,7 @@
 - compile 'org.apache.lucene:lucene-core:${lucene.version}' :war :fedclient
 - compile 'org.apache.lucene:lucene-highlighter:${lucene.version}' :war :fedclient
 - compile 'org.apache.lucene:lucene-memory:${lucene.version}' :war :fedclient
-- compile 'org.tautua.markdownpapers:markdownpapers-core:1.3.2' :war
+- compile 'org.pegdown:pegdown:1.4.1' :war
 - compile 'org.eclipse.jgit:org.eclipse.jgit:${jgit.version}' :war :fedclient :manager :authority
 - compile 'org.eclipse.jgit:org.eclipse.jgit.http.server:${jgit.version}' :war :fedclient :manager :authority
 - compile 'org.bouncycastle:bcprov-jdk15on:${bouncycastle.version}' :war :authority
diff --git a/gitblit.iml b/gitblit.iml
index 736376b..c31d1e9 100644
--- a/gitblit.iml
+++ b/gitblit.iml
@@ -196,13 +196,79 @@
       </library>
     </orderEntry>
     <orderEntry type="module-library">
-      <library name="markdownpapers-core-1.3.2.jar">
+      <library name="pegdown-1.4.1.jar">
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/ext/markdownpapers-core-1.3.2.jar!/" />
+          <root url="jar://$MODULE_DIR$/ext/pegdown-1.4.1.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES>
-          <root url="jar://$MODULE_DIR$/ext/src/markdownpapers-core-1.3.2.jar!/" />
+          <root url="jar://$MODULE_DIR$/ext/src/pegdown-1.4.1.jar!/" />
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="parboiled-java-1.1.5.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/ext/parboiled-java-1.1.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES>
+          <root url="jar://$MODULE_DIR$/ext/src/parboiled-java-1.1.5.jar!/" />
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="parboiled-core-1.1.5.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/ext/parboiled-core-1.1.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES>
+          <root url="jar://$MODULE_DIR$/ext/src/parboiled-core-1.1.5.jar!/" />
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="asm-4.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/ext/asm-4.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES>
+          <root url="jar://$MODULE_DIR$/ext/src/asm-4.1.jar!/" />
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="asm-tree-4.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/ext/asm-tree-4.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES>
+          <root url="jar://$MODULE_DIR$/ext/src/asm-tree-4.1.jar!/" />
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="asm-analysis-4.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/ext/asm-analysis-4.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES>
+          <root url="jar://$MODULE_DIR$/ext/src/asm-analysis-4.1.jar!/" />
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="asm-util-4.1.jar">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/ext/asm-util-4.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES>
+          <root url="jar://$MODULE_DIR$/ext/src/asm-util-4.1.jar!/" />
         </SOURCES>
       </library>
     </orderEntry>
diff --git a/releases.moxie b/releases.moxie
index e086f43..a48473d 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -32,6 +32,7 @@
     dependencyChanges:
 	- updated to Jetty 7.6.13
 	- updated to JGit 3.1.0
+	- replaced MarkdownPapers with pegdown 1.4.1
     settings:
     - { name: 'git.createRepositoriesShared', defaultValue: 'false' }
     - { name: 'git.allowAnonymousPushes', defaultValue: 'false' }
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index 7f82432..a23dd8c 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -32,7 +32,6 @@
 import java.nio.charset.Charset;
 import java.security.Principal;
 import java.text.MessageFormat;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -2713,7 +2712,7 @@
 			try {
 				String prepared = processCommitMessageRegex(repository.name, text);
 				return MarkdownUtils.transformMarkdown(prepared);
-			} catch (ParseException e) {
+			} catch (Exception e) {
 				logger.error("Failed to render commit message as markdown", e);
 			}
 			break;
diff --git a/src/main/java/com/gitblit/utils/MarkdownUtils.java b/src/main/java/com/gitblit/utils/MarkdownUtils.java
index 1524236..33d7a6a 100644
--- a/src/main/java/com/gitblit/utils/MarkdownUtils.java
+++ b/src/main/java/com/gitblit/utils/MarkdownUtils.java
@@ -15,14 +15,14 @@
  */
 package com.gitblit.utils;
 
+import static org.pegdown.Extensions.ALL;
+
 import java.io.IOException;
 import java.io.Reader;
-import java.io.StringReader;
 import java.io.StringWriter;
 
-import org.slf4j.LoggerFactory;
-import org.tautua.markdownpapers.Markdown;
-import org.tautua.markdownpapers.parser.ParseException;
+import org.apache.commons.io.IOUtils;
+import org.pegdown.PegDownProcessor;
 
 /**
  * Utility methods for transforming raw markdown text to html.
@@ -39,17 +39,10 @@
 	 * @return html version of markdown text
 	 * @throws java.text.ParseException
 	 */
-	public static String transformMarkdown(String markdown) throws java.text.ParseException {
-		try {
-			StringReader reader = new StringReader(markdown);
-			String html = transformMarkdown(reader);
-			reader.close();
-			return html;
-		} catch (IllegalArgumentException e) {
-			throw new java.text.ParseException(e.getMessage(), 0);
-		} catch (NullPointerException p) {
-			throw new java.text.ParseException("Markdown string is null!", 0);
-		}
+	public static String transformMarkdown(String markdown) {
+		PegDownProcessor pd = new PegDownProcessor(ALL);
+		String html = pd.markdownToHtml(markdown);
+		return html;
 	}
 
 	/**
@@ -60,22 +53,13 @@
 	 * @return html version of the markdown text
 	 * @throws java.text.ParseException
 	 */
-	public static String transformMarkdown(Reader markdownReader) throws java.text.ParseException {
+	public static String transformMarkdown(Reader markdownReader) throws IOException {
 		// Read raw markdown content and transform it to html
 		StringWriter writer = new StringWriter();
 		try {
-			Markdown md = new Markdown();
-			md.transform(markdownReader, writer);
-			return writer.toString().trim();
-		} catch (StringIndexOutOfBoundsException e) {
-			LoggerFactory.getLogger(MarkdownUtils.class).error("MarkdownPapers failed to parse Markdown!", e);
-			throw new java.text.ParseException(e.getMessage(), 0);
-		} catch (ParseException p) {
-			LoggerFactory.getLogger(MarkdownUtils.class).error("MarkdownPapers failed to parse Markdown!", p);
-			throw new java.text.ParseException(p.getMessage(), 0);
-		} catch (Exception e) {
-			LoggerFactory.getLogger(MarkdownUtils.class).error("MarkdownPapers failed to parse Markdown!", e);
-			throw new java.text.ParseException(e.getMessage(), 0);
+			IOUtils.copy(markdownReader, writer);
+			String markdown = writer.toString();
+			return transformMarkdown(markdown);
 		} finally {
 			try {
 				writer.close();
diff --git a/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java b/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
index 5aa8029..188a5b4 100644
--- a/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
@@ -16,7 +16,6 @@
 package com.gitblit.wicket.pages;
 
 import java.text.MessageFormat;
-import java.text.ParseException;
 
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
@@ -60,7 +59,8 @@
 		String htmlText;
 		try {
 			htmlText = MarkdownUtils.transformMarkdown(markdownText);
-		} catch (ParseException p) {
+		} catch (Exception e) {
+			logger.error("failed to transform markdown", e);
 			markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText);
 			htmlText = StringUtils.breakLinesForHtml(markdownText);
 		}
diff --git a/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java
index e5ce22a..dabaed0 100644
--- a/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java
@@ -75,7 +75,7 @@
 
 public abstract class RepositoryPage extends RootPage {
 
-	private final Logger logger = LoggerFactory.getLogger(getClass());
+	protected final Logger logger = LoggerFactory.getLogger(getClass());
 
 	private final String PARAM_STAR = "star";
 
diff --git a/src/main/java/com/gitblit/wicket/pages/SummaryPage.java b/src/main/java/com/gitblit/wicket/pages/SummaryPage.java
index 00d77a4..cc9697c 100644
--- a/src/main/java/com/gitblit/wicket/pages/SummaryPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/SummaryPage.java
@@ -18,7 +18,6 @@
 import java.awt.Color;
 import java.awt.Dimension;
 import java.text.MessageFormat;
-import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -166,7 +165,8 @@
 					markdownText = JGitUtils.getStringContent(r, head.getTree(), readme, encodings);
 					htmlText = MarkdownUtils.transformMarkdown(markdownText);
 				}
-			} catch (ParseException p) {
+			} catch (Exception e) {
+				logger.error("failed to transform markdown", e);
 				markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText);
 				htmlText = StringUtils.breakLinesForHtml(markdownText);
 			}
diff --git a/src/site/design.mkd b/src/site/design.mkd
index ce67620..1f1635a 100644
--- a/src/site/design.mkd
+++ b/src/site/design.mkd
@@ -29,7 +29,6 @@
 - [JGit][jgit] (EDL 1.0)
 - [Wicket](http://wicket.apache.org) (Apache 2.0)
 - [WicketStuff GoogleCharts](https://github.com/wicketstuff/core/wiki/GoogleCharts) (Apache 2.0)
-- [MarkdownPapers](http://markdown.tautua.org) (Apache 2.0)
 - [Jetty](http://eclipse.org/jetty) (Apache 2.0, EPL 1.0)
 - [SLF4J](http://www.slf4j.org) (MIT/X11)
 - [Log4j](http://logging.apache.org/log4j) (Apache 2.0)
@@ -53,6 +52,7 @@
 - [Guava](https://code.google.com/p/guava-libraries) (Apache 2.0)
 - [libpam4j](https://github.com/kohsuke/libpam4j) (MIT)
 - [commons-codec](http://commons.apache.org/proper/commons-codec) (Apache 2.0)
+- [pegdown](https://github.com/sirthias/pegdown) (Apache 2.0)
 
 ### Other Build Dependencies
 - [Fancybox image viewer](http://fancybox.net) (MIT and GPL dual-licensed)
diff --git a/src/test/java/com/gitblit/tests/MarkdownUtilsTest.java b/src/test/java/com/gitblit/tests/MarkdownUtilsTest.java
index cd7ca02..3458374 100644
--- a/src/test/java/com/gitblit/tests/MarkdownUtilsTest.java
+++ b/src/test/java/com/gitblit/tests/MarkdownUtilsTest.java
@@ -16,9 +16,6 @@
 package com.gitblit.tests;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.text.ParseException;
 
 import org.junit.Test;
 
@@ -28,8 +25,8 @@
 
 	@Test
 	public void testMarkdown() throws Exception {
-		assertEquals("<h1> H1</h1>", MarkdownUtils.transformMarkdown("# H1"));
-		assertEquals("<h2> H2</h2>", MarkdownUtils.transformMarkdown("## H2"));
+		assertEquals("<h1>H1</h1>", MarkdownUtils.transformMarkdown("# H1"));
+		assertEquals("<h2>H2</h2>", MarkdownUtils.transformMarkdown("## H2"));
 		assertEquals("<p><strong>THIS</strong> is a test</p>",
 				MarkdownUtils.transformMarkdown("**THIS** is a test"));
 		assertEquals("<p>** THIS ** is a test</p>",
@@ -43,12 +40,5 @@
 				MarkdownUtils.transformMarkdown("<table><tr><td>test</td></tr></table>"));
 		assertEquals("<table><tr><td>&lt;test&gt;</td></tr></table>",
 				MarkdownUtils.transformMarkdown("<table><tr><td>&lt;test&gt;</td></tr></table>"));
-
-		try {
-			MarkdownUtils.transformMarkdown((String) null);
-			assertTrue(false);
-		} catch (ParseException p) {
-			assertTrue(p != null);
-		}
 	}
 }
\ No newline at end of file

--
Gitblit v1.9.1