Skip to content

Commit c620889

Browse files
committed
implement modal verb translation
1 parent 07c1373 commit c620889

File tree

2 files changed

+65
-19
lines changed

2 files changed

+65
-19
lines changed

src/translator/phrase.ts

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -146,21 +146,40 @@ function verbPhrase(
146146
}>,
147147
) {
148148
const { emphasis, verb, modifier } = options;
149-
const adverb = fixAdverb([
150-
...[...modifier.adverb].reverse(),
151-
...verb.adverb,
152-
]);
153149
const preposition = [
154150
...verb.preposition,
155151
...nullableAsArray(modifier.inWayPhrase)
156152
.map((object) => nounAsPreposition(object, "in")),
157153
];
158-
return {
159-
...verb,
160-
adverb,
161-
phraseEmphasis: emphasis,
162-
preposition,
163-
};
154+
if (verb.first != null) {
155+
return {
156+
...verb,
157+
adverb: fixAdverb([
158+
...[...modifier.adverb].reverse(),
159+
...verb.adverb,
160+
]),
161+
phraseEmphasis: emphasis,
162+
preposition,
163+
};
164+
} else if (verb.modal != null) {
165+
return {
166+
...verb,
167+
modal: {
168+
adverb: fixAdverb([
169+
...[...modifier.adverb].reverse(),
170+
...verb.modal.adverb,
171+
]),
172+
verb: verb.modal.verb,
173+
},
174+
phraseEmphasis: emphasis,
175+
preposition,
176+
};
177+
} else {
178+
// This should be unreachable
179+
throw new FilteredError(
180+
"verb phrase without modal verb nor conjugated verb",
181+
);
182+
}
164183
}
165184
function defaultPhrase(
166185
options: Readonly<{
@@ -194,13 +213,15 @@ function defaultPhrase(
194213
} else if (
195214
includeVerb && headWord.type === "verb" && modifier.type === "adverbial"
196215
) {
197-
return new ArrayResult([{
198-
type: "verb",
199-
verb: {
200-
...verbPhrase({ emphasis, verb: headWord, modifier }),
201-
type: "simple",
202-
},
203-
}]);
216+
return ArrayResult.from(() =>
217+
new ArrayResult([{
218+
type: "verb",
219+
verb: {
220+
...verbPhrase({ emphasis, verb: headWord, modifier }),
221+
type: "simple",
222+
},
223+
}])
224+
);
204225
} else {
205226
return ArrayResult.empty();
206227
}

src/translator/word_unit.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ function defaultWordUnit(
2525
includeGerund: boolean;
2626
}>,
2727
) {
28-
const { word, emphasis, includeGerund } = options;
29-
return new ArrayResult(dictionary.get(word)!.definitions)
28+
const { word: useWord, reduplicationCount, emphasis, includeGerund } =
29+
options;
30+
return new ArrayResult(dictionary.get(useWord)!.definitions)
3031
.flatMap<WordUnitTranslation>((definition) => {
3132
switch (definition.type) {
3233
case "noun":
@@ -77,6 +78,30 @@ function defaultWordUnit(
7778
emphasis: emphasis != null,
7879
})
7980
.map((verb) => ({ ...verb, type: "verb" }));
81+
case "modal verb":
82+
return new ArrayResult([{
83+
type: "verb",
84+
modal: {
85+
adverb: [],
86+
verb: word({
87+
word: definition.verb,
88+
reduplicationCount,
89+
emphasis: emphasis != null,
90+
}),
91+
},
92+
adverb: [],
93+
first: null,
94+
reduplicationCount: 0,
95+
wordEmphasis: false,
96+
rest: [],
97+
subjectComplement: null,
98+
object: null,
99+
objectComplement: null,
100+
preposition: [],
101+
forObject: false,
102+
predicateType: null,
103+
phraseEmphasis: false,
104+
}]);
80105
default:
81106
return ArrayResult.empty();
82107
}

0 commit comments

Comments
 (0)