Skip to content

Commit 690816c

Browse files
committed
implemet separate fixer
1 parent d79d4ce commit 690816c

File tree

9 files changed

+269
-144
lines changed

9 files changed

+269
-144
lines changed

src/translator/adjective.ts

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -82,35 +82,6 @@ export function compoundAdjective(
8282
]);
8383
}
8484
}
85-
function rankAdjective(kind: Dictionary.AdjectiveType) {
86-
return [
87-
"opinion",
88-
"size",
89-
"physical quality",
90-
"age",
91-
"color",
92-
"origin",
93-
"material",
94-
"qualifier",
95-
]
96-
.indexOf(kind);
97-
}
98-
export function fixAdjective(
99-
adjective: ReadonlyArray<English.AdjectivePhrase>,
100-
): ReadonlyArray<English.AdjectivePhrase> {
101-
return adjective
102-
.flatMap((adjective) => {
103-
switch (adjective.type) {
104-
case "simple":
105-
return [adjective];
106-
case "compound":
107-
return adjective.adjective as ReadonlyArray<
108-
English.AdjectivePhrase & { type: "simple" }
109-
>;
110-
}
111-
})
112-
.sort((a, b) => rankAdjective(a.kind) - rankAdjective(b.kind));
113-
}
11485
export function extractNegativeFromAdjective(
11586
adjective: English.AdjectivePhrase,
11687
): null | English.AdjectivePhrase {

src/translator/adverb.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,8 @@
11
import * as English from "./ast.ts";
2-
import { FilteredError } from "./error.ts";
32
import { noEmphasis } from "./word.ts";
43

54
export const NOT = { adverb: noEmphasis("not"), negative: true };
65

7-
export function fixAdverb(
8-
adverb: ReadonlyArray<English.Adverb>,
9-
): ReadonlyArray<English.Adverb> {
10-
if (adverb.length > 1) {
11-
throw new FilteredError("multiple adverbs");
12-
} else {
13-
return adverb;
14-
}
15-
}
166
export function extractNegativeFromAdverbs(
177
adverb: ReadonlyArray<English.Adverb>,
188
): null | ReadonlyArray<English.Adverb> {

src/translator/ast.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import * as Dictionary from "../../dictionary/type.ts";
22

3+
// When editing, update `./fixer.ts` as well
4+
35
export type Word = Readonly<{
46
word: string;
57
emphasis: boolean;

src/translator/determiner.ts

Lines changed: 2 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,6 @@ import { FilteredError } from "./error.ts";
66
import { simpleNounForms } from "./noun.ts";
77
import { word } from "./word.ts";
88

9-
function filterKind(
10-
determiners: ReadonlyArray<English.Determiner>,
11-
kinds: ReadonlyArray<Dictionary.DeterminerType>,
12-
) {
13-
return determiners.filter(({ kind }) => kinds.includes(kind));
14-
}
159
function filterQuantity(
1610
determiners: ReadonlyArray<English.Determiner>,
1711
targetQuantity: Dictionary.Quantity,
@@ -61,78 +55,6 @@ export function determiner(
6155
determiner: word({ ...options, word: determiner }),
6256
}));
6357
}
64-
export function fixDeterminer(
65-
determiner: ReadonlyArray<English.Determiner>,
66-
): ReadonlyArray<English.Determiner> {
67-
const negative = filterKind(determiner, ["negative"]);
68-
const first = filterKind(determiner, [
69-
"article",
70-
"demonstrative",
71-
"possessive",
72-
]);
73-
const article = filterKind(determiner, ["article"]);
74-
const demonstrative = filterKind(determiner, ["demonstrative"]);
75-
const possessive = filterKind(determiner, ["possessive"]);
76-
const distributive = filterKind(determiner, ["distributive"]);
77-
const interrogative = filterKind(determiner, ["interrogative"]);
78-
const quantitative = filterKind(determiner, ["numeral", "quantifier"]);
79-
const errors = filterSet([
80-
[
81-
negative.length > 1,
82-
encodeDeterminer`multiple negative determiners ${negative}`,
83-
],
84-
[article.length > 1, encodeDeterminer`multiple articles ${article}`],
85-
[
86-
demonstrative.length > 1,
87-
encodeDeterminer`multiple demonstrative determiners ${demonstrative}`,
88-
],
89-
[
90-
possessive.length > 1,
91-
encodeDeterminer`multiple possessive determiners ${possessive}`,
92-
],
93-
[
94-
distributive.length > 1,
95-
encodeDeterminer`multiple distributive determiners ${distributive}`,
96-
],
97-
[
98-
interrogative.length > 1,
99-
encodeDeterminer`multiple interrogative determiners ${interrogative}`,
100-
],
101-
[
102-
quantitative.length > 1,
103-
encodeDeterminer`multiple quantitative determiners ${quantitative}`,
104-
],
105-
[
106-
article.length > 0 && demonstrative.length > 0,
107-
encodeDeterminer`article ${article} with demonstrative determiner ${demonstrative}`,
108-
],
109-
[
110-
article.length > 0 && possessive.length > 0,
111-
encodeDeterminer`article ${article} with possessive determiner ${possessive}`,
112-
],
113-
[
114-
demonstrative.length > 0 && possessive.length > 0,
115-
encodeDeterminer`demonstrative determiner ${demonstrative} with possessive determiner ${possessive}`,
116-
],
117-
[
118-
negative.length > 0 && interrogative.length > 0,
119-
encodeDeterminer`negative determiner ${negative} with interrogative determiner ${interrogative}`,
120-
],
121-
]);
122-
if (errors.length === 0) {
123-
return [
124-
...negative,
125-
...first,
126-
...distributive,
127-
...interrogative,
128-
...quantitative,
129-
];
130-
} else {
131-
throw new AggregateError(
132-
errors.map((element) => new FilteredError(element())),
133-
);
134-
}
135-
}
13658
export function extractNegativeFromDeterminers(
13759
determiner: ReadonlyArray<English.Determiner>,
13860
): null | ReadonlyArray<English.Determiner> {
@@ -145,10 +67,10 @@ export function extractNegativeFromDeterminers(
14567
return spliced;
14668
}
14769
}
148-
function encodeDeterminer(
70+
export function encodeDeterminer(
14971
strings: TemplateStringsArray,
15072
...determiners: ReadonlyArray<ReadonlyArray<English.Determiner>>
151-
) {
73+
): () => string {
15274
return () =>
15375
zip(strings, [
15476
...determiners
@@ -160,8 +82,3 @@ function encodeDeterminer(
16082
.flat()
16183
.join("");
16284
}
163-
function filterSet<const T>(
164-
set: ReadonlyArray<readonly [condition: boolean, value: T]>,
165-
) {
166-
return set.filter(([condition]) => condition).map(([_, value]) => value);
167-
}

0 commit comments

Comments
 (0)