11import { zip } from "@std/collections/zip" ;
22import { mapNullable } from "../misc/misc.ts" ;
3+ import { AdverbVerb } from "./ast.ts" ;
34import * as English from "./ast.ts" ;
45import { FilteredError } from "./error.ts" ;
56import * as Dictionary from "../dictionary/type.ts" ;
@@ -220,9 +221,17 @@ function fixComplement(complement: English.Complement): English.Complement {
220221 }
221222}
222223function fixAdverbVerb ( adverbVerb : English . AdverbVerb ) : English . AdverbVerb {
224+ const notIndex = adverbVerb . preAdverbs . findIndex ( ( adverb ) => adverb . negative ) ;
225+ const [ not , adverbs ] = adverbVerb . verb . type === "modal" && notIndex !== - 1
226+ ? [
227+ adverbVerb . preAdverbs [ notIndex ] ,
228+ adverbVerb . preAdverbs . toSpliced ( notIndex , 1 ) ,
229+ ]
230+ : [ null , adverbVerb . preAdverbs ] ;
223231 return {
224232 ...adverbVerb ,
225- preAdverbs : fixMultipleAdverbs ( adverbVerb . preAdverbs ) ,
233+ preAdverbs : fixMultipleAdverbs ( adverbs ) ,
234+ postAdverb : not ,
226235 } ;
227236}
228237function fixMultipleVerb (
@@ -234,7 +243,49 @@ function fixMultipleVerb(
234243 throw new FilteredError ( "modal verb after another verb" ) ;
235244 }
236245 }
237- return newVerb ;
246+ const first = newVerb [ 0 ] ;
247+ const notIndex = first . preAdverbs . findIndex ( ( adverb ) => adverb . negative ) ;
248+ const newNewVerb : ReadonlyArray < AdverbVerb > =
249+ notIndex !== - 1 && first . verb . type !== "modal" &&
250+ first . verb . presentSingular !== "is"
251+ ? [
252+ {
253+ verb : {
254+ type : "non-modal" ,
255+ presentPlural : "do" ,
256+ presentSingular : "does" ,
257+ past : "did" ,
258+ reduplicationCount : 1 ,
259+ emphasis : false ,
260+ } ,
261+ preAdverbs : [ ] ,
262+ postAdverb : first . preAdverbs [ notIndex ] ,
263+ } ,
264+ {
265+ ...first ,
266+ preAdverbs : first . preAdverbs . toSpliced ( notIndex , 1 ) ,
267+ } ,
268+ ...newVerb . slice ( 1 ) ,
269+ ]
270+ : newVerb ;
271+ return [
272+ newNewVerb [ 0 ] ,
273+ ...newNewVerb
274+ . slice ( 1 )
275+ . map ( ( verb ) =>
276+ verb . verb . type === "non-modal" && verb . verb . presentSingular === "is"
277+ ? {
278+ ...verb ,
279+ verb : {
280+ ...verb . verb ,
281+ presentPlural : "be" ,
282+ presentSingular : "be" ,
283+ past : "been" ,
284+ } ,
285+ }
286+ : verb
287+ ) ,
288+ ] ;
238289}
239290function fixVerbPhrase ( verb : English . VerbPhrase ) : English . VerbPhrase {
240291 switch ( verb . type ) {
0 commit comments