Browse Source

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

master
Reece H. Dunn 6 years ago
parent
commit
bba7069cb3

+ 36
- 0
dictsource/bs_rules View File

@@ -11,6 +11,42 @@
// ?3 Bosnian (Bosna and Hercegovina)
// ?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
a a
X) a ($w_alt1 a:

+ 36
- 0
dictsource/hr_rules View File

@@ -11,6 +11,42 @@
// ?3 Bosnian (Bosna and Hercegovina)
// ?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
a a
X) a ($w_alt1 a:

+ 35
- 0
dictsource/sl_rules View File

@@ -7,6 +7,41 @@
.L03 a e
.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
a a:

+ 36
- 0
dictsource/sr_rules View File

@@ -11,6 +11,42 @@
// ?3 Bosnian (Bosna and Hercegovina)
// ?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
a a
X) a ($w_alt1 a:

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

@@ -361,42 +361,6 @@ static const short pairs_ru[] = {
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 -- а е ё и о у ы э ю я ә ө ұ ү і
0x10, 0x15, 0x31, 0x18, 0x1e, 0x23, 0x2b, 0x2d, 0x2e, 0x2f, 0xb9, 0xc9, 0x91, 0x8f, 0x36, 0
};
@@ -937,7 +901,6 @@ Translator *SelectTranslator(const char *name)

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.replace_chars = replace_cyrillic_latin;
tr->langopts.our_alphabet = OFFSET_CYRILLIC; // don't say "cyrillic" before letter names

}
@@ -1385,7 +1348,6 @@ Translator *SelectTranslator(const char *name)
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.thousands_sep = ' '; // don't allow dot as thousands separator
tr->langopts.replace_chars = replace_cyrillic_latin;
break;
case L('s', 'q'): // Albanian
{

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

@@ -21,10 +21,20 @@ test_phonemes bg "Latin characters spoken in English" \
" (en)f'Ut str'Vt(bg)" \
"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 - \
" dr'Uk3 l'amp@ kOmpj'u:t3 St'Ern St'Ern@" \
"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 - \
" 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"
@@ -51,6 +61,14 @@ test_phonemes fa "Latin characters spoken in English" \
" (en)f'Ut str'Vt(fa)" \
"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" \
" k'a k'i k'u k'e k'o" \
"か き く け こ"
@@ -66,3 +84,19 @@ test_phonemes lv - \
test_phonemes ru "Cyrillic" \
" '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