Skip to content

Commit e045e9a

Browse files
committed
Simplify separator row calculation
1 parent 120b925 commit e045e9a

18 files changed

Lines changed: 53 additions & 254 deletions

src/extension/extension.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { RowViewModelFactory } from '../viewModelFactories/rowViewModelFactory';
1313
import { TrimmerTransformer } from '../modelFactory/transformers/trimmerTransformer';
1414
import { BorderTransformer } from '../modelFactory/transformers/borderTransformer';
1515
import { SelectionInterpreter } from '../modelFactory/selectionInterpreter';
16-
import { SeparatorPadCalculator } from '../padCalculation/separatorPadCalculator';
1716
import { PadCalculatorSelector } from '../padCalculation/padCalculatorSelector';
1817
import { AlignmentMarkerStrategy } from '../viewModelFactories/alignmentMarking';
1918

@@ -32,8 +31,7 @@ export function activate(context: vscode.ExtensionContext): void {
3231
new TableValidator(new SelectionInterpreter()),
3332
new TableViewModelFactory(
3433
new RowViewModelFactory(
35-
new ContentPadCalculator(new PadCalculatorSelector(), " "),
36-
new SeparatorPadCalculator(new PadCalculatorSelector(), "-"),
34+
new ContentPadCalculator(new PadCalculatorSelector(), " "),
3735
new AlignmentMarkerStrategy(":")
3836
)
3937
),

src/padCalculation/center/lastColumnPadCalculator.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@ import { Cell } from "../../models/cell";
44

55
export class LastColumnPadCalculator extends BasePadCalculator {
66
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7-
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
7+
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
88
}
99

1010
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
1111
if (!table.hasRightBorder) return "";
12-
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
12+
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
1313
}
1414

1515
private totalPadCount(table: Table, column: number, row: number): number {
1616
const longestColumnLength = table.getLongestColumnLengths()[column];
1717
let padCount = longestColumnLength > 0
1818
? longestColumnLength - table.rows[row][column].getLength()
1919
: 1;
20-
padCount++;
20+
padCount += 2;
2121
return padCount / 2;
2222
}
2323
}

src/padCalculation/separatorPadCalculator.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/viewModelFactories/rowViewModelFactory.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import { Alignment } from "../models/alignment";
55
import { AlignmentMarkerStrategy } from "./alignmentMarking";
66

77
export class RowViewModelFactory {
8+
private separatorChar : string = "-";
89

910
constructor(
1011
private _contentPadCalculator: PadCalculator,
11-
private _separatorPadCalculator: PadCalculator,
1212
private _alignmentMarkerStrategy: AlignmentMarkerStrategy)
1313
{ }
1414

@@ -26,15 +26,17 @@ export class RowViewModelFactory {
2626
return new RowViewModel(resultRow);
2727
}
2828

29-
public buildSeparator(table: Table): RowViewModel {
30-
let resultRow = new Array(table.columnCount);
29+
public buildSeparator(rows: RowViewModel[], table: Table): RowViewModel {
30+
const columnCount = rows[0].columnCount;
31+
let lengths = Array(columnCount).fill(0);
3132

32-
for(let col = 0; col < table.columnCount; col++)
33-
resultRow[col] = this._alignmentMarkerStrategy.markerFor(table.alignments[col]).mark(
34-
this._separatorPadCalculator.getLeftPadding(table, 1, col) +
35-
this._separatorPadCalculator.getRightPadding(table, 0, col)
36-
);
33+
for (const row of rows) {
34+
for (let i = 0; i < columnCount; i++) {
35+
lengths[i] = Math.max(lengths[i], (row.getValueAt(i).length));
36+
}
37+
}
3738

38-
return new RowViewModel(resultRow);
39+
const values = lengths.map(l => this.separatorChar.repeat(l)).map((val ,col) => this._alignmentMarkerStrategy.markerFor(table.alignments[col]).mark(val));
40+
return new RowViewModel(values);
3941
}
4042
}

src/viewModelFactories/tableViewModelFactory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ export class TableViewModelFactory {
1616
result.hasLeftBorder = tableWithoutSeparator.hasLeftBorder;
1717
result.hasRightBorder = tableWithoutSeparator.hasRightBorder;
1818
result.header = this._rowViewModelFactory.buildRow(0, tableWithoutSeparator);
19-
result.separator = this._rowViewModelFactory.buildSeparator(tableWithoutSeparator);
2019
result.rows = this.buildRows(tableWithoutSeparator);
20+
result.separator = this._rowViewModelFactory.buildSeparator(result.rows, tableWithoutSeparator);
2121

2222
return result;
2323
}

test/systemTests/resources/alignCenterWithoutBorder-expected.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Type | Range | Size
2-
:-----:|:-------------------------------------------------------:|:------------------------:
2+
:-----:|:-------------------------------------------------------:|:-----------------------:
33
sbyte | -128 to 127 | Signed 8-bit integer
44
byte | 0 to 255 | Unsigned 8-bit integer
55
char | U+0000 to U+ffff | Unicode 16-bit character
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
|Type|Range|Size|
22
|-:|-:|-:|
3-
|sbyte|-128to127|Signed8-bit integer|
4-
|byte|0to255|Unsigned8-bit integer|
5-
|char|U+0000toU+ffff|Unicode16-bit character|
6-
|short|-32,768to32,767|Signed16-bit integer|
7-
|ushort|0to65,535|Unsigned16-bit integer|
8-
|int|-2,147,483,648to2,147,483,647|Signed32-bit integer|
9-
|uint|0to4,294,967,295|Unsigned32-bit integer|
10-
|long|-9,223,372,036,854,775,808to9,223,372,036,854,775,807|Signed64-bit integer|
11-
|ulong|0to18,446,744,073,709,551,615|Unsigned64-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|
7+
|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|
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
Type|Range|Size
22
-:|-:|-:
3-
sbyte|-128to127|Signed8-bit integer
4-
byte|0to255|Unsigned8-bit integer
5-
char|U+0000toU+ffff|Unicode16-bit character
6-
short|-32,768to32,767|Signed16-bit integer
7-
ushort|0to65,535|Unsigned16-bit integer
8-
int|-2,147,483,648to2,147,483,647|Signed32-bit integer
9-
uint|0to4,294,967,295|Unsigned32-bit integer
10-
long|-9,223,372,036,854,775,808to9,223,372,036,854,775,807|Signed64-bit integer
11-
ulong|0to18,446,744,073,709,551,615|Unsigned64-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
7+
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

test/systemTests/resources/cjkHaveLength2-expected.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Type | Range | Size
2-
---------|---------------------------------------------------------|--------------------------
2+
---------|---------------------------------------------------------|-------------------------
33
sbyte | -128 to 127 | Signed 8-bit integer
44
byte | 0 to 255 | Unsigned 8-bit integer
55
char | U+0000 to U+ffff | Unicode 16-bit character

test/systemTests/resources/emptyCell-expected.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Type | Range | Size
2-
-------|---------------------------------------------------------|--------------------------
2+
-------|---------------------------------------------------------|-------------------------
33
| foo | bar
44
foo | | bar
55
foo | bar |

0 commit comments

Comments
 (0)