@@ -3,10 +3,11 @@ import { nullableAsArray, throwError } from "../misc.ts";
3
3
import * as TokiPona from "../parser/ast.ts" ;
4
4
import * as English from "./ast.ts" ;
5
5
import { FilteredOutError , TranslationTodoError } from "./error.ts" ;
6
+ import { perspective } from "./noun.ts" ;
6
7
import { multiplePhrases , multiplePhrasesAsNoun } from "./phrase.ts" ;
7
8
import { predicate } from "./predicate.ts" ;
8
9
import { nounAsPreposition } from "./preposition.ts" ;
9
- import { verb } from "./verb.ts" ;
10
+ import { addModalToAll , verb } from "./verb.ts" ;
10
11
import { unemphasized } from "./word.ts" ;
11
12
12
13
function phraseClause (
@@ -85,10 +86,7 @@ function liClause(
85
86
predicate ( clause . predicates , "li" ) ,
86
87
)
87
88
. flatMap ( ( [ subject , predicate ] ) => {
88
- const perspective = subject . type === "simple"
89
- ? subject . perspective
90
- : "third" ;
91
- return verb ( predicate , perspective , subject . quantity )
89
+ return verb ( predicate , perspective ( subject ) , subject . quantity )
92
90
. map ( ( verb ) => ( {
93
91
type : "default" ,
94
92
subject,
@@ -97,6 +95,89 @@ function liClause(
97
95
} ) ) ;
98
96
} ) ;
99
97
}
98
+ function iWish (
99
+ subject : English . NounPhrase ,
100
+ verb : English . VerbPhrase ,
101
+ ) : English . Clause {
102
+ return {
103
+ type : "default" ,
104
+ subject : {
105
+ type : "simple" ,
106
+ determiner : [ ] ,
107
+ adjective : [ ] ,
108
+ noun : unemphasized ( "I" ) ,
109
+ quantity : "singular" ,
110
+ perspective : "first" ,
111
+ postAdjective : null ,
112
+ preposition : [ ] ,
113
+ emphasis : false ,
114
+ } ,
115
+ verb : {
116
+ type : "default" ,
117
+ adverb : [ ] ,
118
+ verb : {
119
+ modal : null ,
120
+ first : unemphasized ( "wish" ) ,
121
+ rest : [ ] ,
122
+ } ,
123
+ subjectComplement : null ,
124
+ contentClause : {
125
+ type : "default" ,
126
+ subject,
127
+ verb,
128
+ hideSubject : false ,
129
+ } ,
130
+ object : null ,
131
+ objectComplement : null ,
132
+ preposition : [ ] ,
133
+ hideVerb : false ,
134
+ } ,
135
+ hideSubject : false ,
136
+ } ;
137
+ }
138
+ function oClause (
139
+ clause : TokiPona . Clause & { type : "o clause" } ,
140
+ ) : ArrayResult < English . Clause > {
141
+ const subject = clause . subjects != null
142
+ ? multiplePhrasesAsNoun ( {
143
+ phrases : clause . subjects ,
144
+ place : "subject" ,
145
+ includeGerund : true ,
146
+ andParticle : "en" ,
147
+ } )
148
+ : new ArrayResult < English . NounPhrase > ( [ {
149
+ type : "simple" ,
150
+ determiner : [ ] ,
151
+ adjective : [ ] ,
152
+ noun : unemphasized ( "you" ) ,
153
+ quantity : "plural" ,
154
+ perspective : "second" ,
155
+ postAdjective : null ,
156
+ preposition : [ ] ,
157
+ emphasis : false ,
158
+ } ] ) ;
159
+ return ArrayResult . concat (
160
+ ArrayResult . combine ( subject , predicate ( clause . predicates , "o" ) )
161
+ . flatMap ( ( [ subject , predicate ] ) => {
162
+ return verb ( predicate , perspective ( subject ) , subject . quantity )
163
+ . map < English . Clause > ( ( verb ) => iWish ( subject , verb ) ) ;
164
+ } ) ,
165
+ ArrayResult . combine (
166
+ subject ,
167
+ predicate ( clause . predicates , "o" )
168
+ . map ( ( verb ) => addModalToAll ( unemphasized ( "should" ) , verb ) ) ,
169
+ )
170
+ . flatMap ( ( [ subject , predicate ] ) => {
171
+ return verb ( predicate , perspective ( subject ) , subject . quantity )
172
+ . map ( ( verb ) => ( {
173
+ type : "default" ,
174
+ subject,
175
+ verb,
176
+ hideSubject : false ,
177
+ } ) ) ;
178
+ } ) ,
179
+ ) ;
180
+ }
100
181
export function clause ( clause : TokiPona . Clause ) : ArrayResult < English . Clause > {
101
182
switch ( clause . type ) {
102
183
case "phrases" :
@@ -118,8 +199,9 @@ export function clause(clause: TokiPona.Clause): ArrayResult<English.Clause> {
118
199
) ;
119
200
case "li clause" :
120
201
return liClause ( clause ) ;
121
- case "prepositions" :
122
202
case "o clause" :
203
+ return oClause ( clause ) ;
204
+ case "prepositions" :
123
205
return new ArrayResult ( new TranslationTodoError ( clause . type ) ) ;
124
206
}
125
207
}
0 commit comments