Don't ignore whitespace when sorting

Intl.Collator's ignorePunctuation ignores whitespace too, so stop using
it, since it produces much weirder results than sorting on punctuation does.
This commit is contained in:
Dan Stillman 2017-11-16 01:15:18 -05:00
parent 3c2bcf012f
commit c7fd46e6b4
2 changed files with 16 additions and 2 deletions

View file

@ -1546,7 +1546,6 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js");
} }
var collator = new Intl.Collator(locales, { var collator = new Intl.Collator(locales, {
ignorePunctuation: true,
numeric: true, numeric: true,
sensitivity: 'base' sensitivity: 'base'
}); });
@ -1558,7 +1557,6 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js");
try { try {
Zotero.logError("Falling back to en-US sorting"); Zotero.logError("Falling back to en-US sorting");
collator = new Intl.Collator(['en-US'], { collator = new Intl.Collator(['en-US'], {
ignorePunctuation: true,
numeric: true, numeric: true,
sensitivity: 'base' sensitivity: 'base'
}); });
@ -1602,6 +1600,11 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js");
// If initial punctuation is equivalent, use collator comparison // If initial punctuation is equivalent, use collator comparison
// that ignores all punctuation // that ignores all punctuation
//
// Update: Intl.Collator's ignorePunctuation also ignores whitespace, so we're
// no longer using it, meaning we could take out most of the code to handle
// initial punctuation separately, unless we think we'll at some point switch to
// a collation function that ignores punctuation but not whitespace.
if (aInitP == bInitP || !aInitP && !bInitP) return collator.compare(a, b); if (aInitP == bInitP || !aInitP && !bInitP) return collator.compare(a, b);
// Otherwise consider "attached" words as well, e.g. the order should be // Otherwise consider "attached" words as well, e.g. the order should be

View file

@ -16,4 +16,15 @@ describe("Zotero", function() {
assert.equal(str1, str2); assert.equal(str1, str2);
}); });
}); });
describe("#localeCompare", function () {
it("shouldn't ignore whitespace", function () {
assert.equal(Zotero.localeCompare("Chang", "Chan H"), 1);
});
it("shouldn't ignore leading punctuation", function () {
assert.equal(Zotero.localeCompare("_Abcd", "Abcd"), -1);
});
});
}); });