Browse Source

issue #520: Use .replace rules in the language rule files for Cyrillic to Latin

master
Reece H. Dunn 7 years ago
parent
commit
bba7069cb3

+ 36
- 0
dictsource/bs_rules View File

// ?3 Bosnian (Bosna and Hercegovina) // ?3 Bosnian (Bosna and Hercegovina)
// ?4 Serbian & Bosnian // ?4 Serbian & Bosnian


.replace
// Cyrl Latn -- Cyrillic to Latin
а a // U+0430
б b // U+0431
в v // U+0432
г g // U+0433
д d // U+0434
е e // U+0435
ж ž // U+0436
з z // U+0437
и i // U+0438
к k // U+043A
л l // U+043B
м m // U+043C
н n // U+043D
о o // U+043E
п p // U+043F
р r // U+0440
с s // U+0441
т t // U+0442
у u // U+0443
ф f // U+0444
х h // U+0445
ц c // U+0446
ч č // U+0447
ш š // U+0161
ђ đ // U+0452
ѓ đ // U+0453
ѕ dz // U+0455
ј j // U+0458
љ lj // U+0459
њ nj // U+045A
ћ ć // U+045B
ќ ć // U+045C
џ dž // U+045F

.group a .group a
a a a a
X) a ($w_alt1 a: X) a ($w_alt1 a:

+ 36
- 0
dictsource/hr_rules View File

// ?3 Bosnian (Bosna and Hercegovina) // ?3 Bosnian (Bosna and Hercegovina)
// ?4 Serbian & Bosnian // ?4 Serbian & Bosnian


.replace
// Cyrl Latn -- Cyrillic to Latin
а a // U+0430
б b // U+0431
в v // U+0432
г g // U+0433
д d // U+0434
е e // U+0435
ж ž // U+0436
з z // U+0437
и i // U+0438
к k // U+043A
л l // U+043B
м m // U+043C
н n // U+043D
о o // U+043E
п p // U+043F
р r // U+0440
с s // U+0441
т t // U+0442
у u // U+0443
ф f // U+0444
х h // U+0445
ц c // U+0446
ч č // U+0447
ш š // U+0161
ђ đ // U+0452
ѓ đ // U+0453
ѕ dz // U+0455
ј j // U+0458
љ lj // U+0459
њ nj // U+045A
ћ ć // U+045B
ќ ć // U+045C
џ dž // U+045F

.group a .group a
a a a a
X) a ($w_alt1 a: X) a ($w_alt1 a:

+ 35
- 0
dictsource/sl_rules View File

.L03 a e .L03 a e
.L04 l v .L04 l v


.replace
// Cyrl Latn -- Cyrillic to Latin
а a // U+0430
б b // U+0431
в v // U+0432
г g // U+0433
д d // U+0434
е e // U+0435
ж ž // U+0436
з z // U+0437
и i // U+0438
к k // U+043A
л l // U+043B
м m // U+043C
н n // U+043D
о o // U+043E
п p // U+043F
р r // U+0440
с s // U+0441
т t // U+0442
у u // U+0443
ф f // U+0444
х h // U+0445
ц c // U+0446
ч č // U+0447
ш š // U+0161
ђ đ // U+0452
ѓ đ // U+0453
ѕ dz // U+0455
ј j // U+0458
љ lj // U+0459
њ nj // U+045A
ћ ć // U+045B
ќ ć // U+045C
џ dž // U+045F


.group a .group a
a a: a a:

+ 36
- 0
dictsource/sr_rules View File

// ?3 Bosnian (Bosna and Hercegovina) // ?3 Bosnian (Bosna and Hercegovina)
// ?4 Serbian & Bosnian // ?4 Serbian & Bosnian


.replace
// Cyrl Latn -- Cyrillic to Latin
а a // U+0430
б b // U+0431
в v // U+0432
г g // U+0433
д d // U+0434
е e // U+0435
ж ž // U+0436
з z // U+0437
и i // U+0438
к k // U+043A
л l // U+043B
м m // U+043C
н n // U+043D
о o // U+043E
п p // U+043F
р r // U+0440
с s // U+0441
т t // U+0442
у u // U+0443
ф f // U+0444
х h // U+0445
ц c // U+0446
ч č // U+0447
ш š // U+0161
ђ đ // U+0452
ѓ đ // U+0453
ѕ dz // U+0455
ј j // U+0458
љ lj // U+0459
њ nj // U+045A
ћ ć // U+045B
ќ ć // U+045C
џ dž // U+045F

.group a .group a
a a a a
X) a ($w_alt1 a: X) a ($w_alt1 a:

+ 0
- 38
src/libespeak-ng/tr_languages.c View File

0x7fff 0x7fff
}; };


static const unsigned int replace_cyrillic_latin[] =
{ 0x430, 'a',
0x431, 'b',
0x446, 'c',
0x45b, 0x107,
0x447, 0x10d,
0x45f, 'd'+(0x17e<<16),
0x455, 'd'+('z'<<16),
0x434, 'd',
0x452, 0x111,
0x435, 'e',
0x444, 'f',
0x433, 'g',
0x445, 'h',
0x438, 'i',
0x458, 'j',
0x43a, 'k',
0x459, 'l'+('j'<<16),
0x43b, 'l',
0x43c, 'm',
0x45a, 'n'+('j'<<16),
0x43d, 'n',
0x43e, 'o',
0x43f, 'p',
0x440, 'r',
0x441, 's',
0x448, 0x161,
0x442, 't',
0x443, 'u',
0x432, 'v',
0x437, 'z',
0x436, 0x17e,
0x453, 0x111,
0x45c, 0x107,
0 }; // ѓ ѕ ќ

static const unsigned char ru_vowels[] = { // (also kazakh) offset by 0x420 -- а е ё и о у ы э ю я ә ө ұ ү і static const unsigned char ru_vowels[] = { // (also kazakh) offset by 0x420 -- а е ё и о у ы э ю я ә ө ұ ү і
0x10, 0x15, 0x31, 0x18, 0x1e, 0x23, 0x2b, 0x2d, 0x2e, 0x2f, 0xb9, 0xc9, 0x91, 0x8f, 0x36, 0 0x10, 0x15, 0x31, 0x18, 0x1e, 0x23, 0x2b, 0x2d, 0x2e, 0x2f, 0xb9, 0xc9, 0x91, 0x8f, 0x36, 0
}; };


tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_DECIMAL_COMMA | NUM_THOUS_SPACE | NUM_DFRACTION_2 | NUM_ROMAN_CAPITALS; tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_DECIMAL_COMMA | NUM_THOUS_SPACE | NUM_DFRACTION_2 | NUM_ROMAN_CAPITALS;
tr->langopts.numbers2 = 0xa + NUM2_THOUSANDS_VAR5; // variant numbers before thousands,milliards tr->langopts.numbers2 = 0xa + NUM2_THOUSANDS_VAR5; // variant numbers before thousands,milliards
tr->langopts.replace_chars = replace_cyrillic_latin;
tr->langopts.our_alphabet = OFFSET_CYRILLIC; // don't say "cyrillic" before letter names tr->langopts.our_alphabet = OFFSET_CYRILLIC; // don't say "cyrillic" before letter names


} }
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT | NUM_ROMAN; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT | NUM_ROMAN;
tr->langopts.numbers2 = 0x100; // plural forms of millions etc tr->langopts.numbers2 = 0x100; // plural forms of millions etc
tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator
tr->langopts.replace_chars = replace_cyrillic_latin;
break; break;
case L('s', 'q'): // Albanian case L('s', 'q'): // Albanian
{ {

+ 34
- 0
tests/language-pronunciation.test View File

" (en)f'Ut str'Vt(bg)" \ " (en)f'Ut str'Vt(bg)" \
"foot strut" "foot strut"


# This uses a pangram for Cyrillic letter coverage.
test_phonemes bs "Cyrillic" \
" l^'ub&znI f'@ 'E slovo_|tS'EtIRI_|S'Est_|p'Et_: R'@ slovo_|tS'EtIRI_|S'Est_|d'EvEt_: I j'@2 & & tS'@_:_: & slovo_|tS'EtIRI_|S'Est_|j'ed&n_: v'@ tS'@ g'@ l'its& x'otS;E d'a m'i p'ok&ZE St'os" \
"Љубазни фењерџија чађавог лица хоће да ми покаже штос."
test_phonemes bs "Latin" \
" l^'ub&znI f'En^eRdZ,Ij& tS'adZ;&vog l'its& x'otS;E d'a m'i p'ok&ZE St'os" \
"Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos."

test_phonemes de - \ test_phonemes de - \
" dr'Uk3 l'amp@ kOmpj'u:t3 St'Ern St'Ern@" \ " dr'Uk3 l'amp@ kOmpj'u:t3 St'Ern St'Ern@" \
"drucker lampe computer stern sterne" "drucker lampe computer stern sterne"


# This word list is an extended version of Wells' Lexical Sets, used to cover
# different accent pronunciation.
test_phonemes en - \ test_phonemes en - \
" k'It dr'Es tr'ap l'0t str'Vt f'Ut fl'i:s p'A:m T'O:t g'u:s n'3:s st'A@t n'O@T f'o@s kj'U@ n,i@3 skw'e@ t'3:m b'3:d h'api k'0m@ l'Et3r- Ekspl'o@ r'oUzI2z r'abIt f'eIs pr'aIs tS'OIs g'oUt m'aUT b'aaT kl'0T m'Ili@n dI2v'aIdI2d" \ " k'It dr'Es tr'ap l'0t str'Vt f'Ut fl'i:s p'A:m T'O:t g'u:s n'3:s st'A@t n'O@T f'o@s kj'U@ n,i@3 skw'e@ t'3:m b'3:d h'api k'0m@ l'Et3r- Ekspl'o@ r'oUzI2z r'abIt f'eIs pr'aIs tS'OIs g'oUt m'aUT b'aaT kl'0T m'Ili@n dI2v'aIdI2d" \
"kit dress trap lot strut foot fleece palm thought goose nurse start north force cure near square term bird happy comma letter explore roses rabbit face price choice goat mouth bath cloth million divided" "kit dress trap lot strut foot fleece palm thought goose nurse start north force cure near square term bird happy comma letter explore roses rabbit face price choice goat mouth bath cloth million divided"
" (en)f'Ut str'Vt(fa)" \ " (en)f'Ut str'Vt(fa)" \
"foot strut" "foot strut"


# This uses a pangram for Cyrillic letter coverage.
test_phonemes hr "Cyrillic" \
" l^'ub&znI f'@ 'E slovo_|tS'EtIRI_|S'Est_|p'Et_: R'@ slovo_|tS'EtIRI_|S'Est_|d'EvEt_: I j'@2 & & tS'@_:_: & slovo_|tS'EtIRI_|S'Est_|j'ed&n_: v'@ tS'@ g'@ l'its& x'otS;E d'a m'i p'ok&ZE St'os" \
"Љубазни фењерџија чађавог лица хоће да ми покаже штос."
test_phonemes hr "Latin" \
" l^'ub&znI f'En^eRdZ,Ij& tS'adZ;&vog l'its& x'otS;E d'a m'i p'ok&ZE St'os" \
"Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos."

test_phonemes ja "Hiragana" \ test_phonemes ja "Hiragana" \
" k'a k'i k'u k'e k'o" \ " k'a k'i k'u k'e k'o" \
"か き く け こ" "か き く け こ"
test_phonemes ru "Cyrillic" \ test_phonemes ru "Cyrillic" \
" 'Ab;i ab;'8 'AbjE 'Ab;I 'Abji 'Ap; 'Ab;u\" 'Ab;V" \ " 'Ab;i ab;'8 'AbjE 'Ab;I 'Abji 'Ap; 'Ab;u\" 'Ab;V" \
"абе абё абє аби абї абь абю абя" "абе абё абє аби абї абь абю абя"

# This uses a pangram for Cyrillic letter coverage.
test_phonemes sl "Cyrillic" \
" w k O Z'@ 'u: S'@ tsiR'i:litSnil'et@_|St'i:Ri_|S'e:st_|b'@_: 'u: k O Z'@ 'u: S'@ tsiR'i:litSnil'et@_|St'i:Ri_|S'e:st_|b'@_: 'u: xudObn'e:ga f'@ a n'@ tsiR'i:litSnil'et@_|St'i:Ri_|S'e:st_|'E:na_: stOp'i:tslja m'i:zaR" \
"В кожушчку худобнега фанта стопицља мизар."
test_phonemes sl "Latin" \
" ukOZ'u:StSku xudObn'e:ga f'a:nta stOp'i:tslja m'i:zaR" \
"V kožuščku hudobnega fanta stopiclja mizar."

# This uses a pangram for Cyrillic letter coverage.
test_phonemes sr "Cyrillic" \
" l^'ub&znI f'@ 'E slovo_|tS'EtIRI_|S'Est_|p'Et_: R'@ slovo_|tS'EtIRI_|S'Est_|d'EvEt_: I j'@2 & & tS'@_:_: & slovo_|tS'EtIRI_|S'Est_|j'ed&n_: v'@ tS'@ g'@ l'its& x'otS;E d'a m'i p'ok&ZE St'os" \
"Љубазни фењерџија чађавог лица хоће да ми покаже штос."
test_phonemes sr "Latin" \
" l^'ub&znI f'En^eRdZ,Ij& tS'adZ;&vog l'its& x'otS;E d'a m'i p'ok&ZE St'os" \
"Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos."

Loading…
Cancel
Save