Skip to content

Commit 4f9c23f

Browse files
authored
Merge pull request #91 from darkriszty/bug/unbordered-tbl-padding-with-center-or-right-first-column
Fixed markdown spec compliance for unbordered tables with center/rig…
2 parents 6a96006 + 1db75db commit 4f9c23f

9 files changed

Lines changed: 241 additions & 93 deletions

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p
88
### Added
99
- Issue #86: Add support for header-only tables (without data rows)
1010

11+
### Fixed
12+
- Issue #85: Fixed markdown spec compliance for unbordered tables with center/right aligned first columns. First column now uses left padding logic regardless of alignment to prevent invalid markdown output.
13+
1114
## 3.7.0 - 2025-08-29
1215
### Added
1316
- Issue #78: Support tab indentation for tables without a border.

src/padCalculation/padCalculatorSelector.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ export class PadCalculatorSelector {
1919
private static readonly rightLastColumn = new RightAlignment.LastColumnPadCalculator();
2020

2121
public select(table: Table, column: number) : BasePadCalculator {
22+
// For unbordered tables, the first column should never have additional left padding that isn't indentation (markdown spec compliance).
23+
// Use left alignment padding logic for the first column regardless of its actual alignment.
24+
if (column === 0 && !table.hasLeftBorder) {
25+
return this.leftAlignmentPadCalculator(table, column);
26+
}
27+
2228
switch (table.alignments[column]) {
2329
case Alignment.Center: return this.centerAlignmentPadCalculator(table, column);
2430
case Alignment.Right: return this.rightAlignmentPadCalculator(table, column);
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
Type | Range | Size
1+
Type | Range | Size
22
:-----:|:-------------------------------------------------------:|:-----------------------:
3-
sbyte | -128 to 127 | Signed 8-bit integer
4-
byte | 0 to 255 | Unsigned 8-bit integer
5-
char | U+0000 to U+ffff | Unicode 16-bit character
6-
short | -32,768 to 32,767 | Signed 16-bit integer
3+
sbyte | -128 to 127 | Signed 8-bit integer
4+
byte | 0 to 255 | Unsigned 8-bit integer
5+
char | U+0000 to U+ffff | Unicode 16-bit character
6+
short | -32,768 to 32,767 | Signed 16-bit integer
77
ushort | 0 to 65,535 | Unsigned 16-bit integer
8-
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
9-
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
10-
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
11-
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
8+
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
9+
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
10+
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
11+
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
Type | Range | Size
1+
Type | Range | Size
22
------:|--------------------------------------------------------:|------------------------:
3-
sbyte | -128 to 127 | Signed 8-bit integer
4-
byte | 0 to 255 | Unsigned 8-bit integer
5-
char | U+0000 to U+ffff | Unicode 16-bit character
6-
short | -32,768 to 32,767 | Signed 16-bit integer
3+
sbyte | -128 to 127 | Signed 8-bit integer
4+
byte | 0 to 255 | Unsigned 8-bit integer
5+
char | U+0000 to U+ffff | Unicode 16-bit character
6+
short | -32,768 to 32,767 | Signed 16-bit integer
77
ushort | 0 to 65,535 | Unsigned 16-bit integer
8-
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
9-
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
10-
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
11-
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
8+
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
9+
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
10+
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
11+
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
Type | Range | Size
1+
Type | Range | Size
22
------:|:-------------------------------------------------------:|------------------------:
3-
sbyte | -128 to 127 | Signed 8-bit integer
4-
byte | 0 to 255 | Unsigned 8-bit integer
5-
char | U+0000 to U+ffff | Unicode 16-bit character
6-
short | -32,768 to 32,767 | Signed 16-bit integer
3+
sbyte | -128 to 127 | Signed 8-bit integer
4+
byte | 0 to 255 | Unsigned 8-bit integer
5+
char | U+0000 to U+ffff | Unicode 16-bit character
6+
short | -32,768 to 32,767 | Signed 16-bit integer
77
ushort | 0 to 65,535 | Unsigned 16-bit integer
8-
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
9-
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
10-
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
11-
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
8+
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
9+
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
10+
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
11+
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer

test/systemTests/resources/indentWithoutBordersButUsingTabs-expected.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,26 @@
2323
byte | 0 to 255 | Unsigned 8-bit integer
2424
char | U+0000 to U+ffff | Unicode 16-bit character
2525
* Right aligned
26-
Type | Range | Size
26+
Type | Range | Size
2727
-----:|-----------------:|------------------------:
2828
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
29+
byte | 0 to 255 | Unsigned 8-bit integer
30+
char | U+0000 to U+ffff | Unicode 16-bit character
3131
* Center aligned
32-
Type | Range | Size
32+
Type | Range | Size
3333
:----:|:-----------------|:-----------------------:
3434
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
35+
byte | 0 to 255 | Unsigned 8-bit integer
36+
char | U+0000 to U+ffff | Unicode 16-bit character
3737
* Already right aligned should remain untouched
38-
Type | Range | Size
38+
Type | Range | Size
3939
-----:|-----------------:|------------------------:
4040
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
41+
byte | 0 to 255 | Unsigned 8-bit integer
42+
char | U+0000 to U+ffff | Unicode 16-bit character
4343
* Already center aligned should remain untouched
44-
Type | Range | Size
44+
Type | Range | Size
4545
:----:|:-----------------|:-----------------------:
4646
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
47+
byte | 0 to 255 | Unsigned 8-bit integer
48+
char | U+0000 to U+ffff | Unicode 16-bit character

test/systemTests/resources/paddingOf1-expected.md

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,17 @@
3434
| long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer |
3535
| ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer |
3636

37-
Type | Range | Size
37+
Type | Range | Size
3838
:-----: | :-------------------------------------------------------: | :-----------------------:
39-
sbyte | -128 to 127 | Signed 8-bit integer
40-
byte | 0 to 255 | Unsigned 8-bit integer
41-
char | U+0000 to U+ffff | Unicode 16-bit character
42-
short | -32,768 to 32,767 | Signed 16-bit integer
39+
sbyte | -128 to 127 | Signed 8-bit integer
40+
byte | 0 to 255 | Unsigned 8-bit integer
41+
char | U+0000 to U+ffff | Unicode 16-bit character
42+
short | -32,768 to 32,767 | Signed 16-bit integer
4343
ushort | 0 to 65,535 | Unsigned 16-bit integer
44-
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
45-
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
46-
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
47-
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
44+
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
45+
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
46+
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
47+
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
4848

4949
| Type | Range | Size |
5050
| -------: | :-------------------------------------------------------: | -------------------------: |
@@ -58,17 +58,17 @@
5858
| long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer |
5959
| ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer |
6060

61-
Type | Range | Size
61+
Type | Range | Size
6262
------: | :-------------------------------------------------------: | ------------------------:
63-
sbyte | -128 to 127 | Signed 8-bit integer
64-
byte | 0 to 255 | Unsigned 8-bit integer
65-
char | U+0000 to U+ffff | Unicode 16-bit character
66-
short | -32,768 to 32,767 | Signed 16-bit integer
63+
sbyte | -128 to 127 | Signed 8-bit integer
64+
byte | 0 to 255 | Unsigned 8-bit integer
65+
char | U+0000 to U+ffff | Unicode 16-bit character
66+
short | -32,768 to 32,767 | Signed 16-bit integer
6767
ushort | 0 to 65,535 | Unsigned 16-bit integer
68-
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
69-
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
70-
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
71-
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
68+
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
69+
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
70+
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
71+
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
7272

7373
| Type | Range | Size |
7474
| -------: | --------------------------------------------------------: | -------------------------: |
@@ -82,17 +82,17 @@
8282
| long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer |
8383
| ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer |
8484

85-
Type | Range | Size
85+
Type | Range | Size
8686
------: | --------------------------------------------------------: | ------------------------:
87-
sbyte | -128 to 127 | Signed 8-bit integer
88-
byte | 0 to 255 | Unsigned 8-bit integer
89-
char | U+0000 to U+ffff | Unicode 16-bit character
90-
short | -32,768 to 32,767 | Signed 16-bit integer
87+
sbyte | -128 to 127 | Signed 8-bit integer
88+
byte | 0 to 255 | Unsigned 8-bit integer
89+
char | U+0000 to U+ffff | Unicode 16-bit character
90+
short | -32,768 to 32,767 | Signed 16-bit integer
9191
ushort | 0 to 65,535 | Unsigned 16-bit integer
92-
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
93-
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
94-
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
95-
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
92+
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer
93+
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer
94+
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer
95+
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer
9696

9797
Type | Range | Size
9898
--------- | --------------------------------------------------------- | -------------------------

0 commit comments

Comments
 (0)