A markdown-it plugin to merge adjacent cells with same content.
It will first merge cells with same content in every column and then merge cells with same content (and height, if ones are merged in first step) in every row. This is by design because usually a column is a field and a row is a record -- it's more reasonable that multi records have same value in a field than in a record multi fields' have same value.
// Node.js
let MarkdownIt = require('markdown-it'),
MarkdownItMergeCells = require('markdown-it-merge-cells'),
md = new MarkdownIt();
md.use(MarkdownItMergeCells);
// Browser (use dist/bundle.min.js)
let md = new window.markdownit();
md.use(window.markdownitMergeCells);
let result = md.render(`
|1|1|3|4|5|
|-|-|-|-|-|
|1|1|2|2|6|
|1|1|2|2|7|
|1|4|3|5|5|
`)
The result is:
1 | 3 | 4 | 5 | |
---|---|---|---|---|
1 | 1 | 2 | 6 | |
7 | ||||
4 | 3 | 5 |
The rendered HTML is:
<table>
<thead>
<tr>
<th colspan="2">1</th>
<th>3</th>
<th>4</th>
<th>5</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="3">1</td>
<td rowspan="2">1</td>
<td rowspan="2" colspan="2">2</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td colspan="2">5</td>
</tr>
</tbody>
</table>
It's done by wrap markdown-it's table parser and modify the generated tokens (which will be rendered to HTML). If in later versions markdown-it change the tokens' generated by table parser, this plugin may not able to work anymore.
File a issue if you find this plugin can't work with latest version of markdown-it.