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

improve consistency of list item

This commit is contained in:
Emanuil Rusev 2014-02-02 22:27:22 +02:00
parent b257d0ecaa
commit f5f1706e58
3 changed files with 40 additions and 11 deletions

View File

@ -194,16 +194,14 @@ class Parsedown
case 'li': case 'li':
if ($block['indentation'] === $indentation and preg_match('/^'.$block['marker'].'[ ](.*)/', $deindented_line, $matches)) if ($block['indentation'] === $indentation and preg_match('/^'.$block['marker'].'[ ]+(.*)/', $deindented_line, $matches))
{ {
unset($block['last']); unset($block['last']);
$blocks []= $block; $blocks []= $block;
$block['last'] = true; $block['last'] = true;
$block['lines'] = array(); $block['lines'] = array($matches[1]);
$block['lines'] []= preg_replace('/^[ ]{0,4}/', '', $matches[1]);
unset($block['first']); unset($block['first']);
unset($block['interrupted']); unset($block['interrupted']);
@ -213,7 +211,7 @@ class Parsedown
if ( ! isset($block['interrupted'])) if ( ! isset($block['interrupted']))
{ {
$line = preg_replace('/^[ ]{0,4}/', '', $line); $line = preg_replace('/^[ ]{0,'.$block['baseline'].'}/', '', $line);
$block['lines'] []= $line; $block['lines'] []= $line;
@ -223,7 +221,7 @@ class Parsedown
{ {
$block['lines'] []= ''; $block['lines'] []= '';
$line = preg_replace('/^[ ]{0,4}/', '', $line); $line = preg_replace('/^[ ]{0,'.$block['baseline'].'}/', '', $line);
$block['lines'] []= $line; $block['lines'] []= $line;
@ -491,34 +489,40 @@ class Parsedown
# li # li
if (preg_match('/^[*+-][ ](.*)/', $deindented_line, $matches)) if (preg_match('/^([*+-][ ]+)(.*)/', $deindented_line, $matches))
{ {
$blocks []= $block; $blocks []= $block;
$baseline = $indentation + strlen($matches[1]);
$block = array( $block = array(
'type' => 'li', 'type' => 'li',
'indentation' => $indentation, 'indentation' => $indentation,
'baseline' => $baseline,
'marker' => '[*+-]', 'marker' => '[*+-]',
'first' => true, 'first' => true,
'last' => true, 'last' => true,
'lines' => array(), 'lines' => array(),
); );
$block['lines'] []= preg_replace('/^[ ]{0,4}/', '', $matches[1]); $block['lines'] []= preg_replace('/^[ ]{0,4}/', '', $matches[2]);
continue 2; continue 2;
} }
} }
# list item # li
if ($deindented_line[0] <= '9' and preg_match('/^\d+[.][ ](.*)/', $deindented_line, $matches)) if ($deindented_line[0] <= '9' and preg_match('/^(\d+[.][ ]+)(.*)/', $deindented_line, $matches))
{ {
$blocks []= $block; $blocks []= $block;
$baseline = $indentation + strlen($matches[1]);
$block = array( $block = array(
'type' => 'li', 'type' => 'li',
'indentation' => $indentation, 'indentation' => $indentation,
'baseline' => $baseline,
'marker' => '\d+[.]', 'marker' => '\d+[.]',
'first' => true, 'first' => true,
'last' => true, 'last' => true,
@ -526,7 +530,7 @@ class Parsedown
'lines' => array(), 'lines' => array(),
); );
$block['lines'] []= preg_replace('/^[ ]{0,4}/', '', $matches[1]); $block['lines'] []= preg_replace('/^[ ]{0,4}/', '', $matches[2]);
continue; continue;
} }

View File

@ -0,0 +1,18 @@
<ul>
<li>li
<ul>
<li>li
<ul>
<li>li
<ul>
<li>li</li>
</ul>
</li>
<li>li</li>
</ul>
</li>
<li>li</li>
</ul>
</li>
<li>li</li>
</ul>

View File

@ -0,0 +1,7 @@
- li
- li
- li
- li
- li
- li
- li