aboutsummaryrefslogtreecommitdiff
path: root/ext/bg/js/deinflector.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/bg/js/deinflector.js')
-rw-r--r--ext/bg/js/deinflector.js44
1 files changed, 23 insertions, 21 deletions
diff --git a/ext/bg/js/deinflector.js b/ext/bg/js/deinflector.js
index b8646e73..5cfb7f75 100644
--- a/ext/bg/js/deinflector.js
+++ b/ext/bg/js/deinflector.js
@@ -25,27 +25,27 @@ class Deinflection {
this.reason = reason;
}
- validate(validator) {
- return validator(this.term).then(sets => {
- for (const rules of sets) {
- if (this.rules.length === 0) {
- return true;
- }
+ deinflect(validator, reasons, entry=false) {
+ const validate = () => {
+ if (entry) {
+ return Promise.resolve(true);
+ }
- for (const rule of this.rules) {
- if (rules.includes(rule)) {
- return true;
+ return validator(this.term).then(sets => {
+ for (const rules of sets) {
+ for (const rule of this.rules) {
+ if (rules.includes(rule)) {
+ return true;
+ }
}
}
- }
- return false;
- });
- }
+ return false;
+ });
+ };
- deinflect(validator, reasons) {
const promises = [
- this.validate(validator).then(valid => {
+ validate().then(valid => {
const child = new Deinflection(this.term, this.rules);
this.children.push(child);
})
@@ -53,11 +53,13 @@ class Deinflection {
for (const reason in reasons) {
for (const variant of reasons[reason]) {
- let allowed = this.rules.length === 0;
- for (const rule of this.rules) {
- if (variant.rulesIn.includes(rule)) {
- allowed = true;
- break;
+ let allowed = entry;
+ if (!allowed) {
+ for (const rule of this.rules) {
+ if (variant.rulesIn.includes(rule)) {
+ allowed = true;
+ break;
+ }
}
}
@@ -119,6 +121,6 @@ class Deinflector {
deinflect(term, validator) {
const node = new Deinflection(term);
- return node.deinflect(validator, this.reasons).then(success => success ? node.gather() : []);
+ return node.deinflect(validator, this.reasons, true).then(success => success ? node.gather() : []);
}
}