4 prelude postlude mark_regions
18 groupings ( v keep_with_s )
22 /* special characters */
24 stringdef a^ '{U+00E2}' // a-circumflex
25 stringdef a` '{U+00E0}' // a-grave
26 stringdef c, '{U+00E7}' // c-cedilla
28 stringdef e" '{U+00EB}' // e-diaeresis (rare)
29 stringdef e' '{U+00E9}' // e-acute
30 stringdef e^ '{U+00EA}' // e-circumflex
31 stringdef e` '{U+00E8}' // e-grave
32 stringdef i" '{U+00EF}' // i-diaeresis
33 stringdef i^ '{U+00EE}' // i-circumflex
34 stringdef o^ '{U+00F4}' // o-circumflex
35 stringdef u^ '{U+00FB}' // u-circumflex
36 stringdef u` '{U+00F9}' // u-grave
38 define v 'aeiouy{a^}{a`}{e"}{e'}{e^}{e`}{i"}{i^}{o^}{u^}{u`}'
40 define prelude as repeat goto (
42 ( v [ ('u' ] v <- 'U') or
52 define mark_regions as (
56 $p2 = limit // defaults
61 among ( // this exception list begun Nov 2006
62 'par' // paris, parie, pari
65 // extensions possible here
72 gopast v gopast non-v setmark p1
73 gopast v gopast non-v setmark p2
77 define postlude as repeat (
89 define RV as $pV <= cursor
90 define R1 as $p1 <= cursor
91 define R2 as $p2 <= cursor
93 define standard_suffix as (
96 'ance' 'iqUe' 'isme' 'able' 'iste' 'eux'
97 'ances' 'iqUes' 'ismes' 'ables' 'istes'
99 'atrice' 'ateur' 'ation'
100 'atrices' 'ateurs' 'ations'
102 try ( ['ic'] (R2 delete) or <-'iqU' )
119 'iv' (R2 delete ['at'] R2 delete)
120 'eus' ((R2 delete) or (R1<-'eux'))
123 'i{e`}r' 'I{e`}r' //)
124 (RV <-'i') //)--new 2 Sept 02
134 'abil' ((R2 delete) or <-'abl')
135 'ic' ((R2 delete) or <-'iqU')
144 try ( ['at'] R2 delete ['ic'] (R2 delete) or <-'iqU' )
149 'euses'((R2 delete) or (R1<-'eux'))
152 'issements'(R1 non-v delete) // verbal
154 // fail(...) below forces entry to verb_suffix. -ment typically
155 // follows the p.p., e.g 'confus{e'}ment'.
157 'amment' (RV fail(<- 'ant'))
158 'emment' (RV fail(<- 'ent'))
160 'ments' (test(v RV) fail(delete))
161 // v is e,i,u,{e'},I or U
165 define i_verb_suffix as setlimit tomark pV for (
167 '{i^}mes' '{i^}t' '{i^}tes' 'i' 'ie' 'ies' 'ir' 'ira' 'irai'
168 'iraIent' 'irais' 'irait' 'iras' 'irent' 'irez' 'iriez'
169 'irions' 'irons' 'iront' 'is' 'issaIent' 'issais' 'issait'
170 'issant' 'issante' 'issantes' 'issants' 'isse' 'issent' 'isses'
171 'issez' 'issiez' 'issions' 'issons' 'it'
176 define verb_suffix as setlimit tomark pV for (
181 '{e'}' '{e'}e' '{e'}es' '{e'}s' '{e`}rent' 'er' 'era' 'erai'
182 'eraIent' 'erais' 'erait' 'eras' 'erez' 'eriez' 'erions'
183 'erons' 'eront' 'ez' 'iez'
185 // 'ons' //-best omitted
189 '{a^}mes' '{a^}t' '{a^}tes' 'a' 'ai' 'aIent' 'ais' 'ait' 'ant'
190 'ante' 'antes' 'ants' 'as' 'asse' 'assent' 'asses' 'assiez'
198 define keep_with_s 'aiou{e`}s'
200 define residual_suffix as (
201 try(['s'] test non-keep_with_s delete)
202 setlimit tomark pV for (
204 'ion' (R2 's' or 't' delete)
206 'Ier' 'I{e`}re' (<-'i')
213 define un_double as (
214 test among('enn' 'onn' 'ett' 'ell' 'eill') [next] delete
217 define un_accent as (
219 [ '{e'}' or '{e`}' ] <-'e'
236 try( [ ('Y' ] <- 'i' ) or
243 // try(['ent'] RV delete) // is best omitted