Skip to content

Commit 8cd5d7c

Browse files
committed
Allow tabs to be used as table indentation without left border
1 parent ef68f56 commit 8cd5d7c

5 files changed

Lines changed: 130 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Makes tables more readable for humans. Compatible with the Markdown writer plugi
1717
- Support column alignment options with ":".
1818
- Find and format multiple tables.
1919
- Support \``code blocks`\` and ignore blocks with `<!-- markdown-table-prettify-ignore-start -->` and `<!-- markdown-table-prettify-ignore-end -->`.
20-
- Support indented tables.
20+
- Support indented tables (tables with borders or tab indented).
2121

2222
## Visual Studio Code
2323

src/modelFactory/transformers/borderTransformer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export class BorderTransformer extends Transformer {
1414
const rows: Row[] = this.rowsWithoutEmptyFirstAndLastColumn(input.rows, hasLeftBorder, hasRightBorder);
1515
const alignments = this.alignmentsWithoutEmptyFirstAndLastColumn(input.alignments, hasLeftBorder, hasRightBorder);
1616

17-
const leftPad = hasLeftBorder
17+
// allow indentation if the table has a clear left border or if it was indented with tabs (possibly with additional spaces for alignment)
18+
const leftPad = hasLeftBorder || /^\t/.test(input.leftPad)
1819
? input.leftPad
1920
: "";
2021
let result = new Table(rows, input.separatorEOL, alignments, leftPad);
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
* Single tab
2+
Type | Range | Size
3+
------|------------------|-------------------------
4+
sbyte | -128 to 127 | Signed 8-bit integer
5+
byte | 0 to 255 | Unsigned 8-bit integer
6+
char | U+0000 to U+ffff | Unicode 16-bit character
7+
* Two tabs
8+
Type | Range | Size
9+
------|------------------|-------------------------
10+
sbyte | -128 to 127 | Signed 8-bit integer
11+
byte | 0 to 255 | Unsigned 8-bit integer
12+
char | U+0000 to U+ffff | Unicode 16-bit character
13+
* Mixed tabs and spaces, but more tab
14+
Type | Range | Size
15+
------|------------------|-------------------------
16+
sbyte | -128 to 127 | Signed 8-bit integer
17+
byte | 0 to 255 | Unsigned 8-bit integer
18+
char | U+0000 to U+ffff | Unicode 16-bit character
19+
* Left aligned
20+
Type | Range | Size
21+
:-----|:-----------------|:------------------------
22+
sbyte | -128 to 127 | Signed 8-bit integer
23+
byte | 0 to 255 | Unsigned 8-bit integer
24+
char | U+0000 to U+ffff | Unicode 16-bit character
25+
* Right aligned
26+
Type | Range | Size
27+
-----:|-----------------:|------------------------:
28+
sbyte | -128 to 127 | Signed 8-bit integer
29+
byte | 0 to 255 | Unsigned 8-bit integer
30+
char | U+0000 to U+ffff | Unicode 16-bit character
31+
* Center aligned
32+
Type | Range | Size
33+
:----:|:-----------------|:-----------------------:
34+
sbyte | -128 to 127 | Signed 8-bit integer
35+
byte | 0 to 255 | Unsigned 8-bit integer
36+
char | U+0000 to U+ffff | Unicode 16-bit character
37+
* Already right aligned should remain untouched
38+
Type | Range | Size
39+
-----:|-----------------:|------------------------:
40+
sbyte | -128 to 127 | Signed 8-bit integer
41+
byte | 0 to 255 | Unsigned 8-bit integer
42+
char | U+0000 to U+ffff | Unicode 16-bit character
43+
* Already center aligned should remain untouched
44+
Type | Range | Size
45+
:----:|:-----------------|:-----------------------:
46+
sbyte | -128 to 127 | Signed 8-bit integer
47+
byte | 0 to 255 | Unsigned 8-bit integer
48+
char | U+0000 to U+ffff | Unicode 16-bit character
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
* Single tab
2+
Type | Range| Size
3+
-|-|-
4+
sbyte | -128 to 127| Signed 8-bit integer
5+
byte| 0 to 255| Unsigned 8-bit integer
6+
char| U+0000 to U+ffff| Unicode 16-bit character
7+
* Two tabs
8+
Type | Range| Size
9+
-|-|-
10+
sbyte | -128 to 127| Signed 8-bit integer
11+
byte| 0 to 255| Unsigned 8-bit integer
12+
char| U+0000 to U+ffff| Unicode 16-bit character
13+
* Mixed tabs and spaces, but more tab
14+
Type | Range| Size
15+
-|-|-
16+
sbyte | -128 to 127| Signed 8-bit integer
17+
byte| 0 to 255| Unsigned 8-bit integer
18+
char| U+0000 to U+ffff| Unicode 16-bit character
19+
* Left aligned
20+
Type | Range| Size
21+
:-|:-|:-
22+
sbyte | -128 to 127| Signed 8-bit integer
23+
byte| 0 to 255| Unsigned 8-bit integer
24+
char| U+0000 to U+ffff| Unicode 16-bit character
25+
* Right aligned
26+
Type | Range| Size
27+
-:|-:|-:
28+
sbyte | -128 to 127| Signed 8-bit integer
29+
byte| 0 to 255| Unsigned 8-bit integer
30+
char| U+0000 to U+ffff| Unicode 16-bit character
31+
* Center aligned
32+
Type | Range| Size
33+
:-:|:-|:-:
34+
sbyte | -128 to 127| Signed 8-bit integer
35+
byte| 0 to 255| Unsigned 8-bit integer
36+
char| U+0000 to U+ffff| Unicode 16-bit character
37+
* Already right aligned should remain untouched
38+
Type | Range | Size
39+
-----:|-----------------:|------------------------:
40+
sbyte | -128 to 127 | Signed 8-bit integer
41+
byte | 0 to 255 | Unsigned 8-bit integer
42+
char | U+0000 to U+ffff | Unicode 16-bit character
43+
* Already center aligned should remain untouched
44+
Type | Range | Size
45+
:----:|:-----------------|:-----------------------:
46+
sbyte | -128 to 127 | Signed 8-bit integer
47+
byte | 0 to 255 | Unsigned 8-bit integer
48+
char | U+0000 to U+ffff | Unicode 16-bit character

test/unitTests/modelFactory/transformers/borderTransformer.test.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,43 @@ suite("BorderTransformer tests", () => {
6666
assert.strictEqual(table.leftPad, "\t");
6767
});
6868

69-
test("process() does not keep leftPad if table has no left border", () => {
69+
test("process() does not keep leftPad if table has no left border and uses spaces", () => {
70+
const rows = [
71+
[" h1 ", " ", " h3 "],
72+
["c", " ", "e"]
73+
];
74+
const table = createSut().process(tableFor(rows, " "));
75+
76+
assert.strictEqual(table.leftPad, "");
77+
});
78+
79+
test("process() keeps leftPad if table has no left border but uses tabs", () => {
7080
const rows = [
7181
[" h1 ", " ", " h3 "],
7282
["c", " ", "e"]
7383
];
7484
const table = createSut().process(tableFor(rows, "\t"));
7585

86+
assert.strictEqual(table.leftPad, "\t");
87+
});
88+
89+
test("process() keeps leftPad if table has no left border but uses multiple tabs", () => {
90+
const rows = [
91+
[" h1 ", " ", " h3 "],
92+
["c", " ", "e"]
93+
];
94+
const table = createSut().process(tableFor(rows, "\t\t\t"));
95+
96+
assert.strictEqual(table.leftPad, "\t\t\t");
97+
});
98+
99+
test("process() does not keep leftPad if table has no left border and uses mixed whitespace", () => {
100+
const rows = [
101+
[" h1 ", " ", " h3 "],
102+
["c", " ", "e"]
103+
];
104+
const table = createSut().process(tableFor(rows, " \t "));
105+
76106
assert.strictEqual(table.leftPad, "");
77107
});
78108

0 commit comments

Comments
 (0)