diff options
Diffstat (limited to 'ext/bg/js')
-rw-r--r-- | ext/bg/js/translator.js | 72 | ||||
-rw-r--r-- | ext/bg/js/util.js | 60 |
2 files changed, 69 insertions, 63 deletions
diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index e534e0cb..9711cf8d 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -107,45 +107,20 @@ class Translator { findTerm(text) { return this.findTermGroups(text).then(deinflectGroups => { - let definitions = []; + const definitions = []; for (const key in deinflectGroups) { definitions.push(deinflectGroups[key]); } - definitions = definitions.sort((v1, v2) => { - const sl1 = v1.source.length; - const sl2 = v2.source.length; - if (sl1 > sl2) { - return -1; - } else if (sl1 < sl2) { - return 1; - } - - const s1 = v1.score; - const s2 = v2.score; - if (s1 > s2) { - return -1; - } else if (s1 < s2) { - return 1; - } - - const rl1 = v1.rules.length; - const rl2 = v2.rules.length; - if (rl1 < rl2) { - return -1; - } else if (rl1 > rl2) { - return 1; - } - - return v2.expression.localeCompare(v1.expression); - }); - let length = 0; for (const result of definitions) { length = Math.max(length, result.source.length); } - return {definitions, length}; + return { + length, + definitions: sortTermDefs(definitions) + }; }); } @@ -192,7 +167,7 @@ class Translator { desc: definition.entities[tag] || '', }; - this.applyTagMeta(tagItem); + applyTagMeta(tagItem, this.tagMeta); tagItems.push(tagItem); } @@ -208,7 +183,7 @@ class Translator { expression: definition.expression, reading: definition.reading, glossary: definition.glossary, - tags: Translator.sortTags(tagItems) + tags: sortTags(tagItems) }; } }); @@ -225,42 +200,13 @@ class Translator { desc: '', }; - this.applyTagMeta(tagItem); + applyTagMeta(tagItem, this.tagMeta); tagItems.push(tagItem); } - definition.tags = Translator.sortTags(tagItems); + definition.tags = sortTags(tagItems); } return definitions; } - - applyTagMeta(tag) { - const symbol = tag.name.split(':')[0]; - for (const prop in this.tagMeta[symbol] || {}) { - tag[prop] = this.tagMeta[symbol][prop]; - } - } - - static sortTags(tags) { - return tags.sort((v1, v2) => { - const order1 = v1.order; - const order2 = v2.order; - if (order1 < order2) { - return -1; - } else if (order1 > order2) { - return 1; - } - - const name1 = v1.name; - const name2 = v2.name; - if (name1 < name2) { - return -1; - } else if (name1 > name2) { - return 1; - } - - return 0; - }); - } } diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js index 5583502d..95d1b43e 100644 --- a/ext/bg/js/util.js +++ b/ext/bg/js/util.js @@ -44,3 +44,63 @@ function isKanji(c) { return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0; } +function sortTags(tags) { + return tags.sort((v1, v2) => { + const order1 = v1.order; + const order2 = v2.order; + if (order1 < order2) { + return -1; + } else if (order1 > order2) { + return 1; + } + + const name1 = v1.name; + const name2 = v2.name; + if (name1 < name2) { + return -1; + } else if (name1 > name2) { + return 1; + } + + return 0; + }); +} + +function sortTermDefs(definitions) { + return definitions.sort((v1, v2) => { + const sl1 = v1.source.length; + const sl2 = v2.source.length; + if (sl1 > sl2) { + return -1; + } else if (sl1 < sl2) { + return 1; + } + + const s1 = v1.score; + const s2 = v2.score; + if (s1 > s2) { + return -1; + } else if (s1 < s2) { + return 1; + } + + const rl1 = v1.rules.length; + const rl2 = v2.rules.length; + if (rl1 < rl2) { + return -1; + } else if (rl1 > rl2) { + return 1; + } + + return v2.expression.localeCompare(v1.expression); + }); +} + +function applyTagMeta(tag, meta) { + const symbol = tag.name.split(':')[0]; + for (const prop in meta[symbol] || {}) { + tag[prop] = meta[symbol][prop]; + } + + return tag; +} |