diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-03-07 14:07:26 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-07 14:07:26 -0500 |
commit | 7793e14e57639426cb9ca64c82004151f9eaba05 (patch) | |
tree | 14aa497ee70bd18890e6e0af400b58cbe68add91 /ext/js/language | |
parent | 92fe1571aeee0717b85c6b47ed203852faf42d80 (diff) |
Deinflector refactor (#1501)
* Make Deinflector._ruleTypes private
* Add createDeinflection helper
* Remove unnecessary field assignments from Deinflector
Move them to Translator instead
Diffstat (limited to 'ext/js/language')
-rw-r--r-- | ext/js/language/deinflector.js | 37 | ||||
-rw-r--r-- | ext/js/language/translator.js | 27 |
2 files changed, 26 insertions, 38 deletions
diff --git a/ext/js/language/deinflector.js b/ext/js/language/deinflector.js index b6759215..4b2c1bc7 100644 --- a/ext/js/language/deinflector.js +++ b/ext/js/language/deinflector.js @@ -20,15 +20,8 @@ class Deinflector { this.reasons = Deinflector.normalizeReasons(reasons); } - deinflect(source, rawSource) { - const results = [{ - source, - rawSource, - term: source, - rules: 0, - reasons: [], - databaseDefinitions: [] - }]; + deinflect(source) { + const results = [this._createDeinflection(source, 0, [])]; for (let i = 0; i < results.length; ++i) { const {rules, term, reasons} = results[i]; for (const [reason, variants] of this.reasons) { @@ -41,20 +34,21 @@ class Deinflector { continue; } - results.push({ - source, - rawSource, - term: term.substring(0, term.length - kanaIn.length) + kanaOut, - rules: rulesOut, - reasons: [reason, ...reasons], - databaseDefinitions: [] - }); + results.push(this._createDeinflection( + term.substring(0, term.length - kanaIn.length) + kanaOut, + rulesOut, + [reason, ...reasons] + )); } } } return results; } + _createDeinflection(term, rules, reasons) { + return {term, rules, reasons}; + } + static normalizeReasons(reasons) { const normalizedReasons = []; for (const [reason, reasonInfo] of Object.entries(reasons)) { @@ -63,8 +57,8 @@ class Deinflector { variants.push([ kanaIn, kanaOut, - Deinflector.rulesToRuleFlags(rulesIn), - Deinflector.rulesToRuleFlags(rulesOut) + this.rulesToRuleFlags(rulesIn), + this.rulesToRuleFlags(rulesOut) ]); } normalizedReasons.push([reason, variants]); @@ -73,7 +67,7 @@ class Deinflector { } static rulesToRuleFlags(rules) { - const ruleTypes = Deinflector.ruleTypes; + const ruleTypes = this._ruleTypes; let value = 0; for (const rule of rules) { const ruleBits = ruleTypes.get(rule); @@ -84,7 +78,8 @@ class Deinflector { } } -Deinflector.ruleTypes = new Map([ +// eslint-disable-next-line no-underscore-dangle +Deinflector._ruleTypes = new Map([ ['v1', 0b00000001], // Verb ichidan ['v5', 0b00000010], // Verb godan ['vs', 0b00000100], // Verb suru diff --git a/ext/js/language/translator.js b/ext/js/language/translator.js index e20cc50f..18668306 100644 --- a/ext/js/language/translator.js +++ b/ext/js/language/translator.js @@ -250,18 +250,7 @@ class Translator { async _findTermWildcard(text, enabledDictionaryMap, wildcard) { const databaseDefinitions = await this._database.findTermsBulk([text], enabledDictionaryMap, wildcard); - if (databaseDefinitions.length === 0) { - return []; - } - - return [{ - source: text, - rawSource: text, - term: text, - rules: 0, - reasons: [], - databaseDefinitions - }]; + return databaseDefinitions.length > 0 ? [this._createDeinflection(text, text, text, 0, [], databaseDefinitions)] : []; } async _findTermDeinflections(text, enabledDictionaryMap, options) { @@ -341,18 +330,22 @@ class Translator { } for (let i = text2.length; i > 0; --i) { - const text2Substring = text2.substring(0, i); - if (used.has(text2Substring)) { break; } - used.add(text2Substring); + const source = text2.substring(0, i); + if (used.has(source)) { break; } + used.add(source); const rawSource = sourceMap.source.substring(0, sourceMap.getSourceLength(i)); - for (const deinflection of this._deinflector.deinflect(text2Substring, rawSource)) { - deinflections.push(deinflection); + for (const {term, rules, reasons} of this._deinflector.deinflect(source)) { + deinflections.push(this._createDeinflection(source, rawSource, term, rules, reasons, [])); } } } return deinflections; } + _createDeinflection(source, rawSource, term, rules, reasons, databaseDefinitions) { + return {source, rawSource, term, rules, reasons, databaseDefinitions}; + } + /** * @param definitions An array of 'term' definitions. * @param mainDictionary The name of the main dictionary. |