1+ import { throwError } from "../../misc/misc.ts" ;
12import { ArrayResult } from "../array_result.ts" ;
3+ import { dictionary } from "../dictionary.ts" ;
24import * as TokiPona from "../parser/ast.ts" ;
5+ import { fixAdverb } from "./adverb.ts" ;
36import * as English from "./ast.ts" ;
4- import { TranslationTodoError } from "./error.ts" ;
5- import { noEmphasis } from "./word.ts" ;
7+ import { FilteredError , TranslationTodoError } from "./error.ts" ;
8+ import { multipleModifiers } from "./modifier.ts" ;
9+ import { multiplePhrases } from "./phrase.ts" ;
10+ import { noEmphasis , word } from "./word.ts" ;
11+ import { getReduplicationCount } from "./word_unit.ts" ;
612
713export function preposition (
8- _preposition : TokiPona . Preposition ,
14+ preposition : TokiPona . Preposition ,
915) : ArrayResult < English . Preposition > {
10- throw new TranslationTodoError ( "preposition" ) ;
16+ return ArrayResult . combine (
17+ prepositionAsWord ( preposition . preposition ) ,
18+ multipleModifiers ( preposition . modifiers )
19+ . filterMap ( ( modifier ) =>
20+ modifier . type === "adverbial"
21+ ? ( modifier . inWayPhrase == null ? modifier . adverb : throwError (
22+ new FilteredError (
23+ '"in [adjective] way" prepositional phrase modifying preposition' ,
24+ ) ,
25+ ) )
26+ : throwError ( new FilteredError ( "adjectives modifying preposition" ) )
27+ )
28+ . map ( fixAdverb ) ,
29+ multiplePhrases ( {
30+ phrases : preposition . phrases ,
31+ place : "object" ,
32+ includeGerund : true ,
33+ andParticle : null ,
34+ includeVerb : false ,
35+ } )
36+ . filterMap ( ( phrases ) =>
37+ phrases . type === "noun"
38+ ? phrases . noun
39+ : throwError ( new FilteredError ( `${ phrases . type } as indirect object` ) )
40+ ) ,
41+ )
42+ . map < English . Preposition > ( ( [ preposition , adverb , object ] ) => ( {
43+ adverb,
44+ preposition,
45+ object,
46+ emphasis : preposition . emphasis != null ,
47+ } ) ) ;
48+ }
49+ function prepositionAsWord (
50+ preposition : TokiPona . HeadedWordUnit ,
51+ ) : ArrayResult < English . Word > {
52+ switch ( preposition . type ) {
53+ case "x ala x" :
54+ return new ArrayResult (
55+ new TranslationTodoError ( "preposition ala preposition" ) ,
56+ ) ;
57+ case "default" :
58+ case "reduplication" :
59+ return new ArrayResult (
60+ dictionary . get ( preposition . word ) ! . definitions ,
61+ )
62+ . filterMap ( ( definition ) =>
63+ definition . type === "preposition"
64+ ? word ( {
65+ word : definition . preposition ,
66+ reduplicationCount : getReduplicationCount ( preposition ) ,
67+ emphasis : preposition . emphasis != null ,
68+ } )
69+ : null
70+ ) ;
71+ }
1172}
1273export function nounAsPreposition (
1374 phrase : English . NounPhrase ,
@@ -17,5 +78,6 @@ export function nounAsPreposition(
1778 adverb : [ ] ,
1879 preposition : noEmphasis ( preposition ) ,
1980 object : phrase ,
81+ emphasis : false ,
2082 } ;
2183}
0 commit comments