Skip to content

Commit 120b925

Browse files
committed
Add center alignment pad content calculation
1 parent 23db60f commit 120b925

15 files changed

Lines changed: 152 additions & 29 deletions
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { BasePadCalculator } from "../basePadCalculator";
2+
import { Table } from "../../models/table";
3+
import { Cell } from "../../models/cell";
4+
5+
export class FirstColumnPadCalculator extends BasePadCalculator {
6+
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7+
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
8+
}
9+
10+
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
11+
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
12+
}
13+
14+
private totalPadCount(table: Table, column: number, row: number): number {
15+
const longestColumnLength = table.getLongestColumnLengths()[column];
16+
let padCount = longestColumnLength > 0
17+
? longestColumnLength - table.rows[row][column].getLength()
18+
: 1;
19+
padCount++;
20+
if (table.hasLeftBorder)
21+
padCount++;
22+
return padCount / 2;
23+
}
24+
}

src/padCalculation/center/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export * from "./firstColumnPadCalculator"
2+
export * from "./middleColumnPadCalculator"
3+
export * from "./lastColumnPadCalculator"
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { BasePadCalculator } from "../basePadCalculator";
2+
import { Table } from "../../models/table";
3+
import { Cell } from "../../models/cell";
4+
5+
export class LastColumnPadCalculator extends BasePadCalculator {
6+
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7+
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
8+
}
9+
10+
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
11+
if (!table.hasRightBorder) return "";
12+
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
13+
}
14+
15+
private totalPadCount(table: Table, column: number, row: number): number {
16+
const longestColumnLength = table.getLongestColumnLengths()[column];
17+
let padCount = longestColumnLength > 0
18+
? longestColumnLength - table.rows[row][column].getLength()
19+
: 1;
20+
padCount++;
21+
return padCount / 2;
22+
}
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { BasePadCalculator } from "../basePadCalculator";
2+
import { Table } from "../../models/table";
3+
import { Cell } from "../../models/cell";
4+
5+
export class MiddleColumnPadCalculator extends BasePadCalculator {
6+
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7+
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
8+
}
9+
10+
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
11+
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
12+
}
13+
14+
private totalPadCount(table: Table, column: number, row: number): number {
15+
const longestColumnLength = table.getLongestColumnLengths()[column];
16+
let padCount = longestColumnLength > 0
17+
? longestColumnLength - table.rows[row][column].getLength()
18+
: 1;
19+
padCount += 2;
20+
return padCount / 2;
21+
}
22+
}

src/padCalculation/padCalculatorSelector.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import { Table } from "../models/table";
22
import { BasePadCalculator } from "./basePadCalculator";
33
import * as LeftAlignment from "./left";
44
import * as RightAlignment from "./right";
5+
import * as CenterAlignment from "./center";
56
import { Alignment } from "../models/alignment";
67

78
export class PadCalculatorSelector {
89
public select(table: Table, column: number) : BasePadCalculator {
910
switch (table.alignments[column]) {
10-
case Alignment.Center: return this.leftAlignmentPadCalculator(table, column);
11+
case Alignment.Center: return this.centerAlignmentPadCalculator(table, column);
1112
case Alignment.Right: return this.rightAlignmentPadCalculator(table, column);
1213
default: return this.leftAlignmentPadCalculator(table, column);
1314
}
@@ -19,6 +20,12 @@ export class PadCalculatorSelector {
1920
return new LeftAlignment.MiddleColumnPadCalculator();
2021
}
2122

23+
private centerAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
24+
if (column == 0) return new CenterAlignment.FirstColumnPadCalculator();
25+
if (column == table.columnCount - 1) return new CenterAlignment.LastColumnPadCalculator();
26+
return new CenterAlignment.MiddleColumnPadCalculator();
27+
}
28+
2229
private rightAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
2330
if (column == 0) return new RightAlignment.FirstColumnPadCalculator();
2431
if (column == table.columnCount - 1) return new RightAlignment.LastColumnPadCalculator();
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
| Type | Range | Size |
2+
|:------:|:-------------------------------------------------------:|:------------------------:|
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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
|Type|Range|Size|
2+
|:-:|:-:|:-:|
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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Type | Range | Size
2+
:-----:|:-------------------------------------------------------:|:------------------------:
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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Type|Range| Size
2+
:-:|:-:|:-:
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/alignRightWithBorder-expected.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
| Type | Range | Size |
1+
| Type | Range | Size |
22
|-------:|--------------------------------------------------------:|-------------------------:|
33
| sbyte | -128 to 127 | Signed 8-bit integer |
44
| byte | 0 to 255 | Unsigned 8-bit integer |

0 commit comments

Comments
 (0)