diff options
| author | Alex Yatskov <alex@foosoft.net> | 2016-09-10 18:57:00 -0700 | 
|---|---|---|
| committer | Alex Yatskov <alex@foosoft.net> | 2016-09-10 18:57:00 -0700 | 
| commit | 05ac93128539cf4be5417a50728329c3ae070580 (patch) | |
| tree | f9a4bfec98acec6343cce4e4da5010ab389ff0f6 | |
| parent | 133abb6f585bee94fcdee23689779042e3ccfd65 (diff) | |
Work on deinflector
| -rw-r--r-- | ext/bg/js/deinflector.js | 52 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 8 | 
2 files changed, 34 insertions, 26 deletions
| diff --git a/ext/bg/js/deinflector.js b/ext/bg/js/deinflector.js index 0eabd0f3..2d567e6b 100644 --- a/ext/bg/js/deinflector.js +++ b/ext/bg/js/deinflector.js @@ -26,26 +26,30 @@ class Deinflection {      }      validate(validator) { -        for (const tags of validator(this.term)) { -            if (this.tags.length === 0) { -                return true; -            } - -            for (const tag of this.tags) { -                if (tags.indexOf(tag) !== -1) { +        return validator(this.term).then(tagSets => { +            for (const tags of tagSets) { +                if (this.tags.length === 0) {                      return true;                  } + +                for (const tag of this.tags) { +                    if (tags.indexOf(tag) !== -1) { +                        return true; +                    } +                }              } -        } -        return false; +            return false; +        });      }      deinflect(validator, rules) { -        if (this.validate(validator)) { -            const child = new Deinflection(this.term, this.tags); -            this.children.push(child); -        } +        const promises = [ +            this.validate(validator).then(valid => { +                const child = new Deinflection(this.term, this.tags); +                this.children.push(child); +            }) +        ];          for (const rule in rules) {              for (const variant of rules[rule]) { @@ -63,13 +67,19 @@ class Deinflection {                  const term = this.term.slice(0, -variant.ki.length) + variant.ko;                  const child = new Deinflection(term, variant.to, rule); -                if (child.deinflect(validator, rules)) { -                    this.children.push(child); -                } +                promises.push( +                    child.deinflect(validator, rules).then(valid => { +                        if (valid) { +                            this.children.push(child); +                        } +                    } +                ));              }          } -        return this.children.length > 0; +        return Promise.all(promises).then(() => { +            return this.children.length > 0; +        });      }      gather() { @@ -105,10 +115,8 @@ class Deinflector {      deinflect(term, validator) {          const node = new Deinflection(term); -        if (node.deinflect(validator, this.rules)) { -            return node.gather(); -        } - -        return null; +        return node.deinflect(validator, this.rules).then(success => { +            return success ? node.gather() : null; +        });      }  } diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 5768c3d6..8938162a 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -59,12 +59,12 @@ class Translator {          for (let i = text.length; i > 0; --i) {              const term = text.slice(0, i);              const dfs = this.deinflector.deinflect(term, t => { -                const tags = []; +                const tagSets = [];                  for (const d of this.dictionary.findTerm(t)) { -                    tags.push(d.tags); +                    tagSets.push(d.tags);                  } -                return tags; +                return tagSets;              });              if (dfs === null) { @@ -114,7 +114,7 @@ class Translator {              length = Math.max(length, result.source.length);          } -        return {definitions: definitions, length: length}; +        return {definitions, length};      }      findKanji(text) { |