Skip to content

Commit

Permalink
Merge 959933b into 641bd1a
Browse files Browse the repository at this point in the history
  • Loading branch information
NathanBaulch committed Jun 1, 2017
2 parents 641bd1a + 959933b commit a03ad0d
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 87 deletions.
45 changes: 28 additions & 17 deletions block/TableTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@
*/
trait TableTrait
{
private $_tableCellTag = 'td';
private $_tableCellCount = 0;
private $_tableCellAlign = [];

/**
* identify a line as the beginning of a table block.
*/
Expand Down Expand Up @@ -74,7 +70,24 @@ protected function consumeTable($lines, $current)
if (substr($line, -1, 1) === '|' && (substr($line, -2, 2) !== '\\|' || substr($line, -3, 3) === '\\\\|')) {
$line = substr($line, 0, -1);
}
$block['rows'][] = $line;

array_unshift($this->context, 'table');
$row = $this->parseInline($line);
array_shift($this->context);

$r = count($block['rows']);
$c = 0;
$block['rows'][] = [];
foreach ($row as $absy) {
if (!isset($block['rows'][$r][$c])) {
$block['rows'][$r][] = [];
}
if ($absy[0] === 'boundary') {
$c++;
} else {
$block['rows'][$r][$c][] = $absy;
}
}
}

return [$block, --$i];
Expand All @@ -86,22 +99,22 @@ protected function consumeTable($lines, $current)
protected function renderTable($block)
{
$content = '';
$this->_tableCellAlign = $block['cols'];
$content .= "<thead>\n";
$cols = $block['cols'];
$first = true;
foreach($block['rows'] as $row) {
$this->_tableCellTag = $first ? 'th' : 'td';
$align = empty($this->_tableCellAlign[$this->_tableCellCount]) ? '' : ' align="' . $this->_tableCellAlign[$this->_tableCellCount] . '"';
$this->_tableCellCount++;
$tds = "<$this->_tableCellTag$align>" . trim($this->renderAbsy($this->parseInline($row))) . "</$this->_tableCellTag>"; // TODO move this to the consume step
$content .= "<tr>$tds</tr>\n";
$cellTag = $first ? 'th' : 'td';
$content .= '<tr>';
foreach ($row as $c => $cell) {
$align = empty($cols[$c]) ? '' : ' align="' . $cols[$c] . '"';
$content .= "<$cellTag$align>" . trim($this->renderAbsy($cell)) . "</$cellTag>";
}
$content .= "</tr>\n";
if ($first) {
$content .= "</thead>\n<tbody>\n";
}
$first = false;
$this->_tableCellCount = 0;
}
return "<table>\n$content</tbody>\n</table>\n";
return "<table>\n<thead>\n$content</tbody>\n</table>\n";
}

/**
Expand All @@ -110,9 +123,7 @@ protected function renderTable($block)
protected function parseTd($markdown)
{
if (isset($this->context[1]) && $this->context[1] === 'table') {
$align = empty($this->_tableCellAlign[$this->_tableCellCount]) ? '' : ' align="' . $this->_tableCellAlign[$this->_tableCellCount] . '"';
$this->_tableCellCount++;
return [['text', "</$this->_tableCellTag><$this->_tableCellTag$align>"], isset($markdown[1]) && $markdown[1] === ' ' ? 2 : 1]; // TODO make a absy node
return [['boundary'], isset($markdown[1]) && $markdown[1] === ' ' ? 2 : 1];
}
return [['text', $markdown[0]], 1];
}
Expand Down
64 changes: 32 additions & 32 deletions tests/extra-data/tables.html
Original file line number Diff line number Diff line change
@@ -1,89 +1,89 @@
<h2>Tables</h2>
<table>
<thead>
<tr><th>First Header </th><th>Second Header</th></tr>
<tr><th>First Header</th><th>Second Header</th></tr>
</thead>
<tbody>
<tr><td>Content Cell </td><td>Content Cell</td></tr>
<tr><td>Content Cell </td><td>Content Cell</td></tr>
<tr><td>Content Cell</td><td>Content Cell</td></tr>
<tr><td>Content Cell</td><td>Content Cell</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>First Header </th><th>Second Header</th></tr>
<tr><th>First Header</th><th>Second Header</th></tr>
</thead>
<tbody>
<tr><td>Content Cell </td><td>Content Cell</td></tr>
<tr><td>Content Cell </td><td>Content Cell</td></tr>
<tr><td>Content Cell</td><td>Content Cell</td></tr>
<tr><td>Content Cell</td><td>Content Cell</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Name </th><th>Description</th></tr>
<tr><th>Name</th><th>Description</th></tr>
</thead>
<tbody>
<tr><td>Help </td><td>Display the help window.</td></tr>
<tr><td>Close </td><td>Closes a window</td></tr>
<tr><td>Help</td><td>Display the help window.</td></tr>
<tr><td>Close</td><td>Closes a window</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Name </th><th>Description</th></tr>
<tr><th>Name</th><th>Description</th></tr>
</thead>
<tbody>
<tr><td>Help </td><td><strong>Display the</strong> help window.</td></tr>
<tr><td>Close </td><td><em>Closes</em> a window</td></tr>
<tr><td>Help</td><td><strong>Display the</strong> help window.</td></tr>
<tr><td>Close</td><td><em>Closes</em> a window</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Default-Align </th><th align="left">Left-Aligned </th><th align="center">Center Aligned </th><th align="right">Right Aligned</th></tr>
<tr><th>Default-Align</th><th align="left">Left-Aligned</th><th align="center">Center Aligned</th><th align="right">Right Aligned</th></tr>
</thead>
<tbody>
<tr><td>1 </td><td align="left">col 3 is </td><td align="center">some wordy text </td><td align="right">$1600</td></tr>
<tr><td>2 </td><td align="left">col 2 is </td><td align="center">centered </td><td align="right"> $12</td></tr>
<tr><td>3 </td><td align="left">zebra stripes </td><td align="center">are neat </td><td align="right"> $1</td></tr>
<tr><td>1</td><td align="left">col 3 is</td><td align="center">some wordy text</td><td align="right">$1600</td></tr>
<tr><td>2</td><td align="left">col 2 is</td><td align="center">centered</td><td align="right">$12</td></tr>
<tr><td>3</td><td align="left">zebra stripes</td><td align="center">are neat</td><td align="right">$1</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Simple </th><th>Table</th></tr>
<tr><th>Simple</th><th>Table</th></tr>
</thead>
<tbody>
<tr><td>1 </td><td>2</td></tr>
<tr><td>3 </td><td>4</td></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>3</td><td>4</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Simple </th><th>Table</th></tr>
<tr><th>Simple</th><th>Table</th></tr>
</thead>
<tbody>
<tr><td>1 </td><td>2</td></tr>
<tr><td>3 </td><td>4</td></tr>
<tr><td>3 </td><td>4 |</td></tr>
<tr><td>3 </td><td>4 \</td></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>3</td><td>4</td></tr>
<tr><td>3</td><td>4 |</td></tr>
<tr><td>3</td><td>4 \</td></tr>
</tbody>
</table>
<p>Check https://github.com/erusev/parsedown/issues/184 for the following:</p>
<table>
<thead>
<tr><th>Foo </th><th>Bar </th><th>State</th></tr>
<tr><th>Foo</th><th>Bar</th><th>State</th></tr>
</thead>
<tbody>
<tr><td><code>Code | Pipe</code> </td><td>Broken </td><td>Blank</td></tr>
<tr><td><code>Escaped Code \| Pipe</code> </td><td>Broken </td><td>Blank</td></tr>
<tr><td>Escaped | Pipe </td><td>Broken </td><td>Blank</td></tr>
<tr><td>Escaped \</td><td>Pipe </td><td>Broken </td><td>Blank</td></tr>
<tr><td>Escaped \ </td><td>Pipe </td><td>Broken </td><td>Blank</td></tr>
<tr><td><code>Code | Pipe</code></td><td>Broken</td><td>Blank</td></tr>
<tr><td><code>Escaped Code \| Pipe</code></td><td>Broken</td><td>Blank</td></tr>
<tr><td>Escaped | Pipe</td><td>Broken</td><td>Blank</td></tr>
<tr><td>Escaped \</td><td>Pipe</td><td>Broken</td><td>Blank</td></tr>
<tr><td>Escaped \</td><td>Pipe</td><td>Broken</td><td>Blank</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th align="left">Simple </th><th>Table</th></tr>
<tr><th align="left">Simple</th><th>Table</th></tr>
</thead>
<tbody>
<tr><td align="left">3 </td><td>4</td></tr>
<tr><td align="left">3</td><td>4</td></tr>
</tbody>
</table>
<p>3 | 4</p>
76 changes: 38 additions & 38 deletions tests/github-data/tables.html
Original file line number Diff line number Diff line change
@@ -1,102 +1,102 @@
<h2>Tables</h2>
<table>
<thead>
<tr><th>First Header </th><th>Second Header</th></tr>
<tr><th>First Header</th><th>Second Header</th></tr>
</thead>
<tbody>
<tr><td>Content Cell </td><td>Content Cell</td></tr>
<tr><td>Content Cell </td><td>Content Cell</td></tr>
<tr><td>Content Cell</td><td>Content Cell</td></tr>
<tr><td>Content Cell</td><td>Content Cell</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>First Header </th><th>Second Header</th></tr>
<tr><th>First Header</th><th>Second Header</th></tr>
</thead>
<tbody>
<tr><td>Content Cell </td><td>Content Cell</td></tr>
<tr><td>Content Cell </td><td>Content Cell</td></tr>
<tr><td>Content Cell</td><td>Content Cell</td></tr>
<tr><td>Content Cell</td><td>Content Cell</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Name </th><th>Description</th></tr>
<tr><th>Name</th><th>Description</th></tr>
</thead>
<tbody>
<tr><td>Help </td><td>Display the help window.</td></tr>
<tr><td>Close </td><td>Closes a window</td></tr>
<tr><td>Help</td><td>Display the help window.</td></tr>
<tr><td>Close</td><td>Closes a window</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Name </th><th>Description</th></tr>
<tr><th>Name</th><th>Description</th></tr>
</thead>
<tbody>
<tr><td>Help </td><td><strong>Display the</strong> help window.</td></tr>
<tr><td>Close </td><td><em>Closes</em> a window</td></tr>
<tr><td>Help</td><td><strong>Display the</strong> help window.</td></tr>
<tr><td>Close</td><td><em>Closes</em> a window</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Default-Align </th><th align="left">Left-Aligned </th><th align="center">Center Aligned </th><th align="right">Right Aligned</th></tr>
<tr><th>Default-Align</th><th align="left">Left-Aligned</th><th align="center">Center Aligned</th><th align="right">Right Aligned</th></tr>
</thead>
<tbody>
<tr><td>1 </td><td align="left">col 3 is </td><td align="center">some wordy text </td><td align="right">$1600</td></tr>
<tr><td>2 </td><td align="left">col 2 is </td><td align="center">centered </td><td align="right"> $12</td></tr>
<tr><td>3 </td><td align="left">zebra stripes </td><td align="center">are neat </td><td align="right"> $1</td></tr>
<tr><td>1</td><td align="left">col 3 is</td><td align="center">some wordy text</td><td align="right">$1600</td></tr>
<tr><td>2</td><td align="left">col 2 is</td><td align="center">centered</td><td align="right">$12</td></tr>
<tr><td>3</td><td align="left">zebra stripes</td><td align="center">are neat</td><td align="right">$1</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Simple </th><th>Table</th></tr>
<tr><th>Simple</th><th>Table</th></tr>
</thead>
<tbody>
<tr><td>1 </td><td>2</td></tr>
<tr><td>3 </td><td>4</td></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>3</td><td>4</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th>Simple </th><th>Table</th></tr>
<tr><th>Simple</th><th>Table</th></tr>
</thead>
<tbody>
<tr><td>1 </td><td>2</td></tr>
<tr><td>3 </td><td>4</td></tr>
<tr><td>3 </td><td>4 |</td></tr>
<tr><td>3 </td><td>4 \</td></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>3</td><td>4</td></tr>
<tr><td>3</td><td>4 |</td></tr>
<tr><td>3</td><td>4 \</td></tr>
</tbody>
</table>
<p>Check <a href="https://github.com/erusev/parsedown/issues/184">https://github.com/erusev/parsedown/issues/184</a> for the following:</p>
<table>
<thead>
<tr><th>Foo </th><th>Bar </th><th>State</th></tr>
<tr><th>Foo</th><th>Bar</th><th>State</th></tr>
</thead>
<tbody>
<tr><td><code>Code | Pipe</code> </td><td>Broken </td><td>Blank</td></tr>
<tr><td><code>Escaped Code \| Pipe</code> </td><td>Broken </td><td>Blank</td></tr>
<tr><td>Escaped | Pipe </td><td>Broken </td><td>Blank</td></tr>
<tr><td>Escaped \</td><td>Pipe </td><td>Broken </td><td>Blank</td></tr>
<tr><td>Escaped \ </td><td>Pipe </td><td>Broken </td><td>Blank</td></tr>
<tr><td><code>Code | Pipe</code></td><td>Broken</td><td>Blank</td></tr>
<tr><td><code>Escaped Code \| Pipe</code></td><td>Broken</td><td>Blank</td></tr>
<tr><td>Escaped | Pipe</td><td>Broken</td><td>Blank</td></tr>
<tr><td>Escaped \</td><td>Pipe</td><td>Broken</td><td>Blank</td></tr>
<tr><td>Escaped \</td><td>Pipe</td><td>Broken</td><td>Blank</td></tr>
</tbody>
</table>
<table>
<thead>
<tr><th align="left">Simple </th><th>Table</th></tr>
<tr><th align="left">Simple</th><th>Table</th></tr>
</thead>
<tbody>
<tr><td align="left">3 </td><td>4</td></tr>
<tr><td align="left">3</td><td>4</td></tr>
</tbody>
</table>
<p>3 | 4</p>
<table>
<thead>
<tr><th>Table </th><th>With </th><th>Empty </th><th>Cells</th></tr>
<tr><th>Table</th><th>With</th><th>Empty</th><th>Cells</th></tr>
</thead>
<tbody>
<tr><td></td><td> </td><td> </td><td></td></tr>
<tr><td>a </td><td> </td><td> b </td><td></td></tr>
<tr><td></td><td> a </td><td> </td><td> b</td></tr>
<tr><td>a </td><td> </td><td> </td><td> b</td></tr>
<tr><td></td><td> a </td><td> b </td><td></td></tr>
<tr><td></td><td></td><td></td><td></td></tr>
<tr><td>a</td><td></td><td>b</td><td></td></tr>
<tr><td></td><td>a</td><td></td><td>b</td></tr>
<tr><td>a</td><td></td><td></td><td>b</td></tr>
<tr><td></td><td>a</td><td>b</td><td></td></tr>
</tbody>
</table>
<table>
Expand Down

0 comments on commit a03ad0d

Please sign in to comment.