Skip to content

Commit 0bc4999

Browse files
committed
add negative metadata to adverb
1 parent ef78aa1 commit 0bc4999

File tree

9 files changed

+50
-23
lines changed

9 files changed

+50
-23
lines changed

dictionary/dictionary

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ akesi:
2121

2222
ala:
2323
not(d negative);
24-
not(adv);
24+
not(adv negative);
2525
nothing(n plural);
2626
no(d quantifier plural);
2727

dictionary/parser.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,17 @@ const adjectiveKind = choiceWithCheck(
214214
),
215215
),
216216
);
217+
const adverb = checkedSequence(
218+
word.skip(openParenthesis).skip(keyword("adv")),
219+
optionalAll(keyword("negative")).skip(closeParenthesis),
220+
)
221+
.map(([adverb, negative]) => ({
222+
adverb,
223+
negative: negative != null,
224+
}));
217225
const adjective = checkedSequence(
218226
sequence(
219-
all(simpleUnit("adv")),
227+
allWithCheck(adverb),
220228
word.skip(openParenthesis).skip(keyword("adj")),
221229
),
222230
sequence(
@@ -279,8 +287,6 @@ const particleDefinition = checkedSequence(
279287
sequence(keyword("def"), closeParenthesis),
280288
)
281289
.map(([definition]) => ({ type: "particle definition", definition }));
282-
const adverbDefinition = checkedSimpleUnit("adv")
283-
.map((adverb) => ({ type: "adverb", adverb }));
284290
const prepositionDefinition = checkedSimpleUnitWithTemplate(
285291
"prep",
286292
sequence(keyword("indirect"), keyword("object")),
@@ -557,7 +563,7 @@ const definition = choiceWithCheck(
557563
// adjective parser must come before adverb parser
558564
adjective.map((adjective) => ({ ...adjective, type: "adjective" })),
559565
verbDefinition,
560-
adverbDefinition,
566+
adverb.map((adverb) => ({ ...adverb, type: "adverb" })),
561567
interjectionDefinition,
562568
particleDefinition,
563569
determiner.map((determiner) => ({ ...determiner, type: "determiner" })),

dictionary/type.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,12 @@ export type AdjectiveType =
4646
| "origin"
4747
| "material"
4848
| "qualifier";
49+
export type Adverb = Readonly<{
50+
adverb: string;
51+
negative: boolean;
52+
}>;
4953
export type Adjective = Readonly<{
50-
adverb: ReadonlyArray<string>;
54+
adverb: ReadonlyArray<Adverb>;
5155
adjective: string;
5256
kind: AdjectiveType;
5357
gerundLike: boolean;
@@ -86,7 +90,7 @@ export type Definition =
8690
type: "compound adjective";
8791
adjective: ReadonlyArray<Adjective>;
8892
}>
89-
| Readonly<{ type: "adverb"; adverb: string }>
93+
| (Readonly<{ type: "adverb" }> & Adverb)
9094
| (Readonly<{ type: "verb" }> & Verb)
9195
| Readonly<{ type: "modal verb"; verb: string }>
9296
| Readonly<{ type: "preposition"; preposition: string }>

src/translator/adjective.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,14 @@ export function adjective(
3838
.map(({ emphasis, so }) => ({
3939
type: "simple",
4040
kind: definition.kind,
41-
adverb: [...definition.adverb, ...nullableAsArray(so)].map(noEmphasis),
41+
adverb: [
42+
...definition.adverb,
43+
...nullableAsArray(so).map((so) => ({ adverb: so, negative: false })),
44+
]
45+
.map((adverb) => ({
46+
adverb: noEmphasis(adverb.adverb),
47+
negative: adverb.negative,
48+
})),
4249
adjective: word({
4350
word: definition.adjective,
4451
reduplicationCount,

src/translator/adverb.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import * as English from "./ast.ts";
22
import { FilteredError } from "./error.ts";
33

44
export function fixAdverb(
5-
adverb: ReadonlyArray<English.Word>,
6-
): ReadonlyArray<English.Word> {
5+
adverb: ReadonlyArray<English.Adverb>,
6+
): ReadonlyArray<English.Adverb> {
77
if (adverb.length > 1) {
88
throw new FilteredError("multiple adverbs");
99
} else {

src/translator/ast.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export type AdjectivePhrase =
3333
| Readonly<{
3434
type: "simple";
3535
kind: Dictionary.AdjectiveType;
36-
adverb: ReadonlyArray<Word>;
36+
adverb: ReadonlyArray<Adverb>;
3737
adjective: Word;
3838
emphasis: boolean;
3939
}>
@@ -46,8 +46,12 @@ export type AdjectivePhrase =
4646
export type Complement =
4747
| Readonly<{ type: "noun"; noun: NounPhrase }>
4848
| Readonly<{ type: "adjective"; adjective: AdjectivePhrase }>;
49+
export type Adverb = Readonly<{
50+
adverb: Word;
51+
negative: boolean;
52+
}>;
4953
export type AdverbVerb = {
50-
adverb: ReadonlyArray<Word>;
54+
adverb: ReadonlyArray<Adverb>;
5155
verb: Word;
5256
};
5357
export type Verb = Readonly<{
@@ -87,7 +91,7 @@ export type Clause =
8791
| Readonly<{ type: "adverb"; adverb: Word }>
8892
| Readonly<{ type: "dependent"; conjunction: Word; clause: Clause }>;
8993
export type Preposition = Readonly<{
90-
adverb: ReadonlyArray<Word>;
94+
adverb: ReadonlyArray<Adverb>;
9195
preposition: Word;
9296
object: NounPhrase;
9397
emphasis: boolean;

src/translator/composer.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ export function adjective(
4242
let text: string;
4343
switch (phrases.type) {
4444
case "simple":
45-
text = [...phrases.adverb.map(word), word(phrases.adjective)]
45+
text = [
46+
...phrases.adverb.map(({ adverb }) => word(adverb)),
47+
word(phrases.adjective),
48+
]
4649
.join(" ");
4750
break;
4851
case "compound":
@@ -70,7 +73,7 @@ function complement(complement: English.Complement) {
7073
}
7174
export function adverbVerb(verbAdverb: English.AdverbVerb): string {
7275
const { adverb, verb } = verbAdverb;
73-
return [...adverb, verb].map(word).join(" ");
76+
return [...adverb.map(({ adverb }) => adverb), verb].map(word).join(" ");
7477
}
7578
export function verb(phrase: English.VerbPhrase, depth: number): string {
7679
let text: string;

src/translator/modifier.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export type ModifierTranslation =
2323
}>
2424
| Readonly<{ type: "adjective"; adjective: English.AdjectivePhrase }>
2525
| Readonly<{ type: "determiner"; determiner: English.Determiner }>
26-
| Readonly<{ type: "adverb"; adverb: English.Word }>
26+
| Readonly<{ type: "adverb"; adverb: English.Adverb }>
2727
| Readonly<{ type: "name"; name: string }>
2828
| Readonly<{ type: "position phrase"; noun: English.NounPhrase }>;
2929
export type AdjectivalModifier = Readonly<{
@@ -37,7 +37,7 @@ export type AdjectivalModifier = Readonly<{
3737
inPositionPhrase: null | English.NounPhrase;
3838
}>;
3939
export type AdverbialModifier = Readonly<{
40-
adverb: ReadonlyArray<English.Word>;
40+
adverb: ReadonlyArray<English.Adverb>;
4141
inWayPhrase: null | English.NounPhrase;
4242
}>;
4343
export type MultipleModifierTranslation =
@@ -132,11 +132,14 @@ export function defaultModifier(
132132
case "adverb":
133133
return IterableResult.single({
134134
type: "adverb",
135-
adverb: word({
136-
word: definition.adverb,
137-
reduplicationCount,
138-
emphasis,
139-
}),
135+
adverb: {
136+
adverb: word({
137+
word: definition.adverb,
138+
reduplicationCount,
139+
emphasis,
140+
}),
141+
negative: definition.negative,
142+
},
140143
});
141144
default:
142145
return IterableResult.empty();

src/translator/verb.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export type PartialVerb =
1818
& VerbObjects
1919
& Readonly<{
2020
modal: null | English.AdverbVerb;
21-
adverb: ReadonlyArray<English.Word>;
21+
adverb: ReadonlyArray<English.Adverb>;
2222
first: null | Dictionary.VerbForms;
2323
reduplicationCount: number;
2424
wordEmphasis: boolean;

0 commit comments

Comments
 (0)