#
#	prosodická pravidla Fonetického ústavu FF UK pro češtinu, 1998
#
#	(c) 1998  Zdena Palková
#	(c) 1998  Jiří Hanika
#
#	(See doc/COPYING for info on copying and modifying this file.)
#
#
#	pokud tu tento řádek není jen zapomenut, jde o versi 2.2.?
#


#$base_dir	external
#$prosody_dir	= external
#$prosody = ${base_dir}/${prosody_dir}


# přidat čárku před "a":
with  "a"  word
{
	regress a>\X(!_!)
}
raise	\X:!		word	phone
syll	\X<\ _		colon   word
regress \X>\ (!_!)	colon	word
regress \X>a(!_!)

#
#  Následující odstavec ještě před transkripcí označuje
#  koncová monosylaba, která podléhají pozdějšímu
#  slévání do taktů. Po transkripci už nelze rozlišit
#  "mě" vs. "mně".
#

with "mi mě se si ho mu ti tě"
{
	regress  _\ >~(!_!)   word  word
}

#
#  Zde se provádějí transkripční pravidla ze souboru
#  trans.rul; "#include" není jen komentář!
#

#include "trans.rul"

#
#  Následující pravidla ošetřují tři tečky a pomlčku.
#

inside	\~	sent
{
   6x	regress  0>\#(!_0)	sent	; vložení pausy po třech tečkách
}
regress  \~>.(!_!)	sent	sent
regress  ->,(!_!)	sent	colon


#
#  Následující odstavec pečuje o to, aby dříve označené
#  krátké tvary zájmenné byly zapojeny do řetězů monosylab
#  při pozdějším skládání taktů, ale jiná koncová
#  monosylaba nikoli. Děje se tak ještě před transkripcí
#  zejména proto, abychom poznali  "mě" vs. "mně".
#

regress  ~_\ >f(!_0)	colon  word

inside !~
{
	regress  f>\ (!_!)   word  word
}

regress  ~>\ (!_!)	colon  word

#
#  Nyní si označíme mono-, di-, tri-, tetra-, polysyllaba.
#  Děje se tak jen v taktech ukončených mezerou (ta je
#  zvýrazněna předcházejícím zvráceným lomítkem),
#  tedy nikoli v koncových taktech. Viz též minulý komentář.
#

<   word   syll
	regress   \ >m(!_!)   word  word
	regress   \ >d(!_!)   word  word
	regress   \ >t(!_!)   word  word
	regress   \ >q(!_!)   word  word
	regress   \ >p(!_!)   word  word
>

#
#  Monosylaba se v určitých pozicích označí jako přízvučná ("x")
#  a vzápětí jsou ve všech ostatních pozicích, kde zůstala označena
#  jako "m", přilepena ke svému levému sousedu. Počáteční stříška
#  znamená začátek úseku.
#
#  (V pravidlech 4.6 sub f nesouhlasí příklad s formulacemi pravidel.
#   Doporučuji zkontrolovat.)...
#
#  Je důležité, že u pravidel, která pracují se seznamem řetězců,
#  jako je například následující, nezáleží na pořadí položek v seznamu.
#  Jde-li o pravidlo substituční, provádějí se substituce (přednostně
#  v pravé části zpracovávaného textu a delší, je-li pochybnost)
#  opakovaně tak dlouho, dokud se text neustálí, nebo dokud program
#  neztratí trpělivost (s věčně zacykleným pravidlem).
#
#  Nakonec se zamete (všechny dočasné značky se smažou).
#

subst	"^mmmmm,mmmxm  ^mmmmmm,mmmxmm  ^mmmmmmm,mmmmxmm"	colon  word

subst   "pmm,pxm  qmmm,qxmm  pmmm,pxmm  tmmmm,tmmxm  qmmmm,qxmxm  dmmmmm,dmmxmm  tmmmmm,tmmxmm  qmmmmm,qxmxmm  pmmmmm,pxmmxm  dmmmmmm,dmmxmmm  tmmmmmm,tmmxmmm  qmmmmmm,qxmmxmm  pmmmmmm,pxmmxmm  dmmmmmmm,dmmxmmxm  tmmmmmmm,tmmxmmxm  qmmmmmmm,qxmmmxmm  pmmmmmmm,pxmmmxmm  mmmmmmmm,mmmmxmmm"   colon  word

postp	"m"		  word  word

regress  mdtqpxf>\ (!_!)   word  word

#
# zkracování isolovaných a ostatních taktů podle počtu slabik - ipcz
#

regress  _\ >I(0_0)	sent   word	; isolated words
inside   I
{
	<   word   syll
		contour  t/+33	word word
		contour  t/+0	word word
		contour  t/-15	word word
		contour  t/-25	word word
		contour  t/-31	word word
		contour  t/-33	word word
	>
}
inside   !I
{
	<   word   syll
		contour  t/+8	word word
		contour  t/+0	word word
		contour  t/-5	word word
		contour  t/-8	word word
		contour  t/-10	word word
	>
}
regress  I>_(!_!)	sent   word

#
#  Právě jsme přestali "I" používat k označení isolovaných
#  taktů a začneme ho používat k označení taktů iniciálních.
#
#  P bude označovat takt předcházející poslednímu.
#

regress	 _\ F>M(!_!)	colon	word
regress	 M>I(0_!)	colon	word

#
#  Rozdělíme M na A a B podle toho, zda budeme chtít
#  kadenci klesavou nebo stoupavou. Označování se děje
#  zleva:  IMMMMPF -> IBMMMPF -> IBAMMPF -> IBACMPF ->
#  -> IBACBPF a pak dalším pravidlem -> IBABBPF
#

subst   "IM,IB  BM,BA  AM,AC  CM,CB"	colon  word
regress  C>B(!_!)			colon  word

regress  IAB>F(!_0)	colon	word	; a,b: F (kA, kB)
regress  IAB>aab(!_ab)	colon	word	; O,P: F-1 (kA, kB)
regress  F>T(!_0)	sent	word

# Toto pravidlo je nejspíš reliktem minulosti
#with	postp2.dic	colon   word
#{
#	regress   FT>M(!_!)	colon	word
#}

#
#  Nyní máme označeny takty I, M, P, F, T ( = FF) a přiřazeny kadence.
#

#
#  při přiřazování kadencí se hodnota přiřazená slabice
#  vztahuje na všechny její hlásky v použitém slabičném
#  členění
#

inside	IaA	word
{
	<	word  syll	; tzn. zařiď se dle počtu slabik v taktu
		{					; monosylaba se ignorují
		}
		[					; disyllaba
			contour	 f/+2:-3	word   syll
			contour	 f/+4:-4	word   syll
			contour	 f/-3:-3	word   syll
		]
		[					; trisyllaba
			contour	 f/+2:+0:-4	word   syll
			contour	 f/+2:-2:-4	word   syll
			contour	 f/+4:+0:-4	word   syll
			contour	 f/-2:-2:-6	word   syll
			contour	 f/+0:-4:-4	word   syll
			contour	 f/-4:+4:-6	word   syll
			contour	 f/-4:+0:-4	word   syll
			contour	 f/-2:-3:-3	word   syll
		]
		[					; tetrasyllaba
			contour	 f/+0:+0:-2:-3	word   syll
			contour	 f/-2:-2:-5:-5	word   syll
			contour	 f/-3:+0:-2:-3	word   syll
			contour	 f/+0:+0:-1:-1	word   syll

		]
		[					; pentasyllaba
			contour	 f/-2:+0:-2:-3:-3	word   syll
			contour	 f/-3:+0:+0:+0:-3	word   syll
			contour	 f/-2:+0:+0:+0:-2	word   syll
		]
		nothing		; hexasyllaba a delší se neřeší
	>
}


inside	F	word		; F A - never used
{
	<	word  syll	; tzn. zařiď se dle počtu slabik v taktu
		{					; monosylaba se ignorují
		}
		[					; disyllaba
			contour	 f/+4:-4	word   syll
			contour	 f/-3:-3	word   syll
		]
		[					; trisyllaba
			contour	 f/-4:+4:-6	word   syll
			contour	 f/-4:+0:-4	word   syll
			contour	 f/-2:-3:-3	word   syll
		]
		[					; tetrasyllaba
			contour	 f/-3:+0:-2:-3	word   syll
			contour	 f/+0:+0:-1:-1	word   syll

		]
		[					; pentasyllaba
			contour	 f/-2:+0:+0:+0:-2	word   syll
		]
		nothing		; hexasyllaba a delší se neřeší
	>
}

inside	bB	word
{
	<	word  syll
		nothing				; monosylaba
		[				; disyllaba
			contour  f/-4:+2	word   syll
			contour  f/-5:-1	word   syll
			contour  f/-3:+4	word   syll
		]
		[
			contour  f/+0:-4:+0	word   syll
			contour  f/+0:-6:-2	word   syll
			contour  f/-6:-2:+0	word   syll
			contour  f/-1:+3:+5	word   syll
			contour  f/-6:-6:+0	word   syll
			contour  f/-6:+4:+0	word   syll
			contour  f/-4:+2:+4	word   syll
		]
		[
			contour  f/+0:-3:-2:+0	word   syll
			contour  f/-4:-4:-2:+2	word   syll
			contour  f/+0:-3:+0:+2	word   syll
		]
		[
			contour  f/+0:-3:-2:+0:+1	word   syll
			contour  f/+1:-1:-1:-1:+1	word   syll
			contour  f/-2:-2:+0:+2:+2	word   syll
		]
		nothing
	>
}


inside	F	word
{
	contour   f/-2	word  word
	<		word  syll
		nothing				; monosylaba nejsou
		[				; disyllaba
			contour  f/-5:-1	word   syll
			contour  f/-3:+4	word   syll
			contour	 f/+4:-4	word   syll
			contour	 f/-3:-3	word   syll
		]
		[
			contour  f/-6:-6:+0	word   syll
			contour  f/-6:+4:+0	word   syll
			contour  f/-4:+2:+4	word   syll
			contour	 f/-4:+4:-6	word   syll
			contour	 f/-4:+0:-4	word   syll
			contour	 f/-2:-3:-3	word   syll
		]
		[
			contour  f/-4:-4:-2:+2	word   syll
			contour  f/+0:-3:+0:+2	word   syll
			contour	 f/-3:+0:-2:-3	word   syll
			contour	 f/+0:+0:-1:-1	word   syll
		]
		[
			contour  f/-2:-2:+0:+2:+2	word   syll
			contour	 f/-2:+0:+0:+0:-2	word   syll
		]
		nothing		; hexasyllaba a delší se neřeší
	>
}

inside	?	sent
{
	regress   T>Q(!_!)	word   word
}


inside	T	word	; soubor C
{
	contour   f/+2	word  word
	<		word  syll
		nothing
		[
			contour  f/-6:-16	word   syll
			contour  f/-4:-14	word   syll
			contour  f/-2:-14	word   syll
			contour  f/+2:-14	word   syll
		]
		[
			contour  f/-4:-9:-14	word   syll
			contour  f/-4:-6:-14	word   syll
			contour  f/-6:-10:-14	word   syll
			contour  f/-6:-16:-18	word   syll
		]
		[
			contour  f/-4:-10:-12:-14	word   syll
			contour  f/-2:-4:-8:-14		word   syll
			contour  f/-2:-10:-14:-16	word   syll
		]
		[
			contour  f/-2:-2:-4:-8:-14	word   syll
			contour  f/-2:-10:-12:-14:-16	word   syll
			contour  f/-2:-4:-12:-14:-16	word   syll
		]
		nothing
	>
}

inside	Q	word	; soubor D
{
	contour   f/-2	word  word
	<		word  syll
		nothing
		[
			contour  f/-6:+4	word   syll
			contour  f/-10:+14	word   syll
		]
		[
			contour  f/-8:-6:+4	word   syll
			contour  f/-8:+2:+1	word   syll
		]
		[
			contour  f/-6:-6:-7:+5	word   syll
			contour  f/-6:+6:+6:+3	word   syll
		]
		[
			contour  f/-6:-6:-7:-8:+5	word   syll
			contour  f/-8:+7:+7:+3:+1	word   syll
		]
		nothing
	>
}

#
#  úseková deklinace frekvence (zatím jen do 11 taktů v úseku)
#

<  colon  word	; tzn. zařiď se dle počtu taktů v promluvovém úseku
    3x	nothing			; jeden až tři takty se neupravují
	contour		f/0:-1:-2:-3				colon  word
	contour		f/0:-1:-2:-3:-4				colon  word
	contour		f/0:-1:-2:-3:-4:-5			colon  word
	contour		f/0:-1:-2:-3:-4:-5:-6			colon  word
	contour		f/0:-1:-2:-3:-4:-5:-6:-7		colon  word
	contour		f/0:-1:-2:-3:-4:-5:-6:-7:-8		colon  word
	contour		f/0:-1:-2:-3:-4:-5:-6:-7:-8:-9  	colon  word
	contour		f/0:-1:-2:-3:-4:-5:-6:-7:-8:-9:-10	colon  word
	contour		f/0:-1:-2:-3:-4:-5:-6:-7:-8:-9:-10:-11	colon  word
	nothing
>

#
#  větná deklinace frekvence (zatím jen do 9 úseků ve větě)
#

<  sent  colon	; tzn. zařiď se dle počtu promluvových úseků ve větě
    2x	nothing			; jeden až dva takty se neupravují
	contour		f/0:-2:-4:			sent  colon
	contour		f/0:-2:-4:-6			sent  colon
	contour		f/0:-2:-4:-6:-8			sent  colon
	contour		f/0:-2:-4:-6:-8:-10		sent  colon
	contour		f/0:-2:-4:-6:-8:-10:-12		sent  colon
	contour		f/0:-2:-4:-6:-8:-10:-12:-14	sent  colon
	contour		f/0:-2:-4:-6:-8:-10:-12:-14:-16	sent  colon
	nothing
>

regress   0>\#(!_0)	colon	; vložení pausy
inside	\#	phone
{
	contour   t/-65   phone
}

5x  regress   0>\#(!_0)	sent	; vložení pausy

if   kadlec_dph
	segments  kadlec.dph    colon
if   !kadlec_dph
	segments  traditnl.dph  colon

#
#  mírné vyhlazování se zejména snaží, aby hraniční difony
#  mezi slabikami získávaly prosodické hodnoty částečně
#  od obou slabik.  Předpokládá se, že difon přechodu mezi
#  hláskami je připojen k hlásce prvé, proto se přihlíží
#  pouze k pravému sousedu (váha 30%, vlastní hodnota
#  má tedy váhu 70%). Ideologicky čistá řešení jsou buďto
#  nevyhlazovat vůbec (přiřadit difon doleva), nebo
#  vyhlazovat f/50\50, tj. kvalifikovat difon jako spojovací.
#

smooth   f/70\30     word segment

