Skip to content

Commit 99b001f

Browse files
committed
switch default numbering of columns to base 26, excel style
1 parent 4e7309f commit 99b001f

11 files changed

+88
-9
lines changed

coopy/CellBuilder.hx

+3-1
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,10 @@ interface CellBuilder {
109109
*
110110
* @param unit the desired relationship, in terms of a local row/column number, a remote row/column number and when present a parent row/column number
111111
*
112+
* @param row_like true if working with rows, false if working with columns
113+
*
112114
* @return a cell representing the numeric relationship between a row/column
113115
*
114116
*/
115-
function links(unit: Unit) : Dynamic;
117+
function links(unit: Unit, row_like: Bool) : Dynamic;
116118
}

coopy/CompareFlags.hx

+10
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,15 @@ class CompareFlags {
173173
*/
174174
public var parent : Table;
175175

176+
/**
177+
*
178+
* Should column numbers, if present, be rendered spreadsheet-style
179+
* as A,B,C,...,AA,BB,CC?
180+
* Defaults to true.
181+
*
182+
*/
183+
public var count_like_a_spreadsheet : Bool;
184+
176185
public function new() {
177186
ordered = true;
178187
show_unchanged = false;
@@ -192,6 +201,7 @@ class CompareFlags {
192201
show_unchanged_meta = false;
193202
tables = null;
194203
parent = null;
204+
count_like_a_spreadsheet = true;
195205
}
196206

197207
/**

coopy/FlatCellBuilder.hx

+7-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ class FlatCellBuilder implements CellBuilder {
99
private var view : View;
1010
private var separator : String;
1111
private var conflict_separator : String;
12+
private var flags : CompareFlags;
1213

13-
public function new() {
14+
public function new(flags: CompareFlags) {
15+
this.flags = flags;
1416
}
1517

1618
public function needSeparator() {
@@ -46,7 +48,10 @@ class FlatCellBuilder implements CellBuilder {
4648
return view.toDatum(label);
4749
}
4850

49-
public function links(unit: Unit) : Dynamic {
51+
public function links(unit: Unit, row_like: Bool) : Dynamic {
52+
if (flags.count_like_a_spreadsheet && !row_like) {
53+
return view.toDatum(unit.toBase26String());
54+
}
5055
return view.toDatum(unit.toString());
5156
}
5257

coopy/NestedCellBuilder.hx

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class NestedCellBuilder implements CellBuilder {
5050
return x;
5151
}
5252

53-
public function links(unit: Unit) : Dynamic {
53+
public function links(unit: Unit, row_like: Bool) : Dynamic {
5454
var h = view.makeHash();
5555
if (unit.p>=-1) {
5656
view.hashSet(h,"before",negToNull(unit.p));

coopy/TableDiff.hx

+3-3
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ class TableDiff {
451451
output.setCell(0,i,"");
452452
continue;
453453
}
454-
output.setCell(0,i,builder.links(unit));
454+
output.setCell(0,i,builder.links(unit,true));
455455
}
456456
target = new Array<Int>();
457457
for (i in 0...output.height) {
@@ -464,7 +464,7 @@ class TableDiff {
464464
output.setCell(i,0,"");
465465
continue;
466466
}
467-
output.setCell(i,0,builder.links(unit));
467+
output.setCell(i,0,builder.links(unit,false));
468468
}
469469
output.setCell(0,0,builder.marker("@:@"));
470470
}
@@ -808,7 +808,7 @@ class TableDiff {
808808
if (flags.allow_nested_cells) {
809809
builder = new NestedCellBuilder();
810810
} else {
811-
builder = new FlatCellBuilder();
811+
builder = new FlatCellBuilder(flags);
812812
}
813813
}
814814
output.resize(0,0);

coopy/Unit.hx

+23
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,27 @@ class Unit {
100100
}
101101
return false;
102102
}
103+
104+
private function base26(num: Int) : String {
105+
// thanks @jordigh
106+
var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
107+
if (num<0) return "-";
108+
var out = "";
109+
do {
110+
out = out + alpha.charAt(num % 26);
111+
num = Math.floor(num / 26) - 1;
112+
} while (num>=0);
113+
return out;
114+
}
115+
116+
/**
117+
*
118+
* @return as for toString(), but representing row/column numbers
119+
* as A,B,C,D,...,AA,AB,AC,AD,....
120+
*
121+
*/
122+
public function toBase26String() : String {
123+
if (p>=-1) return base26(p) + "|" + base26(l) + ":" + base26(r);
124+
return base26(l) + ":" + base26(r);
125+
}
103126
}

test/data/bridges_diff_add_column.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<table>
22
<thead>
3-
<tr class="index"><td class="index">@:@</td><td></td><td>0:0</td><td>1:1</td><td>-:2</td></tr>
3+
<tr class="index"><td class="index">@:@</td><td></td><td>A:A</td><td>B:B</td><td>-:C</td></tr>
44
<tr class="spec"><td class="index"></td><td>!</td><td></td><td></td><td class="add">+++</td></tr>
55
<tr class="header"><th class="index"></th><th>@@</th><th>bridge</th><th>designer</th><th class="add">length</th></tr>
66
</thead>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<table>
2+
<thead>
3+
<tr class="index"><td class="index">@:@</td><td></td><td>0:0</td><td>1:1</td><td>-:2</td></tr>
4+
<tr class="spec"><td class="index"></td><td>!</td><td></td><td></td><td class="add">+++</td></tr>
5+
<tr class="header"><th class="index"></th><th>@@</th><th>bridge</th><th>designer</th><th class="add">length</th></tr>
6+
</thead>
7+
<tbody>
8+
<tr><td class="index">1:1</td><td>+</td><td>Brooklyn</td><td>J. A. Roebling</td><td class="add">1595</td></tr>
9+
<tr class="add"><td class="index">-:2</td><td>+++</td><td>Manhattan</td><td>G. Lindenthal</td><td class="add">1470</td></tr>
10+
<tr class="modify"><td class="index">2:3</td><td class="modify"></td><td>Williamsburg</td><td class="modify">D. Duck→L. L. Buck</td><td class="add">1600</td></tr>
11+
<tr><td class="index">3:4</td><td>+</td><td>Queensborough</td><td>Palmer & Hornbostel</td><td class="add">1182</td></tr>
12+
<tr><td class="index">4:5</td><td>+</td><td>Triborough</td><td>O. H. Ammann</td><td class="add">1380,383</td></tr>
13+
<tr><td class="index">5:6</td><td>+</td><td>Bronx Whitestone</td><td>O. H. Ammann</td><td class="add">2300</td></tr>
14+
<tr><td class="index">6:7</td><td>+</td><td>Throgs Neck</td><td>O. H. Ammann</td><td class="add">1800</td></tr>
15+
<tr><td class="index">7:8</td><td>+</td><td>George Washington</td><td>O. H. Ammann</td><td class="add">3500</td></tr>
16+
<tr class="remove"><td class="index">8:-</td><td>---</td><td>Spamspan</td><td>S. Spamington</td><td class="add">null</td></tr>
17+
</tbody>
18+
</table>

test/data/bridges_diff_show_index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<table>
22
<thead>
3-
<tr class="index"><td class="index">@:@</td><td></td><td>0:0</td><td>1:1</td><td>2:2</td></tr>
3+
<tr class="index"><td class="index">@:@</td><td></td><td>A:A</td><td>B:B</td><td>C:C</td></tr>
44
<tr class="header"><th class="index"></th><th>@@</th><th>bridge</th><th>designer</th><th>length</th></tr>
55
</thead>
66
<tbody>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<table>
2+
<thead>
3+
<tr class="index"><td class="index">@:@</td><td></td><td>0:0</td><td>1:1</td><td>2:2</td></tr>
4+
<tr class="header"><th class="index"></th><th>@@</th><th>bridge</th><th>designer</th><th>length</th></tr>
5+
</thead>
6+
<tbody>
7+
<tr><td class="index">1:1</td><td></td><td>Brooklyn</td><td>J. A. Roebling</td><td>1595</td></tr>
8+
<tr class="add"><td class="index">-:2</td><td>+++</td><td>Manhattan</td><td>G. Lindenthal</td><td>1470</td></tr>
9+
<tr class="modify"><td class="index">2:3</td><td class="modify"></td><td>Williamsburg</td><td class="modify">D. Duck→L. L. Buck</td><td>1600</td></tr>
10+
<tr><td class="index">3:4</td><td></td><td>Queensborough</td><td>Palmer & Hornbostel</td><td>1182</td></tr>
11+
<tr class="gap"><td class="index"></td><td>...</td><td>...</td><td>...</td><td>...</td></tr>
12+
<tr><td class="index">7:8</td><td></td><td>George Washington</td><td>O. H. Ammann</td><td>3500</td></tr>
13+
<tr class="remove"><td class="index">8:-</td><td>---</td><td>Spamspan</td><td>S. Spamington</td><td>10000</td></tr>
14+
</tbody>
15+
</table>

test/test_hilite_render.js

+6
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,15 @@ options.always_show_order = true;
3131
options.never_show_order = false;
3232
checkMatch("data/bridges_diff_show_index.html",align,options);
3333

34+
options.count_like_a_spreadsheet = false;
35+
checkMatch("data/bridges_diff_show_index_ncol.html",align,options);
36+
options.count_like_a_spreadsheet = true;
37+
3438
var broken_bridges_without_length = broken_bridges.clone();
3539
new coopy.TableModifier(broken_bridges_without_length).removeColumn(2);
3640
ct = new coopy.compareTables(broken_bridges_without_length,bridges);
3741
align = ct.align();
3842
checkMatch("data/bridges_diff_add_column.html",align,options);
3943

44+
options.count_like_a_spreadsheet = false;
45+
checkMatch("data/bridges_diff_add_column_ncol.html",align,options);

0 commit comments

Comments
 (0)