Fixing deinflection

This commit is contained in:
Alex Yatskov 2016-12-19 20:03:06 -08:00
parent 238c9e340e
commit 0aa603694c

View File

@ -25,13 +25,14 @@ 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);
}
return validator(this.term).then(sets => {
for (const rules of sets) {
for (const rule of this.rules) {
if (rules.includes(rule)) {
return true;
@ -41,11 +42,10 @@ class Deinflection {
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,13 +53,15 @@ class Deinflection {
for (const reason in reasons) {
for (const variant of reasons[reason]) {
let allowed = this.rules.length === 0;
let allowed = entry;
if (!allowed) {
for (const rule of this.rules) {
if (variant.rulesIn.includes(rule)) {
allowed = true;
break;
}
}
}
if (!allowed || !this.term.endsWith(variant.kanaIn)) {
continue;
@ -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() : []);
}
}