diff --git a/markdown.php b/markdown.php
index 8a13d2b..a9ed754 100644
--- a/markdown.php
+++ b/markdown.php
@@ -2226,27 +2226,27 @@ class MarkdownExtra_Parser extends Markdown_Parser {
# Redefined to add class attribute support
#
# Setext-style headers:
- # Header 1 {#header1} {.class1}
+ # Header 1 {#header1 .class1}
# ========
#
- # Header 2 {#header2} {.class2}
+ # Header 2 {#header2 .class2 .class3}
# --------
#
$text = preg_replace_callback(
'{
(^.+?) # $1: Header text
- (?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})? # $2: Id attribute
- (?:[ ]+\{\.([-_:a-zA-Z0-9]+)\})? # $3: class attribute
- [ ]*\n(=+|-+)[ ]*\n+ # $4: Header footer
+ (?:[ ]+ \{((?:[ ]*\#[-_:a-zA-Z0-9]+){0,1}
+ (?:[ ]*(?:\.[-_:a-zA-Z0-9]+))*)\} )? # $3 = id/class attributes
+ [ ]*\n(=+|-+)[ ]*\n+ # $3: Header footer
}mx',
array(&$this, '_doHeaders_callback_setext'), $text);
# atx-style headers:
- # # Header 1 {#header1} {.class1}
- # ## Header 2 {#header2} {.class2}
- # ## Header 2 with closing hashes ## {#header3} {.class3}
+ # # Header 1 {#header1 .class1}
+ # ## Header 2 {#header2 .class2}
+ # ## Header 2 with closing hashes ## {#header3.class1.class2}
# ...
- # ###### Header 6 {#header2} {.class2}
+ # ###### Header 6 {.class2}
#
$text = preg_replace_callback('{
^(\#{1,6}) # $1 = string of #\'s
@@ -2254,7 +2254,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
(.+?) # $2 = Header text
[ ]*
\#* # optional closing #\'s (not counted)
- (?:[ ]+ \{((?:\#[-_:a-zA-Z0-9]+){0,1}
+ (?:[ ]+ \{((?:[ ]*\#[-_:a-zA-Z0-9]+){0,1}
(?:[ ]*(?:\.[-_:a-zA-Z0-9]+))*)\} )? # $3 = id/class attributes
[ ]*
@@ -2264,38 +2264,26 @@ class MarkdownExtra_Parser extends Markdown_Parser {
return $text;
}
- function _doHeaders_id($header_Id) {
- if (empty($header_Id)) return "";
- return " id=\"$header_Id\"";
- }
- function _doHeaders_class($header_Class) {
- if (empty($header_Class)) return "";
- return " class=\"$header_Class\"";
- }
-
+
function _doHeaders_attribs($header_Attr) {
if (empty($header_Attr)) return "";
if (preg_match("/\#([-_:a-zA-Z0-9]+)[ ]*(.*)/", $header_Attr, $matches)) {
$id = "id=\"$matches[1]\" ";
- $classes = preg_split("/[ ]+/", $matches[2]);
+ $classes = preg_split("/[ .]+/", $matches[2], -1, PREG_SPLIT_NO_EMPTY);
} else {
$id = "";
- $classes = preg_split("/[ ]+/", $header_Attr);
- }
- foreach ($classes as &$class) {
- $class = preg_replace("/\./", "", $class);
+ $classes = preg_split("/[ .]+/", $header_Attr, -1, PREG_SPLIT_NO_EMPTY);
}
$classString = "class=\"" . implode(" ", $classes) . "\"";
return " $id$classString";
}
function _doHeaders_callback_setext($matches) {
- if ($matches[4] == '-' && preg_match('{^- }', $matches[1]))
+ if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
return $matches[0];
- $level = $matches[4]{0} == '=' ? 1 : 2;
- $headerId = $this->_doHeaders_id($id =& $matches[2]);
- $headerClass = $this->_doHeaders_class($class =& $matches[3]);
- $block = "".$this->runSpanGamut($matches[1])."";
+ $level = $matches[3]{0} == '=' ? 1 : 2;
+ $attr = $this->_doHeaders_attribs($att =& $matches[2]);
+ $block = "".$this->runSpanGamut($matches[1])."";
return "\n" . $this->hashBlock($block) . "\n\n";
}