@@ -83,8 +83,8 @@ _12 d'oTe | |||
_13 tr'eTe | |||
_14 kat'orTe | |||
_15 k'inTe | |||
_20 B'inte | |||
_2X B,int | |||
_20 b'inte | |||
_2X b,int | |||
_3X tr'enta | |||
_4X kwar'anta | |||
_5X Tinkw'anta | |||
@@ -112,40 +112,40 @@ _dpt kon | |||
// ordinal numbers | |||
_#º o | |||
_#ª a | |||
_#º %'eno | |||
_#ª %'ena | |||
_x#º %o // for 1º 2º 3º | |||
_x#ª %a | |||
º orDin'al||maskul'in | |||
ª orDin'al||femen'in | |||
_1ox prim'Er | |||
_2ox seQ'und | |||
_3ox tErT'Er | |||
_1o un'en | |||
_2o dos'en | |||
_3o tres'en | |||
_4o kwatr'en | |||
_5o Tink'en | |||
_6o seIs'en | |||
_7o sEt'en | |||
_8o gwit'en | |||
_9o nU'en | |||
_11o onT'en | |||
_12o DoT'en | |||
_13o tReT'en | |||
_14o katorT'en | |||
_15o kinT'en | |||
_16o sET'en | |||
_10o DET'en | |||
_20o Bint'en | |||
_30o trent'en | |||
_40o kwarant'en | |||
_50o Tinkwant'en | |||
_60o siSant'en | |||
_70o sEtant'en | |||
_80o gwitant'en | |||
_90o noBant'en | |||
_4o kwatr | |||
_5o Tink | |||
_7o sEt | |||
_8o gwit | |||
_9o nU | |||
_11o onT | |||
_12o doT | |||
_13o tReT | |||
_14o katorT | |||
_15o kinT | |||
_16o sET | |||
_10o dET | |||
_20o bint | |||
_30o trent | |||
_40o kwarant | |||
_50o Tinkwant | |||
_60o siSant | |||
_70o sEtant | |||
_80o gwitant | |||
_90o noBant | |||
_1Xo DeTi | |||
_2Xo Binti | |||
_1Xo deTi | |||
_2Xo binti | |||
_3Xo trentaI | |||
_4Xo kwarantaI | |||
_5Xo TinkwantaI | |||
@@ -153,21 +153,16 @@ _6Xo siSantaI | |||
_7Xo sEtantaI | |||
_8Xo gwitantaI | |||
_9Xo noBantaI | |||
_1Co TEnt'en | |||
_2Co dosTEnt'en | |||
_3Co tresTEnt'en | |||
_4Co kw,atroTEnt'en | |||
_5Co T,inkoTEnt'en | |||
_6Co seIsTEnt'en | |||
_7Co sjEtTEnt'en | |||
_8Co gw,eItoTEnt'en | |||
_9Co nweUTEnt'en | |||
_0Co Tent | |||
_1Co TEnt | |||
_2Co dosTEnt | |||
_3Co tresTEnt | |||
_6Co seIsTEnt | |||
_7Co sjEtTEnt | |||
_8Co gw,eItoTEnt | |||
_9Co nweUTEnt | |||
_0M1o mil'en | |||
_0M2o mil^on'en | |||
_1M2o mil^on'en | |||
_0M4o bil^on'en | |||
_1M4o bil^on'en | |||
_0M1o mil | |||
// characters | |||
@@ -208,8 +203,13 @@ lo $u | |||
la $u | |||
los $u | |||
las $u | |||
ro $u | |||
ra $u | |||
ros $u | |||
ras $u | |||
ne $u | |||
nes $u | |||
me $u | |||
te $u | |||
se $u | |||
@@ -236,13 +236,10 @@ tu $u | |||
sin $u | |||
su $u | |||
ye $u | |||
ro $u | |||
ra $u | |||
ros $u | |||
ras $u | |||
el $u | |||
es $u | |||
els $u | |||
ers $u | |||
mis $u | |||
tus $u | |||
sus $u | |||
@@ -250,6 +247,7 @@ bell $u | |||
bel $u | |||
bella $u | |||
bells $u | |||
bels $u | |||
bellas $u | |||
bellos $u | |||
que $u | |||
@@ -261,25 +259,15 @@ quando $u | |||
on $u | |||
aon $u | |||
porque $u | |||
dende $u | |||
entre $u | |||
contra $u | |||
enta $u | |||
sinde $u | |||
per $u | |||
pus $u | |||
dica $u | |||
sino $u | |||
ni $u | |||
pero $u | |||
ibi $u | |||
bi $u | |||
i $u+ | |||
ie $u | |||
hu $u | |||
sant $u | |||
donya $u | |||
don $u | |||
se'n sen $u | |||
//abbreviations |
@@ -3,179 +3,163 @@ | |||
// Numbers | |||
devanagari numbers are changed to latin characters before translation | |||
_0 S'u:n.nV'o: | |||
_1 a'k | |||
_2 d:UI | |||
_3 t'i:n | |||
_4 c'a:@'r | |||
_5 ,pa~c | |||
_6 c#'O:j | |||
_7 S'a:t | |||
_8 'a:t.# | |||
_9 n'O:j | |||
_10 d'O:S | |||
_11 a'g'a:rO: | |||
_12 b'a:rO: | |||
_13 t'a:rO: | |||
_14 c#:O:d'dO: | |||
_15 p'O:n'e:rO: | |||
_16 S'o:lO: | |||
_17 SO:t'e:rO: | |||
_18 a:t#'e:rO: | |||
_19 U'n'IS | |||
_20 kU:'ri | |||
_21 e:kU'S | |||
_22 b'a:IS | |||
_23 t'e:IS | |||
_24 c'O:b'bIS | |||
_25 pa~O:c'IS | |||
_26 c#'a:'bb'IS | |||
_27 Sa:ta:S | |||
_28 at#'a:S | |||
_29 Unt'rIs | |||
_30 t'i:rIS | |||
_31 e:k't:rIS | |||
_32 bat:'rIS | |||
_33 tE't'rIS | |||
_34 ca~o:u:t'rIS | |||
_35 pa~O:it'rIS | |||
_36 c#a'trIS | |||
_37 Sa~it'rIS | |||
_38 at'tr'IS | |||
_39 U'nO:cO:l'IS | |||
_40 co:l'lIS | |||
_41 e:k'co:l'lIS | |||
_42 bi'al'lIS | |||
_43 te:ta:l'lIS | |||
_44 cu:a:l'lIS | |||
_45 paI'nta:l'lIS | |||
_46 c#e:co:l'lIS | |||
_47 Sat'co:l'lIs | |||
_48 at'co:l'lIS | |||
_49 Uno:pan'ca:S | |||
_50 p@n'ca:s | |||
_51 e:ka:n'no: | |||
_52 ba:h@n'no: | |||
_53 t'Ip'pan'no: | |||
_54 cu:wan'no: | |||
_55 po:n'ca:n'no: | |||
_56 c#h@p:'an'no: | |||
_57 Sa:ta:n'no: | |||
_58 at#'a:n'no: | |||
_59 Uno:s'at# | |||
_60 s'a:t.# | |||
_61 e:k'so:t'tI | |||
_62 ba:so:t'tI | |||
_63 te:so:t'tI | |||
_64 ca~o:u:so:t'tI | |||
_65 pa~I'so:t'tI | |||
_66 c#e:so:t'tI | |||
_67 Sat'so:t'tI | |||
_68 atso:t'ti | |||
_69 ,Uno:Sat'to:r | |||
_70 So:t'to:r | |||
_71 e:kat'to:r | |||
_72 ba:hat'to:r | |||
_73 tIat'to:r | |||
_74 cu:at'to:r | |||
_75 pa~c#at'to:r | |||
_76 c#I'at:to:r | |||
_77 Sa:t@'t:o:r | |||
_78 atat'to:r | |||
_79 ,Uno:a:Si: | |||
_80 a:Si | |||
_81 e:ka:Si: | |||
_82 bI'ra:Si: | |||
_83 tIra:Si: | |||
_84 cu:ra:Si: | |||
_85 pa~ca:Si: | |||
_86 c#Ia:Si: | |||
_87 Sa:ta:Si: | |||
_88 O:sto:a:Si: | |||
_89 Uno:no:b'bo:I | |||
_90 no:b:bo:I | |||
_91 e:ka:no:b'bo:I | |||
_92 bIra:no:b'bo:I | |||
_93 tIr'a:no:b'bo:I | |||
_94 cu:r'a:no:b'bo:I | |||
_95 pa~ca:no:b'bo:I | |||
_96 c#Ia:no:b'bo:I | |||
_97 S@ta:no:b'bo:I | |||
_98 ata:no:b'bo:I | |||
_99 nIra:no:b'bo:I | |||
_0C SO: | |||
_0M1 h@z'a:r | |||
_0M2 l'a:k# | |||
_0M3 ko:tI | |||
_0M4 o:r'bu:d | |||
_dpt d@so:mIk | |||
_0 S'unjO | |||
_1 '&k | |||
_2 duj | |||
_3 t'in | |||
_4 tS'ar | |||
_5 p'a~tS | |||
_6 tS#'Oj | |||
_7 S'at | |||
_8 'at.# | |||
_9 n'Oj | |||
_10 d'OS | |||
_11 '&garo | |||
_12 b'aro | |||
_13 t'ero | |||
_14 tS'owddo | |||
_15 p'Onero | |||
_16 S'olo | |||
_17 S'Otero | |||
_18 'at.#aro | |||
_19 'uniS | |||
_20 b'iS // ?? | |||
_21 'ekuS | |||
_22 b'ajS | |||
_23 t'ejS | |||
_24 tS'ObbiS | |||
_25 p'O~tSiS | |||
_26 tS#'ObbiS | |||
_27 S'ataS | |||
_28 'at.#aS | |||
_29 'untriS | |||
_30 t'iriS | |||
_31 'ektriS | |||
_32 b'OtriS | |||
_33 t'etriS | |||
_34 tSowtriS | |||
_35 pO~jtriS | |||
_36 tS#'OtriS | |||
_37 S'a~itriS | |||
_38 'at.riS | |||
_39 'unOtSOlliS | |||
_40 tS'OlliS | |||
_41 'ektSOlliS | |||
_42 b'ialliS | |||
_43 t'etalliS | |||
_44 tS'oalliS | |||
_45 p'O~jtalliS | |||
_46 tS'etSOlliS | |||
_47 S'atSOllis | |||
_48 'atSOlliS | |||
_49 'unOpO~tSaS | |||
// numbers above 50 need to be corrected | |||
_50 p'O~tSaS | |||
_5X p'O~tSaS | |||
_59 'unOsat. | |||
_60 s'at. | |||
_6X s'at. | |||
_69 'unOS'OttOr | |||
_70 S'OttOr | |||
_7X S'OttOr | |||
_79 'unOaSi | |||
_80 'aSi | |||
_8X 'aSi | |||
_89 'unOnObbOj | |||
_90 n'ObbOj | |||
_9X n'ObbOj | |||
_0C S'o | |||
_0M1 h'ajar | |||
_0M2 l'ak# | |||
_0M3 k'ot.i | |||
_0M4 'Orbud | |||
_dpt dOsomik | |||
// Single consonants | |||
ক k@ | |||
খ k#@ | |||
গ g@ | |||
ঘ g#@ | |||
ঙ N'g | |||
চ c@ | |||
ছ c#@ | |||
জ J@ | |||
ঝ J#@ | |||
ঞ n^@ | |||
ট t.@ | |||
ঠ t.#@ | |||
ড d.@ | |||
ঢ d.#@ | |||
ণ n.@ // retroflex n.@ | |||
ত t@ | |||
থ t#@ | |||
দ d@ | |||
ধ d#@ | |||
ন n@ | |||
প p@ | |||
ফ p#@ | |||
ব b@ | |||
ভ b#@ | |||
ম m@ | |||
য় O:j | |||
য J@ | |||
র r@ | |||
ড় r-@ | |||
ঢ় hr@ | |||
ল l@ | |||
শ S@ | |||
ষ s.@ // retroflex [S] | |||
স s@ | |||
হ H@ | |||
ৎ t@ | |||
// Single consonants | |||
ক kO | |||
খ k#O | |||
গ gO | |||
ঘ g#O | |||
ঙ 'uNO | |||
চ tSO | |||
ছ tShO // [h] to distinguish from [tS] | |||
জ JO | |||
ঝ J#O | |||
ঞ 'iNO | |||
ট t.O | |||
ঠ t.#O | |||
ড d.O | |||
ঢ d.#O | |||
ণ m'odd#ennO | |||
ত tO | |||
থ t#O | |||
দ dO | |||
ধ d#O | |||
ন d'ontennO | |||
প pO | |||
ফ p#O | |||
ব bO | |||
ভ b#O | |||
ম mO | |||
য় Oj | |||
য ontostedZ'O | |||
র rO | |||
ঢ় hrO | |||
ল lO | |||
শ taleboS:O | |||
ষ mud#en:oS:O | |||
স d'onteS:O | |||
হ hO | |||
ৎ kh'Ond.otO | |||
// full vowels | |||
অ SOro'O | |||
আ SOro'a | |||
ই hrOS:o'i | |||
ঈ dirg#o'i | |||
উ hrOS:o'u | |||
ঊ dirg#o'u | |||
ঋ ri | |||
এ e | |||
ঐ oj | |||
ও o | |||
ঔ ow | |||
// combining vowel signs | |||
ा #X2a: | |||
ि #X1I | |||
ी #X2i: | |||
ূ #X1U | |||
ू #X2u: | |||
ृ #X1rI | |||
ে #X1e: | |||
ৈ #X2E: | |||
ো #X1o: | |||
ৌ #X1O: | |||
ॐ #X1o~m | |||
া 'akar | |||
ি r'oS:ikar | |||
ী d'irg#ikar | |||
ূ r'oS:ukar | |||
ু d'irg#ukar | |||
ৃ r'ikar | |||
ে 'ekar | |||
ৈ 'ojkar | |||
ো 'okar | |||
ৌ 'owkar | |||
// signs | |||
্ h'OSonto | |||
ং 'OnuSSOr | |||
ঃ b'iSOrgo | |||
ঁ tS'Ondrobindu | |||
় b'indu | |||
// Punctuation | |||
। dVn.d.V | |||
// Pronouns | |||
আমি $u // main: I | |||
আমায় $u | |||
@@ -198,7 +182,7 @@ _dpt d@so:mIk | |||
তোর $u | |||
এ $u // he/she/it | |||
একে $u | |||
আপনি $u | |||
এটার $u | |||
এর $u | |||
@@ -264,6 +248,9 @@ _dpt d@so:mIk | |||
// Verbs | |||
হয় $u | |||
ছিল $u // chilo: past aux | |||
ছিলেন $u // chilen | |||
@@ -274,5 +261,3 @@ _dpt d@so:mIk | |||
// Exceptions | |||
ক্রিকেট krIk'Et | |||
সাইবার s'aIb@r |
@@ -7,9 +7,6 @@ | |||
// C consonants | |||
// Y vowel letters and vowel signs | |||
// conditional rules | |||
// ?2 use diphthong for "ai" | |||
// ?3 use diphthong for "au" | |||
.replace | |||
@@ -29,288 +26,376 @@ | |||
.group অ | |||
অ a | |||
অ V | |||
অঁ O~ | |||
.group আ | |||
আ a: | |||
আ a | |||
আঁ a~ | |||
.group ই | |||
ই I | |||
ই i | |||
ইঁ i~ | |||
ইং I'ng | |||
.group ঈ | |||
ঈ i: | |||
ঈ (_ i | |||
ঈ i | |||
ঈঁ i~ | |||
.group উ | |||
উ U | |||
উ u | |||
উঁ u~ | |||
.group ঊ | |||
ঊ u: | |||
ঊং u~ // + anusvara | |||
ঊঁ u~ // + candrabinbu | |||
ঊ u | |||
ঊঁ u~ | |||
.group ঋ | |||
ঋ rI | |||
ঋ ri | |||
ঋঁ ri~ | |||
.group এঁ | |||
এঁ E // candra e | |||
.group ঌ | |||
ঌ l- | |||
.group এ | |||
এ & | |||
এঁ &~ | |||
.group ঐ | |||
ঐ e | |||
ঐ oj | |||
ঐঁ o~j | |||
.group এ | |||
এ e: | |||
এ e | |||
এঁ e~ | |||
.group ঐ | |||
ঐ E: // ?? [aI] [E:] [&:] | |||
ঐং E~ | |||
ঐঁ E~ | |||
?2 ঐ aI // ?? [aI] [E:] [&:] | |||
.group ও | |||
ও o | |||
ওঁ o~ | |||
.group ওঁ | |||
ওঁ O // candra O | |||
.group ঔ | |||
ঔ o | |||
ঔ ow | |||
ঔঁ o~w | |||
.group ও | |||
.group ও //?? | |||
ও o: | |||
ওং o~ // +anusvara | |||
ওঁ o~ // +candrabindu | |||
.group ঔ | |||
ঔ O: // ?? [aU] [O:] | |||
ঔঁ O~ // +candrabindu | |||
// Vowel Signs | |||
.group া | |||
া a: | |||
া a | |||
াঁ a~ | |||
.group ি | |||
ি I | |||
ি i | |||
িঁ i~ | |||
.group ী | |||
ী i: | |||
ী (_ i | |||
ী i | |||
ীঁ i~ | |||
.group ূ | |||
ূ U | |||
ূ u | |||
ূঁ u~ | |||
.group ু | |||
ু u: | |||
ু u | |||
ুঁ u~ | |||
.group ৃ | |||
ৃ rI | |||
ৃ ri | |||
ৃঁ ri~ | |||
.group ে | |||
ে e: | |||
ে e | |||
েঁ e~ | |||
েউ ew | |||
.group ৈ | |||
ৈ E: // ?? [aI] [E:] [&:] | |||
ৈ oj | |||
ৈঁ o~j | |||
.group ো | |||
ো o: | |||
ো o | |||
োঁ o~ | |||
.group ৌ | |||
ৌ O: // [O:] or [aU] ?? | |||
ৌ ow | |||
ৌঁ o~w | |||
.group ॐ | |||
ॐ o~m | |||
// Consonants | |||
.group ক | |||
ক k@ | |||
ক kV | |||
ক (B k | |||
ক্য (्য kja: | |||
ক্ষ k#'@ | |||
ক (_ k | |||
.group খ | |||
খ k#V | |||
খ (B k#@ | |||
খ (B k# | |||
খ (_ k# | |||
.group গ | |||
গ gV | |||
গ (B g@ | |||
ঈ)গ (ল g@ | |||
গ (B g | |||
গ (_ g | |||
.group ঘ | |||
ঘ g#V | |||
ঘ (B g# | |||
ঘ (B g# | |||
ঘ (_ g# | |||
.group ঙ | |||
ঙ N'g | |||
ঙ NV | |||
ঙ্ (B N | |||
গা)ঙ (চি Ng@ | |||
ঙ্ (_ N | |||
.group চ | |||
চ cV | |||
চ (B c | |||
্য) চ্য c'j@ | |||
চ tSV | |||
চ (B tS | |||
চ (_ tS | |||
.group ছ | |||
ছ c#V | |||
ছ (B c#@ | |||
ছ tS#V | |||
ছ (B tS# | |||
ছ (_ tS# | |||
.group জ | |||
জ J@ | |||
জ (B J@ | |||
্) জ zV | |||
জ (B J@ | |||
জ JV | |||
জ (B J | |||
জ (_ J | |||
জ্ব JV | |||
জ্ব (B J | |||
জ্ঞ ggo~ | |||
জ্ঞ (B gg | |||
.group ঝ | |||
ঝ J#@ | |||
ঝ (B J#@ | |||
ঝ J#V | |||
ঝ (B J# | |||
ঝ (_ J# | |||
.group ঞ | |||
ঞ n^V | |||
ঞ্ (B n^ | |||
ঞ nV | |||
ঞ্ (B n | |||
ঞ্ (_ n | |||
.group ট | |||
ট t.V | |||
ট (B t.V | |||
ট (्য় t.j@ | |||
ট (B t. | |||
ট (_ t. | |||
.group ঠ | |||
ঠ t.#V | |||
ঠ (B t.# | |||
ঠ (_ t.# | |||
.group ড | |||
ড d.V | |||
ড (B d. | |||
ড (_ d. | |||
ড় r.V // nukta | |||
ড় (B r. | |||
.group ঢ | |||
ঢ d.#V | |||
ঢ (B d.# | |||
ঢ (_ d.# | |||
.group ণ | |||
ণ n.V // (temporary) same as dental [n] | |||
ণ (B n. | |||
ণ্ম n.m | |||
ণ nV // should be [n.] if adjacent to t. or d. ? | |||
ণ (B n | |||
ণ (_ n | |||
.group ত | |||
ত t@ | |||
ত (B t@ | |||
ত tV | |||
ত (B t | |||
ত (_ t | |||
.group থ | |||
থ t#@ | |||
থ t#V | |||
থ (B t# | |||
ক) থ (ন t#@ | |||
থ (_ t# | |||
.group দ | |||
দ d@ | |||
দ dV | |||
দ (B d | |||
ব) দ (ল d@ | |||
দ (_ d | |||
.group ধ | |||
ধ d#@ | |||
ধ d#V | |||
ধ (B d# | |||
সা) ধ (ন d#@ | |||
.group ন | |||
ন n@ | |||
ন (B n@ | |||
্) ন (্ n@ | |||
র্) ন (_ r.n // r +virama অর্ণব | |||
ধ (_ d# | |||
.group ন | |||
ন n: // should this be a long [n] ? | |||
ন nV | |||
ন (B n | |||
ন (_ n | |||
.group প | |||
প p@ | |||
প pV | |||
প (B p | |||
প্য (्য p: | |||
প (_ p | |||
.group ফ | |||
ফ p#@ | |||
ফ (B p#@ | |||
ফ p#@ | |||
ফ fV // or [p#] ? | |||
ফ (B f | |||
ফ (_ f | |||
.group ব | |||
ব b@ | |||
ব (B b@ | |||
ব bV | |||
ব (B b | |||
ব (_ b | |||
.group ভ | |||
ভ b#@ | |||
ভ (B b#@ | |||
ভ b#V | |||
ভ (B b# | |||
ভ (_ b# | |||
.group ম | |||
ম mV | |||
्) ম (_ mV | |||
র্) ম (_ r.m@ // r +virama | |||
ন্) ম (_ n.m // n +virama | |||
ম (B m | |||
ম (_ m | |||
.group য় | |||
য় jV | |||
য় (B jV | |||
.group য | |||
য J@ | |||
য (B J@ | |||
्) য (_ ja | |||
য় jV | |||
য় (B j | |||
য় (_ j | |||
.group য | |||
য dZV | |||
য (B dZ | |||
য (_ dZ | |||
য় jV // nukta | |||
য় (B j | |||
@) য় (_ j | |||
.group র | |||
র rV | |||
র (B r | |||
्) র (_ r@ | |||
র (_ r | |||
্) র (_ rV | |||
.group ল | |||
ল l | |||
ল (B l@ | |||
ক) ল (ম l@ | |||
ল lV | |||
ল (B l | |||
ল (_ l | |||
.group শ | |||
শ S@ | |||
শ (B S@ | |||
.group শ | |||
শ SV // or [s] ? | |||
শ (B S | |||
শ (_ S | |||
শ (্ল s | |||
.group ষ | |||
ষ s | |||
ষ (B s //?? | |||
ষ SV | |||
ষ (B S | |||
ষ (_ S | |||
.group স | |||
স s@ | |||
স (B s. | |||
স SV // or [s] ?? | |||
স (B S | |||
স (্থ s | |||
স (্ত s | |||
_) স্ব SV // shb | |||
_) স্ব (B S | |||
.group হ | |||
হ H@ | |||
হ (B H@ | |||
হ্ব v@ | |||
.group হ্ব | |||
B) হ্ব (B v@ | |||
.group ৎ | |||
ৎ (B t@t | |||
হ hV | |||
হ (B h | |||
হ (_ h | |||
.group হ্ব | |||
হ্ব vV | |||
হ্ব (B v | |||
হ্ব (_ v | |||
.group ৎ | |||
ৎ t | |||
// nukta, modifies a consonant | |||
.group ্যা // ja'falaa | |||
্যা a | |||
.group ড় | |||
ড় r.V | |||
ড় (B r. | |||
.group ঢ় | |||
ঢ় r.V | |||
ঢ় (B r. | |||
.group ँ | |||
ँ n // candrabindu | |||
.group ঁ | |||
ঁ O~ // candrabindu, nasalize the previous vowel | |||
.group ং | |||
ং aN'g // anusvara | |||
ং N // anusvara/onushshor | |||
.group ः | |||
ः H // visarga | |||
.group ঃ // visarga/bishorgo | |||
ঃ // doubles the following consonant | |||
ঃ (_ H | |||
.group ্ // virama | |||
.group ্ // virama/hoshonto | |||
্ | |||
.group ় | |||
় // nukta, modifies a consonant | |||
@@ -3032,6 +3032,7 @@ Altrincham O:ltrIN@m | |||
Anglesey aNg@Lsi | |||
Argyle A@g'aIl | |||
Argyll A@g;aIl | |||
Armagh A@m'A: | |||
Bacup beIk@p | |||
Berwick bErIk | |||
Betws bEtUs |
@@ -5252,7 +5252,7 @@ | |||
te (rrest t2@ | |||
r) tga (g gI | |||
@) t (ia S | |||
s) t (l ? | |||
s) t (l | |||
to (morr t@ | |||
_) to (nn tV | |||
t (ooth t2 |
@@ -955,7 +955,6 @@ bagate) ll (iz l | |||
szí) n (ját n | |||
szí) n (józan n | |||
nyj n^n^ | |||
_) nem (- nEm // has $combine attribute in hu_list, combine with the next word | |||
me) nny (ország n^ | |||
pihe) nj (_S2 n^ | |||
@@ -1035,6 +1034,12 @@ szivárvá) ny (játsz n^ | |||
haszo) n (jár n | |||
boszorká) ny (jelet n^ | |||
káno) n (jog n | |||
legé) ny (jár n^ | |||
szé) n (jelek n | |||
teljesítmé) ny (j n^ | |||
nem-lts n'Em||_!'Ellt,e:,ES //without this rule Espeak spokening the nem LTS text with one word, because general in hu_list have a $combine attribute the nem word. | |||
n'Em _!'Ellt,e:,ES | |||
.group o | |||
o o | |||
@@ -1925,6 +1930,7 @@ szögle) t (szob t | |||
_robo) t (szoftve t | |||
diva) t (cirk t | |||
álla) t (cirk t | |||
szen) t (szob t | |||
.group tj | |||
C) tj c | |||
@@ -2013,6 +2019,8 @@ _tisztele) tj (el tj | |||
szen) tj (akab tj | |||
közérze) tj (aví tj | |||
ké) tj (átszm tj | |||
szavaza) tj (og tj | |||
szavaza) tj (eg tj | |||
.group ts | |||
ts (_S2 tS //general rule with word end of ts letters | |||
@@ -2230,6 +2238,9 @@ felira) ts (áv t|S | |||
_cha) tsz (ob t|s | |||
robo) ts (of t|S | |||
merényle) ts (or t|S | |||
szavaza) ts (o t|S | |||
szige) ts (ej t|S | |||
szige) ts (o t|S | |||
.group tt | |||
@@ -2507,3 +2518,4 @@ csatlako) z (tok s | |||
ç tS | |||
ñ n^ | |||
ø Y | |||
@@ -1,2 +1,2 @@ | |||
name punjabi-test | |||
name punjabi | |||
language pa |
@@ -1,4 +1,4 @@ | |||
name french (Belgium) | |||
name french-Belgium | |||
language fr-be | |||
language fr 8 | |||
gender male |
@@ -1,3 +1,3 @@ | |||
language nl | |||
name dutch-test | |||
name dutch | |||
gender male |
@@ -1,4 +1,4 @@ | |||
name nahuatl - classical | |||
name nahuatl-classical | |||
language nci | |||
gender male | |||
@@ -3,35 +3,88 @@ | |||
// Bengali, inherits from Hindi | |||
//==================================================== | |||
phoneme @ | |||
vowel flag1 starttype #@ endtype #@ | |||
length 65 | |||
ChangeIfDiminished(@-) | |||
IF nextPh(H) THEN | |||
FMT(vowel/@_low) | |||
phoneme V // inherent vowel, can be [O] or [o] | |||
vowel flag1 starttype #o endtype #o | |||
length 200 | |||
IF thisPh(isFirstVowel) THEN | |||
IF nextVowel(i) OR nextVowel(u) THEN | |||
ChangePhoneme(o) | |||
ENDIF | |||
IF prevPhW(r) THEN | |||
ChangePhoneme(o) | |||
ENDIF | |||
ENDIF | |||
FMT(vowel/@_bck) | |||
ChangePhoneme(O) | |||
endphoneme | |||
phoneme V | |||
vowel flag1 starttype #@ endtype #@ | |||
length 180 | |||
CALL hi/V | |||
phoneme a | |||
vowel starttype #a endtype #a | |||
length 225 | |||
FMT(vowel/aa_9) | |||
endphoneme | |||
phoneme a: | |||
vowel long starttype #a endtype #a | |||
length 230 | |||
FMT(vowel/aa_9) | |||
phoneme i | |||
vowel starttype #i endtype #i | |||
length 200 | |||
FMT(vowel/i_6) | |||
endphoneme | |||
phoneme u | |||
vowel starttype #u endtype #u | |||
length 200 | |||
FMT(vowel/u) | |||
endphoneme | |||
phoneme e | |||
vowel starttype #e endtype #e | |||
length 200 | |||
FMT(vowel/e) | |||
endphoneme | |||
phoneme & | |||
vowel starttype #a endtype #a | |||
length 200 | |||
FMT(vowel/&_2) | |||
endphoneme | |||
phoneme o | |||
vowel starttype #o endtype #o | |||
length 200 | |||
IF nextPhW(w) THEN | |||
length 160 | |||
ENDIF | |||
FMT(vowel/o) | |||
endphoneme | |||
phoneme O | |||
vowel starttype #o endtype #o | |||
length 200 | |||
FMT(vowel/oo_5) | |||
endphoneme | |||
phoneme tS | |||
import_phoneme base/tS | |||
endphoneme | |||
phoneme tS# | |||
import_phoneme base/tS | |||
endphoneme | |||
phoneme o: | |||
vowel long starttype #o endtype #o | |||
length 220 | |||
FMT(vowel/o_2) | |||
phoneme ~ | |||
virtual | |||
endphoneme | |||
@@ -128,13 +128,16 @@ void DisplayVoices(FILE *f_out, char *language) | |||
const char *p; | |||
int len; | |||
int count; | |||
int c; | |||
int j; | |||
const espeak_VOICE *v; | |||
const char *lang_name; | |||
char age_buf[12]; | |||
char buf[80]; | |||
const espeak_VOICE **voices; | |||
espeak_VOICE voice_select; | |||
static char genders[4] = {' ','M','F',' '}; | |||
static char genders[4] = {'-','M','F','-'}; | |||
if((language != NULL) && (language[0] != 0)) | |||
{ | |||
@@ -150,7 +153,7 @@ void DisplayVoices(FILE *f_out, char *language) | |||
voices = espeak_ListVoices(NULL); | |||
} | |||
fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Langs\n"); | |||
fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Languages\n"); | |||
for(ix=0; (v = voices[ix]) != NULL; ix++) | |||
{ | |||
@@ -168,8 +171,16 @@ void DisplayVoices(FILE *f_out, char *language) | |||
if(count==0) | |||
{ | |||
fprintf(f_out,"%2d %-12s%s%c %-17s %-11s ", | |||
p[0],lang_name,age_buf,genders[v->gender],v->name,v->identifier); | |||
for(j=0; j < sizeof(buf); j++) | |||
{ | |||
// replace spaces in the name | |||
if((c = v->name[j]) == ' ') | |||
c = '_'; | |||
if((buf[j] = c) == 0) | |||
break; | |||
} | |||
fprintf(f_out,"%2d %-12s%s%c %-20s %-13s ", | |||
p[0],lang_name,age_buf,genders[v->gender],buf,v->identifier); | |||
} | |||
else | |||
{ |
@@ -691,7 +691,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
if(ph_buf[0] == 0) | |||
{ | |||
if(al_offset == translator->langopts.alt_alphabet) | |||
if((al_offset != 0) && (al_offset == translator->langopts.alt_alphabet)) | |||
language = translator->langopts.alt_alphabet_lang; | |||
else | |||
if((alphabet != NULL) && (alphabet->language != 0) && !(al_flags & AL_NOT_LETTERS)) | |||
@@ -876,6 +876,7 @@ void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars) | |||
// Numbers | |||
static char ph_ordinal2[12]; | |||
static char ph_ordinal2x[12]; | |||
static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB *wtab, int roman) | |||
@@ -1302,7 +1303,11 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out | |||
if(control & 4) | |||
{ | |||
sprintf(string,"_%d%cx",value,ord_type); // LANG=hu, special word for 1. 2. when there are no higher digits | |||
found = Lookup(tr, string, ph_digits); | |||
if((found = Lookup(tr, string, ph_digits)) != 0) | |||
{ | |||
if(ph_ordinal2x[0] != 0) | |||
strcpy(ph_ordinal, ph_ordinal2x); // alternate pronunciation (lang=an) | |||
} | |||
} | |||
if(found == 0) | |||
{ | |||
@@ -1362,8 +1367,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out | |||
else | |||
{ | |||
if((is_ordinal) && | |||
((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL))) | |||
if(is_ordinal) | |||
{ | |||
sprintf(string,"_%dX%c", tens, ord_type); | |||
if(Lookup(tr, string, ph_tens) != 0) | |||
@@ -1457,7 +1461,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out | |||
{ | |||
Lookup(tr, "_0and", ph_and); | |||
if((is_ordinal) && (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)) | |||
if((is_ordinal) && (tr->langopts.numbers2 & NUM2_ORDINAL_NO_AND)) | |||
ph_and[0] = 0; | |||
if(tr->langopts.numbers & NUM_SWAP_TENS) | |||
@@ -1884,6 +1888,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
ordinal = 2; | |||
flags[0] |= FLAG_SKIPWORDS; | |||
skipwords = 1; | |||
sprintf(string,"_x#%s",suffix); | |||
Lookup(tr, string, ph_ordinal2x); // is there an alternate pronunciation? | |||
} | |||
} | |||
} | |||
@@ -2179,7 +2185,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' ')) | |||
utf8_in(&next_char,p); | |||
if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0))) | |||
if(!iswalpha(next_char) && (thousands_exact==0)) | |||
// if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0))) | |||
strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc. | |||
} | |||
@@ -160,13 +160,16 @@ void DisplayVoices(FILE *f_out, char *language) | |||
const char *p; | |||
int len; | |||
int count; | |||
int c; | |||
int j; | |||
const espeak_VOICE *v; | |||
const char *lang_name; | |||
char age_buf[12]; | |||
char buf[80]; | |||
const espeak_VOICE **voices; | |||
espeak_VOICE voice_select; | |||
static char genders[4] = {' ','M','F',' '}; | |||
static char genders[4] = {'-','M','F','-'}; | |||
if((language != NULL) && (language[0] != 0)) | |||
{ | |||
@@ -182,7 +185,7 @@ void DisplayVoices(FILE *f_out, char *language) | |||
voices = espeak_ListVoices(NULL); | |||
} | |||
fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Langs\n"); | |||
fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Languages\n"); | |||
for(ix=0; (v = voices[ix]) != NULL; ix++) | |||
{ | |||
@@ -200,8 +203,16 @@ void DisplayVoices(FILE *f_out, char *language) | |||
if(count==0) | |||
{ | |||
fprintf(f_out,"%2d %-12s%s%c %-17s %-11s ", | |||
p[0],lang_name,age_buf,genders[v->gender],v->name,v->identifier); | |||
for(j=0; j < sizeof(buf); j++) | |||
{ | |||
// replace spaces in the name | |||
if((c = v->name[j]) == ' ') | |||
c = '_'; | |||
if((buf[j] = c) == 0) | |||
break; | |||
} | |||
fprintf(f_out,"%2d %-12s%s%c %-20s %-13s ", | |||
p[0],lang_name,age_buf,genders[v->gender],buf,v->identifier); | |||
} | |||
else | |||
{ |
@@ -35,7 +35,7 @@ | |||
#include "translate.h" | |||
#include "wave.h" | |||
const char *version_string = "1.47.03 21.Mar.13"; | |||
const char *version_string = "1.47.03b 22.Mar.13"; | |||
const int version_phdata = 0x014701; | |||
int option_device_number = -1; |
@@ -290,7 +290,7 @@ static const char transpose_map_latin[] = { | |||
tr->langopts.max_initial_consonants = 3; | |||
tr->langopts.replace_chars = NULL; | |||
tr->langopts.ascii_language[0] = 0; // Non-Latin alphabet languages, use this language to speak Latin words, default is English | |||
tr->langopts.alt_alphabet_lang = L('e','n'); | |||
SetLengthMods(tr,201); | |||
// tr->langopts.length_mods = length_mods_en; | |||
@@ -539,9 +539,10 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable | |||
tr->letter_bits_offset = OFFSET_BENGALI; | |||
SetIndicLetters(tr); // call this after setting OFFSET_BENGALI | |||
SetLetterBitsRange(tr,LETTERGP_B,0x01,0x01); // candranindu | |||
SetLetterBitsRange(tr,LETTERGP_F,0x3e,0x4c); // vowel signs, but not virama | |||
tr->langopts.numbers = 0x1; | |||
tr->langopts.numbers = NUM_SWAP_TENS; | |||
tr->langopts.break_numbers = 0x24924aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi | |||
} | |||
break; | |||
@@ -679,7 +680,7 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels | |||
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA; | |||
tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL; // variant form of numbers before thousands | |||
tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; // variant form of numbers before thousands | |||
if(name2 == L_grc) | |||
{ | |||
@@ -733,7 +734,7 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | |||
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_AFTER; | |||
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL; | |||
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; | |||
if(name2 == L('c','a')) | |||
{ | |||
@@ -745,7 +746,7 @@ Translator *SelectTranslator(const char *name) | |||
if(name2 == L('a','n')) | |||
{ | |||
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2; | |||
tr->langopts.numbers2 = 0; | |||
tr->langopts.numbers2 = NUM2_ORDINAL_NO_AND; | |||
} | |||
else | |||
if(name2 == L_pap) | |||
@@ -1278,7 +1279,7 @@ SetLengthMods(tr,3); // all equal | |||
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable | |||
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_INITIAL_2 | S_PRIORITY_STRESS; | |||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_DFRACTION_2 | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_ROMAN; | |||
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS; | |||
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS | NUM2_ORDINAL_NO_AND; | |||
SetLetterVowel(tr,'y'); | |||
ResetLetterBits(tr,0x2); | |||
SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y |
@@ -503,6 +503,7 @@ typedef struct { | |||
#define NUM2_THOUSANDS_VAR4 0x100 | |||
#define NUM2_THOUSANDS_VAR5 0x140 | |||
#define NUM2_ORDINAL_NO_AND 0x800 | |||
#define NUM2_MULTIPLE_ORDINAL 0x1000 | |||
#define NUM2_NO_TEEN_ORDINALS 0x2000 | |||
#define NUM2_MYRIADS 0x4000 | |||
@@ -511,6 +512,7 @@ typedef struct { | |||
// bits 1-4 use variant form of numbers before thousands,millions,etc. | |||
// bits 6-8 use different forms of thousand, million, etc (M MA MB) | |||
// bit9=(LANG=rw) say "thousand" and "million" before its number, not after | |||
// bit11=(LANG=es,an) don't say 'and' between tens and units for ordinal numbers | |||
// bit12=(LANG=el,es) use ordinal form of hundreds and tens as well as units | |||
// bit13=(LANG=pt) don't use 11-19 numbers to make ordinals | |||
// bit14=(LANG=ko) use myriads (groups of 4 digits) not thousands (groups of 3) |
@@ -603,7 +603,7 @@ voice_t *LoadVoice(const char *vname, int control) | |||
static const char *voices_asia = | |||
"fa fa-pin hi hy hy-west id ka kn ku ml ne pa ta tr vi vi-hue zh zh-yue "; | |||
static const char *voices_europe = | |||
"an bg bs ca cs cy da el es et fi fr-be ga hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv "; | |||
"an bg bs ca cs cy da de el en en-us es et fi fr fr-be ga hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv "; | |||
strncpy0(voicename, vname, sizeof(voicename)); | |||
@@ -1227,10 +1227,10 @@ static int ScoreVoice(espeak_VOICE *voice_spec, const char *spec_language, int s | |||
p = voice->languages; // list of languages+dialects for which this voice is suitable | |||
if(strcmp(spec_language,"mbrola")==0) | |||
if(spec_n_parts < 0) | |||
{ | |||
// only list mbrola voices | |||
if(memcmp(voice->identifier,"mb/",3) == 0) | |||
// match on the subdirectory | |||
if(memcmp(voice->identifier, spec_language, spec_lang_len) == 0) | |||
return(100); | |||
return(0); | |||
} | |||
@@ -1363,6 +1363,7 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int | |||
int lang_len=0; | |||
espeak_VOICE *vp; | |||
char language[80]; | |||
char buf[sizeof(path_home)+80]; | |||
// count number of parts in the specified language | |||
if((voice_select->languages != NULL) && (voice_select->languages[0] != 0)) | |||
@@ -1375,6 +1376,26 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int | |||
n_parts++; | |||
} | |||
} | |||
if((n_parts == 1) && (control & 1)) | |||
{ | |||
if(strcmp(language, "mbrola") == 0) | |||
{ | |||
language[2] = 0; // truncate to "mb" | |||
lang_len = 2; | |||
} | |||
sprintf(buf, "%s/voices/%s", path_home, language); | |||
if(GetFileLength(buf) == -2) | |||
{ | |||
// A subdirectory name has been specified. List all the voices in that subdirectory | |||
language[lang_len++] = PATHSEP; | |||
language[lang_len] = 0; | |||
n_parts = -1; | |||
} | |||
} | |||
// select those voices which match the specified language | |||
nv = 0; | |||
for(ix=0; ix<n_voices_list; ix++) | |||
@@ -1891,11 +1912,12 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
} | |||
else | |||
{ | |||
// list all: omit variant voices and mbrola voices | |||
// list all: omit variant voices and mbrola voices and test voices | |||
j = 0; | |||
for(ix=0; (v = voices_list[ix]) != NULL; ix++) | |||
{ | |||
if((v->languages[0] != 0) && (strcmp(&v->languages[1],"variant") != 0) && (memcmp(v->identifier,"mb/",3) != 0)) | |||
if((v->languages[0] != 0) && (strcmp(&v->languages[1],"variant") != 0) | |||
&& (memcmp(v->identifier,"mb/",3) != 0) && (memcmp(v->identifier,"test/",5) != 0)) | |||
{ | |||
voices[j++] = v; | |||
} |