# # (c) Jirka Hanika # $voiced = bdďgvzžZŽhř $voiceless = ptťkfsšcčxŘ # $fric = szšžfvhx # $afric = cZčŽ # $stop = ptťkbdďg $nasal = mnňN $NASAL = MQŇW $sonant = jlr$nasal $SONANT = JLR$NASAL $short = aeiouuyěä $long = áéíóúůýěöü $diphtong = OAE $vowel = $short$long$diphtong $VOWEL = AEIOUUYÁÉÍÓÚŮÝĚ $consonant = $voiced$voiceless$sonant $everywhere= !_! $numbers = 1234567890 $sonority = 0'<$voiceless$voiced$SONANT<$nasalE(!_!) progress Ü>Y(!_!) # \Z označuje tečku označující řadovou číslovku. Tu je nutno rozlišit # od tečky obyčejné, větu vydělující, nežli se ztratí rozdíl mezi velkými # a malými písmeny. Následuje-li totiž za tečkou velké písmeno, posuzuje # se vždy jako konec věty. # Některé významy tečky, jako např. desetinná tečka, už vyřešil parser, # a to nezávisle na jazyce. Ty tedy není nutno brát v potaz. #inside . sent #{ # regex /([0123456789])\$/\1\Z/ word #} #regex /(\Z)\\.([${lower_case}])/\1\2/ text #regex /\Z(\\.)([${upper_case}])/\1\2/ text regex /\\((.\{1,12\})\\)/v~závorce~\1/ colon regex /"(.\{1,12\})"/v~uvozovkách~\1/ colon # různé zkratky subst short.dic # \d už vydělil parser, provizorně jako znak slovní úrovně. Úseky mezi # výskyty tohoto znaku (např. tečka v URL) se hláskují, pokud neobsahují # samohlásku nebo slabikotvornou souhlásku. Tato pravidla se mohou chovat # nerozumně v kombinaci s velkými písmeny. inside \d word { regress 0>\d(!_0) } regress \d>\ (!_!) word word if roman { @include "../slovak/roman.rul" } regex /^([vVsSzZkK][~\ ]\{0,2\})\$/\W\1/ regress lr>\X\Y(0_!) #near *!\Wlr$vowel$VOWEL word phone #{ # regress ${lower_case}\X\Y>${upper_case}LR(!_!) word # subst abbrurl.dic word #} regress \W>0(!_!) regress \X\Y>lr(0_!) # Pravidla pro čtení zkratek apod.: velké písmeno na jiném, # než prvním místě ve slově indikuje zkratku a hláskuje se. # Stejně tak jednotlivé písmeno před nebo za cifrou nebo # speciálním znakem nebo hláskovanou částí slova. regress ${upper_case}>${lower_case}(!letter_${lower_case}) word regress ${upper_case}>${lower_case}(0_${lower_case}) colon regress ${lower_case}>${upper_case}(0_!${lower_case}) colon regress ${lower_case}>${upper_case}(!${lower_case}_!$letter) colon if spellout { regex /^([^\Y\ ~]*)(.\?)\$/\1\Y\1\2/ word progress ${lower_case}>${upper_case}(\Y${upper_case}_!) regex /\Y/./ text } subst abbrevs.dic colon regress ${upper_case}>${lower_case}($everywhere) colon @include "numerals.rul" subst main.dic ;Různé výjimky progress äö>e(!_!) progress ü>y(!_!) progress ů>ú($everywhere) progress 0>s(x_!) progress u0>0v(q_!) ; Rozložení x,q na ks, kv regress xq>k($everywhere) regress h>x(c_!) ; Spřežka ch > x regress zž>ZŽ(d_!) ; Spřežky dz,dž > Z,Ž progress cd>0(!_xZŽ) progress h>x(s_!) ; Pražské sh # Následující pravidla jednak změní věty vydělené dvojtečkou # na věty vydělené tečkou (to je spíše špatně než dobře), # dále pak označí dvojtečkou (místo otazníku) ty věty, které # obsahovaly ve své první klausi některé ze slov uvedených # ve slovníku wh.dic, neměly tuto klausi zvlášť vydělenou # žádnou interpunkcí, a byly samy vyděleny otazníkem. # # Fonetik vidí, že jsem právě "definoval" doplňovací otázky. progress :>.($everywhere) text sent subst wh.dic ; Doplňovací otázky raise Q:_, colon phone progress Q>_(!0_!) sent colon ; jen v první klausi raise Q:? sent colon progress Q>0($everywhere) ; úklid všech úrovní progress Q>_($everywhere) sent colon progress Q>:($everywhere) text sent if colloquial { regress j>J(0_ds) ; fixme: random environment } subst syll.dic ; Rozsadit vokály regress i>j($vowel_0) syll regress 0>'(0_$vowel) ; Rázy if tsr_tool { # debug tsrtool text } with preps.dic word word { regress _\ ~>P(!_!) word word } with "se" { regress _\ ~>P(!_!) word word ; "se" nesmí být v preps.dic } regress P>\ (!_P) colon word ; dvě předložky za sebou regress _\ ~>F(!_0) colon word progress 0>S(!S_szšž) colon progress S>0(!_!0) word ; "S" jen před hranicí slov, za níž je sykavka progress 0>S(0_s) colon ; "S" před první hláskou v klausi inside P { prep "Sse,se seS,se SseS,se" ; "se" jako předložka } progress S>0($everywhere) inside P word { prep preps.dic word } progress P>\ ($everywhere) word word regress b>0(!_b) syll ; pochybný heuristický odstaveček regress n>0(!_nň) syll ; namířený proti geminátám regress s>0(!_s) syll regress t>0(!_t) syll regress f>0(!_f) syll progress ř>Ř($voiceless_!0) syll ; je už zde kvůli "k řízení [gřízeňí]" "křeč [kŘeč]" regress $sonant>$SONANT(0_!) syll syll $sonority syll ; Rozklad_na_slabiky regress $SONANT>$sonant(!_!) prep nonsyl.dic syll # postp postps.dic ; jednou by se mělo vrátit regress h>0(t_!) ; pathologie, plethora, thanatos. Pochybné. regress $voiced>${voiceless}(!_$voiceless&0') ; Asimilace znělosti regress $voiceless>$voiced(!_$voiced!v) colon if colloquial { subst casual.dic regress J>0(!_!) regress '>v(!_o) ; "okno" [vokno] } regress 0>n(m_ě) regress dtn>ďťň(!_iíě) regress ě>e(ďťň_!) regress 0>j(!_ě) regress ě>e($everywhere) progress yý>ií($everywhere) progress tkfslmn>TKFSLMN(i_0) progress i>j(oae_TKFSLMN) progress TKFSLMN>tkfslmn(!_!) progress n>N(!_kg) progress w>u($vowel_$consonant&0) progress w>v($everywhere) ; většinou ale "w" odstraní výjimky, řekněme ; zde bývala eliminace geminát ; zde býval rozklad na slabiky progress oae>OAE(!_u) syll ; Dvojhlásky regress u>0(OAE_!) syll if !voiced_affrs { regress ZŽ>DĎ(!_$vowel) ; toto by mělo přijít do inventáře (traditnl.dph); regress 0>d(!_DĎ) ; rozkládá se zde dz, dž (representované Z,Ž) regress DĎ>zž(!_!) ; na d-z, d-ž, pokud následuje vokál. } # Následující odstavec má za cíl označit všechny otevřené slabiky tildou. # Ve zavřených slabikách se objeví příznak "C" (coda), ten se pak posune # do slabičné úrovně, tam se pak nezavřené slabiky prohlásí za otevřené # a pak už je možno C odstranit z hláskové i slabičné úrovně. $syllabic = !0$vowel_!0$vowel ; syllabic consonant (environment) progress 0>C($vowel_!0) syll ; C za nekoncovou samohlásku progress $sonant>$SONANT($syllabic) syll progress 0>C($SONANT_!) syll ; C za slabikotvornou sonoru progress $SONANT>$sonant($everywhere) syll raise C:! syll ; posuň "C" do slabičné úrovně progress _|>~($everywhere) word syll progress C>_($everywhere) word syll progress C>0($everywhere) syll phone