[aur-dev] [PATCH 2/4] Add support for markdown inline code

Marcel Korpel marcel.korpel at gmail.com
Sat Jul 11 18:22:00 UTC 2015


Signed-off-by: Marcel Korpel <marcel.korpel at gmail.com>
---
 web/lib/aur.inc.php | 47 ++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 38 insertions(+), 9 deletions(-)

diff --git a/web/lib/aur.inc.php b/web/lib/aur.inc.php
index 4b1850f..d0c8c98 100644
--- a/web/lib/aur.inc.php
+++ b/web/lib/aur.inc.php
@@ -597,7 +597,8 @@ function comment_by_id($comment_id) {
 
 /**
  * Process submitted comments so any links can be followed and
- * parse markdown code blocks (within ```<newline>)
+ * parse markdown code blocks (within ```<newline>) and inline
+ * code (like `this`)
  *
  * @param string $comment Raw user submitted package comment
  *
@@ -608,6 +609,8 @@ function parse_comment($comment) {
 		'(?=[.:?\-;,]*(?:[^\w\/\#~:.?+=&%@!\-;,]|$)))/iS';
 	$md_codeblock_delimiter = '/(```)\R/';
 	$md_codeblock_active = false;
+	$md_code_fragment_delimiter = '/(`)/';
+	$md_code_fragment_active = false;
 
 	$blocks = preg_split($md_codeblock_delimiter, $comment, -1,
 		PREG_SPLIT_DELIM_CAPTURE);
@@ -629,23 +632,49 @@ function parse_comment($comment) {
 				// preserved)
 				$html .= htmlspecialchars($blocks[$i]);
 			} else {
-				$matches = preg_split($url_pattern, $blocks[$i], -1,
-					PREG_SPLIT_DELIM_CAPTURE);
+				$code_fragments = preg_split($md_code_fragment_delimiter, $blocks[$i],
+					-1, PREG_SPLIT_DELIM_CAPTURE);
 
-				for ($j = 0; $j < count($matches); $j++) {
+				for ($j = 0; $j < count($code_fragments); $j++) {
 					if ($j % 2) {
-						// convert links
-						$html .= '<a href="' . htmlspecialchars($matches[$j]) .
-							'">' .	htmlspecialchars($matches[$j]) . '</a>';
+						// add start/end tag of code fragment
+						if ($md_code_fragment_active) {
+							$html .= '</code>';
+							$md_code_fragment_active = false;
+						} else {
+							$html .= '<code>';
+							$md_code_fragment_active = true;
+						}
 					} else {
-						// convert everything else
-						$html .= nl2br(htmlspecialchars($matches[$j]));
+						if ($md_code_fragment_active) {
+							// do not convert links within code blocks
+							$html .= nl2br(htmlspecialchars($code_fragments[$j]));
+						} else {
+							$matches = preg_split($url_pattern, $code_fragments[$j],
+								-1, PREG_SPLIT_DELIM_CAPTURE);
+
+							for ($k = 0; $k < count($matches); $k++) {
+								if ($k % 2) {
+									// convert links
+									$html .= '<a href="' . htmlspecialchars($matches[$k]) .
+										'">' .	htmlspecialchars($matches[$k]) . '</a>';
+								} else {
+									// convert everything else
+									$html .= nl2br(htmlspecialchars($matches[$k]));
+								}
+							}
+						}
 					}
 				}
 			}
 		}
 	}
 
+	// close possible open code fragment
+	if ($md_code_fragment_active) {
+		$html .= '</code>';
+	}
+
 	// close possible open code block
 	if ($md_codeblock_active) {
 		$html .= '</code></pre><p>';
-- 
2.4.5


More information about the aur-dev mailing list