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