Skip to content

Commit 095ae78

Browse files
committed
extract negative in verb phrase
1 parent 14e5505 commit 095ae78

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

src/translator/phrase.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
extractNegativeFromAdjective,
88
fixAdjective,
99
} from "./adjective.ts";
10-
import { fixAdverb } from "./adverb.ts";
10+
import { extractNegativeFromAdverbs, fixAdverb } from "./adverb.ts";
1111
import * as English from "./ast.ts";
1212
import { fixDeterminer, getNumber } from "./determiner.ts";
1313
import {
@@ -30,7 +30,7 @@ import {
3030
} from "./preposition.ts";
3131
import { Place } from "./pronoun.ts";
3232
import { PartialCompoundVerb, PartialVerb } from "./verb.ts";
33-
import { word } from "./word.ts";
33+
import { noEmphasis, word } from "./word.ts";
3434
import { wordUnit } from "./word_unit.ts";
3535

3636
export type PhraseTranslation =
@@ -146,7 +146,6 @@ function adjectivePhrase(
146146
}
147147
}
148148
}
149-
// TODO: extract "not"
150149
function verbPhrase(
151150
options: Readonly<{
152151
emphasis: boolean;
@@ -160,25 +159,34 @@ function verbPhrase(
160159
...nullableAsArray(modifier.inWayPhrase)
161160
.map((object) => nounAsPreposition(object, "in")),
162161
];
162+
const adverb = [
163+
...[...modifier.adverb].reverse(),
164+
...verb.adverb,
165+
];
166+
const extracted = extractNegativeFromAdverbs(adverb);
167+
if (extracted != null && extractNegativeFromAdverbs(extracted) != null) {
168+
throw new FilteredError("double negative");
169+
}
170+
const negated = extracted != null;
171+
const useAdverb = fixAdverb(extracted ?? adverb);
163172
if (verb.first != null) {
164173
return {
165174
...verb,
166-
adverb: fixAdverb([
167-
...[...modifier.adverb].reverse(),
168-
...verb.adverb,
169-
]),
175+
first: { ...verb.first, negated },
176+
adverb: useAdverb,
170177
phraseEmphasis: emphasis,
171178
preposition,
172179
};
173180
} else if (verb.modal != null) {
181+
const postAdverb = negated
182+
? [{ adverb: noEmphasis("not"), negative: true }]
183+
: [];
174184
return {
175185
...verb,
176186
modal: {
177-
...verb.modal,
178-
preAdverb: fixAdverb([
179-
...[...modifier.adverb].reverse(),
180-
...verb.modal.preAdverb,
181-
]),
187+
preAdverb: useAdverb,
188+
verb: verb.modal.verb,
189+
postAdverb,
182190
},
183191
phraseEmphasis: emphasis,
184192
preposition,

0 commit comments

Comments
 (0)