Fix sorting of non-top-level definitions (#1516)

This commit is contained in:
toasted-nutbread 2021-03-10 20:27:10 -05:00 committed by GitHub
parent 5fe40d7ec4
commit 638e5783ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -519,7 +519,7 @@ class Translator {
); );
glossaryDefinitions.push(glossaryDefinition); glossaryDefinitions.push(glossaryDefinition);
} }
this._sortDefinitions(glossaryDefinitions); this._sortDefinitions(glossaryDefinitions, false);
const termDetailsList = this._createTermDetailsList(allDefinitions); const termDetailsList = this._createTermDetailsList(allDefinitions);
@ -594,7 +594,7 @@ class Translator {
const results = []; const results = [];
for (const groupDefinitions of groups.values()) { for (const groupDefinitions of groups.values()) {
this._sortDefinitions(groupDefinitions); this._sortDefinitions(groupDefinitions, false);
const definition = this._createGroupedTermDefinition(groupDefinitions); const definition = this._createGroupedTermDefinition(groupDefinitions);
results.push(definition); results.push(definition);
} }
@ -1259,21 +1259,24 @@ class Translator {
}); });
} }
_sortDefinitions(definitions) { _sortDefinitions(definitions, topLevel=true) {
if (definitions.length <= 1) { return; } if (definitions.length <= 1) { return; }
const stringComparer = this._stringComparer; const stringComparer = this._stringComparer;
const compareFunction = (v1, v2) => { const compareFunction = (v1, v2) => {
// Sort by length of source term let i;
let i = v2.source.length - v1.source.length; if (topLevel) {
if (i !== 0) { return i; } // Sort by length of source term
i = v2.source.length - v1.source.length;
if (i !== 0) { return i; }
// Sort by the number of inflection reasons // Sort by the number of inflection reasons
i = v1.reasons.length - v2.reasons.length; i = v1.reasons.length - v2.reasons.length;
if (i !== 0) { return i; } if (i !== 0) { return i; }
// Sort by how many terms exactly match the source (e.g. for exact kana prioritization) // Sort by how many terms exactly match the source (e.g. for exact kana prioritization)
i = v2.sourceTermExactMatchCount - v1.sourceTermExactMatchCount; i = v2.sourceTermExactMatchCount - v1.sourceTermExactMatchCount;
if (i !== 0) { return i; } if (i !== 0) { return i; }
}
// Sort by dictionary priority // Sort by dictionary priority
i = v2.dictionaryOrder.priority - v1.dictionaryOrder.priority; i = v2.dictionaryOrder.priority - v1.dictionaryOrder.priority;