1# Copyright (C) 2018, 2019, 2020  Olga Yakovleva <yakovleva.o.v@gmail.com>
2
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU Lesser General Public License as published by
5# the Free Software Foundation, either version 2.1 of the License, or
6# (at your option) any later version.
7
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11# GNU Lesser General Public License for more details.
12
13# You should have received a copy of the GNU Lesser General Public License
14# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16define FunctionWord
17{o} | {a} | {os} | {as} |
18{um} | {uma} | {uns} | {umas} |
19{eu} | {tu} | {você} | {ele} | {ela} | {nós} | {vós} | {vocês} | {eles} | {elas} | {lhe} |
20{me} | {te} | {nos} | {vos} | {la} | {lo} | {las} | {los} | {se} |
21{este} | {esta} | {estes} | {estas} | {neste} | {nesta} | {nestes} | {nestas} | {deste} | {desta} | {destes} | {destas} | {esse} | {essa} | {esses} | {essas} | {desse} | {dessa} | {desses} | {dessas} | {nesse} | {nessa} | {nesses} | {nessas} | {aquele} | {aquela} | {aqueles} | {aquelas} | {daquele} | {daquela} | {daqueles} | {daquelas} | {naquele} | {naquela} | {naqueles} | {naquelas} | {que} |
22{meu} | {minha} | {meus} | {minhas} | {teu} | {tua} | {teus} | {tuas} | {seu} | {sua} | {seus} | {suas} | {nosso} | {nossa} | {nossos} | {nossas} | {vosso} | {vossa} | {vossos} | {vossas} | {dele} | {dela} | {deles} | {delas} | {nele} | {nela} | {neles} | {nelas} |
23{de} | {do} | {da} | {dos} | {das} | {dum} | {duma} | {duns} | {dumas} | {em} | {no} | {na} | {nos} | {nas} | {num} | {numa} | {nuns} | {numas} | {por} | {pelo} | {pela} | {pelos} | {pelas} | {ao} | {à} | {aos} | {às} | {para} | {pro} | {pra} | {pros} | {pras} | {com} | {sem} | {até} | {desde} | {entre} | {sobre} | {sob} |
24{e} | {ou} | {se} | {mas} | {como} ;
25
26define StressTag OX|PAR|PRO ;
27define LowerMidTag LM3 | LM4 | LM5 ;
28define Tag StressTag | FUNC | CLOSE | LowerMidTag ;
29
30define RemoveTags Tag -> 0 ;
31
32define EndOfWord .#. | Tag ;
33define StartOfWord .#. ;
34
35define VowelLetterA a|à|á|â|ã ;
36define VowelLetterE e|é|ê ;
37define VowelLetterI i|í ;
38define VowelLetterO o|ó|ô|õ ;
39define VowelLetterU u|ú|ü ;
40define VowelLetterEOrI VowelLetterE|VowelLetterI ;
41define VowelLetter VowelLetterA|VowelLetterEOrI|VowelLetterO|VowelLetterU;
42define AccentedVowelLetter á|â|é|ê|í|ó|ô|ú ;
43define ConsonantLetter b|c|ç|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z|ñ ;
44define Letter VowelLetter | ConsonantLetter ;
45define Word [Letter|ñ|%']+ ;
46
47 define StressedVowel a1|aN1|E1|e1|"e1?"|eN1|i1|iN1|O1|o1|"o1?"|oN1|u1|uN1 ;
48 define UnstressedVowel a|aN|e|E|eN|i|iN|o|O|oN|u|uN ;
49 define Vowel StressedVowel | UnstressedVowel  ;
50define NasalVowel aN|aN1|eN|eN1|iN|iN1|oN|oN1|uN|uN1 ;
51define OralVowel Vowel - NasalVowel ;
52define NotIVowel OralVowel - [i|i1] ;
53define NotUVowel OralVowel - [u|u1] ;
54define Stop b|p|d|t|g|k ;
55define Fricative v|f|z|s|S|Z ;
56define Affricate dZ|tS ;
57define Nasal m|n|J|Js ;
58define Liquid l|L|r|R ;
59define Glide j|w|jN|wN ;
60 define Consonant Stop|Fricative|Affricate|Nasal|Liquid|Glide ;
61define VoicedConsonant b|d|g|v|z|Z|dZ|Nasal|Liquid ;
62
63define FirstConsonantInCluster Stop|f|v ;
64
65define UnstressedEnding [[a|e|o] (s)] | {am} | {em} | {ens} ;
66
67define NotAccentedPrefix [\AccentedVowelLetter]* ;
68
69define CloseWordEnding
70# Words ending in "ele(s)"
71[{ele}(s)] |
72# Words ending in "er"
73{er} |
74# Words ending in "oa(s), oam"
75[{oa}(s|m)] |
76# Words ending in "eiro(s), eira(s)"
77[{eir}[o|a](s)] |
78# Words ending in "dora(s), tora(s)"
79[[d|t]{ora}(s)] |
80# Words ending in "ei(s)"
81[{ei}(s)] |
82# Words ending in "or, ores"
83[{or}({es})] |
84# Words ending in "teve"
85{teve} |
86# Words ending in "esa(s), eso(s)"
87[{es}[a|o](s)] |
88# Words ending in "resse"
89{resse} |
90# Words ending in "oito(s)"
91[{oito}(s)] |
92# Words ending in "ovo"
93{ovo} |
94# Words ending in "ez"
95{ez} |
96# Words ending in "eses"
97{eses} |
98# Words ending in "eito(s), eita(s), eitam, eite(s)"
99[{eit} [[[a|e|o] (s)] | {am}]] |
100# Words ending in "eço(s), eça(s)"
101[{eç}[o|a](s)] |
102# Words ending in "ceram", "beram"
103[[c|b]{eram}] |
104# Words ending in "eza(s)"
105[{eza}(s)] |
106# Words ending in "orto"
107{orto} |
108# Words ending in "edo(s)"
109[{edo}(s)] |
110# Words ending in "osto"
111{osto} |
112# Words ending in "ejam"
113{ejam} |
114# Words ending in "ermo(s)"
115[{ermo}(s)] |
116# Words ending in "eçam"
117{eçam} |
118# Words ending in "erdo(s), erda(s)"
119[{erd}[o|a](s)] |
120# Words ending in "ejo(s)"
121[{ejo}(s)] |
122# Words ending in "orro"
123{orro} |
124# Words ending in "echo(s)"
125[{echo}(s)] |
126# Words ending in "obo"
127{obo} |
128# Words ending in "orra, orram"
129[{orra}(m)] |
130# Words ending in "oxo(s), oxa(s)"
131[{ox}[o|a](s)] |
132# Words ending in "eba(s), ebam"
133[{eba}(s|m)] |
134# Words ending in "ojo"
135{ojo} |
136# Words ending in "esco(s), esca(s)"
137[{esc}[o|a](s)] |
138# words ending in "ebo"
139{ebo} |
140# Words with the combination "erç"
141[{erç} UnstressedEnding] |
142# Words with the combination "eim"
143[{eim} UnstressedEnding] |
144# Words with the combination "eix"
145[{eix} UnstressedEnding] |
146# Words with the combination "elh"
147[{elh} UnstressedEnding] |
148# Words with the combination "eij"
149[{eij} UnstressedEnding] |
150{oso} |
151{bera} |
152[{oir} ({os} | {as})] |
153[{ssora} (s)] |
154[{oço} (s)] |
155[{evo} (s)] |
156[{ete} (s)] |
157{ova} |
158{esse} ;
159
160define OpenWord
161# Words ending in "ele(s)"
162{pele} |
163# Words ending in "er"
164{qualquer} |
165{quer} |
166{mulher} |
167{tiver} |
168{quiser} |
169{Xavier} |
170{puder} |
171{houver} |
172{fizer} |
173{requer} |
174{chanceler} |
175{sequer} |
176{quaisquer} |
177# Words ending in "ei(s)"
178{pasteis} |
179{pinceis} |
180{corseis} |
181# Words ending in "or, ores"
182{melhor} |
183{melhores} |
184{pior} |
185{piores} |
186{maior} |
187{maiores} |
188{menor} |
189{menores} |
190{suor} |
191{arredor} |
192{arredores} |
193# Words ending in "resse"
194{estresse} |
195# Words ending in "ez"
196{dez} |
197# Words ending in "eses"
198{teses} |
199# Words ending in "eço(s)"
200{meço} |
201{peço} |
202# Words ending in "eça(s)"
203[{peça}(s)] |
204[{autopeça}(s)] |
205[{meça}(s)] |
206[{tropeça}(s)] |
207[{começa}(s)] |
208# Words ending in "orto"
209{comporto} |
210{suporto} |
211# Words ending in "ermo(s)"
212{tivermos} |
213{dissermos} |
214{estivermos} |
215{quisermos} |
216{pudermos} |
217# Words ending in "eçam"
218{começam} |
219{peçam} |
220{meçam} |
221# Words ending in "orra, orram"
222{forra} |
223{desforra} |
224# Words ending in "esco(s), esca(s)"
225{refresca} |
226[{pesca}(s)] |
227# Words with the combination "elh"
228[{velho}(s)] |
229[{evangelho}(s)] |
230[{velha}(s)] |
231{peles} |
232[{tora} (s)] |
233{basquete} |
234{cova} |
235{sova} |
236{acesse} |
237{comesse} |
238{confesse} |
239{coubesse} |
240{dissesse} |
241{estresse} |
242{fizesse} |
243{houvesse} |
244{processe} |
245{professe} |
246{pudesse} |
247{pusesse} |
248{quisesse} |
249{soubesse} |
250{tivesse} |
251{trouxesse} |
252{viesse} |
253{abstivesse} |
254{adviesse} |
255{arremesse} |
256{ativesse} |
257{atravesse} |
258{bendissesse} |
259{compusesse} |
260{condissesse} |
261{conviesse} |
262{depusesse} |
263{desdissesse} |
264{desfizesse} |
265{detivesse} |
266{dispusesse} |
267{estivesse} |
268{expusesse} |
269{impusesse} |
270{maldissesse} |
271{mantivesse} |
272{obtivesse} |
273{opusesse} |
274{predissesse} |
275{preprocesse} |
276{propusesse} |
277{proviesse} |
278{refizesse} |
279{reouvesse} |
280{reprocesse} |
281{repusesse} |
282{requisesse} |
283{retivesse} |
284{supusesse} |
285{transpusesse} |
286{antepusesse} |
287{contradissesse} |
288{contrafizesse} |
289{contrapusesse} |
290{decompusesse} |
291{indispusesse} |
292{interpusesse} |
293{interviesse} |
294{liquefizesse} |
295{multiprocesse} |
296{satisfizesse} |
297[{ador} UnstressedEnding] |
298{sete} |
299{nova} ;
300
301define CloseWordPattern
302NotAccentedPrefix CloseWordEnding ;
303
304define OpenWordEnding
305# Words ending in "oxo(s), oxa(s)"
306[{dox}[o|a](s)] |
307{redor} ;
308
309define OpenWordPattern
310NotAccentedPrefix OpenWordEnding ;
311
312define CloseWord
313[CloseWordPattern - [OpenWordPattern | OpenWord]] |
314[{alqueire}(s)] |
315[{foi}] |
316[{dois}] |
317[{pois}] |
318[{depois}] |
319[{foram}] |
320[{pelo}(s)] |
321[{cabelo}(s)] |
322[{camelo}(s)] |
323[{pesadelo}(s)] |
324[{modelo}(s)] |
325[{pela}(s)] |
326[{sobre}] |
327[{mesmo}] |
328[{mesma}] |
329[{mesmo}] |
330[{mesmas}] |
331[{porque}] |
332[{hoje}] |
333[{sorvete}(s)] |
334[{gabinete}(s)] |
335[{colete}(s)] |
336[{foguete}(s)] |
337[{sabonete}(s)] |
338[{cavalete}(s)] |
339[{todo}(s)] |
340[{esse}(s)] |
341[{nesse}(s)] |
342[{desse}(s)] |
343[{este}(s)] |
344[{deste}(s)] |
345[{neste}(s)] |
346[{perdeste}(s)] |
347[{leste}(s)] |
348[{sofreste}(s)] |
349[{desde}] |
350[{sopa}] |
351[{gol}] |
352[{preto}(s)] |
353[{boleto}(s)] |
354[{prometo}] |
355[{folheto}(s)] |
356[{libreto}(s)] |
357[{panfleto}(s)] |
358[{esqueleto}(s)] |
359[{noite}(s)] |
360[{vezes}] |
361[{osso}] |
362[{grosso}] |
363[{morreram}] |
364[{leram}] |
365[{ocorreram}] |
366[{sofreram}] |
367[{resolveram}] |
368[{treze}] |
369[{pela}(s)] |
370[{estrela}(s)] |
371[{escreveram}] |
372[{encheram}] |
373[{colheram}] |
374[{perderam}] |
375[{toda}(s)] |
376[{escolheram}] |
377[{defenderam}] |
378[{entenderam}] |
379[{abateram}] |
380[{sobreviveram}] |
381[{envolveram}] |
382[{correram}] |
383[{avesso}(s)] |
384[{folha}(s)] |
385[{gols}] |
386[{bolsa}(s)] |
387[{bolso}(s)] |
388[{escolha}(s)] |
389[{bolo}(s)] |
390[{golfo}] |
391[{toldo}(s)] |
392[{reembolso}] |
393[{labareda}(s)] |
394[{poderes}] |
395[{seres}] |
396[{prazeres}] |
397[{pareceres}] |
398[{corpo}] |
399[{anticorpo}] |
400[{coisa}(s)] |
401[{texto}(s)] |
402[{sob}] |
403[{chega}(s)] |
404[{doze}] |
405[{gostos}] |
406[{rosto}] |
407[{sexta}(s)] |
408[{concerto}(s)] |
409[{exageros}] |
410[{bezerra}(s)] |
411[{desemprego}] |
412[{chego}] |
413[{sossego}] |
414[{empregos}] |
415[{piloto}(s)] |
416[{garoto}(s)] |
417[{catorze}] |
418[{quatorze}] |
419[{fogo}] |
420[{fosse}] |
421[{fossem}] |
422[{reino}(s)] |
423[{treino}(s)] |
424[{escreva}(s)] |
425[{escrevam}] |
426[{arroz}] |
427[{chegue}(s)] |
428[{cheguem}] |
429[{garota}(s)] |
430[{serem}] |
431[{dizerem}] |
432[{reverem}] |
433[{quererem}] |
434[{terem}] |
435[{erros}] |
436[{chegam}] |
437[{temperos}] |
438[{boca}(s)] |
439[{governos}] |
440[{esposa}(s)] |
441[{negro}(s)] |
442[{negra}(s)] |
443[{preta}(s)] |
444[{planeta}(s)] |
445[{caderneta}(s)] |
446[{borboleta}(s)] |
447[{etiqueta}(s)] |
448[{carreta}(s)] |
449[{marreta}(s)] |
450[{caneta}(s)] |
451[{comprometa}(s)] |
452[{comprometam}] |
453[{acervo}(s)] |
454[{nervo}(s)] |
455[{verde}(s)] |
456[{alviverde}(s)] |
457[{cachorros}] |
458[{rede}(s)] |
459[{parede}(s)] |
460[{acordos}] |
461[{forem}] |
462[{retornos}] |
463[{torres}] |
464[{dobros}] |
465[{relevos}] |
466[{contexto}(s)] |
467[{almoços}] |
468[{zebra}(s)] |
469[{secos}] |
470[{doce}(s)] |
471[{gota}(s)] |
472[{sexto}(s)] |
473[{letra}(s)] |
474[{erga}(s)] |
475[{ergam}] |
476[{moço}(s)] |
477[{moça}(s)] |
478[{namoros}] |
479[{podre}(s)] |
480[{aterros}] |
481[{transtorno}(s)] |
482[{devam}] |
483[{coro}] |
484[{porco}] |
485[{formos}] |
486[{Pedro}] |
487[{ceifa}(s)] |
488[{ceifam}] |
489[{noivo}(s)] |
490[{noiva}(s)] |
491[{heroi}] |
492[{heroico}(s)] |
493[{heroica}(s)] |
494[{forno}(s)] |
495[{oco}(s)] |
496[{oca}(s)] |
497[{bobhecha}(s)] |
498[{arroba}] |
499[{escopo}(s)] |
500{poderoso} |
501[{planeja}(s)] |
502{oi} |
503{pedro} |
504[{colchete} (s)] |
505{escolho} |
506{generoso} |
507{gaveta} |
508{leia} |
509{veio} |
510[ConsonantLetter [e|o]] |
511{bandeja} |
512{chamego} |
513{boi} |
514{cocho} |
515#[{professora} (s)] |
516#[{impressora} (s)] |
517{conosco} |
518{dorso} |
519[{pescoço} (s)] |
520{teres} |
521[{mancebo} (s)] |
522{afazeres} |
523[{tolo} (s)] |
524[{galego} (s)] |
525{prometeste} |
526{viveram} |
527[{ostra} (s)] |
528{lobos} |
529[{morcego} (s)] |
530[{cebola} (s)] |
531[{violeta} (s)] |
532[{grega} (s)] |
533[{grego} (s)] |
534[{bochecha} (s)] |
535[{bolha} (s)] |
536{desassossego} |
537{espessa} |
538{espessas} |
539{deva} |
540{mexeram} |
541{remexeram} |
542{selos} |
543{percorreram} |
544{intrometa} |
545{intrometam} |
546{intrometas} |
547{teta} |
548{desgostos} |
549{maroto} |
550{marotos} |
551{moita} |
552{moitas} |
553{perdoe} |
554{raposa} |
555{raposas} |
556{seda} |
557{sedas} |
558[{doid} [o|a] (s)] ;
559
560define TagCloseWord
561[..] -> CLOSE || StartOfWord CloseWord _ EndOfWord ;
562
563define BasicUnaccentedParoxytone [Letter - AccentedVowelLetter]* [VowelLetter - AccentedVowelLetter] [Letter - AccentedVowelLetter]* UnstressedEnding ;
564define UnaccentedParoxytoneException [ConsonantLetter* [g|q] [u|ü] UnstressedEnding] | [?* [{ãe}|{ão}|{õe}] (s)] | [{ao} (s)] ;
565define UnaccentedParoxytone BasicUnaccentedParoxytone - UnaccentedParoxytoneException ;
566
567define TagUnaccentedParoxytone [..] -> PAR || StartOfWord UnaccentedParoxytone _ [Tag - StressTag]* .#. ;
568
569define MenteSuffix {mente} ;
570
571define ProparoxytoneBase [?* [
572{orica}
573]] ;
574
575define AddLowerMidTag3
576[..] -> LM5 || StartOfWord ProparoxytoneBase MenteSuffix _ [Tag - LowerMidTag]* .#. ;
577
578define AddLowerMidTag2
579[..] -> LM4 || StartOfWord [UnaccentedParoxytone - CloseWord] MenteSuffix _ [Tag - LowerMidTag]* .#. ;
580
581define AddLowerMidTag1
582[..] -> LM3 || StartOfWord [[[[[Letter - AccentedVowelLetter]*] - CloseWord] MenteSuffix] | [{sozinh} [a|o] (s)]] _ [Tag - LowerMidTag]* .#. ;
583
584
585define TagFunctionWord
586[..] -> FUNC || StartOfWord FunctionWord _ EndOfWord ;
587
588define GuQuExceptionsRule
589u -> ü ||
590StartOfWord {freq} _ VowelLetterE ,
591StartOfWord {seq} _ VowelLetterE {str} ,
592{cinq} _ {enta} EndOfWord ,
593{tranq} _ {il} ,
594StartOfWord {seq} _ {ela} (s) EndOfWord ,
595StartOfWord {delinq} _ VowelLetterEOrI ,
596StartOfWord {ag} _ {ent} ,
597StartOfWord {eq} _ {estre} (s) EndOfWord ,
598StartOfWord {antig} _ {idade} (s) EndOfWord ,
599StartOfWord {antiq} _ {íssim} [o|a] (s) EndOfWord ,
600StartOfWord {ling} _ VowelLetterEOrI ,
601StartOfWord  {quinq} _ {ênio} EndOfWord ,
602{seq} _ VowelLetterE n ;
603
604define SHRule
605{sh} -> {ch} ;
606
607define IntervocalicSRule s -> z || VowelLetter _ VowelLetter ;
608
609define TransRule
610{tr} VowelLetterA n [s:z] -> || StartOfWord _ VowelLetter ;
611
612define InitialEXVowelRule
613x -> z ||
614StartOfWord VowelLetterE _ VowelLetter ,
615e _ {ist} ;
616
617define XAfterDiphthongRule
618x @-> S || [[[VowelLetterA|VowelLetterE] i] | [VowelLetterO u]] _ VowelLetter ,,
619x @-> s || StartOfWord {au} _ ,,
620{trou} [x:s] @-> || StartOfWord _ VowelLetterE ;
621
622define XBeforeVowelExceptionRule
623x -> ks ||
624StartOfWord {ma} _ {imiz} ;
625
626define RestoreXRule ks -> x ;
627
628define XBeforeVowelRule
629x -> S ||
630m VowelLetterE _ VowelLetter ,
631VowelLetterE n _ VowelLetter ,
632StartOfWord _ VowelLetter ,
633StartOfWord {ta} _ a (s) EndOfWord ,
634StartOfWord {ale} _ {andre} EndOfWord ,
635{li} _ VowelLetter ,
636{co} _ VowelLetter ,
637{ve} _ VowelLetter ,
638StartOfWord {almo} _ {arifado} (s) EndOfWord ,
639StartOfWord {lu} _ VowelLetter ,
640{la} _ VowelLetter ,
641StartOfWord {ca} _ {ias} EndOfWord ,
642StartOfWord {ro} _ VowelLetter ,
643StartOfWord {fa} _ {ina} (s) EndOfWord ,
644{pu} _ VowelLetter ,
645StartOfWord {sobreta} _ a (s) EndOfWord ,
646StartOfWord {po} _ a EndOfWord ,
647{gra} _ VowelLetter ,
648StartOfWord {xi} _ i EndOfWord ,
649StartOfWord {bru} _ a ({ria}) EndOfWord ,,
650x -> s ||
651StartOfWord m [a|á] _ VowelLetter ,
652{pr} [o|ó] _ VowelLetter ;
653
654define XBeforeConsonantRule
655x -> s || _ ConsonantLetter ;
656
657define CRule
658{tch} @-> tS ,,
659{ch} @-> S || _ ,,
660[c:s] VowelLetterEOrI @-> || _ ,,
661c @-> k || _ ,,
662ç @-> s || _ ;
663
664define DoubleSRule
665{ss} @-> s ;
666
667define YAsIRule
668y -> i || StartOfWord | ConsonantLetter _ EndOfWord | ConsonantLetter ;
669
670define GRule
671g -> Z || _ VowelLetterEOrI ;
672
673define UAsWRule
674ü -> w || [g|q] _ VowelLetter ,,
675u -> w || [g|q] _ VowelLetterA | VowelLetterO ,,
676u -> 0 || [g|q] _ VowelLetterEOrI ;
677
678define QRule
679q -> k ;
680
681define DefaultRRule
682r -> R ;
683
684define DoubleRRule
685{RR} @-> R ;
686
687define RAsTapRule
688R -> r || VowelLetter | FirstConsonantInCluster _ VowelLetter ;
689
690define JRule
691j -> Z ;
692
693define YRule
694y -> j ;
695
696define HRule
697([n:J]|[l:L]) [h:0] @-> ;
698
699define VowelWithDiacriticRule
700á|â -> a1 || _ ,,
701à -> a || _ ,,
702ã -> aN || _ ,,
703é -> E1 || _ ,,
704ê -> e1 || _ ,,
705í -> i1 || _ ,,
706ó -> O1 || _ ,,
707ô -> o1 || _ ,,
708õ -> oN || _ ,,
709ú -> u1 || _ ,,
710ü -> u || _ ;
711
712define AAsNasal a:aN|a1:aN1;
713define EAsNasal e:eN|e1:eN1|E1:eN1;
714define IAsNasal i:iN|i1:iN1 ;
715define OAsNasal o:oN|o1:oN1|O1:oN1 ;
716define UAsNasal u:uN|u1:uN1 ;
717define VowelAsNasal AAsNasal| EAsNasal | IAsNasal | OAsNasal | UAsNasal ;
718
719define NasalDiphthongRule1
720AAsNasal [m:wN] -> || _ EndOfWord ,,
721EAsNasal [m:jN] -> || _ EndOfWord ,,
722EAsNasal [n:jN] -> || _ s EndOfWord ;
723
724define NasalDiphthongRule2
725e -> jN || [aN|oN] _ ,,
726o -> wN || aN _ ,,
727{ui} -> [uN jN] || StartOfWord m _ (t [o|a] (s)) EndOfWord ;
728
729define NasalVowelRule
730VowelAsNasal [[m|n]:0] -> || _ Consonant | x | EndOfWord ;
731
732define DoubleConsonantAsSingle
733b b:0 | d d:0 | f f:0 | g g:0 | k k:0 | l l:0 | m m:0 | n n:0 | p p:0 | t t:0 | v v:0 | z z:0 ;
734
735define DoubleConsonantRule
736DoubleConsonantAsSingle @-> ;
737
738define Onset 0|Consonant | [FirstConsonantInCluster [l|r]] | [[g|k] w] | x ;
739
740define DiphthongRule
741[[a|a1] i [u:w]] | [NotIVowel [i:j]] | [NotUVowel [u:w]] @-> || _ EndOfWord | s | [(Onset - J) Vowel] ,,
742a [o:w] (s) @-> || StartOfWord _ EndOfWord ;
743
744define StressVowel a:a1|aN:aN1|e:"e1?"|eN:eN1|i:i1|iN:iN1|o:"o1?"|oN:oN1|u:u1|uN:uN1 ;
745define UnstressVowel a1:a | aN1:aN | [e1|"e1?"]:e | E1:E | eN1:eN | i1:i | iN1:iN | [o1|"o1?"]:o | O1:O | oN1:oN | u1:u | uN1:uN ;
746
747define StressParoxytone StressVowel -> || _ [\Vowel]* Vowel [\Vowel]* PAR ;
748
749define StressOxytone StressVowel -> || .#. [\StressedVowel]* _ [\Vowel]* .#. ;
750
751define UnstressFunctionWord
752UnstressVowel -> || StartOfWord [\Vowel]* _ [\Vowel]* FUNC ;
753
754define StressedCloseMidVowelRule
755"e1?" : e1 | "o1?" : o1 -> ||
756 _ ?* CLOSE ,
757 _ Nasal|w ,,
758"e1?" -> e1 || _ e|eN ,,
759"o1?" -> o1 || _ o|oN ;
760
761define DefaultStressedMidVowelRule
762"e1?" -> E1 , "o1?" -> O1 ;
763
764define RisingDiphthongContext [a|e|o] (s) EndOfWord ;
765
766define RisingDiphthongRule
767i -> j || \[t|d] _ RisingDiphthongContext ,,
768u -> w || _ RisingDiphthongContext ;
769
770define VowelRaisingRule
771e -> i , o -> u || _ (s) EndOfWord ;
772
773define LVocalizationRule
774l -> w || NotUVowel _ [\Vowel] | EndOfWord ;
775
776define PalatalizationRule
777d -> dZ , t -> tS || _ i|i1|iN|iN1 ;
778
779define SVoicingRule
780s -> z || _ VoicedConsonant ;
781
782define ZDevoicingRule
783z -> s || _ EndOfWord ;
784
785define XRule
786x -> {ks} ;
787
788define NTildeRule ñ -> Js ;
789
790define AposRule %' -> 0 ;
791
792define ApplyLowerMidTag3 [e:E|o:O] -> || _ [Consonant* Vowel]^2 Consonant* Tag* LM3 Tag* .#. ;
793define ApplyLowerMidTag4 [e:E|o:O] -> || _ [Consonant* Vowel]^3 Consonant* Tag* LM4 Tag* .#. ;
794define ApplyLowerMidTag5 [e:E|o:O] -> || _ [Consonant* Vowel]^4 Consonant* Tag* LM5 Tag* .#. ;
795
796define Rules
797Word .o.
798AposRule .o.
799TagFunctionWord .o.
800TagCloseWord .o.
801GuQuExceptionsRule .o.
802SHRule .o.
803YAsIRule .o.
804TagUnaccentedParoxytone .o.
805AddLowerMidTag3 .o.
806AddLowerMidTag2 .o.
807AddLowerMidTag1 .o.
808IntervocalicSRule .o.
809TransRule .o.
810InitialEXVowelRule .o.
811XBeforeConsonantRule .o.
812XAfterDiphthongRule .o.
813XBeforeVowelExceptionRule .o.
814XBeforeVowelRule .o.
815RestoreXRule .o.
816CRule .o.
817GRule .o.
818UAsWRule .o.
819QRule .o.
820DefaultRRule .o.
821RAsTapRule .o.
822DoubleRRule .o.
823JRule .o.
824YRule .o.
825HRule .o.
826NTildeRule .o.
827VowelWithDiacriticRule .o.
828NasalDiphthongRule1 .o.
829NasalDiphthongRule2 .o.
830DoubleConsonantRule .o.
831NasalVowelRule .o.
832DiphthongRule .o.
833StressParoxytone .o.
834StressOxytone .o.
835UnstressFunctionWord .o.
836StressedCloseMidVowelRule .o.
837DefaultStressedMidVowelRule .o.
838LVocalizationRule .o.
839RisingDiphthongRule .o.
840VowelRaisingRule .o.
841PalatalizationRule .o.
842DoubleSRule .o.
843SVoicingRule .o.
844ZDevoicingRule .o.
845XRule .o.
846ApplyLowerMidTag3 .o.
847ApplyLowerMidTag4 .o.
848ApplyLowerMidTag5 .o.
849RemoveTags ;
850
851define Mapping
852aN:an | aN1:an1 |
853E:ee | E1:ee1 | eN:en | eN1:en1 |
854iN:in | iN1:in1 |
855O:oo | O1:oo1 | oN:on | oN1:on1 |
856uN:un | uN1:un1 |
857jN:jn | wN:wn |
858R:rh |
859L:lj | J:nj | [Js:[n i]] |
860S:sh | Z:zh |
861tS:tj | dZ:dj ;
862
863define Rename Mapping -> ;
864
865define Exceptions
866[{setecentos}:[s E tS i s eN1 t u s]] |
867[{dosvox} : [d O z v O1 k s ]] |
868[{etc.} : [e t s E1 t e r a]] |
869[[{wi} (%-) {fi}] : [u a j f a1 j]] ;
870
871regex
872[Exceptions .P. Rules] .o. Rename ;
873