diff options
Diffstat (limited to 'ext/bg/js')
| -rw-r--r-- | ext/bg/js/deinflector.js | 64 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 16 | 
2 files changed, 37 insertions, 43 deletions
| diff --git a/ext/bg/js/deinflector.js b/ext/bg/js/deinflector.js index 6484f953..8b67761b 100644 --- a/ext/bg/js/deinflector.js +++ b/ext/bg/js/deinflector.js @@ -26,26 +26,7 @@ class Deinflection {          this.children = [];      } -    deinflect(definer, reasons) { -        const define = () => { -            return definer(this.term).then(definitions => { -                if (this.rules.length === 0) { -                    this.definitions = definitions; -                } else { -                    for (const rule of this.rules) { -                        for (const definition of definitions) { -                            if (definition.rules.includes(rule)) { -                                this.definitions.push(definition); -                            } -                        } -                    } -                } - -                return this.definitions.length > 0; -            }); -        }; - -        const promises = []; +    async deinflect(definer, reasons) {          for (const reason in reasons) {              for (const variant of reasons[reason]) {                  let accept = this.rules.length === 0; @@ -68,20 +49,31 @@ class Deinflection {                  }                  const child = new Deinflection(term, {reason, rules: variant.rulesOut}); -                promises.push( -                    child.deinflect(definer, reasons).then(valid => valid && this.children.push(child)) -                ); +                if (await child.deinflect(definer, reasons)) { +                    this.children.push(child); +                }              }          } -        return Promise.all(promises).then(define).then(valid => { -            if (valid && this.children.length > 0) { -                const child = new Deinflection(this.term, {rules: this.rules, definitions: this.definitions}); -                this.children.push(child); +        const definitions = await definer(this.term); +        if (this.rules.length === 0) { +            this.definitions = definitions; +        } else { +            for (const rule of this.rules) { +                for (const definition of definitions) { +                    if (definition.rules.includes(rule)) { +                        this.definitions.push(definition); +                    } +                }              } +        } + +        if (this.definitions.length > 0 && this.children.length > 0) { +            const child = new Deinflection(this.term, {rules: this.rules, definitions: this.definitions}); +            this.children.push(child); +        } -            return valid || this.children.length > 0; -        }); +        return this.definitions.length > 0 || this.children.length > 0;      }      gather() { @@ -112,16 +104,16 @@ class Deinflection {  class Deinflector { -    constructor() { -        this.reasons = {}; -    } - -    setReasons(reasons) { +    constructor(reasons) {          this.reasons = reasons;      } -    deinflect(term, definer) { +    async deinflect(term, definer) {          const node = new Deinflection(term); -        return node.deinflect(definer, this.reasons).then(success => success ? node.gather() : []); +        if (await node.deinflect(definer, this.reasons)) { +            return node.gather(); +        } else { +            return []; +        }      }  } diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 35b49608..84a6e1d7 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -19,17 +19,19 @@  class Translator {      constructor() { -        this.database = new Database(); -        this.deinflector = new Deinflector(); -        this.loaded = false; +        this.database = null; +        this.deinflector = null;      }      async prepare() { -        if (!this.loaded) { -            const reasons = await jsonLoadInt('/bg/lang/deinflect.json'); -            this.deinflector.setReasons(reasons); +        if (!this.database) { +            this.database = new Database();              await this.database.prepare(); -            this.loaded = true; +        } + +        if (!this.deinflector) { +            const reasons = await jsonLoadInt('/bg/lang/deinflect.json'); +            this.deinflector = new Deinflector(reasons);          }      } |