mirror of
https://github.com/erusev/parsedown.git
synced 2023-08-10 21:13:06 +03:00
Permit 1 column tables with less delimiters
This commit is contained in:
parent
ae13290221
commit
00e51ee424
215
Parsedown.php
215
Parsedown.php
@ -835,104 +835,119 @@ class Parsedown
|
||||
return;
|
||||
}
|
||||
|
||||
if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '')
|
||||
{
|
||||
$alignments = array();
|
||||
|
||||
$divider = $Line['text'];
|
||||
|
||||
$divider = trim($divider);
|
||||
$divider = trim($divider, '|');
|
||||
|
||||
$dividerCells = explode('|', $divider);
|
||||
|
||||
foreach ($dividerCells as $dividerCell)
|
||||
{
|
||||
$dividerCell = trim($dividerCell);
|
||||
|
||||
if ($dividerCell === '')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$alignment = null;
|
||||
|
||||
if ($dividerCell[0] === ':')
|
||||
{
|
||||
$alignment = 'left';
|
||||
}
|
||||
|
||||
if (substr($dividerCell, - 1) === ':')
|
||||
{
|
||||
$alignment = $alignment === 'left' ? 'center' : 'right';
|
||||
}
|
||||
|
||||
$alignments []= $alignment;
|
||||
}
|
||||
|
||||
# ~
|
||||
|
||||
$HeaderElements = array();
|
||||
|
||||
$header = $Block['element']['text'];
|
||||
|
||||
$header = trim($header);
|
||||
$header = trim($header, '|');
|
||||
|
||||
$headerCells = explode('|', $header);
|
||||
|
||||
foreach ($headerCells as $index => $headerCell)
|
||||
{
|
||||
$headerCell = trim($headerCell);
|
||||
|
||||
$HeaderElement = array(
|
||||
'name' => 'th',
|
||||
'text' => $headerCell,
|
||||
'handler' => 'line',
|
||||
);
|
||||
|
||||
if (isset($alignments[$index]))
|
||||
{
|
||||
$alignment = $alignments[$index];
|
||||
|
||||
$HeaderElement['attributes'] = array(
|
||||
'style' => 'text-align: '.$alignment.';',
|
||||
);
|
||||
}
|
||||
|
||||
$HeaderElements []= $HeaderElement;
|
||||
}
|
||||
|
||||
# ~
|
||||
|
||||
$Block = array(
|
||||
'alignments' => $alignments,
|
||||
'identified' => true,
|
||||
'element' => array(
|
||||
'name' => 'table',
|
||||
'handler' => 'elements',
|
||||
),
|
||||
);
|
||||
|
||||
$Block['element']['text'] []= array(
|
||||
'name' => 'thead',
|
||||
'handler' => 'elements',
|
||||
);
|
||||
|
||||
$Block['element']['text'] []= array(
|
||||
'name' => 'tbody',
|
||||
'handler' => 'elements',
|
||||
'text' => array(),
|
||||
);
|
||||
|
||||
$Block['element']['text'][0]['text'] []= array(
|
||||
'name' => 'tr',
|
||||
'handler' => 'elements',
|
||||
'text' => $HeaderElements,
|
||||
);
|
||||
|
||||
return $Block;
|
||||
if (
|
||||
strpos($Block['element']['text'], '|') === false
|
||||
and strpos($Line['text'], '|') === false
|
||||
and strpos($Line['text'], ':') === false
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (chop($Line['text'], ' -:|') !== '')
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$alignments = array();
|
||||
|
||||
$divider = $Line['text'];
|
||||
|
||||
$divider = trim($divider);
|
||||
$divider = trim($divider, '|');
|
||||
|
||||
$dividerCells = explode('|', $divider);
|
||||
|
||||
foreach ($dividerCells as $dividerCell)
|
||||
{
|
||||
$dividerCell = trim($dividerCell);
|
||||
|
||||
if ($dividerCell === '')
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$alignment = null;
|
||||
|
||||
if ($dividerCell[0] === ':')
|
||||
{
|
||||
$alignment = 'left';
|
||||
}
|
||||
|
||||
if (substr($dividerCell, - 1) === ':')
|
||||
{
|
||||
$alignment = $alignment === 'left' ? 'center' : 'right';
|
||||
}
|
||||
|
||||
$alignments []= $alignment;
|
||||
}
|
||||
|
||||
# ~
|
||||
|
||||
$HeaderElements = array();
|
||||
|
||||
$header = $Block['element']['text'];
|
||||
|
||||
$header = trim($header);
|
||||
$header = trim($header, '|');
|
||||
|
||||
$headerCells = explode('|', $header);
|
||||
|
||||
if (count($headerCells) !== count($alignments))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($headerCells as $index => $headerCell)
|
||||
{
|
||||
$headerCell = trim($headerCell);
|
||||
|
||||
$HeaderElement = array(
|
||||
'name' => 'th',
|
||||
'text' => $headerCell,
|
||||
'handler' => 'line',
|
||||
);
|
||||
|
||||
if (isset($alignments[$index]))
|
||||
{
|
||||
$alignment = $alignments[$index];
|
||||
|
||||
$HeaderElement['attributes'] = array(
|
||||
'style' => 'text-align: '.$alignment.';',
|
||||
);
|
||||
}
|
||||
|
||||
$HeaderElements []= $HeaderElement;
|
||||
}
|
||||
|
||||
# ~
|
||||
|
||||
$Block = array(
|
||||
'alignments' => $alignments,
|
||||
'identified' => true,
|
||||
'element' => array(
|
||||
'name' => 'table',
|
||||
'handler' => 'elements',
|
||||
),
|
||||
);
|
||||
|
||||
$Block['element']['text'] []= array(
|
||||
'name' => 'thead',
|
||||
'handler' => 'elements',
|
||||
);
|
||||
|
||||
$Block['element']['text'] []= array(
|
||||
'name' => 'tbody',
|
||||
'handler' => 'elements',
|
||||
'text' => array(),
|
||||
);
|
||||
|
||||
$Block['element']['text'][0]['text'] []= array(
|
||||
'name' => 'tr',
|
||||
'handler' => 'elements',
|
||||
'text' => $HeaderElements,
|
||||
);
|
||||
|
||||
return $Block;
|
||||
}
|
||||
|
||||
protected function blockTableContinue($Line, array $Block)
|
||||
@ -942,7 +957,7 @@ class Parsedown
|
||||
return;
|
||||
}
|
||||
|
||||
if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
|
||||
if (count($Block['alignments']) === 1 or $Line['text'][0] === '|' or strpos($Line['text'], '|'))
|
||||
{
|
||||
$Elements = array();
|
||||
|
||||
@ -953,7 +968,9 @@ class Parsedown
|
||||
|
||||
preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches);
|
||||
|
||||
foreach ($matches[0] as $index => $cell)
|
||||
$cells = array_slice($matches[0], 0, count($Block['alignments']));
|
||||
|
||||
foreach ($cells as $index => $cell)
|
||||
{
|
||||
$cell = trim($cell);
|
||||
|
||||
|
@ -34,4 +34,36 @@
|
||||
<td>cell 2.2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr />
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left;">header 1</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: left;">cell 1.1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left;">cell 2.1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr />
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>header 1</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>cell 1.1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cell 2.1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
@ -8,4 +8,18 @@ cell 2.1 | cell 2.2
|
||||
header 1 | header 2
|
||||
:------- | --------
|
||||
cell 1.1 | cell 1.2
|
||||
cell 2.1 | cell 2.2
|
||||
cell 2.1 | cell 2.2
|
||||
|
||||
---
|
||||
|
||||
header 1
|
||||
:-------
|
||||
cell 1.1
|
||||
cell 2.1
|
||||
|
||||
---
|
||||
|
||||
header 1
|
||||
-------|
|
||||
cell 1.1
|
||||
cell 2.1
|
Loading…
Reference in New Issue
Block a user