From 4a48b4648ce2066c755775ed74c0ed93f1433c89 Mon Sep 17 00:00:00 2001 From: Corey Worrell Date: Fri, 13 Jan 2012 15:51:49 -0800 Subject: [PATCH] Fixing fenced code blocks to allow classes to be added. Also the newline callback regex seemed to not be working, so I removed the ^ character from before \n. --- markdown.php | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/markdown.php b/markdown.php index f548fc2..d296dfd 100644 --- a/markdown.php +++ b/markdown.php @@ -2552,9 +2552,13 @@ class MarkdownExtra_Parser extends Markdown_Parser { ( ~{3,} # Marker: three tilde or more. ) + + # 2: CSS classes + \s?(\.[^\n]+)? + [ ]* \n # Whitespace and newline following marker. - # 2: Content + # 3: Content ( (?> (?!\1 [ ]* \n) # Not a closing marker. @@ -2563,18 +2567,26 @@ class MarkdownExtra_Parser extends Markdown_Parser { ) # Closing marker. - \1 [ ]* \n + \1 + + # 4: CSS classes + \s?(\.[^\n]+)? + + # End of line + [ ]* \n }xm', array(&$this, '_doFencedCodeBlocks_callback'), $text); return $text; } function _doFencedCodeBlocks_callback($matches) { - $codeblock = $matches[2]; + $codeblock = $matches[3]; $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES); - $codeblock = preg_replace_callback('/^\n+/', + $codeblock = preg_replace_callback('/\n+/', array(&$this, '_doFencedCodeBlocks_newlines'), $codeblock); - $codeblock = "
$codeblock
"; + $class = ! empty($matches[2]) ? $matches[2] : ( ! empty($matches[4]) ? $matches[4] : ''); + $class = ! empty($class) ? ' class="'.trim($class, '.').'"' : ''; + $codeblock = "$codeblock"; return "\n\n".$this->hashBlock($codeblock)."\n\n"; } function _doFencedCodeBlocks_newlines($matches) {