1
0
mirror of https://github.com/erusev/parsedown.git synced 2023-08-10 21:13:06 +03:00

Compare commits

...

2 Commits
0.2.1 ... 0.3.0

Author SHA1 Message Date
2e314ad474 resolve #24 2013-11-02 21:42:55 +02:00
e475602e2f simplify parsing of code blocks 2013-11-02 02:18:13 +02:00
3 changed files with 99 additions and 5 deletions

View File

@ -122,14 +122,33 @@ class Parsedown
foreach ($lines as $line)
{
# Block-Level HTML
if ($element['type'] === 'block' and ! isset($element['closed']))
{
if (preg_match('{<'.$element['subtype'].'>$}', $line)) # <open>
{
$element['depth']++;
}
if (preg_match('{</'.$element['subtype'].'>$}', $line)) # </close>
{
$element['depth'] > 0
? $element['depth']--
: $element['closed'] = true;
}
$element['text'] .= "\n".$line;
continue;
}
# Empty
if ($line === '')
{
$element['interrupted'] = true;
$element['type'] === 'code' and $element['text'] .= "\n";
continue;
}
@ -251,6 +270,8 @@ class Parsedown
{
if ($element['type'] === 'code')
{
isset($element['interrupted']) and $element['text'] .= "\n";
$element['text'] .= "\n".$matches[1];
}
else
@ -322,6 +343,38 @@ class Parsedown
continue;
}
# Block-Level HTML <self-closing/>
if (preg_match('{^<.+?/>$}', $line))
{
$elements []= $element;
$element = array(
'type' => '',
'text' => $line,
);
continue;
}
# Block-Level HTML <open>
if (preg_match('{^<(\w+)(?:[ ].*?)?>}', $line, $matches))
{
$elements []= $element;
$element = array(
'type' => 'block',
'subtype' => strtolower($matches[1]),
'text' => $line,
'depth' => 0,
);
preg_match('{</'.$matches[1].'>\s*$}', $line) and $element['closed'] = true;
continue;
}
# ~
@ -415,9 +468,7 @@ class Parsedown
case 'code':
$text = rtrim($element['text'], "\n");
$text = htmlentities($text, ENT_NOQUOTES);
$text = htmlentities($element['text'], ENT_NOQUOTES);
strpos($text, "\x1A\\") !== FALSE and $text = strtr($text, $this->escape_sequence_map);
@ -446,6 +497,10 @@ class Parsedown
$markup .= '<hr />'."\n";
break;
default:
$markup .= $element['text']."\n";
}
}

15
tests/data/html.html Normal file
View File

@ -0,0 +1,15 @@
<p>Self-closing tag:</p>
<hr/>
<p>Self-closing tag with attributes:</p>
<hr style="background: #eaa" />
<p>Bare element:</p>
<div>content</div>
<p>Element with attributes:</p>
<a href="http://parsedown.org">link</a>
<p>Nested elements:</p>
<div>
parent
<div>
child
</div>
</div>

24
tests/data/html.md Normal file
View File

@ -0,0 +1,24 @@
Self-closing tag:
<hr/>
Self-closing tag with attributes:
<hr style="background: #eaa" />
Bare element:
<div>content</div>
Element with attributes:
<a href="http://parsedown.org">link</a>
Nested elements:
<div>
parent
<div>
child
</div>
</div>