diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a8340b..6ca4d02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p ### Added - Issue #86: Add support for header-only tables (without data rows) +### Fixed +- 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. + ## 3.7.0 - 2025-08-29 ### Added - Issue #78: Support tab indentation for tables without a border. diff --git a/src/padCalculation/padCalculatorSelector.ts b/src/padCalculation/padCalculatorSelector.ts index e41a476..d3296cd 100644 --- a/src/padCalculation/padCalculatorSelector.ts +++ b/src/padCalculation/padCalculatorSelector.ts @@ -19,6 +19,12 @@ export class PadCalculatorSelector { private static readonly rightLastColumn = new RightAlignment.LastColumnPadCalculator(); public select(table: Table, column: number) : BasePadCalculator { + // For unbordered tables, the first column should never have additional left padding that isn't indentation (markdown spec compliance). + // Use left alignment padding logic for the first column regardless of its actual alignment. + if (column === 0 && !table.hasLeftBorder) { + return this.leftAlignmentPadCalculator(table, column); + } + switch (table.alignments[column]) { case Alignment.Center: return this.centerAlignmentPadCalculator(table, column); case Alignment.Right: return this.rightAlignmentPadCalculator(table, column); diff --git a/test/systemTests/resources/alignCenterWithoutBorder-expected.md b/test/systemTests/resources/alignCenterWithoutBorder-expected.md index c2883c2..0c1dc63 100644 --- a/test/systemTests/resources/alignCenterWithoutBorder-expected.md +++ b/test/systemTests/resources/alignCenterWithoutBorder-expected.md @@ -1,11 +1,11 @@ - Type | Range | Size +Type | Range | Size :-----:|:-------------------------------------------------------:|:-----------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer +sbyte | -128 to 127 | Signed 8-bit integer +byte | 0 to 255 | Unsigned 8-bit integer +char | U+0000 to U+ffff | Unicode 16-bit character +short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer \ No newline at end of file +int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer +uint | 0 to 4,294,967,295 | Unsigned 32-bit integer +long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer +ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer \ No newline at end of file diff --git a/test/systemTests/resources/alignRightWithoutBorder-expected.md b/test/systemTests/resources/alignRightWithoutBorder-expected.md index 3c24a90..7ae5573 100644 --- a/test/systemTests/resources/alignRightWithoutBorder-expected.md +++ b/test/systemTests/resources/alignRightWithoutBorder-expected.md @@ -1,11 +1,11 @@ - Type | Range | Size +Type | Range | Size ------:|--------------------------------------------------------:|------------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer +sbyte | -128 to 127 | Signed 8-bit integer +byte | 0 to 255 | Unsigned 8-bit integer +char | U+0000 to U+ffff | Unicode 16-bit character +short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer \ No newline at end of file +int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer +uint | 0 to 4,294,967,295 | Unsigned 32-bit integer +long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer +ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer \ No newline at end of file diff --git a/test/systemTests/resources/alignmentsWithoutBorder-expected.md b/test/systemTests/resources/alignmentsWithoutBorder-expected.md index 7e190f6..555bf17 100644 --- a/test/systemTests/resources/alignmentsWithoutBorder-expected.md +++ b/test/systemTests/resources/alignmentsWithoutBorder-expected.md @@ -1,11 +1,11 @@ - Type | Range | Size +Type | Range | Size ------:|:-------------------------------------------------------:|------------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer +sbyte | -128 to 127 | Signed 8-bit integer +byte | 0 to 255 | Unsigned 8-bit integer +char | U+0000 to U+ffff | Unicode 16-bit character +short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer \ No newline at end of file +int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer +uint | 0 to 4,294,967,295 | Unsigned 32-bit integer +long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer +ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer \ No newline at end of file diff --git a/test/systemTests/resources/indentWithoutBordersButUsingTabs-expected.md b/test/systemTests/resources/indentWithoutBordersButUsingTabs-expected.md index 08a5da5..30ac6b7 100644 --- a/test/systemTests/resources/indentWithoutBordersButUsingTabs-expected.md +++ b/test/systemTests/resources/indentWithoutBordersButUsingTabs-expected.md @@ -23,26 +23,26 @@ byte | 0 to 255 | Unsigned 8-bit integer char | U+0000 to U+ffff | Unicode 16-bit character * Right aligned - Type | Range | Size + Type | Range | Size -----:|-----------------:|------------------------: sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character * Center aligned - Type | Range | Size + Type | Range | Size :----:|:-----------------|:-----------------------: sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character * Already right aligned should remain untouched - Type | Range | Size + Type | Range | Size -----:|-----------------:|------------------------: sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character * Already center aligned should remain untouched - Type | Range | Size + Type | Range | Size :----:|:-----------------|:-----------------------: sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character \ No newline at end of file + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character \ No newline at end of file diff --git a/test/systemTests/resources/paddingOf1-expected.md b/test/systemTests/resources/paddingOf1-expected.md index 70e3c76..a46edd7 100644 --- a/test/systemTests/resources/paddingOf1-expected.md +++ b/test/systemTests/resources/paddingOf1-expected.md @@ -34,17 +34,17 @@ | long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer | | ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | - Type | Range | Size + Type | Range | Size :-----: | :-------------------------------------------------------: | :-----------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer + sbyte | -128 to 127 | Signed 8-bit integer + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character + short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer + int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer + uint | 0 to 4,294,967,295 | Unsigned 32-bit integer + long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer + ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | Type | Range | Size | | -------: | :-------------------------------------------------------: | -------------------------: | @@ -58,17 +58,17 @@ | long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer | | ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | - Type | Range | Size + Type | Range | Size ------: | :-------------------------------------------------------: | ------------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer + sbyte | -128 to 127 | Signed 8-bit integer + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character + short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer + int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer + uint | 0 to 4,294,967,295 | Unsigned 32-bit integer + long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer + ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | Type | Range | Size | | -------: | --------------------------------------------------------: | -------------------------: | @@ -82,17 +82,17 @@ | long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer | | ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | - Type | Range | Size + Type | Range | Size ------: | --------------------------------------------------------: | ------------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer + sbyte | -128 to 127 | Signed 8-bit integer + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character + short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer + int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer + uint | 0 to 4,294,967,295 | Unsigned 32-bit integer + long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer + ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer Type | Range | Size --------- | --------------------------------------------------------- | ------------------------- diff --git a/test/systemTests/resources/paddingOf2-expected.md b/test/systemTests/resources/paddingOf2-expected.md index 343f7c2..4b98289 100644 --- a/test/systemTests/resources/paddingOf2-expected.md +++ b/test/systemTests/resources/paddingOf2-expected.md @@ -34,17 +34,17 @@ | long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer | | ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | - Type | Range | Size + Type | Range | Size :-----: | :-------------------------------------------------------: | :-----------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer + sbyte | -128 to 127 | Signed 8-bit integer + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character + short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer + int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer + uint | 0 to 4,294,967,295 | Unsigned 32-bit integer + long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer + ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | Type | Range | Size | | -------: | :-------------------------------------------------------: | -------------------------: | @@ -58,17 +58,17 @@ | long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer | | ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | - Type | Range | Size + Type | Range | Size ------: | :-------------------------------------------------------: | ------------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer + sbyte | -128 to 127 | Signed 8-bit integer + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character + short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer + int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer + uint | 0 to 4,294,967,295 | Unsigned 32-bit integer + long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer + ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | Type | Range | Size | | -------: | --------------------------------------------------------: | -------------------------: | @@ -82,17 +82,17 @@ | long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer | | ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer | - Type | Range | Size + Type | Range | Size ------: | --------------------------------------------------------: | ------------------------: - sbyte | -128 to 127 | Signed 8-bit integer - byte | 0 to 255 | Unsigned 8-bit integer - char | U+0000 to U+ffff | Unicode 16-bit character - short | -32,768 to 32,767 | Signed 16-bit integer + sbyte | -128 to 127 | Signed 8-bit integer + byte | 0 to 255 | Unsigned 8-bit integer + char | U+0000 to U+ffff | Unicode 16-bit character + short | -32,768 to 32,767 | Signed 16-bit integer ushort | 0 to 65,535 | Unsigned 16-bit integer - int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer - uint | 0 to 4,294,967,295 | Unsigned 32-bit integer - long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer - ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer + int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer + uint | 0 to 4,294,967,295 | Unsigned 32-bit integer + long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer + ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer Type | Range | Size --------- | --------------------------------------------------------- | ------------------------- diff --git a/test/unitTests/padCalculation/padCalculatorSelector.test.ts b/test/unitTests/padCalculation/padCalculatorSelector.test.ts new file mode 100644 index 0000000..0984aed --- /dev/null +++ b/test/unitTests/padCalculation/padCalculatorSelector.test.ts @@ -0,0 +1,139 @@ +import * as assert from 'assert'; +import { PadCalculatorSelector } from '../../../src/padCalculation/padCalculatorSelector'; +import { Table } from '../../../src/models/table'; +import { Alignment } from '../../../src/models/alignment'; +import { Cell } from '../../../src/models/cell'; +import { Row } from '../../../src/models/row'; +import * as LeftAlignment from '../../../src/padCalculation/left'; +import * as RightAlignment from '../../../src/padCalculation/right'; +import * as CenterAlignment from '../../../src/padCalculation/center'; + +suite("PadCalculatorSelector tests", () => { + + test("select() First column with left alignment in bordered table returns left first column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Left, Alignment.Left, Alignment.Left]); + table.hasLeftBorder = true; + + const calculator = sut.select(table, 0); + + assert.ok(calculator instanceof LeftAlignment.FirstColumnPadCalculator); + }); + + test("select() First column with center alignment in bordered table returns center first column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Center, Alignment.Left, Alignment.Left]); + table.hasLeftBorder = true; + + const calculator = sut.select(table, 0); + + assert.ok(calculator instanceof CenterAlignment.FirstColumnPadCalculator); + }); + + test("select() First column with right alignment in bordered table returns right first column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Right, Alignment.Left, Alignment.Left]); + table.hasLeftBorder = true; + + const calculator = sut.select(table, 0); + + assert.ok(calculator instanceof RightAlignment.FirstColumnPadCalculator); + }); + + test("select() First column with left alignment in unbordered table returns left first column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Left, Alignment.Left, Alignment.Left]); + table.hasLeftBorder = false; + + const calculator = sut.select(table, 0); + + assert.ok(calculator instanceof LeftAlignment.FirstColumnPadCalculator); + }); + + test("select() First column with center alignment in unbordered table returns left first column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Center, Alignment.Left, Alignment.Left]); + table.hasLeftBorder = false; + + const calculator = sut.select(table, 0); + + assert.ok(calculator instanceof LeftAlignment.FirstColumnPadCalculator); + }); + + test("select() First column with right alignment in unbordered table returns left first column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Right, Alignment.Left, Alignment.Left]); + table.hasLeftBorder = false; + + const calculator = sut.select(table, 0); + + assert.ok(calculator instanceof LeftAlignment.FirstColumnPadCalculator); + }); + + test("select() Middle column with left alignment returns left middle column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Left, Alignment.Left, Alignment.Left]); + + const calculator = sut.select(table, 1); + + assert.ok(calculator instanceof LeftAlignment.MiddleColumnPadCalculator); + }); + + test("select() Middle column with center alignment returns center middle column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Left, Alignment.Center, Alignment.Left]); + + const calculator = sut.select(table, 1); + + assert.ok(calculator instanceof CenterAlignment.MiddleColumnPadCalculator); + }); + + test("select() Middle column with right alignment returns right middle column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Left, Alignment.Right, Alignment.Left]); + + const calculator = sut.select(table, 1); + + assert.ok(calculator instanceof RightAlignment.MiddleColumnPadCalculator); + }); + + test("select() Last column with left alignment returns left last column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Left, Alignment.Left, Alignment.Left]); + + const calculator = sut.select(table, 2); + + assert.ok(calculator instanceof LeftAlignment.LastColumnPadCalculator); + }); + + test("select() Last column with center alignment returns center last column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Left, Alignment.Left, Alignment.Center]); + + const calculator = sut.select(table, 2); + + assert.ok(calculator instanceof CenterAlignment.LastColumnPadCalculator); + }); + + test("select() Last column with right alignment returns right last column calculator", () => { + const sut = createSelector(); + const table = createTable([["a", "b", "c"]], [Alignment.Left, Alignment.Left, Alignment.Right]); + + const calculator = sut.select(table, 2); + + assert.ok(calculator instanceof RightAlignment.LastColumnPadCalculator); + }); + + function createSelector(): PadCalculatorSelector { + return new PadCalculatorSelector(); + } + + function createTable(rows: string[][], alignments: Alignment[]): Table { + const table = new Table( + rows.map(row => new Row(row.map(c => new Cell(c)), "\r\n")), + "\r\n", + alignments + ); + return table; + } +});