Skip to content

Commit 91c1f4e

Browse files
committed
Sort references intelligently
Fixes #274
1 parent bd2fc6d commit 91c1f4e

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

InteractiveHtmlBom/core/ibom.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,12 +160,12 @@ def natural_sort(lst):
160160

161161
# sort table by reference prefix and quantity
162162
def row_sort_key(element):
163-
prefix = re.findall('^[A-Z]*', element[0][0])[0]
163+
prefix = re.findall('^[^0-9]*', element[0][0])[0]
164164
if prefix in config.component_sort_order:
165165
ref_ord = config.component_sort_order.index(prefix)
166166
else:
167167
ref_ord = config.component_sort_order.index('~')
168-
return ref_ord, len(element), alphanum_key(element[0][0])
168+
return ref_ord, -len(element), alphanum_key(element[0][0])
169169

170170
if '~' not in config.component_sort_order:
171171
config.component_sort_order.append('~')

InteractiveHtmlBom/web/ibom.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,23 @@ function populateBomHeader(placeHolderColumn = null, placeHolderElements = null)
469469
else return 0;
470470
}
471471
}
472-
472+
var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
473+
var compareRefs = (a, b) => {
474+
var ra = referenceRegex.exec(a);
475+
var rb = referenceRegex.exec(b);
476+
if (ra === null || rb === null) {
477+
if (a != b) return a > b ? 1 : -1;
478+
return 0;
479+
} else {
480+
if (ra.groups.prefix != rb.groups.prefix) {
481+
return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
482+
}
483+
if (ra.groups.number != rb.groups.number) {
484+
return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
485+
}
486+
return 0;
487+
}
488+
}
473489
if (settings.bommode == "netlist") {
474490
th = createColumnHeader("Net name", "bom-netname", (a, b) => {
475491
if (a > b) return -1;
@@ -502,7 +518,7 @@ function populateBomHeader(placeHolderColumn = null, placeHolderElements = null)
502518
tr.appendChild(createColumnHeader("References", "references", (a, b) => {
503519
var i = 0;
504520
while (i < a.length && i < b.length) {
505-
if (a[i] != b[i]) return a[i] > b[i] ? 1 : -1;
521+
if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
506522
i++;
507523
}
508524
return a.length - b.length;

0 commit comments

Comments
 (0)