From fae81de47883f855a5e846159d09c154ee939fa8 Mon Sep 17 00:00:00 2001 From: chrislm Date: Sun, 11 Jun 2017 17:23:16 +0200 Subject: [PATCH 001/137] Added rules and exceptions for italian Deleted symbols/characters in it_lists now available in it_emoji --- dictsource/it_list | 9 ++++----- dictsource/it_listx | 1 + dictsource/it_rules | 6 +++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/dictsource/it_list b/dictsource/it_list index 4f8d43f1..49e8e482 100644 --- a/dictsource/it_list +++ b/dictsource/it_list @@ -1,6 +1,6 @@  // This file is UTF-8 encoded -// Updated 2017 april 28 by Christian Leo M, +// Updated 2017 june 11 by Christian Leo M, // $alt change [e] or [o] in the stressed syllable to [E] or [O] // $alt2 change [E] or [O] in the stressed syllable to [e] or [o] @@ -111,7 +111,6 @@ $ d'Ol:aRI \ kont@-*ob'a:R*a $max3 _| b'aR*a||ve@-*tik'ale & 'a/nd -© k'O:pi||raIt # kantSellet:o @ ki'otS:ola ~ tilde @@ -137,7 +136,6 @@ _‡ k@-*'otSe||lat'ina||d'Op:ia _′ p@-*'imi _″ d'Op:io||'apitSe _‴ t@-*'iplo||'apitSe -_‼ esklamatsi'One § setsi'One ¶ pa*'ag@-*afo _‐ legat'u:Ra @@ -159,8 +157,6 @@ _‣ punt'ato ↓ f@-*'etS:a||_dZ'u ♭ bem'Ol:e ♯ dI'ezis -♥ 'asso||di||kw'ORI -❓ p'unto||inteR*ogat'ivo _‧ sepaRat'oRe/ ∞ infin'Ito @@ -4330,6 +4326,7 @@ situino $1 sloggiano $1 smagnetizzino $3 smascher $1 +smascherano $1 smercino $1 sniffano $1 snodano $1 @@ -4673,6 +4670,8 @@ zuccherano $1 (quando capita) kw'ando||k'apita (se capita) se||k'a:pita (me capita) me||k'apita +(cosa capita) k'oza||k'a:pita +(come capita) k'ome||k'a:pita (capitano tutte) k'apitano||t'ut:e (che capitano) ke||k'apitano (quando capitano) kw'ando||k'a:pitano diff --git a/dictsource/it_listx b/dictsource/it_listx index aca7c35b..ad253889 100644 --- a/dictsource/it_listx +++ b/dictsource/it_listx @@ -137,6 +137,7 @@ allodol $2 alloggi $alt allora al:'oRa alluce 'al:utSe +alluci $1 almen $alt2 alope $1 alopecia alopetS'i:a diff --git a/dictsource/it_rules b/dictsource/it_rules index 8fb8f686..036dbe32 100644 --- a/dictsource/it_rules +++ b/dictsource/it_rules @@ -1,7 +1,7 @@ // Italian translation rules // This file is UTF-8 encoded -// Last update: 2017 march 31 by Christian Leo Mameli +// Last update: 2017 may 31 by Christian Leo Mameli // letter groups // A any vowel // C any consonant @@ -59,6 +59,7 @@ bbano (_ =b:ano // verbs bacia (L07_ b'atSa _) bagna (L07_ b'an^a + a) bbraccia (L07_ b:@-*'atS:a .group c c k @@ -90,6 +91,7 @@ in) cer (L04_ =tSe@-* cuocer (L04_ kU'OtSe@-* compra (L07_ k'omp@-*a + _L04Z) capite (_ kap'ite/ _L04Z) capit (A_ k'a:p,it _L04Z) capit (ano_ k'a:p,it correr (L04_ k'o:R*eR @@ -504,6 +506,7 @@ qui (A kwj _) quell' (P6t kwEll _) quest' (P6t kwest + _) quant' (P6t kwant .group r r @-* @@ -636,6 +639,7 @@ _) vota (L07_ v'Ota s) veglia (L07_ v'el^a volta (L07_ v'Olta + _) v' (P2t v .group w w w2 From 2724442f4197cd4cdf9588ab7bb877354695e066 Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Sun, 11 Jun 2017 18:35:25 +0300 Subject: [PATCH 002/137] Iprovements for Sindhi and Urdu languages by Ejaz Shah --- CHANGELOG.md | 2 +- dictsource/sd_list | 362 ++++++----- dictsource/sd_rules | 1229 ++++++++++++++++-------------------- dictsource/ur_list | 264 +++++++- dictsource/ur_rules | 86 ++- espeak-ng-data/lang/inc/sd | 1 + 6 files changed, 1091 insertions(+), 853 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41eee4a9..497e85e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,7 +32,7 @@ new languages: * fr-CH (French (Switzerland)) -- Claude Beazley * kok (Konkani) -- Vardhan * mi (Māori) -- Graham Oliver -* sd (Sindhi, Arabic script) -- Vardhan +* sd (Sindhi, Arabic script) -- Vardhan, Ejaz Shah updated languages: diff --git a/dictsource/sd_list b/dictsource/sd_list index 06093f74..5f9b98fc 100644 --- a/dictsource/sd_list +++ b/dictsource/sd_list @@ -1,170 +1,192 @@ -sindhi -// This file is UTF8 encoded -// Letter Names, Numbers and exceptional pronounciation of Urdu - - -// The Letter names -ا alIf -ب be: -پ pe: -ت te: -ٹ te: -ث se: -ج Ji:m -چ ce: -ح bar.i:|| -خ xe: -د da:l -ڈ da:l -ذ za:l -ر Re: -ڑ r.e: -ز ze: -ژ Ze: -س si:n -ش Si:n -ص sUa:d -ض zUa:d -ط tOe: -ظ zOe: -ع aIn -غ QaIn -ف fe: -ق qa:f -ک ka:f -گ ga:f -ل la:m -م mi:m - ن nu:n -_و va:O -ہ he: -ں ghUnna -ﮨ cho:ti:||he: -ھ dO||caSmi:||he: -ء hamzah -ی c#o:ti:||je: -ے bar.i:||je: -ئ h'amza -ۂ he:h'amza -_ؤ va:Oh'amza - -َ z@b@R -ِ ze:R -ُ pe:S -ٰ ,alIfmaqs'u:r,a -ّ t,aSd'i:d -ً d'o:zab'ar - - -// The numbers -_0 bu're -_1 hi'ku -_2 ba: -_3 te -_4 ca:r -_5 pan'ja: -_6 ch'aha: -_7 sa'ta: -_8 ath'a: -_9 na'va: -_10 da'ha: -_11 jara:ha -_12 bara:ha -_13 tera:ha -_14 cOda:ha -_15 pa'dra:ha -_16 sora:ha -_17 satira:ha -_18 ari'rahan -_19 una'via -_20 viha: -_21 ek'kie -_22 bavi'a -_23 tevi'a -_24 cO'via -_25 panc'via -_26 cha'via -_27 sat'avia -_28 at:avia -_29 una:tie -_30 ti'ha -_31 ek'atiha -_32 battiha -_33 tettiha -_34 cO'tiha -_35 panc:tiha -_36 chat'tiha -_37 sat'tatiha -_38 att:atiha -_39 unuta:vie -_40 ca'li: -_41 ek'eta:rie -_42 ba:ite'rie -_43 te'ta:rie -_44 cOt'erie -_45 panci'terie -_46 cai'terieh -_47 sati'terie -_48 ati'terie -_49 urur'ja -_50 pan'ja -_51 ekvan'ja -_52 bavan'ja -_53 tevan'ja -_54 cOvanja -_55 pa:van'ja -_56 ca'vaja: -_57 sat:ur'ja -_58 at:ur'ja -_59 una:hat:i -_60 sa:thi -_61 eka:thi -_62 ba:hathi -_63 teha:thi -_64 cO'hathi -_65 panja'hathi -_66 ca:hathi -_67 sat'tathi -_68 at'thati -_69 un'ha't:har -_70 sata:ri -_71 ek'hat:ar -_72 ba'hat'ar -_73 te'hat'ar -_74 cOhat'ar -_75 pan'jat'ar -_76 cha'hat'ar -_77 sat'ta'tar -_78 at:hat'ar -_79 un'a:si -_80 a:si -_81 ek'ea'si -_82 bea'si -_83 tea'si -_84 cO'rasi -_85 panc'a:si -_86 chhajasi -_87 sat'tea:si -_88 at:ha:si -_89 ur'ra:nave -_90 nave -_91 ek'ka'navi -_92 bea'navi -_93 tea'navi -_94 cOra:navi -_95 panca:navi -_96 cha:navi -_97 sat'ta:navi -_98 at:tha:navi -_99 nava:navi -_100 sO - -_0M1 haz'a:r -_0M2 l'a:kh -_0M3 kaR'o:R -_0M4 'aRab -_0M5 'k#aRab - -_dpt _da:he_ - - +// This file is UTF8 encoded +// Letter Names, Numbers and exceptional pronounciation of Sindhi + +// The Letter names +ا alIf +ب be: +ٻ bE +ڀ b#e: +پ pe: +ت te: +ٿ the: +ٽ t.e: +ٺ t.#e: +ث se: +ج Ji:m +ڄ Je: +جھ J#e: +ڃ n^e: +چ ce: +ڇ c#e: +ح vad.i:||he: +خ xe: +د da:l +ڌ d#a:l +ڊ d.a:l +ڏ d.e: +ڍ d.#a:l +ذ za:l +ر Re: +ڙ r.e: +ڙھ r.he: +ز ze: +ژ Ze: +س si:n +ش Si:n +ص sUa:d +ض zUa:d +ط tOe: +ظ zOe: +ع aIn +غ QaIn +ف fe: +ڦ p#e: +ڪ ka:f +ق qa:f +ک k#e: +گ ga:f +گھ g#e: +ڳ ge: +ڱ N-e: +ل la:m +م mi:m +ن nu:n +ڻ n.u:n. +و va:O +ه he: +ہ Urdu:||he: +ھ dO||caSmi:||he: +ء hamzah +ي je: +ئ h'amza +ۂ he:h'amza +_ؤ va:Oh'amza + +َ z@b@R +ِ ze:R +ُ pe:S +ٰ ,alIfmaqs'u:r,a +ّ t,aSd'i:d +ً d'o:zab'ar + + +// The numbers +_0 bUr.i: +_1 hIkU +_2 ba: +_3 t.e +_4 ca:R +_5 panJa +_6 c#aha +_7 sat:a +_8 at.#a +_9 nava +_10 d.aha +_11 jaraha +_12 baraha +_13 te:raha +_14 cOd.aha +_15 pandraha +_16 soraha +_17 satraha +_18 arr.aha +_19 Un.vi:ha +_20 vi:ha +_21 Ikvi:ha +_22 ba:vi:ha +_23 t.e:vi:ha +_24 co:vi:ha +_25 panJvi:ha +_26 c#avi:ha +_27 sata:vi:ha +_28 at.#a:vi:ha +_29 Un.at.i:ha +_30 t.i:ha +_31 Ikat.i:ha +_32 bat.i:ha +_33 t.e:t.i:ha +_34 co:t.i:ha +_35 panJati:ha +_36 c#at.i:ha +_37 satati:ha +_38 at.#ati:ha +_39 Un.ta:li:ha +_40 ca:li:ha +_41 Ikta:li:ha +_42 ba:Ita:li:ha +_43 t.e:ta:li:ha +_44 co:Ita:li:ha +_45 panJe:ta:li:ha +_46 c#a:Ita:li:ha +_47 sate:ta:li:ha +_48 at.#e:ta:li:ha +_49 Un.vanJa:h +_50 panJa:h +_51 IkvanJa:h +_52 ba:vanJa:h +_53 t.e:vanJa:h +_54 co:vanJa:h +_55 panJvanJa:h +_56 c#a:vanJa:h +_57 satvanJa:h +_58 at.#vanJa:h +_59 Un.ahat.#I +_60 sat.#I +_61 Ikahat.#I +_62 bahat.#I +_63 t.e:hat.#I +_64 co:hat.#I +_65 panJahat.#I +_66 c#a:hat.#I +_67 satahat.#I +_68 at.#ahat.#I +_69 Un.hat:aR +_70 sat:aR +_71 Ikahat:aR +_72 ba:hataR +_73 t.e:hataR +_74 co:hataR +_75 panJataR +_76 c#a:hataR +_77 satat:aR +_78 at.#ahataR +_79 Un.Ia:si: +_80 assi: +_81 IkIa:si: +_82 bIa:si: +_83 t.e:a:si +_84 cOo:ra:si: +_85 panJa:si: +_86 c#aha:si: +_87 satIa:si: +_88 at.#Ia:si: +_89 Un.Ia:nave: +_90 navve: +_91 IkIanave: +_92 bIa:nave: +_93 t.Ia:navE: +_94 co:Ra:nave: +_95 panJa:nave: +_96 c#aha:nave: +_97 satIa:nave: +_98 at.#Ia:nave: +_99 nava:nave: + +_0C s'aU +_0M1 haz'a:r +_0M2 l'a:kh +_0M3 kaR'o:R +_0M4 'aRab +_0M5 'k#aRab + +_dpt _d.aha:i:_ + +// word exceptions + +آھي a:he: $u +آهن a:hIn $u +هن hIna +۾ me~ $u +۽ ae~ $u +آهي a:he: $u +هڪ HIk diff --git a/dictsource/sd_rules b/dictsource/sd_rules index c90759b5..b9e13b9a 100644 --- a/dictsource/sd_rules +++ b/dictsource/sd_rules @@ -1,668 +1,561 @@ - -// This file is UTF8 encoded -// phoneme rules for Sindhi -// Letter group - l01: Vowels - -.replace -٠ 0 -١ 1 -٢ 2 -٣ 3 -٤ 4 -٥ 5 -٦ 6 -٧ 7 -٨ 8 -٩ 9 -ي ی -یٰ ا - - -// vowel signs, alif acts as consonants at start of word if these follow -.L01 َ ِ ُ و ی ع ا ے - -// Consonants -.L02 ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ غ ف ق ک گ ل م ن ہ ئ - -// VOWELS - -.group َ - َ a - َی E - َے E - َو O - َع a: - -.group ِ - ِ I - ِی i: - ِع i: - @) ِ (_S1 'e: - -.group ُ - ُ U - ُو u: - ُع O - -.group ھ - ھ hV - ھ (_ h: -ھ (l01 - -.group ٰ - ٰ a: - -.group ا - ا a: - _) ا (L01 // Acts like Consonants if followed by a vowel but is silent. -_) ا a -_) او u: -_) ای e: - ائ (L02 a:I - اہ(_a:h - _) اتن 'Itn - _) اتر Ut'aR - _) اتر (L01 UtR - _) الٹ Ul'at - _) الٹ (L01 Ult - _) الجھ Ul'aJh - _) الجھ (L01 UlJh - _) ابھر Ubh'aR - _) ابھر (L01 UbhR - _) اچھل Uch'al - _) اچھل (L01 Uchl - _) اجڑ UJ'ar. - _) اجڑ (L01 UJr. - افتتاح ,ItIt'a:h - اسلام ,Isl'a:m - _) انسان Ins'a:n - _) انت (L02 'Int,a - _) امید Um'i:d - اً(_S2 'an - _) امکان ,Imk'a:n - _) افسر ,afs'aR - _) اتفاق ,ItIf'a:q - _) ابتدا 'Ibt,Ida: - _) ایمان i:m'a:n - _) اعت 'e:tI - _) اضاف Iz'a:f - _) اسمبلی as'ambli: - _) اٹھت 'Ut:ht - _) اٹھن 'Ut:hn - _) اٹھات Ut:h'a:t - اقلیت ,aqali:;'at - استثن ,Ist'asn - اندھیر 'and#e:R - انتالیس ,Unta:l'i:s - انتیس ,Unt'i:s - اکثر ,aks'aR - ایران i:R'a:n - اجتماع ,IJtIm'a: - استحصال ,Ist,e:S:'a:l - _) امنگ Um'ang - انعام In'a:m - امتحان ,ImtIh'a:n - الزام ,Ilz'a:m - اشتہار ,IStIh'a:R - اصول Us.'u:l - اعلان e:l'a:n - اعزاز e:z'a:z - انقلاب ,InqIl'a:b - اصلاح ,Is.l'a:h - امداد ,Imd'a:d - استعف Ist'i:f - @) ات (_S2 'a:t - _) انتظ 'Int,Iz. - _) اخت (L02 ,IxtI - _) اقت (L02 ,IqtI - _) اح (L02 'Eh - _) است (L02 ,IstI - _) ارت (L02 ,IRtI - -.group آ - آ a: - آتش 'a:tIS - آہست a:h'Ist - - -.group ع - ع a: - عا a: - _) ع a - _) عیس 'i:s - _) عید 'i:d - عنوان Unv'a:n - _) عمر 'UmR - L02) عی (_ 'ai: - علیحد 'alEhd - -.group و - و o: - وُ vU - وٗ u: - و (L01 v - _) و vV - وع (_ u: - وّ vv - L02L02L02) و (L02 u: - L02) ونکہ (_ u:nk'e:h - -.group ی - ی e: - ی (L01 j - ی (_ i: - _) ی jV - یع(_ i: - @) ی i: - @) یں (_ e:n - یّ jj - @) یت (_S2 i:;'at - -.group ے // yeh barree - ے e: - -.group ۂ - ۂ 'ae: - -// with hamza -.group ئ - ئ - -.group ؤ - ؤ aU // ?? - -.group أ - أ // ?? - - -// CONSONANTS - -.group ب - ب bV - بھ bhV - بھ (L01 b' - ب (L01 b' - بّ bbV - بّ (L01 bb - _) بگڑ bIg'ar - _) بگڑ (L01 b'Igr - _) بکھر bIkh'aR - _) بکھر (L01 b'IkhR - _) بچھڑ bIch'ar - _) بچھڑ (L01 bIchr - _) بجھ b'UJh - بھوک bh'u:k - بھیک bh'i:k - بھیگ bh'i:g - بھول bh'u:l - _) بیان baj'a:n - _) بٹھا b'It:ha: - بئی b'ai: - بیوی b'i:vi: - _) بیوا b'e:va: - برسر b,ars'ar - بگاڑ bIg'a:r - بغاوت b,aQa:v'at - _) بہ (L02 bEh - بزرگ b'UzUr,g - _) بدل (L02 bad'al - بوڑھ b'u:r:h - _) بے (P2 b'e: - -.group ڀ - ڀ b - -.group پ - پ pV - پھ phV - پ (L01 p - پھ (L01 p - پّ ppV - پّ (L01 pp - _) پھر ph'Ir - پھول ph'u:l - _) پہ (L02 p'Eh - پہنچ pah'Unc - پوچھ p'u:c - پیچھ p'i:c - پھونک ph'u:nk - -.group ت - ت tV - تھ thV - ت (L01 t - تھ (L01 t - تّ ttV - تّ (L01 tt - _) تمہ t'Umh - تحقیق t,Ehq'i:q - _) ترجم t'arJ,Um - _) تہ (L02 t'Eh - _) تجز t'aJz - تقرر taq'arUr - تجرب taJ'arb - _) تیار t,ai:'a:r - _) تیسر t'i:sr - -.group ٿ - ٿ 't - -.group ٹ - ٹ t:V - ٹھ t:V - ٹ (L01 t: - ٹھ (L01 t: - ٹّ V:t:t: - ٹّ (L01 t:t: - ٹریفک t:r'e:fIk - _) ٹکڑ t:'Ukr - _) ٹہ (L02 t:'Eh - - -.group ث - ث sV - ث (L01 s - ثّ ssV -ثّ (L01 ss - - -.group ج - ج JV - جھ JhV - ج (L01 J - جھ (L01 Jh - جّ JJV - جّ (L01 JJ - _) جیت J'i:t - _) جوا J'ava: - جانب J'a:nIb - _) جنس J'Ins - جھوٹ Jh'u:t - _) جمل J'Uml - _) جہ (L02 J'Eh - _) جدا J'Uda: - -.group چ - چ cV - چھ chV - چ (L01 c - چھ (L01 ch - چّ ccV - چّ (L01 cc - _) چکا c'Uka: - _) چہ (L02 c'Eh - _) چیز c'i:z - _) چوم c'u:m - -.group ڇ - ڇ hc - -.group ح - ح hV - ح (L01 h - ح (_ 'ah - L01) ح (_ h - حکومت h,Uku:m'at - حکمران h,Ukmar'a:n - _) حوال hav'a:l - - - حّ hhV - حّ (L01 hh - -.group خ - خ xV - خ (L01 x - @) خ (ت x - خّ xxV - خّ (L01 xx - _) خوش x'US - _) خود x'Ud - _) خواہش xv'a:hIS - _) خیا x'aja: - - -.group د - د dV - دھ d#V - د (L01 d - دھ (L01 d# - دّ ddV - دّ (L01 dd - درخواست d,aRxv'a:st - دیا(_ d'i:;a: - درج d'aRJ - دیوا d'i:va: - دفاع d'Ifa: - _) دہ (L02 d'Eh - دنیا dUn'i:;a: - دہشت d'EhS'at - دلچسپ d,Ilc'asp - دھیم dh'i:m - _) دوسر d'u:sr - -.group ڌ - ڌ hd - -.group ڏ - ڏ d - -.group ڊ - ڊ :d - -.group ڍ - ڍ hd - -.group ڈ - ڈ dV - ڈھ dhV - ڈ (L01 d: - ڈھ (L01 d:h - ڈّ d:d:V - ڈّ (L01 d:d - ڈھونڈ d:h'u:nd - @) ڈز (_ d:z - -.group ذ - ذ DV - ذ (L01 D - ذّ DDV - ذّ (L01 DD - _) ذہ (L02 D'Eh - -.group ر - ر RV - ر (L01 R - رّ RRV - رّ (l01 RR - @) ر (ٹ R - @) ر (ڈ R - @) ردہ (_ Rd,a - @) ر (چ R - _) رہ (L02 R'Eh - _) رخ R'Ux - _) رکن R'Ukn - @) ر (د R - _) رفت R'af@t - -.group ڙ - ڙ :r - -.group ڙھ - ڙھ :hr - -.group ڑ - ڑ r:V - ڑ (L01 r: - ڑّ r:r:V - ڑّ (L01 r:r: - ڑھ r:hV - ڑھ (L01 r:h - -.group ز - ز zV - ز (L01 z - زّ zzV - زّ (L01 zz - _) زند z'Ind - _) زہ (L02 z'Eh - _) زلزل z,alz'al - -.group ژ - ژ ZV - ژ (L01 Z - -.group س - س sV - س (L01 s - سّ ssV - سّ (L01 ss - _) سرخ s'URx - _) سن (L01 s'Un - _) سلجھ sUl'aJh - _) سلجھ (L01 sUlJh - _) سدھر sUdh'aR - _) سدھر (L01 sUdhR - _) سلسل s'Ils,Il - _) ستار sIt'a:R - @) س (ٹ s - سندھ s'Ind# - سیکھ s'i:kh - @) س (ت s - _) سپرد sUp'URd - _) سہ (L02 s'Eh - سیدھ s'i:dh - سیاست sja:s'at - سرگرم s,aRg'aRm - -.group ش - ش SV - ش (L01 S - شّ SSV - شّ (L01 SS - _) شعب S'Ob - شاعر Sa:'a:IR - _) شعرا S'ORa: - _) شعل S'Ol - @) ش (ت S - _) شخص S'axs. - _) شہ (L02 S'Eh - شرمند S,aRm'Ind - -.group ص - ص s.V - ص (L01 s. - صّ ssV - صّ (L01 ss - صوب s.'u:b - -.group ض - ض zV - ض (L01 z - ضّ zzv - ضّ (L01 zz - -.group ط - ط tV - طھ t#V - ط (L01 t - طھ (L01 t# - طّ ttV - طّ (L01 tt - -.group ظ - ظ z.V - ظ (L01 z. - ظّ z.z.V - ظّ (L01 z.z. - -.group غ - غ QV - غ (L01 Q - غّ QQV - غّ (L01 QQ - -.group ف - ف fV - ف (L01 f - فّ ffV - فّ (L01 ff - _) فکر f'IkR - _) فہ (L02 f'Eh - فلم f'Ilm - -.group ڦ - ڦ f - -.group ق - ق qV - ق (L01 q - قّ qqV - قّ (L01 qq - قاعد q'a:jd - _) قسط q'Ist - _) قیا q'aja: - -.group ک - ک kV - کھ khV - ک (L01 k - کھ (L01 kh - کّ kkV - کّ (L01 kk - _) کتن k'Itn - کتاب kIt'a:b - کوشش k'o:SIS - _) کہ (L02 k'Eh - کارکن k'a:Rk,UUn - -.group گ - گ gV - گھ ghV - گ (L01 g - گھ (L01 gh - گّ ggV - گّ (L01 gg - _) گرفت g'IRIft - _) گزر gUz'aR - _) گزر (L01 gUzR - گئے g'ae: - گئی g'ai: - گمشد g'UmS,Ud - _) گھما gh'Uma: - _) گہ (L02 g'Eh - گزارش gUz'a:RIS - _) گیت g'i:t - -.group ڳ - ڳ g - -.group گھ - گھ hg - -.group ل - ل lV - ل (L01 l - لّ llV - لّ (L01 ll - لکھ l'Ikh - _) لہ (L02 l'Eh - -.group م - م mV - م (L01 m - مّ mmV - مّ (L01 mm - _) مشکل m'USk,Il - محکم me:he:km - مظاہر mUz.'a:hIR - _) ملن (L01 m'Iln - مسجد m'asJ,Id - مشرق m'aSR,Iq - مقدم mUq'adm - مسلم m'Usl,Im - مسلما mUs'alm,a: - @) م (پ m - منزل m'anz,Il - @) م (ب m - محقق mUh'aqIq - منظر m,anz.'aR - محفل m'Ehf,Il - مسکرا m'Usk,URa: - مسکراہٹ m,Usk,URa:h'at: - محسن m'o:hs,In - مجرم m'UJR,Im - منظور m,anz.'u:R - ملزم m'Ulz,Im - مغرب m'aQR,Ib - متحد mUt'ahId - _) مہ (L02 m'Eh - مخالف mUx'a:lIf - مخالفت m,Uxa:lIf'at - ممکن m'Umk,In - مطالب mUt'a:lIb - موجود mo:J'u:d - متصل mUt'as.Il - مخبر m'Uxb,IR - ملحق m'Ulh,Iq - مذہب m,aDh'ab - -.group ن - ن nV - ن (L01 n - @) ن (گ n - @) ن (د n - @) ن (ب n - @) ن (س n - نّ nnV - نّ (L01 nn - _) نکل nIk'al - _) نکل (L01 nIkl - @) ن (چ n - _) نکال nIk'a:l - _) نگاہ nIg'a:h - _) نمٹ nIm'at: - _) نمٹ (L01 nImt: - @) ن (پ n - @) نچل n'Icl - نشان nIS'a:n - @) ن (ڈ n - _) نظر naz.'aR - _) نظام nIz.'a:m - _) نہ (L02 n'h - L01) نٹ n't: - نھ nh - _) نکت n'Ukt - _) نوا n'ava: - _) نما n'Uma: - _) نماز nam'a:z - -.group ں - ں n // this should nasalize the vowel - -.group ء - ء - -.group ئ - ئ - L01) ئ (L02 'I - -.group ہ - ہ h - _) ہ (L01 h - _) ہ (ند hI - ہّ hhV - ہّ (L01 hh - - ہ (_ a - _) ہلن h'Iln - ہ (L02 hV - @) ہ (L02L01 h - _) ہم (L02L02L02P2 h'am - -.group ّ - ّ - -.group ً - ً - - -// Common symbols - -.group - $ do:l@R - , sVkat:Vh // Sakata سکتہ - ! f'iJa:ja //Fijaya فجائیہ - ; w'ak't'a //Waqfa وقفہ - : r'a:b'tah//Rabtar رابطہ - ? saw'a:l'i:ja:n'is'a:nV // Sawaliya Nishan سوالیہ نشان - % f'i:sVd //Fisad فیصد - - - -.group 0xe0a4 // devanagari - 0xe0a4 _^_NE // switch to Nepali voice -.group 0xe0a5 // devanagari - 0xe0a5 _^_NE - - + +// This file is UTF8 encoded +// phoneme rules for Sindhi +// Letter group - l01: Vowels + +.replace +٠ 0 +١ 1 +٢ 2 +٣ 3 +٤ 4 +٥ 5 +٦ 6 +٧ 7 +٨ 8 +٩ 9 +ی ي +ہ ه + +// vowel signs, alif acts as consonants at start of word if these follow +.L01 َ ِ ُ و ي ع ا ے + +// Consonants +.L02 ب ٻ ڀ پ ت ٿ ٺ ٹ ث ج ڄ چ ڇ ح خ د ڌ ڊ ڏ ڈ ذ ر ڙ ڑ ز ژ س ش ص ض ط ظ غ ف ڦ ق ڪ ک گ ڳ ل م ن ڻ ڃ ه ھ ء + +// VOWELS + +.group َ + َ a + َي E + َے E + َو O + َع a: + +.group ِ + ِ I + ِي i: + ِع i: + +.group ُ + ُ U + ُو u: + ُع O + +.group ھ + ھ hV + ھ(L01 h +ھ (l01 h + +.group ٰ + ٰ a: + +.group ا + ا a: + _) ا (L01 // Acts like Consonants if followed by a vowel but is silent. + _) ا a + _)او u: +_)اي e: + ائ (L02 a:I + افتتاح ,ItIt'a:h + اسلام ,Isl'a:m + _) انسان Ins'a:n + اً(_S2 'an + _) افسر ,afs'aR + _) اتفاق ,ItIf'a:q + _) ابتدا 'Ibt,Ida: + _) اعت 'e:tI + _) اضاف Iz'a:f + استثن ,Ist'asn + اجتماع ,IJtIm'a: + استحصال ,Ist,e:S:'a:l + _) امنگ Um'ang + انعام In'a:m + امتحان ,ImtIh'a:n + الزام ,Ilz'a:m + اشتہار ,IStIh'a:R + اصول Us.'u:l + اعلان e:l'a:n + اعزاز e:z'a:z + انقلاب ,InqIl'a:b + اصلاح ,Is.l'a:h + امداد ,Imd'a:d + @) ات (_S2 'a:t + _) انتظ 'Int,Iz. + _) اخت (L02 ,IxtI + _) اقت (L02 ,IqtI + _) اح (L02 'Eh + _) است (L02 ,IstI + _) ارت (L02 ,IRtI + +.group آ + آ a: + آتش 'a:tIS + آہست a:h'Ist + + +.group ع + ع a: + عا a: + _) ع a + عنوان Unv'a:n + _) عمر 'UmR + L02) عی (_ 'ai: + علیحد 'alEhd + عِ I + عُ U + +.group و + و o: + وُ vU + وٗ u: + و (L01 v + _) و vV + وع (_ u: + وّ vv + _L02L02L02)و(L02 u: + +.group ي + ي e: + ي(L01 j + _)ي jV + يع(_ i: + @)ي i: + يٰ a: + +.group ے // yeh barree + ے e: + +.group ۂ + ۂ 'ae: + +// with hamza +.group ئ + ئ + +.group ؤ + ؤ aU // ?? + +.group أ + أ // ?? + + +// CONSONANTS + +.group ب + ب bV + ب (L01 b' + بّ bbV + بّ (L01 bb + _) بگڑ bIg'ar + _) بگڑ (L01 b'Igr + _) بجھ b'UJh + بغاوت b,aQa:v'at + بزرگ b'UzUr,g + _) بدل (L02 bad'al + +.group ڀ + ڀ bV + ڀ(L01 b + +.group پ + پ pV + پ (L01 p + +.group ت + ت t[V + ت(L01 t[ + تّ t[:V + تّ(L01 t[: + +.group ٿ + ٿ TV + ٿ(L01 T + +.group ٽ + ٽ t.V + ٽ(L01 t. + +.group ٹ + ٹ t.V + ٹ (L01 t. + +.group ٺ + ٺ t.#V + ٺ(L01 t.# + +.group ث + ث sV + ث (L01 s + ثّ ssV +ثّ (L01 ss + +.group ج + ج JV + ج (L01 J + جّ JJV + جّ (L01 JJ + _) جوا J'ava: + جانب J'a:nIb + _) جنس J'Ins + _) جمل J'Uml + _) جہ (L02 J'Eh + _) جدا J'Uda: + +.group ڄ + ڄ JV + ڄ(L01 J + +.group جھ + جھ J#V + جھ(L01 J# + +.group چ + چ cV + چ (L01 c + چّ ccV + چّ (L01 cc + _) چہ (L02 c'Eh + +.group ڇ + ڇ c#V + ڇ(L01 c# + +.group ح + ح hV + ح (L01 h + ح (_ 'ah + L01) ح (_ h + _) حوال hav'a:l + +.group خ + خ xV + خ (L01 x + @) خ (ت x + خّ xxV + خّ (L01 xx + _) خوش x'US + _) خود x'Ud + _) خواہش xv'a:hIS + _) خیا x'aja: + + +.group د + د dV + د (L01 d + دّ (L01 d: + درخواست d,aRxv'a:st + دیا(_ d'i:;a: + درج d'aRJ + دیوا d'i:va: + دفاع d'Ifa: + _) دہ (L02 d'Eh + دہشت d'EhS'at + دلچسپ d,Ilc'asp + +.group ڌ + ڌ d#V + ڌ(L01 d# + +.group ڏ + ڏ d.V + ڏ(L01 d. + +.group ڊ + ڊ d.V + ڊ(L01 d. + +.group ڍ + ڍ d.#V + ڍ(L01 d.# + +.group ڈ + ڈ dV + ڈھ dhV + ڈ (L01 d: + ڈھ (L01 d:h + ڈّ d:d:V + ڈّ (L01 d:d + ڈھونڈ d:h'u:nd + @) ڈز (_ d:z + +.group ذ + ذ DV + ذ (L01 D + ذّ DDV + ذّ (L01 DD + _) ذہ (L02 D'Eh + +.group ر + ر RV + ر (L01 R + رّ RRV + رّ (l01 RR + @) ر (ٹ R + @) ر (ڈ R + @) ردہ (_ Rd,a + @) ر (چ R + _) رہ (L02 R'Eh + _) رخ R'Ux + @) ر (د R + _) رفت R'af@t + +.group ڙ + ڙ r.V + ڙ(L01 r. + +.group ڙھ + ڙھ r.hV + ڙھ(L01 r.h + +.group ڑ + ڑ r:V + ڑ (L01 r: + ڑّ r:r:V + ڑّ (L01 r:r: + ڑھ r:hV + ڑھ (L01 r:h + +.group ز + ز zV + ز (L01 z + زّ zzV + زّ (L01 zz + _) زند z'Ind + _) زہ (L02 z'Eh + _) زلزل z,alz'al + +.group ٻ + ٻ bV + ٻ(L01 b + +.group س + س sV + س (L01 s + سّ ssV + سّ (L01 ss + _) سرخ s'URx + L02L02)ستان Ista:n + _) سلسل s'Ils,Il + _) ستار sIt'a:R + @) س (ٹ s + سیکھ s'i:kh + @) س (ت s + _) سپرد sUp'URd + _) سہ (L02 s'Eh + سرگرم s,aRg'aRm + _)سنڌ sIndh + +.group ش + ش SV + ش (L01 S + شّ SSV + شّ (L01 SS + _) شعب S'Ob + شاعر Sa:'a:IR + _) شعرا S'ORa: + _) شعل S'Ol + @) ش (ت S + _) شخص S'axs. + _) شہ (L02 S'Eh + شرمند S,aRm'Ind + +.group ص + ص s.V + ص (L01 s. + صّ ssV + صّ (L01 ss + صوب s.'u:b + +.group ض + ض zV + ض (L01 z + ضّ zzv + ضّ (L01 zz + +.group ط + ط tV + طھ t#V + ط (L01 t + طھ (L01 t# + طّ ttV + طّ (L01 tt + +.group ظ + ظ z.V + ظ (L01 z. + ظّ z.z.V + ظّ (L01 z.z. + +.group غ + غ QV + غ (L01 Q + غّ QQV + غّ (L01 QQ + +.group ف + ف fV + ف (L01 f + فّ ffV + فّ (L01 ff + _) فہ (L02 f'Eh + فلم f'Ilm + +.group ڦ + ڦ p#V + ڦ(L01 p# + +.group ق + ق qV + ق (L01 q + قّ qqV + قّ (L01 qq + قاعد q'a:jd + _) قسط q'Ist + _) قیا q'aja: + +.group ک + ک k#V + ک(L01 k# + +.group ڪ + ڪ kV + ڪ(L01 k + +.group گ + گ gV + گ (L01 g + گّ ggV + گّ (L01 gg + _) گرفت g'IRIft + _) گزر gUz'aR + _) گزر (L01 gUzR + گمشد g'UmS,Ud + _) گھما gh'Uma: + _) گہ (L02 g'Eh + گزارش gUz'a:RIS + +.group ڳ + ڳ gV + ڳ(L01 g + +.group گھ + گھ g#v + گھ(L01 g# + +.group ڱ + ڱ N-V + ڱ(L01 N- + +.group ل + ل lV + ل (L01 l + لّ llV + لّ (L01 ll + لکھ l'Ikh + _) لہ (L02 l'Eh + +.group م + م mV + م (L01 m + مّ mmV + مّ (L01 mm + مظاہر mUz.'a:hIR + مسجد m'asJ,Id + مشرق m'aSR,Iq + مقدم mUq'adm + مسلم m'Usl,Im + مسلما mUs'alm,a: + @) م (پ m + منزل m'anz,Il + @) م (ب m + محقق mUh'aqIq + منظر m,anz.'aR + محفل m'Ehf,Il + محسن m'o:hs,In + مجرم m'UJR,Im + منظور m,anz.'u:R + ملزم m'Ulz,Im + مغرب m'aQR,Ib + متحد mUt'ahId + _) مہ (L02 m'Eh + مخالف mUx'a:lIf + مخالفت m,Uxa:lIf'at + مطالب mUt'a:lIb + موجود mo:J'u:d + متصل mUt'as.Il + مخبر m'Uxb,IR + ملحق m'Ulh,Iq + مذہب m,aDh'ab + +.group ن + ن nV + ن (L01 n + @) ن (گ n + @) ن (د n + @)ن(ڌ n + @)ن(ڍ n + @) ن (ب n + @) ن (س n + نّ nnV + نّ (L01 nn + @) ن (چ n + @) ن (پ n + @) نچل n'Icl + نشان nIS'a:n + @) ن (ڈ n + _) نظر naz.'aR + _) نظام nIz.'a:m + _) نہ (L02 n'h + L01) نٹ n't: + نھ nh + _) نوا n'ava: + _) نما n'Uma: + _) نماز nam'a:z + +.group ڃ + ڃ n^V + ڃ(L01 n^ + +.group ڻ + ڻ n.V + ڻ(L01 n. + +.group ء + ء + +.group ئ + ئ + L01) ئ (L02 'I + +.group ه + ه HV + ه(L01 H + _)ه(ند hI + + +.group ّ + ّ : + +.group ً + ً an + + +// Common symbols + +.group + $ do:l@R + , sVkat:Vh // Sakata سکتہ + ! f'iJa:ja //Fijaya فجائیہ + ; w'ak't'a //Waqfa وقفہ + : r'a:b'tah//Rabtar رابطہ + ? saw'a:l'i:ja:n'is'a:nV // Sawaliya Nishan سوالیہ نشان + % f'i:sVd //Fisad فیصد + + + +.group 0xe0a4 // devanagari + 0xe0a4 _^_NE // switch to Nepali voice +.group 0xe0a5 // devanagari + 0xe0a5 _^_NE + diff --git a/dictsource/ur_list b/dictsource/ur_list index 3cb86c3e..40348cd3 100644 --- a/dictsource/ur_list +++ b/dictsource/ur_list @@ -1,4 +1,4 @@ -// This ur_list file is prepared by Him Prasad Gautam (Kathmandu, Nepal) +// This ur_list file is prepared by Him Prasad Gautam (Kathmandu, Nepal) and Ejaz Shah (Pakistan) // This file is UTF8 encoded // Letter Names, Numbers and exceptional pronounciation of Urdu @@ -55,6 +55,8 @@ _ؤ va:Oh'amza ّ t,aSd'i:d ً d'o:zab'aR ْ sUk'u:n +ٗ Ult.a:||pe:S +ٓ mada // The numbers @@ -190,8 +192,11 @@ _dpt _ISaRI'Ia_ جن J'In $u جنھیں J,InH'e:n $u انہوں ,UnH'o:n $u +انھوں UnHo:n $u انہیں ,UnH'e:n $u انھیں ,UnH'e:n $u +انھی UnHi $u +انہی UnHi: $u // unstressed prepositions کا $u @@ -677,7 +682,6 @@ _dpt _ISaRI'Ia_ کلک klIk فکسنگ f,Iks'Ing مانند ma:n'Ind $1 -اتار Ut'a:R آرکائیو ,a:Rk'a:jv لنک lInk فہرست fEHRIst @@ -718,4 +722,258 @@ _dpt _ISaRI'Ia_ نصرت nUs.Rat خاتون xa:tu:n برتری baRtaRi -برتر baRtaR \ No newline at end of file +برتر baRtaR +سن sUn +انھتر UnHataR +انیس Uni:s +ورلڈ vaRld. +فرق faRq +اوپر u:paR $1 +اوپری u:pRi: +دودھ du:d# +اورئینٹل o:Ri;e:nt.al +انکار Inka:R +انکاری Inka:Ri +انیک ane:k +اونگ u:ng +اوک u:k +اویس ave:s +اویسی ave:si +اٹوٹ at.u:t. +اٹھ Ut.# +اٹھان Ut.#a:n +اک Ik +اکا Ika: +دکا dUka: +اکائی Ik'a:i +اکبر akbaR $1 +وکی vIki +اکرم akRam $1 +اکزیکٹیو Ikze:kIt.Iv +اکتا Ukta: +اکتایا Ukta:ja: +اکتاہٹ Ukta:Hat. +اکلو Iklo: +اکمل akmal $1 +مملکت mamlIkat +قربت qURbat $1 +مٹا mIt.a: +ٹیوب t.ju:b +سیہون sEHvan +عرس URs +اکھاڑ Uk#a:r. +اکے Ike: +آمیزش a:me:zIS +واحد va:HId +آنت a:nt +آنچل a:ncal +حجاب HIJa:b +حلقہ Halqa +لحاظ lIHa:z. +کیچڑ kicar. +گردش gaRdIS +مروت mURavvat +مزاج mIza:J +غربت QURbat $1 +آویزش a:ve:zIS +پہر pEHER +آہ a:H +جگر JIgaR +دلدوز dIldo:z $1 +رحمت REHmat +ابجد abJad +(رسم الخط) RasmUlxat +ابجدی abJadi +حروف HURu:f +ابر abR +ابراہیم IbRa:Hi:m +ابراہیمی IbRa:Hi:mi +ابرق abRaq +ابرنا UbaRna: +ابرو abRu: +کنول kanval $2 +ابل Ubal +ابلا Ubla: +ابلی Ubli: +ابلیس Ibli:s +الغرض alQaRaz +الوقت Ulvaqt +دہر dEHER +ظلم z.Ulm +ابو abu: +طالب ta:lIb +اپج UpaJ +اپچار Upca:R +اپدیش Upde:S +اپواس Upva:s +اپکار Upka:R +سرسری saRsaRi $1 +متخالف mUtaxa:lIf +اتصالی ,ItIs.a:li +اتمام ItIma:m +حجت HUJat +اتھل Ut#al +پتھل pUt#al +اجازت IJa:zat $2 +اجرا IJRa: +اجرت IJRa: +اجگر aJgaR +اجلا UJla: +اجلی UJli: +اجلے UJle: +اجماع IJma: +اجمل aJmal +اجنبی aJnabi +اجنٹ IJant. +اجنڈا IJand.a: +اچک Ucak +اچکا Ucka: +اجنب aJnab +اچھوت ac#u:t +اچھوتا ac#u:ta: +اچھوتی ac#u:ti +اچھوتے ac#u:te: +پرسی pURsi: +بالغیب bIlQEb $2 +نگار nIga:R +کاغذ ka:QaD +اختری axtaRi: +اخذ axaD +جرات JURat +اخوت Uxu:vat +فہم fEHEm +جرمنی JaRmani +خدمت xIdmat +شریعت SaRi;at +ادت Idat +ادراک IdRa:k +تردد taRaddUd +خدمات xIdma:t +ادریس IdRi:s +ادب adab +ادغام IdQa:m +ادلال Idla:l +موا mu:a: +ادھر Id#aR +(ادھر ادھر) Id#aR||Ud#aR +ادھم Ud#am +اذالہ IDa:la +ارتھ aRt# +معلیٰ mUalla: +ارسال IRsa:l +ملیں mIle:n +ارشاد IRSa:d +ارض aRz +سلطنت saltanat +استاد Usta:d +استادی Usta:di +استر staR +بخدا baxUda: +بندش bandIS +خرد xURd +خردار xURda:R +خردہ xURda +خرشید xURSi:d +تبرک tabaRUk +خرم xURRam +خزاں xIza:n +پروردہ paRvaRda +خشک xUSk +خصوص xUs.u:s. +زمرد zamaRUd +جبلت JIbIll'at $2 +بالآخر bIla:xIR +شعاع SUa: +حصار HIs.a:R +شدگی SUdgi: +بالاتفاق bIlItIfa:q +بالاجماع bIlIJma: +بالاجمال bIlIJma:l +بالاشتراک bIlIStIRa:k +بالاعلان bIle:la:n +بالجبر bIlJabR +بالعوض bIlIvaz +بالغرض bIlQaRaz +مرکزی maRkazi +بالفرض bIlfaRz +حکمت HIkmat +بالفعل bIlfe:l +بالمثل bIlmIsl +بالمختصر bIlmUxtas.aR +بالمشافہ bIlmUSa:fa +بالمعنی bIlma:ni +بالمقابل bIlmUqa:bIl +بالواسطہ bIlva:sta +نیند ni:nd +باوجودیکہ ba:vUJu:de:ke: +کتا kUt:a: $2 +دکھاؤ dIk#a:o: +کتے kUt:e: $2 +کتوں kUt:o:n +بپھر bIp#aR +شکن SIkan +بتکرار batakRa:R +بچھ bIc# +منجمد mUnJamId +بحر bEHER +بخدمت baxIdmat +منکشف mUnkaSIf +بخش baxS +بخشش baxSIS +جدت JIdat +بخوشی baxUSi: +بخیر baxE:R +بچپن bacpan +بچپنا bacpana: +قطب qUtUb +ذہن DEHEn +سلوک sUlu:k +انڈین Ind.i;an +متنبہ mUtanabe: +قیمتی qi:mti: +بدک bIdak +بذریعہ baDaRi:;a: +برا bURa: +نسبتی nIsbati +برتن baRtan +برج bURJ +برد bURd +بردہ bURda +رغبت RaQbat +برضا baRaza: +علاج Ila:J +الفت Ulfat +برگزیدہ baRgUzi:da +برہمن bRaHman +الذمہ UDDIma +صحبت s.OHbat +برے bURe: +بزدل bUzdIl +بز bUz +بزدلانہ bUzdIla:na +بزدلی bUzdIli: +بزم bazm +بستر bIstaR +مرگ maRg +بسکٹ bIskIt. +(بسم اللہ) bIsmIlla:H +بسم bIsm +بسنت basant +بضد bazId +بعید bai:d +بغض bUQz +بقید baqE:d +(بلا واسطہ) bIla:||va:sta +بلال bIla:l +بلبل bUlbUl +بلبلے bUlbUle: +بلک bIlak +بلیک ble:k +مارکٹ ma:RkIt. +(بن بلائے) bIn||bUla:e: +(بن مول) bIn||mo:l +بنت bInt +سنور sanvaR +بو bu: $only +بورڈنگ bo:Rd.Ing +بولنگ bo:lIng diff --git a/dictsource/ur_rules b/dictsource/ur_rules index 13c537a7..bd7713ee 100644 --- a/dictsource/ur_rules +++ b/dictsource/ur_rules @@ -1,5 +1,5 @@  -// This ur_rules file is written by Him Prasad Gautam (Kathmandu, Nepal). +// This ur_rules file is written by Him Prasad Gautam (Kathmandu, Nepal) and Ejaz Shah (Pakistan). // This file is UTF8 encoded // phoneme rules for Urdu // Letter group - l01: Vowels @@ -17,6 +17,7 @@ ٩ 9 ي ی یٰ ا +آ آ // vowel signs, alif acts as consonants at start of word if these follow @@ -48,6 +49,9 @@ ُو u: ُع O +.group ٗ + ٗ u: + .group ھ ھ HV ھ (_ H: @@ -123,12 +127,49 @@ _) ای e: _) است (L02 ,IstI _) ارت (L02 ,IRtI _) ادار Ida:R + _)انک(L02L01 InkI + _)انہتر UnHataR + _)او(ا av + _)انہ(L02L01 InHI + _)اٹھتال at.#ta:l + _)اٹھتر at.#at:aR + _)اٹھتیس at.#ti:s + _)اٹھلا It.#la: + _)اٹھ(و Ut.# + _)اکت(L02L01 IktI + _)اکسا Uksa: + _)اکٹھ(L01 Ikat.t.# + _)اکہر IkEHR + _)اکیل ake:l + _)ائ aI + _)ابال Uba:l + _)ابوال(P5 abUl + L02)او(L02 a:vV + _)ابھار Ub#a:R + _)اتار Uta:R + _)اترو(L01 UtaRv + _)ابکائ Ubka: + _)اجت(L02L01 IJtI + _)اجا(ر IJa: + _)اجال UJa:l + _)اجاڑ UJa:r. + _)اچھال Uc#a:l + _)اداس Uda:s + _)ادھار Ud#a:R + _)ادھڑ(L01 Ud#r. + _)ادھڑ Ud#ar. + _)ادھیڑ Ud#e:r. + _)ارا(د IRa: + _)اونچ u:nc + اں a~ .group آ آ a: آتش 'a:tIS آہست a:H'Ist آئ (L02 'a:I + آمیز a:me:z + آویز a:ve:z .group ع @@ -141,6 +182,8 @@ _) ای e: _) عمر 'UmR L02) عی (_ 'ai: علیحد 'alEHd + عُ 'U + عِ I .group و و o: @@ -152,8 +195,11 @@ _) ای e: وّ vv L02L02L02) و (L02 u: L02) ونکہ (_ u:nk'e:H - L02L01) و (L02 vV - L01) و (L01 v + _L02)و(L01 av + L01)و(L01 v + وؤ u:o: + L03L03L03L03)وں(S2 o:n + _L02L01)و(L02_ vV .group ی ی e: @@ -162,12 +208,15 @@ _) ای e: _) ی jV یع(_ i: @) ی i: - @) یں (_ e:n + @) یں (_ e~ یّ jj @) یت (_S2 i:;'at _) یو jO ی (و e: L02)یوں i;o:n + L03)یکشن e:kSan + L03L03L03L03)یں(S2 e~ + یں e~ .group ے // yeh barree ے e: @@ -180,7 +229,7 @@ _) ای e: ئ .group ؤ - ؤ aU // ?? + ؤ o: .group أ أ // ?? @@ -220,6 +269,11 @@ _) ای e: بوڑھ b'u:r.h _) بے (P2 b'e: بحران b,OHR'a:n + _)بپھر(L01 bIp#R + _)بچھ bIc# + _)بخار bUxa:R + _)برائی bURa:i + _)بوا(ئ boa: .group پ @@ -237,6 +291,7 @@ _) ای e: پیچھ p'i:c# پھونک p#'u:nk _) پور (L01 p'u:R + _)پچھل(L01 pIc#l .group ت ت tV @@ -258,6 +313,7 @@ _) ای e: L03L03) تی (_S2 ti: L03L03) تے (_S2 te: _) توا t'ava: + تہ(_ ta .group ٹ ٹ t.V @@ -295,6 +351,7 @@ _) ای e: _) جمل J'Uml _) جہ (L02 J'EH _) جدا J'Uda: + _)جذب JaDb .group چ چ cV @@ -320,6 +377,7 @@ _) ای e: حّ HHV حّ (L01 HH + _)حیا Haja: .group خ خ xV @@ -331,6 +389,8 @@ _) ای e: _) خود x'Ud _) خواہش xv'a:HIS _) خیا x'aja: + _)خوا xva: + _)خدا xUda: .group د @@ -353,6 +413,7 @@ _) ای e: _) دوسر d'u:sR _) دین de:n _) دیت de:t + دہ(_ da .group ڈ ڈ d.V @@ -446,6 +507,7 @@ _) ای e: _) شخص S'axs. _) شہ (L02 S'EH شرمند S,aRm'Ind + _)شمار SUma:R .group ص ص s.V @@ -529,6 +591,7 @@ _) ای e: _) گہ (L02 g'EH گزارش gUz'a:RIS _) گیت g'i:t + _)گزار gUza:R .group ل ل lV @@ -639,21 +702,22 @@ _) ای e: ّ .group ً - ً + ً an // Common symbols .group $ do:l@R - , sVkat.Vh // Sakata سکتہ - ! f'iJa:ja //Fijaya فجائیہ - ; w'ak't'a //Waqfa وقفہ + , sakta // Sakta سکتہ + ! f'iJa:ja //Fijaya فجائیہ + ; vakfa //Waqfa وقفہ : r'a:b'tah//Rabtar رابطہ ? saw'a:l'i:ja:n'is'a:nV // Sawaliya Nishan سوالیہ نشان - % f'i:sVd //Fisad فیصد + % f'i:sVd //Fisad فیصد + ۔ xatma //Khatma ختمہ + ؟ sava:li:;a:||nISa:n //Sawalya Nishan سوالیہ نشان - .group 0xe0a4 // devanagari 0xe0a4 _^_NE // switch to Nepali voice diff --git a/espeak-ng-data/lang/inc/sd b/espeak-ng-data/lang/inc/sd index dc4801ff..51cf8afe 100644 --- a/espeak-ng-data/lang/inc/sd +++ b/espeak-ng-data/lang/inc/sd @@ -1,2 +1,3 @@ name Sindhi language sd +maintainer Ejaz Shah From 949de3f80fcf600d27d17e95dd9045a7a390556e Mon Sep 17 00:00:00 2001 From: yorkie Date: Thu, 15 Jun 2017 18:10:54 +0800 Subject: [PATCH 003/137] build: fix duplicated symbol when linking --- src/libespeak-ng/mbrowrap.c | 15 ++++++++++++--- src/libespeak-ng/mbrowrap.h | 20 ++++++++++---------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/libespeak-ng/mbrowrap.c b/src/libespeak-ng/mbrowrap.c index f1ad7d38..6214f37d 100644 --- a/src/libespeak-ng/mbrowrap.c +++ b/src/libespeak-ng/mbrowrap.c @@ -18,12 +18,23 @@ */ #include "config.h" +#include "mbrowrap.h" + +int (WINAPI *init_MBR)(char *voice_path); +void (WINAPI *close_MBR)(void); +void (WINAPI *reset_MBR)(void); +int (WINAPI *read_MBR)(short *buffer, int nb_samples); +int (WINAPI *write_MBR)(char *data); +int (WINAPI *flush_MBR)(void); +int (WINAPI *getFreq_MBR)(void); +void (WINAPI *setVolumeRatio_MBR)(float value); +char * (WINAPI *lastErrorStr_MBR)(char *buffer, int bufsize); +void (WINAPI *setNoError_MBR)(int no_error); #if defined(_WIN32) || defined(_WIN64) #include -#include "mbrowrap.h" HINSTANCE hinstDllMBR = NULL; @@ -69,8 +80,6 @@ void unload_MBR() #include #include - -#include "mbrowrap.h" #include "speech.h" /* diff --git a/src/libespeak-ng/mbrowrap.h b/src/libespeak-ng/mbrowrap.h index 604222bd..ff7cd376 100644 --- a/src/libespeak-ng/mbrowrap.h +++ b/src/libespeak-ng/mbrowrap.h @@ -37,20 +37,20 @@ typedef int BOOL; * error reason. If this is successful, then close_MBR() must be called * before init_MBR() can be called again. */ -int (WINAPI *init_MBR)(char *voice_path); +extern int (WINAPI *init_MBR)(char *voice_path); /* * Stop mbrola and release any resources. It is necessary to call * this after a successful call to init_MBR() before init_MBR() can be * called again. */ -void (WINAPI *close_MBR)(void); +extern void (WINAPI *close_MBR)(void); /* * Stop any ongoing processing and flush all buffers. After this call * any synthesis request will start afresh. */ -void (WINAPI *reset_MBR)(void); +extern void (WINAPI *reset_MBR)(void); /* * Return at most 'nb_samples' audio samples into 'buffer'. The returned @@ -58,14 +58,14 @@ void (WINAPI *reset_MBR)(void); * If not successful, lastErrorStr_MBR() will provide the error reason. * Samples are always 16-bit little endian. */ -int (WINAPI *read_MBR)(short *buffer, int nb_samples); +extern int (WINAPI *read_MBR)(short *buffer, int nb_samples); /* * Write a NULL terminated string of phoneme in the input buffer. * Return the number of chars actually written, or -1 on error. * If not successful, lastErrorStr_MBR() will provide the error reason. */ -int (WINAPI *write_MBR)(char *data); +extern int (WINAPI *write_MBR)(char *data); /* * Send a flush command to the mbrola input stream. @@ -73,17 +73,17 @@ int (WINAPI *write_MBR)(char *data); * or 0 on failure. If not successful, lastErrorStr_MBR() will provide * the error reason. */ -int (WINAPI *flush_MBR)(void); +extern int (WINAPI *flush_MBR)(void); /* * Return the audio sample frequency of the used voice database. */ -int (WINAPI *getFreq_MBR)(void); +extern int (WINAPI *getFreq_MBR)(void); /* * Overall volume. */ -void (WINAPI *setVolumeRatio_MBR)(float value); +extern void (WINAPI *setVolumeRatio_MBR)(float value); /* * Copy into 'buffer' at most 'bufsize' bytes from the latest error @@ -91,12 +91,12 @@ void (WINAPI *setVolumeRatio_MBR)(float value); * no error message is pending then an empty string is returned. * Consecutive calls to lastErrorStr_MBR() will return the same message. */ -char * (WINAPI *lastErrorStr_MBR)(char *buffer, int bufsize); +extern char * (WINAPI *lastErrorStr_MBR)(char *buffer, int bufsize); /* * Tolerance to missing diphones. */ -void (WINAPI *setNoError_MBR)(int no_error); +extern void (WINAPI *setNoError_MBR)(int no_error); BOOL load_MBR(void); void unload_MBR(void); From db79bd12ebeaed7cd3e03bc32c01320211174f25 Mon Sep 17 00:00:00 2001 From: yorkie Date: Thu, 15 Jun 2017 20:52:55 +0800 Subject: [PATCH 004/137] build, encoding: include stdint The stdint.h is not included when building test, then including this module inside encoding.h --- src/include/espeak-ng/encoding.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/include/espeak-ng/encoding.h b/src/include/espeak-ng/encoding.h index 640782a6..9cc8a5d8 100644 --- a/src/include/espeak-ng/encoding.h +++ b/src/include/espeak-ng/encoding.h @@ -17,6 +17,8 @@ #ifndef ESPEAK_NG_ENCODING_H #define ESPEAK_NG_ENCODING_H +#include + #ifdef __cplusplus extern "C" { From 65a1fa63e20246cd0120823a0b32d60f3f9793b7 Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Sun, 18 Jun 2017 23:38:28 +0300 Subject: [PATCH 005/137] Turkish: issue #247 fixed pronunciation for w --- dictsource/tr_list | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dictsource/tr_list b/dictsource/tr_list index aa3327d0..b7e70f15 100644 --- a/dictsource/tr_list +++ b/dictsource/tr_list @@ -30,7 +30,7 @@ t tE u u ü y v vE -w tS'ift||vE +w d'ab@LjU x iks y jE z zE From 06b702e94aac06c61ddb03e6367295d2f0b951af Mon Sep 17 00:00:00 2001 From: shadyar Date: Sat, 24 Jun 2017 11:43:47 +0430 Subject: [PATCH 006/137] debugging some rules --- dictsource/fa_rules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dictsource/fa_rules b/dictsource/fa_rules index 4a0b42eb..76ddff8e 100644 --- a/dictsource/fa_rules +++ b/dictsource/fa_rules @@ -1,5 +1,5 @@ -// * Farsi Language fa (or Parsi or Persian) fa_rules Version 3.133 -// * This file writen by Shadyar Khodayari 05-10-2017 +// * Farsi Language fa (or Parsi or Persian) fa_rules Version 3.134 +// * This file writen by Shadyar Khodayari 06-24-2017 //********* // * This program is free software; you can redistribute it and/or modify * // * it under the terms of the GNU General Public License as published by * @@ -4843,7 +4843,7 @@ L09L04) السّادات (_Sm8 ossAdAt L09L09L09L09) م (L03L09L09L09_ ma // Prefixes م - _) م (L03L09L03_$noprefixP1@ ma + _) م (L03L04L03_$noprefixP1@ ma _) می (L03L09+$noprefixP2@ mi _) می (آL09L09$noprefixP2@ mi _) می (وL09L09$noprefixP2@ mi From 042d1bf79d4dff4e59832f0caac58451bc0de33d Mon Sep 17 00:00:00 2001 From: shadyar Date: Sat, 24 Jun 2017 12:15:21 +0430 Subject: [PATCH 007/137] reading Persian was debugged through editing exceptional words. --- dictsource/fa_list | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dictsource/fa_list b/dictsource/fa_list index eeddbaed..cbb9e051 100644 --- a/dictsource/fa_list +++ b/dictsource/fa_list @@ -1,5 +1,5 @@ -// * Farsi Language fa (or Parsi or Persian) fa_list Version 3.133 -// * This file writen by Shadyar Khodayari and Ehsan Esmaili who has managed collecting exceptional words. 05-10-2017 +// * Farsi Language fa (or Parsi or Persian) fa_list Version 3.134 +// * This file writen by Shadyar Khodayari and Ehsan Esmaili who has managed collecting exceptional words. 06-24-2017 //********* // * This program is free software; you can redistribute it and/or modify * // * it under the terms of the GNU General Public License as published by * @@ -554,6 +554,7 @@ _) paRAntezbaste: آموخت Amuxt آموزد Amuzad آموزش AmuzeS +آمپر AmpeR آمپرمتر AmpeRmetR آمپلیفایر AmpelifAjeR آمپیریسم AmpiRism @@ -5055,7 +5056,6 @@ _) paRAntezbaste: درایه deRAje درایو deRAjv درایور deRAjveR -درباره daR'bAReje: دربازکن daRbAzkon دربدر daRbedaR دربندکشیده daRbandkeSide @@ -6809,6 +6809,7 @@ _) paRAntezbaste: شدیدا Sadidan شدیداللحن Sadidollahn شدیم Sodim +شراادی SA:_d:jA:_R شرافت SeRAfat شراپنل SeRApnel شراکت SeRAkat @@ -6816,7 +6817,6 @@ _) paRAntezbaste: شربت SaRbat شرت 'SoRt شرتکات SoRtkAt -شراادی SA:_d:jA:_R شرشر SeRSeR شرطه SoRte: شرعا SaR?an From da3ed3aa9bdd33aef50dad098de675fb2f498903 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 09:37:51 +0100 Subject: [PATCH 008/137] Update the CHANGELOG to include the emoji-data properties. --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cc0aae9..c59f9d22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,10 @@ # Change Log -## 9.0.0.1 - (In Progress) +## 10.0.0 - (In Progress) * Add `iswblank` and `iswxdigit` compatibility. * Improve ctype compatibility. -* PropList property lookup. +* PropList and emoji-data property lookup. ## 9.0.0 - 2016-12-28 From 6ff015f171e86a5a29e391baa6c7dbbff1ec87f5 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 10:03:51 +0100 Subject: [PATCH 009/137] Use curl's -o to save the data files. This will prevent writing the file if the command fails. --- Makefile.am | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile.am b/Makefile.am index fd7f3ed0..1d9931d1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -62,27 +62,27 @@ UCD_SRCDIR=http://www.unicode.org/Public data/emoji/emoji-data.txt: mkdir -pv data/emoji - curl ${UCD_SRCDIR}/emoji/${EMOJI_VERSION}/emoji-data.txt > $@ + curl ${UCD_SRCDIR}/emoji/${EMOJI_VERSION}/emoji-data.txt -o $@ data/ucd/PropList.txt: mkdir -pv data/ucd - curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/PropList.txt > $@ + curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/PropList.txt -o $@ data/ucd/DerivedCoreProperties.txt: mkdir -pv data/ucd - curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/DerivedCoreProperties.txt > $@ + curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/DerivedCoreProperties.txt -o $@ data/ucd/PropertyValueAliases.txt: mkdir -pv data/ucd - curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/PropertyValueAliases.txt > $@ + curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/PropertyValueAliases.txt -o $@ data/ucd/Scripts.txt: mkdir -pv data/ucd - curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/Scripts.txt > $@ + curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/Scripts.txt -o $@ data/ucd/UnicodeData.txt: mkdir -pv data/ucd - curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/UnicodeData.txt > $@ + curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/UnicodeData.txt -o $@ ############################# documentation ################################### From 0b56f2e5bcd66b7632bdca677c96380fc9c37375 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 11:45:36 +0100 Subject: [PATCH 010/137] Use C-style comments to support using a C89 compiler. --- CHANGELOG.md | 1 + src/case.c | 7 +- src/categories.c | 1245 ++++++++++++++++++++--------------------- src/ctype.c | 40 +- src/proplist.c | 88 +-- src/scripts.c | 1251 +++++++++++++++++++++--------------------- tests/printcdata.c | 48 +- tests/printucddata.c | 48 +- tools/case.py | 7 +- tools/categories.py | 15 +- tools/scripts.py | 15 +- 11 files changed, 1386 insertions(+), 1379 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c59f9d22..1ce304d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Add `iswblank` and `iswxdigit` compatibility. * Improve ctype compatibility. * PropList and emoji-data property lookup. +* Support building with a C89 compiler. ## 9.0.0 - 2016-12-28 diff --git a/src/case.c b/src/case.c index 3e46a56d..14a5e9aa 100644 --- a/src/case.c +++ b/src/case.c @@ -18,14 +18,15 @@ * along with ucd-tools. If not, see . */ -// NOTE: This file is automatically generated from the UnicodeData.txt file in -// the Unicode Character database by the ucd-tools/tools/categories.py script. +/* NOTE: This file is automatically generated from the UnicodeData.txt file in + * the Unicode Character database by the ucd-tools/tools/categories.py script. + */ #include "ucd/ucd.h" #include -// Unicode Character Data 9.0.0 +/* Unicode Character Data 9.0.0 */ struct case_conversion_entry { diff --git a/src/categories.c b/src/categories.c index 964ac416..6ec02144 100644 --- a/src/categories.c +++ b/src/categories.c @@ -18,8 +18,9 @@ * along with ucd-tools. If not, see . */ -// NOTE: This file is automatically generated from the UnicodeData.txt file in -// the Unicode Character database by the ucd-tools/tools/categories.py script. +/* NOTE: This file is automatically generated from the UnicodeData.txt file in + * the Unicode Character database by the ucd-tools/tools/categories.py script. + */ #include "ucd/ucd.h" @@ -57,7 +58,7 @@ #define Zs UCD_CATEGORY_Zs #define Ii UCD_CATEGORY_Ii -// Unicode Character Data 9.0.0 +/* Unicode Character Data 9.0.0 */ static const uint8_t categories_Cn[256] = { @@ -2698,11 +2699,11 @@ static const uint8_t *categories_000000_00D7FF[] = categories_000E00, categories_000F00, categories_001000, - categories_Lo, // 001100 + categories_Lo, /* 001100 */ categories_001200, categories_001300, categories_001400, - categories_Lo, // 001500 + categories_Lo, /* 001500 */ categories_001600, categories_001700, categories_001800, @@ -2715,15 +2716,15 @@ static const uint8_t *categories_000000_00D7FF[] = categories_001F00, categories_002000, categories_002100, - categories_Sm, // 002200 + categories_Sm, /* 002200 */ categories_002300, categories_002400, categories_002500, categories_002600, categories_002700, - categories_So, // 002800 + categories_So, /* 002800 */ categories_002900, - categories_Sm, // 002A00 + categories_Sm, /* 002A00 */ categories_002B00, categories_002C00, categories_002D00, @@ -2732,180 +2733,180 @@ static const uint8_t *categories_000000_00D7FF[] = categories_003000, categories_003100, categories_003200, - categories_So, // 003300 - categories_Lo, // 003400 - categories_Lo, // 003500 - categories_Lo, // 003600 - categories_Lo, // 003700 - categories_Lo, // 003800 - categories_Lo, // 003900 - categories_Lo, // 003A00 - categories_Lo, // 003B00 - categories_Lo, // 003C00 - categories_Lo, // 003D00 - categories_Lo, // 003E00 - categories_Lo, // 003F00 - categories_Lo, // 004000 - categories_Lo, // 004100 - categories_Lo, // 004200 - categories_Lo, // 004300 - categories_Lo, // 004400 - categories_Lo, // 004500 - categories_Lo, // 004600 - categories_Lo, // 004700 - categories_Lo, // 004800 - categories_Lo, // 004900 - categories_Lo, // 004A00 - categories_Lo, // 004B00 - categories_Lo, // 004C00 + categories_So, /* 003300 */ + categories_Lo, /* 003400 */ + categories_Lo, /* 003500 */ + categories_Lo, /* 003600 */ + categories_Lo, /* 003700 */ + categories_Lo, /* 003800 */ + categories_Lo, /* 003900 */ + categories_Lo, /* 003A00 */ + categories_Lo, /* 003B00 */ + categories_Lo, /* 003C00 */ + categories_Lo, /* 003D00 */ + categories_Lo, /* 003E00 */ + categories_Lo, /* 003F00 */ + categories_Lo, /* 004000 */ + categories_Lo, /* 004100 */ + categories_Lo, /* 004200 */ + categories_Lo, /* 004300 */ + categories_Lo, /* 004400 */ + categories_Lo, /* 004500 */ + categories_Lo, /* 004600 */ + categories_Lo, /* 004700 */ + categories_Lo, /* 004800 */ + categories_Lo, /* 004900 */ + categories_Lo, /* 004A00 */ + categories_Lo, /* 004B00 */ + categories_Lo, /* 004C00 */ categories_004D00, - categories_Lo, // 004E00 - categories_Lo, // 004F00 - categories_Lo, // 005000 - categories_Lo, // 005100 - categories_Lo, // 005200 - categories_Lo, // 005300 - categories_Lo, // 005400 - categories_Lo, // 005500 - categories_Lo, // 005600 - categories_Lo, // 005700 - categories_Lo, // 005800 - categories_Lo, // 005900 - categories_Lo, // 005A00 - categories_Lo, // 005B00 - categories_Lo, // 005C00 - categories_Lo, // 005D00 - categories_Lo, // 005E00 - categories_Lo, // 005F00 - categories_Lo, // 006000 - categories_Lo, // 006100 - categories_Lo, // 006200 - categories_Lo, // 006300 - categories_Lo, // 006400 - categories_Lo, // 006500 - categories_Lo, // 006600 - categories_Lo, // 006700 - categories_Lo, // 006800 - categories_Lo, // 006900 - categories_Lo, // 006A00 - categories_Lo, // 006B00 - categories_Lo, // 006C00 - categories_Lo, // 006D00 - categories_Lo, // 006E00 - categories_Lo, // 006F00 - categories_Lo, // 007000 - categories_Lo, // 007100 - categories_Lo, // 007200 - categories_Lo, // 007300 - categories_Lo, // 007400 - categories_Lo, // 007500 - categories_Lo, // 007600 - categories_Lo, // 007700 - categories_Lo, // 007800 - categories_Lo, // 007900 - categories_Lo, // 007A00 - categories_Lo, // 007B00 - categories_Lo, // 007C00 - categories_Lo, // 007D00 - categories_Lo, // 007E00 - categories_Lo, // 007F00 - categories_Lo, // 008000 - categories_Lo, // 008100 - categories_Lo, // 008200 - categories_Lo, // 008300 - categories_Lo, // 008400 - categories_Lo, // 008500 - categories_Lo, // 008600 - categories_Lo, // 008700 - categories_Lo, // 008800 - categories_Lo, // 008900 - categories_Lo, // 008A00 - categories_Lo, // 008B00 - categories_Lo, // 008C00 - categories_Lo, // 008D00 - categories_Lo, // 008E00 - categories_Lo, // 008F00 - categories_Lo, // 009000 - categories_Lo, // 009100 - categories_Lo, // 009200 - categories_Lo, // 009300 - categories_Lo, // 009400 - categories_Lo, // 009500 - categories_Lo, // 009600 - categories_Lo, // 009700 - categories_Lo, // 009800 - categories_Lo, // 009900 - categories_Lo, // 009A00 - categories_Lo, // 009B00 - categories_Lo, // 009C00 - categories_Lo, // 009D00 - categories_Lo, // 009E00 + categories_Lo, /* 004E00 */ + categories_Lo, /* 004F00 */ + categories_Lo, /* 005000 */ + categories_Lo, /* 005100 */ + categories_Lo, /* 005200 */ + categories_Lo, /* 005300 */ + categories_Lo, /* 005400 */ + categories_Lo, /* 005500 */ + categories_Lo, /* 005600 */ + categories_Lo, /* 005700 */ + categories_Lo, /* 005800 */ + categories_Lo, /* 005900 */ + categories_Lo, /* 005A00 */ + categories_Lo, /* 005B00 */ + categories_Lo, /* 005C00 */ + categories_Lo, /* 005D00 */ + categories_Lo, /* 005E00 */ + categories_Lo, /* 005F00 */ + categories_Lo, /* 006000 */ + categories_Lo, /* 006100 */ + categories_Lo, /* 006200 */ + categories_Lo, /* 006300 */ + categories_Lo, /* 006400 */ + categories_Lo, /* 006500 */ + categories_Lo, /* 006600 */ + categories_Lo, /* 006700 */ + categories_Lo, /* 006800 */ + categories_Lo, /* 006900 */ + categories_Lo, /* 006A00 */ + categories_Lo, /* 006B00 */ + categories_Lo, /* 006C00 */ + categories_Lo, /* 006D00 */ + categories_Lo, /* 006E00 */ + categories_Lo, /* 006F00 */ + categories_Lo, /* 007000 */ + categories_Lo, /* 007100 */ + categories_Lo, /* 007200 */ + categories_Lo, /* 007300 */ + categories_Lo, /* 007400 */ + categories_Lo, /* 007500 */ + categories_Lo, /* 007600 */ + categories_Lo, /* 007700 */ + categories_Lo, /* 007800 */ + categories_Lo, /* 007900 */ + categories_Lo, /* 007A00 */ + categories_Lo, /* 007B00 */ + categories_Lo, /* 007C00 */ + categories_Lo, /* 007D00 */ + categories_Lo, /* 007E00 */ + categories_Lo, /* 007F00 */ + categories_Lo, /* 008000 */ + categories_Lo, /* 008100 */ + categories_Lo, /* 008200 */ + categories_Lo, /* 008300 */ + categories_Lo, /* 008400 */ + categories_Lo, /* 008500 */ + categories_Lo, /* 008600 */ + categories_Lo, /* 008700 */ + categories_Lo, /* 008800 */ + categories_Lo, /* 008900 */ + categories_Lo, /* 008A00 */ + categories_Lo, /* 008B00 */ + categories_Lo, /* 008C00 */ + categories_Lo, /* 008D00 */ + categories_Lo, /* 008E00 */ + categories_Lo, /* 008F00 */ + categories_Lo, /* 009000 */ + categories_Lo, /* 009100 */ + categories_Lo, /* 009200 */ + categories_Lo, /* 009300 */ + categories_Lo, /* 009400 */ + categories_Lo, /* 009500 */ + categories_Lo, /* 009600 */ + categories_Lo, /* 009700 */ + categories_Lo, /* 009800 */ + categories_Lo, /* 009900 */ + categories_Lo, /* 009A00 */ + categories_Lo, /* 009B00 */ + categories_Lo, /* 009C00 */ + categories_Lo, /* 009D00 */ + categories_Lo, /* 009E00 */ categories_009F00, categories_00A000, - categories_Lo, // 00A100 - categories_Lo, // 00A200 - categories_Lo, // 00A300 + categories_Lo, /* 00A100 */ + categories_Lo, /* 00A200 */ + categories_Lo, /* 00A300 */ categories_00A400, - categories_Lo, // 00A500 + categories_Lo, /* 00A500 */ categories_00A600, categories_00A700, categories_00A800, categories_00A900, categories_00AA00, categories_00AB00, - categories_Lo, // 00AC00 - categories_Lo, // 00AD00 - categories_Lo, // 00AE00 - categories_Lo, // 00AF00 - categories_Lo, // 00B000 - categories_Lo, // 00B100 - categories_Lo, // 00B200 - categories_Lo, // 00B300 - categories_Lo, // 00B400 - categories_Lo, // 00B500 - categories_Lo, // 00B600 - categories_Lo, // 00B700 - categories_Lo, // 00B800 - categories_Lo, // 00B900 - categories_Lo, // 00BA00 - categories_Lo, // 00BB00 - categories_Lo, // 00BC00 - categories_Lo, // 00BD00 - categories_Lo, // 00BE00 - categories_Lo, // 00BF00 - categories_Lo, // 00C000 - categories_Lo, // 00C100 - categories_Lo, // 00C200 - categories_Lo, // 00C300 - categories_Lo, // 00C400 - categories_Lo, // 00C500 - categories_Lo, // 00C600 - categories_Lo, // 00C700 - categories_Lo, // 00C800 - categories_Lo, // 00C900 - categories_Lo, // 00CA00 - categories_Lo, // 00CB00 - categories_Lo, // 00CC00 - categories_Lo, // 00CD00 - categories_Lo, // 00CE00 - categories_Lo, // 00CF00 - categories_Lo, // 00D000 - categories_Lo, // 00D100 - categories_Lo, // 00D200 - categories_Lo, // 00D300 - categories_Lo, // 00D400 - categories_Lo, // 00D500 - categories_Lo, // 00D600 + categories_Lo, /* 00AC00 */ + categories_Lo, /* 00AD00 */ + categories_Lo, /* 00AE00 */ + categories_Lo, /* 00AF00 */ + categories_Lo, /* 00B000 */ + categories_Lo, /* 00B100 */ + categories_Lo, /* 00B200 */ + categories_Lo, /* 00B300 */ + categories_Lo, /* 00B400 */ + categories_Lo, /* 00B500 */ + categories_Lo, /* 00B600 */ + categories_Lo, /* 00B700 */ + categories_Lo, /* 00B800 */ + categories_Lo, /* 00B900 */ + categories_Lo, /* 00BA00 */ + categories_Lo, /* 00BB00 */ + categories_Lo, /* 00BC00 */ + categories_Lo, /* 00BD00 */ + categories_Lo, /* 00BE00 */ + categories_Lo, /* 00BF00 */ + categories_Lo, /* 00C000 */ + categories_Lo, /* 00C100 */ + categories_Lo, /* 00C200 */ + categories_Lo, /* 00C300 */ + categories_Lo, /* 00C400 */ + categories_Lo, /* 00C500 */ + categories_Lo, /* 00C600 */ + categories_Lo, /* 00C700 */ + categories_Lo, /* 00C800 */ + categories_Lo, /* 00C900 */ + categories_Lo, /* 00CA00 */ + categories_Lo, /* 00CB00 */ + categories_Lo, /* 00CC00 */ + categories_Lo, /* 00CD00 */ + categories_Lo, /* 00CE00 */ + categories_Lo, /* 00CF00 */ + categories_Lo, /* 00D000 */ + categories_Lo, /* 00D100 */ + categories_Lo, /* 00D200 */ + categories_Lo, /* 00D300 */ + categories_Lo, /* 00D400 */ + categories_Lo, /* 00D500 */ + categories_Lo, /* 00D600 */ categories_00D700, }; static const uint8_t *categories_00F800_02FAFF[] = { - categories_Co, // 00F800 - categories_Lo, // 00F900 + categories_Co, /* 00F800 */ + categories_Lo, /* 00F900 */ categories_00FA00, categories_00FB00, - categories_Lo, // 00FC00 + categories_Lo, /* 00FC00 */ categories_00FD00, categories_00FE00, categories_00FF00, @@ -2915,16 +2916,16 @@ static const uint8_t *categories_00F800_02FAFF[] = categories_010300, categories_010400, categories_010500, - categories_Lo, // 010600 + categories_Lo, /* 010600 */ categories_010700, categories_010800, categories_010900, categories_010A00, categories_010B00, categories_010C00, - categories_Cn, // 010D00 + categories_Cn, /* 010D00 */ categories_010E00, - categories_Cn, // 010F00 + categories_Cn, /* 010F00 */ categories_011000, categories_011100, categories_011200, @@ -2934,189 +2935,189 @@ static const uint8_t *categories_00F800_02FAFF[] = categories_011600, categories_011700, categories_011800, - categories_Cn, // 011900 + categories_Cn, /* 011900 */ categories_011A00, - categories_Cn, // 011B00 + categories_Cn, /* 011B00 */ categories_011C00, - categories_Cn, // 011D00 - categories_Cn, // 011E00 - categories_Cn, // 011F00 - categories_Lo, // 012000 - categories_Lo, // 012100 - categories_Lo, // 012200 + categories_Cn, /* 011D00 */ + categories_Cn, /* 011E00 */ + categories_Cn, /* 011F00 */ + categories_Lo, /* 012000 */ + categories_Lo, /* 012100 */ + categories_Lo, /* 012200 */ categories_012300, categories_012400, categories_012500, - categories_Cn, // 012600 - categories_Cn, // 012700 - categories_Cn, // 012800 - categories_Cn, // 012900 - categories_Cn, // 012A00 - categories_Cn, // 012B00 - categories_Cn, // 012C00 - categories_Cn, // 012D00 - categories_Cn, // 012E00 - categories_Cn, // 012F00 - categories_Lo, // 013000 - categories_Lo, // 013100 - categories_Lo, // 013200 - categories_Lo, // 013300 + categories_Cn, /* 012600 */ + categories_Cn, /* 012700 */ + categories_Cn, /* 012800 */ + categories_Cn, /* 012900 */ + categories_Cn, /* 012A00 */ + categories_Cn, /* 012B00 */ + categories_Cn, /* 012C00 */ + categories_Cn, /* 012D00 */ + categories_Cn, /* 012E00 */ + categories_Cn, /* 012F00 */ + categories_Lo, /* 013000 */ + categories_Lo, /* 013100 */ + categories_Lo, /* 013200 */ + categories_Lo, /* 013300 */ categories_013400, - categories_Cn, // 013500 - categories_Cn, // 013600 - categories_Cn, // 013700 - categories_Cn, // 013800 - categories_Cn, // 013900 - categories_Cn, // 013A00 - categories_Cn, // 013B00 - categories_Cn, // 013C00 - categories_Cn, // 013D00 - categories_Cn, // 013E00 - categories_Cn, // 013F00 - categories_Cn, // 014000 - categories_Cn, // 014100 - categories_Cn, // 014200 - categories_Cn, // 014300 - categories_Lo, // 014400 - categories_Lo, // 014500 + categories_Cn, /* 013500 */ + categories_Cn, /* 013600 */ + categories_Cn, /* 013700 */ + categories_Cn, /* 013800 */ + categories_Cn, /* 013900 */ + categories_Cn, /* 013A00 */ + categories_Cn, /* 013B00 */ + categories_Cn, /* 013C00 */ + categories_Cn, /* 013D00 */ + categories_Cn, /* 013E00 */ + categories_Cn, /* 013F00 */ + categories_Cn, /* 014000 */ + categories_Cn, /* 014100 */ + categories_Cn, /* 014200 */ + categories_Cn, /* 014300 */ + categories_Lo, /* 014400 */ + categories_Lo, /* 014500 */ categories_014600, - categories_Cn, // 014700 - categories_Cn, // 014800 - categories_Cn, // 014900 - categories_Cn, // 014A00 - categories_Cn, // 014B00 - categories_Cn, // 014C00 - categories_Cn, // 014D00 - categories_Cn, // 014E00 - categories_Cn, // 014F00 - categories_Cn, // 015000 - categories_Cn, // 015100 - categories_Cn, // 015200 - categories_Cn, // 015300 - categories_Cn, // 015400 - categories_Cn, // 015500 - categories_Cn, // 015600 - categories_Cn, // 015700 - categories_Cn, // 015800 - categories_Cn, // 015900 - categories_Cn, // 015A00 - categories_Cn, // 015B00 - categories_Cn, // 015C00 - categories_Cn, // 015D00 - categories_Cn, // 015E00 - categories_Cn, // 015F00 - categories_Cn, // 016000 - categories_Cn, // 016100 - categories_Cn, // 016200 - categories_Cn, // 016300 - categories_Cn, // 016400 - categories_Cn, // 016500 - categories_Cn, // 016600 - categories_Cn, // 016700 - categories_Lo, // 016800 - categories_Lo, // 016900 + categories_Cn, /* 014700 */ + categories_Cn, /* 014800 */ + categories_Cn, /* 014900 */ + categories_Cn, /* 014A00 */ + categories_Cn, /* 014B00 */ + categories_Cn, /* 014C00 */ + categories_Cn, /* 014D00 */ + categories_Cn, /* 014E00 */ + categories_Cn, /* 014F00 */ + categories_Cn, /* 015000 */ + categories_Cn, /* 015100 */ + categories_Cn, /* 015200 */ + categories_Cn, /* 015300 */ + categories_Cn, /* 015400 */ + categories_Cn, /* 015500 */ + categories_Cn, /* 015600 */ + categories_Cn, /* 015700 */ + categories_Cn, /* 015800 */ + categories_Cn, /* 015900 */ + categories_Cn, /* 015A00 */ + categories_Cn, /* 015B00 */ + categories_Cn, /* 015C00 */ + categories_Cn, /* 015D00 */ + categories_Cn, /* 015E00 */ + categories_Cn, /* 015F00 */ + categories_Cn, /* 016000 */ + categories_Cn, /* 016100 */ + categories_Cn, /* 016200 */ + categories_Cn, /* 016300 */ + categories_Cn, /* 016400 */ + categories_Cn, /* 016500 */ + categories_Cn, /* 016600 */ + categories_Cn, /* 016700 */ + categories_Lo, /* 016800 */ + categories_Lo, /* 016900 */ categories_016A00, categories_016B00, - categories_Cn, // 016C00 - categories_Cn, // 016D00 - categories_Cn, // 016E00 + categories_Cn, /* 016C00 */ + categories_Cn, /* 016D00 */ + categories_Cn, /* 016E00 */ categories_016F00, - categories_Lo, // 017000 - categories_Lo, // 017100 - categories_Lo, // 017200 - categories_Lo, // 017300 - categories_Lo, // 017400 - categories_Lo, // 017500 - categories_Lo, // 017600 - categories_Lo, // 017700 - categories_Lo, // 017800 - categories_Lo, // 017900 - categories_Lo, // 017A00 - categories_Lo, // 017B00 - categories_Lo, // 017C00 - categories_Lo, // 017D00 - categories_Lo, // 017E00 - categories_Lo, // 017F00 - categories_Lo, // 018000 - categories_Lo, // 018100 - categories_Lo, // 018200 - categories_Lo, // 018300 - categories_Lo, // 018400 - categories_Lo, // 018500 - categories_Lo, // 018600 + categories_Lo, /* 017000 */ + categories_Lo, /* 017100 */ + categories_Lo, /* 017200 */ + categories_Lo, /* 017300 */ + categories_Lo, /* 017400 */ + categories_Lo, /* 017500 */ + categories_Lo, /* 017600 */ + categories_Lo, /* 017700 */ + categories_Lo, /* 017800 */ + categories_Lo, /* 017900 */ + categories_Lo, /* 017A00 */ + categories_Lo, /* 017B00 */ + categories_Lo, /* 017C00 */ + categories_Lo, /* 017D00 */ + categories_Lo, /* 017E00 */ + categories_Lo, /* 017F00 */ + categories_Lo, /* 018000 */ + categories_Lo, /* 018100 */ + categories_Lo, /* 018200 */ + categories_Lo, /* 018300 */ + categories_Lo, /* 018400 */ + categories_Lo, /* 018500 */ + categories_Lo, /* 018600 */ categories_018700, - categories_Lo, // 018800 - categories_Lo, // 018900 + categories_Lo, /* 018800 */ + categories_Lo, /* 018900 */ categories_018A00, - categories_Cn, // 018B00 - categories_Cn, // 018C00 - categories_Cn, // 018D00 - categories_Cn, // 018E00 - categories_Cn, // 018F00 - categories_Cn, // 019000 - categories_Cn, // 019100 - categories_Cn, // 019200 - categories_Cn, // 019300 - categories_Cn, // 019400 - categories_Cn, // 019500 - categories_Cn, // 019600 - categories_Cn, // 019700 - categories_Cn, // 019800 - categories_Cn, // 019900 - categories_Cn, // 019A00 - categories_Cn, // 019B00 - categories_Cn, // 019C00 - categories_Cn, // 019D00 - categories_Cn, // 019E00 - categories_Cn, // 019F00 - categories_Cn, // 01A000 - categories_Cn, // 01A100 - categories_Cn, // 01A200 - categories_Cn, // 01A300 - categories_Cn, // 01A400 - categories_Cn, // 01A500 - categories_Cn, // 01A600 - categories_Cn, // 01A700 - categories_Cn, // 01A800 - categories_Cn, // 01A900 - categories_Cn, // 01AA00 - categories_Cn, // 01AB00 - categories_Cn, // 01AC00 - categories_Cn, // 01AD00 - categories_Cn, // 01AE00 - categories_Cn, // 01AF00 + categories_Cn, /* 018B00 */ + categories_Cn, /* 018C00 */ + categories_Cn, /* 018D00 */ + categories_Cn, /* 018E00 */ + categories_Cn, /* 018F00 */ + categories_Cn, /* 019000 */ + categories_Cn, /* 019100 */ + categories_Cn, /* 019200 */ + categories_Cn, /* 019300 */ + categories_Cn, /* 019400 */ + categories_Cn, /* 019500 */ + categories_Cn, /* 019600 */ + categories_Cn, /* 019700 */ + categories_Cn, /* 019800 */ + categories_Cn, /* 019900 */ + categories_Cn, /* 019A00 */ + categories_Cn, /* 019B00 */ + categories_Cn, /* 019C00 */ + categories_Cn, /* 019D00 */ + categories_Cn, /* 019E00 */ + categories_Cn, /* 019F00 */ + categories_Cn, /* 01A000 */ + categories_Cn, /* 01A100 */ + categories_Cn, /* 01A200 */ + categories_Cn, /* 01A300 */ + categories_Cn, /* 01A400 */ + categories_Cn, /* 01A500 */ + categories_Cn, /* 01A600 */ + categories_Cn, /* 01A700 */ + categories_Cn, /* 01A800 */ + categories_Cn, /* 01A900 */ + categories_Cn, /* 01AA00 */ + categories_Cn, /* 01AB00 */ + categories_Cn, /* 01AC00 */ + categories_Cn, /* 01AD00 */ + categories_Cn, /* 01AE00 */ + categories_Cn, /* 01AF00 */ categories_01B000, - categories_Cn, // 01B100 - categories_Cn, // 01B200 - categories_Cn, // 01B300 - categories_Cn, // 01B400 - categories_Cn, // 01B500 - categories_Cn, // 01B600 - categories_Cn, // 01B700 - categories_Cn, // 01B800 - categories_Cn, // 01B900 - categories_Cn, // 01BA00 - categories_Cn, // 01BB00 + categories_Cn, /* 01B100 */ + categories_Cn, /* 01B200 */ + categories_Cn, /* 01B300 */ + categories_Cn, /* 01B400 */ + categories_Cn, /* 01B500 */ + categories_Cn, /* 01B600 */ + categories_Cn, /* 01B700 */ + categories_Cn, /* 01B800 */ + categories_Cn, /* 01B900 */ + categories_Cn, /* 01BA00 */ + categories_Cn, /* 01BB00 */ categories_01BC00, - categories_Cn, // 01BD00 - categories_Cn, // 01BE00 - categories_Cn, // 01BF00 - categories_Cn, // 01C000 - categories_Cn, // 01C100 - categories_Cn, // 01C200 - categories_Cn, // 01C300 - categories_Cn, // 01C400 - categories_Cn, // 01C500 - categories_Cn, // 01C600 - categories_Cn, // 01C700 - categories_Cn, // 01C800 - categories_Cn, // 01C900 - categories_Cn, // 01CA00 - categories_Cn, // 01CB00 - categories_Cn, // 01CC00 - categories_Cn, // 01CD00 - categories_Cn, // 01CE00 - categories_Cn, // 01CF00 + categories_Cn, /* 01BD00 */ + categories_Cn, /* 01BE00 */ + categories_Cn, /* 01BF00 */ + categories_Cn, /* 01C000 */ + categories_Cn, /* 01C100 */ + categories_Cn, /* 01C200 */ + categories_Cn, /* 01C300 */ + categories_Cn, /* 01C400 */ + categories_Cn, /* 01C500 */ + categories_Cn, /* 01C600 */ + categories_Cn, /* 01C700 */ + categories_Cn, /* 01C800 */ + categories_Cn, /* 01C900 */ + categories_Cn, /* 01CA00 */ + categories_Cn, /* 01CB00 */ + categories_Cn, /* 01CC00 */ + categories_Cn, /* 01CD00 */ + categories_Cn, /* 01CE00 */ + categories_Cn, /* 01CF00 */ categories_01D000, categories_01D100, categories_01D200, @@ -3125,296 +3126,296 @@ static const uint8_t *categories_00F800_02FAFF[] = categories_01D500, categories_01D600, categories_01D700, - categories_So, // 01D800 - categories_So, // 01D900 + categories_So, /* 01D800 */ + categories_So, /* 01D900 */ categories_01DA00, - categories_Cn, // 01DB00 - categories_Cn, // 01DC00 - categories_Cn, // 01DD00 - categories_Cn, // 01DE00 - categories_Cn, // 01DF00 + categories_Cn, /* 01DB00 */ + categories_Cn, /* 01DC00 */ + categories_Cn, /* 01DD00 */ + categories_Cn, /* 01DE00 */ + categories_Cn, /* 01DF00 */ categories_01E000, - categories_Cn, // 01E100 - categories_Cn, // 01E200 - categories_Cn, // 01E300 - categories_Cn, // 01E400 - categories_Cn, // 01E500 - categories_Cn, // 01E600 - categories_Cn, // 01E700 + categories_Cn, /* 01E100 */ + categories_Cn, /* 01E200 */ + categories_Cn, /* 01E300 */ + categories_Cn, /* 01E400 */ + categories_Cn, /* 01E500 */ + categories_Cn, /* 01E600 */ + categories_Cn, /* 01E700 */ categories_01E800, categories_01E900, - categories_Cn, // 01EA00 - categories_Cn, // 01EB00 - categories_Cn, // 01EC00 - categories_Cn, // 01ED00 + categories_Cn, /* 01EA00 */ + categories_Cn, /* 01EB00 */ + categories_Cn, /* 01EC00 */ + categories_Cn, /* 01ED00 */ categories_01EE00, - categories_Cn, // 01EF00 + categories_Cn, /* 01EF00 */ categories_01F000, categories_01F100, categories_01F200, categories_01F300, - categories_So, // 01F400 - categories_So, // 01F500 + categories_So, /* 01F400 */ + categories_So, /* 01F500 */ categories_01F600, categories_01F700, categories_01F800, categories_01F900, - categories_Cn, // 01FA00 - categories_Cn, // 01FB00 - categories_Cn, // 01FC00 - categories_Cn, // 01FD00 - categories_Cn, // 01FE00 - categories_Cn, // 01FF00 - categories_Lo, // 020000 - categories_Lo, // 020100 - categories_Lo, // 020200 - categories_Lo, // 020300 - categories_Lo, // 020400 - categories_Lo, // 020500 - categories_Lo, // 020600 - categories_Lo, // 020700 - categories_Lo, // 020800 - categories_Lo, // 020900 - categories_Lo, // 020A00 - categories_Lo, // 020B00 - categories_Lo, // 020C00 - categories_Lo, // 020D00 - categories_Lo, // 020E00 - categories_Lo, // 020F00 - categories_Lo, // 021000 - categories_Lo, // 021100 - categories_Lo, // 021200 - categories_Lo, // 021300 - categories_Lo, // 021400 - categories_Lo, // 021500 - categories_Lo, // 021600 - categories_Lo, // 021700 - categories_Lo, // 021800 - categories_Lo, // 021900 - categories_Lo, // 021A00 - categories_Lo, // 021B00 - categories_Lo, // 021C00 - categories_Lo, // 021D00 - categories_Lo, // 021E00 - categories_Lo, // 021F00 - categories_Lo, // 022000 - categories_Lo, // 022100 - categories_Lo, // 022200 - categories_Lo, // 022300 - categories_Lo, // 022400 - categories_Lo, // 022500 - categories_Lo, // 022600 - categories_Lo, // 022700 - categories_Lo, // 022800 - categories_Lo, // 022900 - categories_Lo, // 022A00 - categories_Lo, // 022B00 - categories_Lo, // 022C00 - categories_Lo, // 022D00 - categories_Lo, // 022E00 - categories_Lo, // 022F00 - categories_Lo, // 023000 - categories_Lo, // 023100 - categories_Lo, // 023200 - categories_Lo, // 023300 - categories_Lo, // 023400 - categories_Lo, // 023500 - categories_Lo, // 023600 - categories_Lo, // 023700 - categories_Lo, // 023800 - categories_Lo, // 023900 - categories_Lo, // 023A00 - categories_Lo, // 023B00 - categories_Lo, // 023C00 - categories_Lo, // 023D00 - categories_Lo, // 023E00 - categories_Lo, // 023F00 - categories_Lo, // 024000 - categories_Lo, // 024100 - categories_Lo, // 024200 - categories_Lo, // 024300 - categories_Lo, // 024400 - categories_Lo, // 024500 - categories_Lo, // 024600 - categories_Lo, // 024700 - categories_Lo, // 024800 - categories_Lo, // 024900 - categories_Lo, // 024A00 - categories_Lo, // 024B00 - categories_Lo, // 024C00 - categories_Lo, // 024D00 - categories_Lo, // 024E00 - categories_Lo, // 024F00 - categories_Lo, // 025000 - categories_Lo, // 025100 - categories_Lo, // 025200 - categories_Lo, // 025300 - categories_Lo, // 025400 - categories_Lo, // 025500 - categories_Lo, // 025600 - categories_Lo, // 025700 - categories_Lo, // 025800 - categories_Lo, // 025900 - categories_Lo, // 025A00 - categories_Lo, // 025B00 - categories_Lo, // 025C00 - categories_Lo, // 025D00 - categories_Lo, // 025E00 - categories_Lo, // 025F00 - categories_Lo, // 026000 - categories_Lo, // 026100 - categories_Lo, // 026200 - categories_Lo, // 026300 - categories_Lo, // 026400 - categories_Lo, // 026500 - categories_Lo, // 026600 - categories_Lo, // 026700 - categories_Lo, // 026800 - categories_Lo, // 026900 - categories_Lo, // 026A00 - categories_Lo, // 026B00 - categories_Lo, // 026C00 - categories_Lo, // 026D00 - categories_Lo, // 026E00 - categories_Lo, // 026F00 - categories_Lo, // 027000 - categories_Lo, // 027100 - categories_Lo, // 027200 - categories_Lo, // 027300 - categories_Lo, // 027400 - categories_Lo, // 027500 - categories_Lo, // 027600 - categories_Lo, // 027700 - categories_Lo, // 027800 - categories_Lo, // 027900 - categories_Lo, // 027A00 - categories_Lo, // 027B00 - categories_Lo, // 027C00 - categories_Lo, // 027D00 - categories_Lo, // 027E00 - categories_Lo, // 027F00 - categories_Lo, // 028000 - categories_Lo, // 028100 - categories_Lo, // 028200 - categories_Lo, // 028300 - categories_Lo, // 028400 - categories_Lo, // 028500 - categories_Lo, // 028600 - categories_Lo, // 028700 - categories_Lo, // 028800 - categories_Lo, // 028900 - categories_Lo, // 028A00 - categories_Lo, // 028B00 - categories_Lo, // 028C00 - categories_Lo, // 028D00 - categories_Lo, // 028E00 - categories_Lo, // 028F00 - categories_Lo, // 029000 - categories_Lo, // 029100 - categories_Lo, // 029200 - categories_Lo, // 029300 - categories_Lo, // 029400 - categories_Lo, // 029500 - categories_Lo, // 029600 - categories_Lo, // 029700 - categories_Lo, // 029800 - categories_Lo, // 029900 - categories_Lo, // 029A00 - categories_Lo, // 029B00 - categories_Lo, // 029C00 - categories_Lo, // 029D00 - categories_Lo, // 029E00 - categories_Lo, // 029F00 - categories_Lo, // 02A000 - categories_Lo, // 02A100 - categories_Lo, // 02A200 - categories_Lo, // 02A300 - categories_Lo, // 02A400 - categories_Lo, // 02A500 + categories_Cn, /* 01FA00 */ + categories_Cn, /* 01FB00 */ + categories_Cn, /* 01FC00 */ + categories_Cn, /* 01FD00 */ + categories_Cn, /* 01FE00 */ + categories_Cn, /* 01FF00 */ + categories_Lo, /* 020000 */ + categories_Lo, /* 020100 */ + categories_Lo, /* 020200 */ + categories_Lo, /* 020300 */ + categories_Lo, /* 020400 */ + categories_Lo, /* 020500 */ + categories_Lo, /* 020600 */ + categories_Lo, /* 020700 */ + categories_Lo, /* 020800 */ + categories_Lo, /* 020900 */ + categories_Lo, /* 020A00 */ + categories_Lo, /* 020B00 */ + categories_Lo, /* 020C00 */ + categories_Lo, /* 020D00 */ + categories_Lo, /* 020E00 */ + categories_Lo, /* 020F00 */ + categories_Lo, /* 021000 */ + categories_Lo, /* 021100 */ + categories_Lo, /* 021200 */ + categories_Lo, /* 021300 */ + categories_Lo, /* 021400 */ + categories_Lo, /* 021500 */ + categories_Lo, /* 021600 */ + categories_Lo, /* 021700 */ + categories_Lo, /* 021800 */ + categories_Lo, /* 021900 */ + categories_Lo, /* 021A00 */ + categories_Lo, /* 021B00 */ + categories_Lo, /* 021C00 */ + categories_Lo, /* 021D00 */ + categories_Lo, /* 021E00 */ + categories_Lo, /* 021F00 */ + categories_Lo, /* 022000 */ + categories_Lo, /* 022100 */ + categories_Lo, /* 022200 */ + categories_Lo, /* 022300 */ + categories_Lo, /* 022400 */ + categories_Lo, /* 022500 */ + categories_Lo, /* 022600 */ + categories_Lo, /* 022700 */ + categories_Lo, /* 022800 */ + categories_Lo, /* 022900 */ + categories_Lo, /* 022A00 */ + categories_Lo, /* 022B00 */ + categories_Lo, /* 022C00 */ + categories_Lo, /* 022D00 */ + categories_Lo, /* 022E00 */ + categories_Lo, /* 022F00 */ + categories_Lo, /* 023000 */ + categories_Lo, /* 023100 */ + categories_Lo, /* 023200 */ + categories_Lo, /* 023300 */ + categories_Lo, /* 023400 */ + categories_Lo, /* 023500 */ + categories_Lo, /* 023600 */ + categories_Lo, /* 023700 */ + categories_Lo, /* 023800 */ + categories_Lo, /* 023900 */ + categories_Lo, /* 023A00 */ + categories_Lo, /* 023B00 */ + categories_Lo, /* 023C00 */ + categories_Lo, /* 023D00 */ + categories_Lo, /* 023E00 */ + categories_Lo, /* 023F00 */ + categories_Lo, /* 024000 */ + categories_Lo, /* 024100 */ + categories_Lo, /* 024200 */ + categories_Lo, /* 024300 */ + categories_Lo, /* 024400 */ + categories_Lo, /* 024500 */ + categories_Lo, /* 024600 */ + categories_Lo, /* 024700 */ + categories_Lo, /* 024800 */ + categories_Lo, /* 024900 */ + categories_Lo, /* 024A00 */ + categories_Lo, /* 024B00 */ + categories_Lo, /* 024C00 */ + categories_Lo, /* 024D00 */ + categories_Lo, /* 024E00 */ + categories_Lo, /* 024F00 */ + categories_Lo, /* 025000 */ + categories_Lo, /* 025100 */ + categories_Lo, /* 025200 */ + categories_Lo, /* 025300 */ + categories_Lo, /* 025400 */ + categories_Lo, /* 025500 */ + categories_Lo, /* 025600 */ + categories_Lo, /* 025700 */ + categories_Lo, /* 025800 */ + categories_Lo, /* 025900 */ + categories_Lo, /* 025A00 */ + categories_Lo, /* 025B00 */ + categories_Lo, /* 025C00 */ + categories_Lo, /* 025D00 */ + categories_Lo, /* 025E00 */ + categories_Lo, /* 025F00 */ + categories_Lo, /* 026000 */ + categories_Lo, /* 026100 */ + categories_Lo, /* 026200 */ + categories_Lo, /* 026300 */ + categories_Lo, /* 026400 */ + categories_Lo, /* 026500 */ + categories_Lo, /* 026600 */ + categories_Lo, /* 026700 */ + categories_Lo, /* 026800 */ + categories_Lo, /* 026900 */ + categories_Lo, /* 026A00 */ + categories_Lo, /* 026B00 */ + categories_Lo, /* 026C00 */ + categories_Lo, /* 026D00 */ + categories_Lo, /* 026E00 */ + categories_Lo, /* 026F00 */ + categories_Lo, /* 027000 */ + categories_Lo, /* 027100 */ + categories_Lo, /* 027200 */ + categories_Lo, /* 027300 */ + categories_Lo, /* 027400 */ + categories_Lo, /* 027500 */ + categories_Lo, /* 027600 */ + categories_Lo, /* 027700 */ + categories_Lo, /* 027800 */ + categories_Lo, /* 027900 */ + categories_Lo, /* 027A00 */ + categories_Lo, /* 027B00 */ + categories_Lo, /* 027C00 */ + categories_Lo, /* 027D00 */ + categories_Lo, /* 027E00 */ + categories_Lo, /* 027F00 */ + categories_Lo, /* 028000 */ + categories_Lo, /* 028100 */ + categories_Lo, /* 028200 */ + categories_Lo, /* 028300 */ + categories_Lo, /* 028400 */ + categories_Lo, /* 028500 */ + categories_Lo, /* 028600 */ + categories_Lo, /* 028700 */ + categories_Lo, /* 028800 */ + categories_Lo, /* 028900 */ + categories_Lo, /* 028A00 */ + categories_Lo, /* 028B00 */ + categories_Lo, /* 028C00 */ + categories_Lo, /* 028D00 */ + categories_Lo, /* 028E00 */ + categories_Lo, /* 028F00 */ + categories_Lo, /* 029000 */ + categories_Lo, /* 029100 */ + categories_Lo, /* 029200 */ + categories_Lo, /* 029300 */ + categories_Lo, /* 029400 */ + categories_Lo, /* 029500 */ + categories_Lo, /* 029600 */ + categories_Lo, /* 029700 */ + categories_Lo, /* 029800 */ + categories_Lo, /* 029900 */ + categories_Lo, /* 029A00 */ + categories_Lo, /* 029B00 */ + categories_Lo, /* 029C00 */ + categories_Lo, /* 029D00 */ + categories_Lo, /* 029E00 */ + categories_Lo, /* 029F00 */ + categories_Lo, /* 02A000 */ + categories_Lo, /* 02A100 */ + categories_Lo, /* 02A200 */ + categories_Lo, /* 02A300 */ + categories_Lo, /* 02A400 */ + categories_Lo, /* 02A500 */ categories_02A600, - categories_Lo, // 02A700 - categories_Lo, // 02A800 - categories_Lo, // 02A900 - categories_Lo, // 02AA00 - categories_Lo, // 02AB00 - categories_Lo, // 02AC00 - categories_Lo, // 02AD00 - categories_Lo, // 02AE00 - categories_Lo, // 02AF00 - categories_Lo, // 02B000 - categories_Lo, // 02B100 - categories_Lo, // 02B200 - categories_Lo, // 02B300 - categories_Lo, // 02B400 - categories_Lo, // 02B500 - categories_Lo, // 02B600 + categories_Lo, /* 02A700 */ + categories_Lo, /* 02A800 */ + categories_Lo, /* 02A900 */ + categories_Lo, /* 02AA00 */ + categories_Lo, /* 02AB00 */ + categories_Lo, /* 02AC00 */ + categories_Lo, /* 02AD00 */ + categories_Lo, /* 02AE00 */ + categories_Lo, /* 02AF00 */ + categories_Lo, /* 02B000 */ + categories_Lo, /* 02B100 */ + categories_Lo, /* 02B200 */ + categories_Lo, /* 02B300 */ + categories_Lo, /* 02B400 */ + categories_Lo, /* 02B500 */ + categories_Lo, /* 02B600 */ categories_02B700, categories_02B800, - categories_Lo, // 02B900 - categories_Lo, // 02BA00 - categories_Lo, // 02BB00 - categories_Lo, // 02BC00 - categories_Lo, // 02BD00 - categories_Lo, // 02BE00 - categories_Lo, // 02BF00 - categories_Lo, // 02C000 - categories_Lo, // 02C100 - categories_Lo, // 02C200 - categories_Lo, // 02C300 - categories_Lo, // 02C400 - categories_Lo, // 02C500 - categories_Lo, // 02C600 - categories_Lo, // 02C700 - categories_Lo, // 02C800 - categories_Lo, // 02C900 - categories_Lo, // 02CA00 - categories_Lo, // 02CB00 - categories_Lo, // 02CC00 - categories_Lo, // 02CD00 + categories_Lo, /* 02B900 */ + categories_Lo, /* 02BA00 */ + categories_Lo, /* 02BB00 */ + categories_Lo, /* 02BC00 */ + categories_Lo, /* 02BD00 */ + categories_Lo, /* 02BE00 */ + categories_Lo, /* 02BF00 */ + categories_Lo, /* 02C000 */ + categories_Lo, /* 02C100 */ + categories_Lo, /* 02C200 */ + categories_Lo, /* 02C300 */ + categories_Lo, /* 02C400 */ + categories_Lo, /* 02C500 */ + categories_Lo, /* 02C600 */ + categories_Lo, /* 02C700 */ + categories_Lo, /* 02C800 */ + categories_Lo, /* 02C900 */ + categories_Lo, /* 02CA00 */ + categories_Lo, /* 02CB00 */ + categories_Lo, /* 02CC00 */ + categories_Lo, /* 02CD00 */ categories_02CE00, - categories_Cn, // 02CF00 - categories_Cn, // 02D000 - categories_Cn, // 02D100 - categories_Cn, // 02D200 - categories_Cn, // 02D300 - categories_Cn, // 02D400 - categories_Cn, // 02D500 - categories_Cn, // 02D600 - categories_Cn, // 02D700 - categories_Cn, // 02D800 - categories_Cn, // 02D900 - categories_Cn, // 02DA00 - categories_Cn, // 02DB00 - categories_Cn, // 02DC00 - categories_Cn, // 02DD00 - categories_Cn, // 02DE00 - categories_Cn, // 02DF00 - categories_Cn, // 02E000 - categories_Cn, // 02E100 - categories_Cn, // 02E200 - categories_Cn, // 02E300 - categories_Cn, // 02E400 - categories_Cn, // 02E500 - categories_Cn, // 02E600 - categories_Cn, // 02E700 - categories_Cn, // 02E800 - categories_Cn, // 02E900 - categories_Cn, // 02EA00 - categories_Cn, // 02EB00 - categories_Cn, // 02EC00 - categories_Cn, // 02ED00 - categories_Cn, // 02EE00 - categories_Cn, // 02EF00 - categories_Cn, // 02F000 - categories_Cn, // 02F100 - categories_Cn, // 02F200 - categories_Cn, // 02F300 - categories_Cn, // 02F400 - categories_Cn, // 02F500 - categories_Cn, // 02F600 - categories_Cn, // 02F700 - categories_Lo, // 02F800 - categories_Lo, // 02F900 + categories_Cn, /* 02CF00 */ + categories_Cn, /* 02D000 */ + categories_Cn, /* 02D100 */ + categories_Cn, /* 02D200 */ + categories_Cn, /* 02D300 */ + categories_Cn, /* 02D400 */ + categories_Cn, /* 02D500 */ + categories_Cn, /* 02D600 */ + categories_Cn, /* 02D700 */ + categories_Cn, /* 02D800 */ + categories_Cn, /* 02D900 */ + categories_Cn, /* 02DA00 */ + categories_Cn, /* 02DB00 */ + categories_Cn, /* 02DC00 */ + categories_Cn, /* 02DD00 */ + categories_Cn, /* 02DE00 */ + categories_Cn, /* 02DF00 */ + categories_Cn, /* 02E000 */ + categories_Cn, /* 02E100 */ + categories_Cn, /* 02E200 */ + categories_Cn, /* 02E300 */ + categories_Cn, /* 02E400 */ + categories_Cn, /* 02E500 */ + categories_Cn, /* 02E600 */ + categories_Cn, /* 02E700 */ + categories_Cn, /* 02E800 */ + categories_Cn, /* 02E900 */ + categories_Cn, /* 02EA00 */ + categories_Cn, /* 02EB00 */ + categories_Cn, /* 02EC00 */ + categories_Cn, /* 02ED00 */ + categories_Cn, /* 02EE00 */ + categories_Cn, /* 02EF00 */ + categories_Cn, /* 02F000 */ + categories_Cn, /* 02F100 */ + categories_Cn, /* 02F200 */ + categories_Cn, /* 02F300 */ + categories_Cn, /* 02F400 */ + categories_Cn, /* 02F500 */ + categories_Cn, /* 02F600 */ + categories_Cn, /* 02F700 */ + categories_Lo, /* 02F800 */ + categories_Lo, /* 02F900 */ categories_02FA00, }; @@ -3426,30 +3427,30 @@ static const uint8_t *categories_0E0000_0E01FF[] = ucd_category ucd_lookup_category(codepoint_t c) { - if (c <= 0x00D7FF) // 000000..00D7FF + if (c <= 0x00D7FF) /* 000000..00D7FF */ { const uint8_t *table = categories_000000_00D7FF[(c - 0x000000) / 256]; return (ucd_category)table[c % 256]; } - if (c <= 0x00DFFF) return Cs; // 00D800..00DFFF : Surrogates - if (c <= 0x00F7FF) return Co; // 00E000..00F7FF : Private Use Area - if (c <= 0x02FAFF) // 00F800..02FAFF + if (c <= 0x00DFFF) return Cs; /* 00D800..00DFFF : Surrogates */ + if (c <= 0x00F7FF) return Co; /* 00E000..00F7FF : Private Use Area */ + if (c <= 0x02FAFF) /* 00F800..02FAFF */ { const uint8_t *table = categories_00F800_02FAFF[(c - 0x00F800) / 256]; return (ucd_category)table[c % 256]; } - if (c <= 0x0DFFFF) return Cn; // 02FB00..0DFFFF : Unassigned - if (c <= 0x0E01FF) // 0E0000..0E01FF + if (c <= 0x0DFFFF) return Cn; /* 02FB00..0DFFFF : Unassigned */ + if (c <= 0x0E01FF) /* 0E0000..0E01FF */ { const uint8_t *table = categories_0E0000_0E01FF[(c - 0x0E0000) / 256]; return (ucd_category)table[c % 256]; } - if (c <= 0x0EFFFF) return Cn; // 0E0200..0EFFFF : Unassigned - if (c <= 0x0FFFFD) return Co; // 0F0000..0FFFFD : Plane 15 Private Use - if (c <= 0x0FFFFF) return Cn; // 0FFFFE..0FFFFF : Plane 15 Private Use - if (c <= 0x10FFFD) return Co; // 100000..10FFFD : Plane 16 Private Use - if (c <= 0x10FFFF) return Cn; // 10FFFE..10FFFF : Plane 16 Private Use - return Ii; // Invalid Unicode Codepoint + if (c <= 0x0EFFFF) return Cn; /* 0E0200..0EFFFF : Unassigned */ + if (c <= 0x0FFFFD) return Co; /* 0F0000..0FFFFD : Plane 15 Private Use */ + if (c <= 0x0FFFFF) return Cn; /* 0FFFFE..0FFFFF : Plane 15 Private Use */ + if (c <= 0x10FFFD) return Co; /* 100000..10FFFD : Plane 16 Private Use */ + if (c <= 0x10FFFF) return Cn; /* 10FFFE..10FFFF : Plane 16 Private Use */ + return Ii; /* Invalid Unicode Codepoint */ } ucd_category_group ucd_get_category_group_for_category(ucd_category c) diff --git a/src/ctype.c b/src/ctype.c index 5c8b025c..42bb9f58 100644 --- a/src/ctype.c +++ b/src/ctype.c @@ -69,16 +69,16 @@ int ucd_isblank(codepoint_t c) switch (ucd_lookup_category(c)) { case UCD_CATEGORY_Zs: - switch (c) // Exclude characters with the DispositionType + switch (c) /* Exclude characters with the DispositionType */ { - case 0x00A0: // U+00A0 : NO-BREAK SPACE - case 0x2007: // U+2007 : FIGURE SPACE - case 0x202F: // U+202F : NARROW NO-BREAK SPACE + case 0x00A0: /* U+00A0 : NO-BREAK SPACE */ + case 0x2007: /* U+2007 : FIGURE SPACE */ + case 0x202F: /* U+202F : NARROW NO-BREAK SPACE */ return 0; } return 1; case UCD_CATEGORY_Cc: - return c == 0x09; // U+0009 : CHARACTER TABULATION + return c == 0x09; /* U+0009 : CHARACTER TABULATION */ default: return 0; } @@ -91,7 +91,7 @@ int ucd_iscntrl(codepoint_t c) int ucd_isdigit(codepoint_t c) { - return (c >= 0x30 && c <= 0x39); // [0-9] + return (c >= 0x30 && c <= 0x39); /* [0-9] */ } int ucd_isgraph(codepoint_t c) @@ -174,23 +174,23 @@ int ucd_isspace(codepoint_t c) case UCD_CATEGORY_Zp: return 1; case UCD_CATEGORY_Zs: - switch (c) // Exclude characters with the DispositionType + switch (c) /* Exclude characters with the DispositionType */ { - case 0x00A0: // U+00A0 : NO-BREAK SPACE - case 0x2007: // U+2007 : FIGURE SPACE - case 0x202F: // U+202F : NARROW NO-BREAK SPACE + case 0x00A0: /* U+00A0 : NO-BREAK SPACE */ + case 0x2007: /* U+2007 : FIGURE SPACE */ + case 0x202F: /* U+202F : NARROW NO-BREAK SPACE */ return 0; } return 1; case UCD_CATEGORY_Cc: - switch (c) // Include control characters marked as White_Space + switch (c) /* Include control characters marked as White_Space */ { - case 0x09: // U+0009 : CHARACTER TABULATION - case 0x0A: // U+000A : LINE FEED - case 0x0B: // U+000B : LINE TABULATION - case 0x0C: // U+000C : FORM FEED - case 0x0D: // U+000D : CARRIAGE RETURN - case 0x85: // U+0085 : NEXT LINE + case 0x09: /* U+0009 : CHARACTER TABULATION */ + case 0x0A: /* U+000A : LINE FEED */ + case 0x0B: /* U+000B : LINE TABULATION */ + case 0x0C: /* U+000C : FORM FEED */ + case 0x0D: /* U+000D : CARRIAGE RETURN */ + case 0x85: /* U+0085 : NEXT LINE */ return 1; } default: @@ -217,7 +217,7 @@ int ucd_isupper(codepoint_t c) int ucd_isxdigit(codepoint_t c) { - return (c >= 0x30 && c <= 0x39) // [0-9] - || (c >= 0x41 && c <= 0x46) // [A-Z] - || (c >= 0x61 && c <= 0x66); // [a-z] + return (c >= 0x30 && c <= 0x39) /* [0-9] */ + || (c >= 0x41 && c <= 0x46) /* [A-Z] */ + || (c >= 0x61 && c <= 0x66); /* [a-z] */ } diff --git a/src/proplist.c b/src/proplist.c index 97a6f076..c0229512 100644 --- a/src/proplist.c +++ b/src/proplist.c @@ -142,11 +142,11 @@ static ucd_property properties_Ll(codepoint_t c) if (c == 0x029D) return UCD_PROPERTY_SOFT_DOTTED; break; case 0x0300: - if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c == 0x03D5) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x03F0 && c <= 0x03F1) return UCD_PROPERTY_OTHER_MATH; if (c == 0x03F3) return UCD_PROPERTY_SOFT_DOTTED; - if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; case 0x0400: if (c == 0x0456) return UCD_PROPERTY_SOFT_DOTTED; @@ -160,12 +160,12 @@ static ucd_property properties_Ll(codepoint_t c) if (c == 0x1ECB) return UCD_PROPERTY_SOFT_DOTTED; break; case 0x2100: - if (c >= 0x210A && c <= 0x2113) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x212F && c <= 0x2131) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x2133 && c <= 0x2134) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x210A && c <= 0x2113) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x212F && c <= 0x2131) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x2133 && c <= 0x2134) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c == 0x2139) return UCD_PROPERTY_EMOJI; - if (c >= 0x213C && c <= 0x213F) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x2145 && c <= 0x2147) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x213C && c <= 0x213F) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x2145 && c <= 0x2147) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x2148 && c <= 0x2149) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; break; case 0xFF00: @@ -173,45 +173,45 @@ static ucd_property properties_Ll(codepoint_t c) break; case 0x01D400: if (c >= 0x01D422 && c <= 0x01D423) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; - if (c >= 0x01D400 && c <= 0x01D454) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D400 && c <= 0x01D454) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D456 && c <= 0x01D457) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; if (c >= 0x01D48A && c <= 0x01D48B) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; - if (c >= 0x01D458 && c <= 0x01D49C) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x01D4AE && c <= 0x01D4B9) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D458 && c <= 0x01D49C) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x01D4AE && c <= 0x01D4B9) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c == 0x01D4BB) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x01D4BE && c <= 0x01D4BF) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; if (c >= 0x01D4BD && c <= 0x01D4C3) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x01D4F2 && c <= 0x01D4F3) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; - if (c >= 0x01D4C5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D4C5) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; case 0x01D500: - if (c <= 0x01D505) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c <= 0x01D505) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D526 && c <= 0x01D527) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; - if (c >= 0x01D51E && c <= 0x01D539) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D51E && c <= 0x01D539) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D55A && c <= 0x01D55B) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; if (c >= 0x01D58E && c <= 0x01D58F) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; if (c >= 0x01D5C2 && c <= 0x01D5C3) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; if (c >= 0x01D5F6 && c <= 0x01D5F7) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; - if (c >= 0x01D552) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D552) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; case 0x01D600: if (c >= 0x01D62A && c <= 0x01D62B) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; if (c >= 0x01D65E && c <= 0x01D65F) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; if (c >= 0x01D692 && c <= 0x01D693) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_SOFT_DOTTED; - if (c <= 0x01D6A5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c <= 0x01D6A5) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D6C2 && c <= 0x01D6DA) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D6DC && c <= 0x01D6FA) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D6DC && c <= 0x01D6FA) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D6FC) return UCD_PROPERTY_OTHER_MATH; break; case 0x01D700: if (c <= 0x01D714) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D716 && c <= 0x01D734) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D716 && c <= 0x01D734) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D736 && c <= 0x01D74E) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D750 && c <= 0x01D76E) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D750 && c <= 0x01D76E) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D770 && c <= 0x01D788) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D78A && c <= 0x01D7A8) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D78A && c <= 0x01D7A8) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D7AA && c <= 0x01D7C2) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D7C4 && c <= 0x01D7CB) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D7C4 && c <= 0x01D7CB) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; } return 0; @@ -427,8 +427,8 @@ static ucd_property properties_Lu(codepoint_t c) if (c >= 0x0041 && c <= 0x0046) return UCD_PROPERTY_HEX_DIGIT | UCD_PROPERTY_ASCII_HEX_DIGIT; break; case 0x0300: - if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; case 0xFF00: if (c >= 0xFF21 && c <= 0xFF26) return UCD_PROPERTY_HEX_DIGIT; @@ -436,49 +436,49 @@ static ucd_property properties_Lu(codepoint_t c) case 0x2100: if (c == 0x2102) return UCD_PROPERTY_OTHER_MATH; if (c == 0x2107) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x210A && c <= 0x2113) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x210A && c <= 0x2113) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c == 0x2115) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x2119 && c <= 0x211D) return UCD_PROPERTY_OTHER_MATH; if (c == 0x2124) return UCD_PROPERTY_OTHER_MATH; if (c == 0x2128) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x212C && c <= 0x212D) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x212F && c <= 0x2131) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x2133 && c <= 0x2134) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x213C && c <= 0x213F) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x2145 && c <= 0x2149) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x212F && c <= 0x2131) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x2133 && c <= 0x2134) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x213C && c <= 0x213F) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x2145 && c <= 0x2149) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; case 0x01D400: - if (c >= 0x01D400 && c <= 0x01D454) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x01D456 && c <= 0x01D49C) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D400 && c <= 0x01D454) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x01D456 && c <= 0x01D49C) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D49E && c <= 0x01D49F) return UCD_PROPERTY_OTHER_MATH; if (c == 0x01D4A2) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x01D4A5 && c <= 0x01D4A6) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x01D4A9 && c <= 0x01D4AC) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D4AE && c <= 0x01D4B9) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x01D4C5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D4AE && c <= 0x01D4B9) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x01D4C5) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; case 0x01D500: - if (c <= 0x01D505) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c <= 0x01D505) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D507 && c <= 0x01D50A) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x01D50D && c <= 0x01D514) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x01D516 && c <= 0x01D51C) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D51E && c <= 0x01D539) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D51E && c <= 0x01D539) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D53B && c <= 0x01D53E) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x01D540 && c <= 0x01D544) return UCD_PROPERTY_OTHER_MATH; if (c == 0x01D546) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x01D54A && c <= 0x01D550) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D552) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D552) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; case 0x01D600: - if (c <= 0x01D6A5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c <= 0x01D6A5) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ if (c >= 0x01D6A8 && c <= 0x01D6C0) return UCD_PROPERTY_OTHER_MATH; - if (c >= 0x01D6DC && c <= 0x01D6FA) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D6DC && c <= 0x01D6FA) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; case 0x01D700: - if (c >= 0x01D716 && c <= 0x01D734) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x01D750 && c <= 0x01D76E) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x01D78A && c <= 0x01D7A8) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu - if (c >= 0x01D7C4 && c <= 0x01D7CB) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu + if (c >= 0x01D716 && c <= 0x01D734) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x01D750 && c <= 0x01D76E) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x01D78A && c <= 0x01D7A8) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ + if (c >= 0x01D7C4 && c <= 0x01D7CB) return UCD_PROPERTY_OTHER_MATH; /* Ll|Lu */ break; } return 0; @@ -1262,10 +1262,10 @@ static ucd_property properties_Pe(codepoint_t c) break; case 0x2700: if (c == 0x27C6) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; - if (c >= 0x27E6 && c <= 0x27EF) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; // Pe|Ps + if (c >= 0x27E6 && c <= 0x27EF) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; /* Pe|Ps */ return UCD_PROPERTY_PATTERN_SYNTAX; case 0x2900: - return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; // Pe|Ps + return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; /* Pe|Ps */ case 0x2E00: return UCD_PROPERTY_PATTERN_SYNTAX; case 0x3000: @@ -1585,7 +1585,7 @@ static ucd_property properties_Ps(codepoint_t c) break; case 0x2700: if (c == 0x27C5) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; - if (c >= 0x27E6 && c <= 0x27EF) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; // Pe|Ps + if (c >= 0x27E6 && c <= 0x27EF) return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; /* Pe|Ps */ return UCD_PROPERTY_PATTERN_SYNTAX; case 0x2900: return UCD_PROPERTY_OTHER_MATH | UCD_PROPERTY_PATTERN_SYNTAX; @@ -2048,6 +2048,6 @@ ucd_property ucd_properties(codepoint_t c, ucd_category category) case UCD_CATEGORY_Zl: return UCD_PROPERTY_WHITE_SPACE | UCD_PROPERTY_PATTERN_WHITE_SPACE; case UCD_CATEGORY_Zp: return UCD_PROPERTY_WHITE_SPACE | UCD_PROPERTY_PATTERN_WHITE_SPACE; case UCD_CATEGORY_Zs: return properties_Zs(c); - default: return 0; // Co Cs Ii Lt Me + default: return 0; /* Co Cs Ii Lt Me */ }; } diff --git a/src/scripts.c b/src/scripts.c index 17254607..f5883d12 100644 --- a/src/scripts.c +++ b/src/scripts.c @@ -18,8 +18,9 @@ * along with ucd-tools. If not, see . */ -// NOTE: This file is automatically generated from the Scripts.txt file in -// the Unicode Character database by the ucd-tools/tools/scripts.py script. +/* NOTE: This file is automatically generated from the Scripts.txt file in + * the Unicode Character database by the ucd-tools/tools/scripts.py script. + */ #include "ucd/ucd.h" @@ -199,7 +200,7 @@ #define Zyyy UCD_SCRIPT_Zyyy #define Zzzz UCD_SCRIPT_Zzzz -// Unicode Character Data 9.0.0 +/* Unicode Character Data 9.0.0 */ static const uint8_t scripts_Latn[256] = { @@ -2904,7 +2905,7 @@ static const uint8_t scripts_0E0100[256] = static const uint8_t *scripts_000000_00D7FF[] = { scripts_000000, - scripts_Latn, // 000100 + scripts_Latn, /* 000100 */ scripts_000200, scripts_000300, scripts_000400, @@ -2920,11 +2921,11 @@ static const uint8_t *scripts_000000_00D7FF[] = scripts_000E00, scripts_000F00, scripts_001000, - scripts_Hang, // 001100 + scripts_Hang, /* 001100 */ scripts_001200, scripts_001300, - scripts_Cans, // 001400 - scripts_Cans, // 001500 + scripts_Cans, /* 001400 */ + scripts_Cans, /* 001500 */ scripts_001600, scripts_001700, scripts_001800, @@ -2933,19 +2934,19 @@ static const uint8_t *scripts_000000_00D7FF[] = scripts_001B00, scripts_001C00, scripts_001D00, - scripts_Latn, // 001E00 + scripts_Latn, /* 001E00 */ scripts_001F00, scripts_002000, scripts_002100, - scripts_Zyyy, // 002200 + scripts_Zyyy, /* 002200 */ scripts_002300, scripts_002400, - scripts_Zyyy, // 002500 - scripts_Zyyy, // 002600 - scripts_Zyyy, // 002700 - scripts_Brai, // 002800 - scripts_Zyyy, // 002900 - scripts_Zyyy, // 002A00 + scripts_Zyyy, /* 002500 */ + scripts_Zyyy, /* 002600 */ + scripts_Zyyy, /* 002700 */ + scripts_Brai, /* 002800 */ + scripts_Zyyy, /* 002900 */ + scripts_Zyyy, /* 002A00 */ scripts_002B00, scripts_002C00, scripts_002D00, @@ -2955,179 +2956,179 @@ static const uint8_t *scripts_000000_00D7FF[] = scripts_003100, scripts_003200, scripts_003300, - scripts_Hani, // 003400 - scripts_Hani, // 003500 - scripts_Hani, // 003600 - scripts_Hani, // 003700 - scripts_Hani, // 003800 - scripts_Hani, // 003900 - scripts_Hani, // 003A00 - scripts_Hani, // 003B00 - scripts_Hani, // 003C00 - scripts_Hani, // 003D00 - scripts_Hani, // 003E00 - scripts_Hani, // 003F00 - scripts_Hani, // 004000 - scripts_Hani, // 004100 - scripts_Hani, // 004200 - scripts_Hani, // 004300 - scripts_Hani, // 004400 - scripts_Hani, // 004500 - scripts_Hani, // 004600 - scripts_Hani, // 004700 - scripts_Hani, // 004800 - scripts_Hani, // 004900 - scripts_Hani, // 004A00 - scripts_Hani, // 004B00 - scripts_Hani, // 004C00 + scripts_Hani, /* 003400 */ + scripts_Hani, /* 003500 */ + scripts_Hani, /* 003600 */ + scripts_Hani, /* 003700 */ + scripts_Hani, /* 003800 */ + scripts_Hani, /* 003900 */ + scripts_Hani, /* 003A00 */ + scripts_Hani, /* 003B00 */ + scripts_Hani, /* 003C00 */ + scripts_Hani, /* 003D00 */ + scripts_Hani, /* 003E00 */ + scripts_Hani, /* 003F00 */ + scripts_Hani, /* 004000 */ + scripts_Hani, /* 004100 */ + scripts_Hani, /* 004200 */ + scripts_Hani, /* 004300 */ + scripts_Hani, /* 004400 */ + scripts_Hani, /* 004500 */ + scripts_Hani, /* 004600 */ + scripts_Hani, /* 004700 */ + scripts_Hani, /* 004800 */ + scripts_Hani, /* 004900 */ + scripts_Hani, /* 004A00 */ + scripts_Hani, /* 004B00 */ + scripts_Hani, /* 004C00 */ scripts_004D00, - scripts_Hani, // 004E00 - scripts_Hani, // 004F00 - scripts_Hani, // 005000 - scripts_Hani, // 005100 - scripts_Hani, // 005200 - scripts_Hani, // 005300 - scripts_Hani, // 005400 - scripts_Hani, // 005500 - scripts_Hani, // 005600 - scripts_Hani, // 005700 - scripts_Hani, // 005800 - scripts_Hani, // 005900 - scripts_Hani, // 005A00 - scripts_Hani, // 005B00 - scripts_Hani, // 005C00 - scripts_Hani, // 005D00 - scripts_Hani, // 005E00 - scripts_Hani, // 005F00 - scripts_Hani, // 006000 - scripts_Hani, // 006100 - scripts_Hani, // 006200 - scripts_Hani, // 006300 - scripts_Hani, // 006400 - scripts_Hani, // 006500 - scripts_Hani, // 006600 - scripts_Hani, // 006700 - scripts_Hani, // 006800 - scripts_Hani, // 006900 - scripts_Hani, // 006A00 - scripts_Hani, // 006B00 - scripts_Hani, // 006C00 - scripts_Hani, // 006D00 - scripts_Hani, // 006E00 - scripts_Hani, // 006F00 - scripts_Hani, // 007000 - scripts_Hani, // 007100 - scripts_Hani, // 007200 - scripts_Hani, // 007300 - scripts_Hani, // 007400 - scripts_Hani, // 007500 - scripts_Hani, // 007600 - scripts_Hani, // 007700 - scripts_Hani, // 007800 - scripts_Hani, // 007900 - scripts_Hani, // 007A00 - scripts_Hani, // 007B00 - scripts_Hani, // 007C00 - scripts_Hani, // 007D00 - scripts_Hani, // 007E00 - scripts_Hani, // 007F00 - scripts_Hani, // 008000 - scripts_Hani, // 008100 - scripts_Hani, // 008200 - scripts_Hani, // 008300 - scripts_Hani, // 008400 - scripts_Hani, // 008500 - scripts_Hani, // 008600 - scripts_Hani, // 008700 - scripts_Hani, // 008800 - scripts_Hani, // 008900 - scripts_Hani, // 008A00 - scripts_Hani, // 008B00 - scripts_Hani, // 008C00 - scripts_Hani, // 008D00 - scripts_Hani, // 008E00 - scripts_Hani, // 008F00 - scripts_Hani, // 009000 - scripts_Hani, // 009100 - scripts_Hani, // 009200 - scripts_Hani, // 009300 - scripts_Hani, // 009400 - scripts_Hani, // 009500 - scripts_Hani, // 009600 - scripts_Hani, // 009700 - scripts_Hani, // 009800 - scripts_Hani, // 009900 - scripts_Hani, // 009A00 - scripts_Hani, // 009B00 - scripts_Hani, // 009C00 - scripts_Hani, // 009D00 - scripts_Hani, // 009E00 + scripts_Hani, /* 004E00 */ + scripts_Hani, /* 004F00 */ + scripts_Hani, /* 005000 */ + scripts_Hani, /* 005100 */ + scripts_Hani, /* 005200 */ + scripts_Hani, /* 005300 */ + scripts_Hani, /* 005400 */ + scripts_Hani, /* 005500 */ + scripts_Hani, /* 005600 */ + scripts_Hani, /* 005700 */ + scripts_Hani, /* 005800 */ + scripts_Hani, /* 005900 */ + scripts_Hani, /* 005A00 */ + scripts_Hani, /* 005B00 */ + scripts_Hani, /* 005C00 */ + scripts_Hani, /* 005D00 */ + scripts_Hani, /* 005E00 */ + scripts_Hani, /* 005F00 */ + scripts_Hani, /* 006000 */ + scripts_Hani, /* 006100 */ + scripts_Hani, /* 006200 */ + scripts_Hani, /* 006300 */ + scripts_Hani, /* 006400 */ + scripts_Hani, /* 006500 */ + scripts_Hani, /* 006600 */ + scripts_Hani, /* 006700 */ + scripts_Hani, /* 006800 */ + scripts_Hani, /* 006900 */ + scripts_Hani, /* 006A00 */ + scripts_Hani, /* 006B00 */ + scripts_Hani, /* 006C00 */ + scripts_Hani, /* 006D00 */ + scripts_Hani, /* 006E00 */ + scripts_Hani, /* 006F00 */ + scripts_Hani, /* 007000 */ + scripts_Hani, /* 007100 */ + scripts_Hani, /* 007200 */ + scripts_Hani, /* 007300 */ + scripts_Hani, /* 007400 */ + scripts_Hani, /* 007500 */ + scripts_Hani, /* 007600 */ + scripts_Hani, /* 007700 */ + scripts_Hani, /* 007800 */ + scripts_Hani, /* 007900 */ + scripts_Hani, /* 007A00 */ + scripts_Hani, /* 007B00 */ + scripts_Hani, /* 007C00 */ + scripts_Hani, /* 007D00 */ + scripts_Hani, /* 007E00 */ + scripts_Hani, /* 007F00 */ + scripts_Hani, /* 008000 */ + scripts_Hani, /* 008100 */ + scripts_Hani, /* 008200 */ + scripts_Hani, /* 008300 */ + scripts_Hani, /* 008400 */ + scripts_Hani, /* 008500 */ + scripts_Hani, /* 008600 */ + scripts_Hani, /* 008700 */ + scripts_Hani, /* 008800 */ + scripts_Hani, /* 008900 */ + scripts_Hani, /* 008A00 */ + scripts_Hani, /* 008B00 */ + scripts_Hani, /* 008C00 */ + scripts_Hani, /* 008D00 */ + scripts_Hani, /* 008E00 */ + scripts_Hani, /* 008F00 */ + scripts_Hani, /* 009000 */ + scripts_Hani, /* 009100 */ + scripts_Hani, /* 009200 */ + scripts_Hani, /* 009300 */ + scripts_Hani, /* 009400 */ + scripts_Hani, /* 009500 */ + scripts_Hani, /* 009600 */ + scripts_Hani, /* 009700 */ + scripts_Hani, /* 009800 */ + scripts_Hani, /* 009900 */ + scripts_Hani, /* 009A00 */ + scripts_Hani, /* 009B00 */ + scripts_Hani, /* 009C00 */ + scripts_Hani, /* 009D00 */ + scripts_Hani, /* 009E00 */ scripts_009F00, - scripts_Yiii, // 00A000 - scripts_Yiii, // 00A100 - scripts_Yiii, // 00A200 - scripts_Yiii, // 00A300 + scripts_Yiii, /* 00A000 */ + scripts_Yiii, /* 00A100 */ + scripts_Yiii, /* 00A200 */ + scripts_Yiii, /* 00A300 */ scripts_00A400, - scripts_Vaii, // 00A500 + scripts_Vaii, /* 00A500 */ scripts_00A600, scripts_00A700, scripts_00A800, scripts_00A900, scripts_00AA00, scripts_00AB00, - scripts_Hang, // 00AC00 - scripts_Hang, // 00AD00 - scripts_Hang, // 00AE00 - scripts_Hang, // 00AF00 - scripts_Hang, // 00B000 - scripts_Hang, // 00B100 - scripts_Hang, // 00B200 - scripts_Hang, // 00B300 - scripts_Hang, // 00B400 - scripts_Hang, // 00B500 - scripts_Hang, // 00B600 - scripts_Hang, // 00B700 - scripts_Hang, // 00B800 - scripts_Hang, // 00B900 - scripts_Hang, // 00BA00 - scripts_Hang, // 00BB00 - scripts_Hang, // 00BC00 - scripts_Hang, // 00BD00 - scripts_Hang, // 00BE00 - scripts_Hang, // 00BF00 - scripts_Hang, // 00C000 - scripts_Hang, // 00C100 - scripts_Hang, // 00C200 - scripts_Hang, // 00C300 - scripts_Hang, // 00C400 - scripts_Hang, // 00C500 - scripts_Hang, // 00C600 - scripts_Hang, // 00C700 - scripts_Hang, // 00C800 - scripts_Hang, // 00C900 - scripts_Hang, // 00CA00 - scripts_Hang, // 00CB00 - scripts_Hang, // 00CC00 - scripts_Hang, // 00CD00 - scripts_Hang, // 00CE00 - scripts_Hang, // 00CF00 - scripts_Hang, // 00D000 - scripts_Hang, // 00D100 - scripts_Hang, // 00D200 - scripts_Hang, // 00D300 - scripts_Hang, // 00D400 - scripts_Hang, // 00D500 - scripts_Hang, // 00D600 + scripts_Hang, /* 00AC00 */ + scripts_Hang, /* 00AD00 */ + scripts_Hang, /* 00AE00 */ + scripts_Hang, /* 00AF00 */ + scripts_Hang, /* 00B000 */ + scripts_Hang, /* 00B100 */ + scripts_Hang, /* 00B200 */ + scripts_Hang, /* 00B300 */ + scripts_Hang, /* 00B400 */ + scripts_Hang, /* 00B500 */ + scripts_Hang, /* 00B600 */ + scripts_Hang, /* 00B700 */ + scripts_Hang, /* 00B800 */ + scripts_Hang, /* 00B900 */ + scripts_Hang, /* 00BA00 */ + scripts_Hang, /* 00BB00 */ + scripts_Hang, /* 00BC00 */ + scripts_Hang, /* 00BD00 */ + scripts_Hang, /* 00BE00 */ + scripts_Hang, /* 00BF00 */ + scripts_Hang, /* 00C000 */ + scripts_Hang, /* 00C100 */ + scripts_Hang, /* 00C200 */ + scripts_Hang, /* 00C300 */ + scripts_Hang, /* 00C400 */ + scripts_Hang, /* 00C500 */ + scripts_Hang, /* 00C600 */ + scripts_Hang, /* 00C700 */ + scripts_Hang, /* 00C800 */ + scripts_Hang, /* 00C900 */ + scripts_Hang, /* 00CA00 */ + scripts_Hang, /* 00CB00 */ + scripts_Hang, /* 00CC00 */ + scripts_Hang, /* 00CD00 */ + scripts_Hang, /* 00CE00 */ + scripts_Hang, /* 00CF00 */ + scripts_Hang, /* 00D000 */ + scripts_Hang, /* 00D100 */ + scripts_Hang, /* 00D200 */ + scripts_Hang, /* 00D300 */ + scripts_Hang, /* 00D400 */ + scripts_Hang, /* 00D500 */ + scripts_Hang, /* 00D600 */ scripts_00D700, }; static const uint8_t *scripts_00F800_02FAFF[] = { - scripts_Zzzz, // 00F800 - scripts_Hani, // 00F900 + scripts_Zzzz, /* 00F800 */ + scripts_Hani, /* 00F900 */ scripts_00FA00, scripts_00FB00, - scripts_Arab, // 00FC00 + scripts_Arab, /* 00FC00 */ scripts_00FD00, scripts_00FE00, scripts_00FF00, @@ -3137,16 +3138,16 @@ static const uint8_t *scripts_00F800_02FAFF[] = scripts_010300, scripts_010400, scripts_010500, - scripts_Lina, // 010600 + scripts_Lina, /* 010600 */ scripts_010700, scripts_010800, scripts_010900, scripts_010A00, scripts_010B00, scripts_010C00, - scripts_Zzzz, // 010D00 + scripts_Zzzz, /* 010D00 */ scripts_010E00, - scripts_Zzzz, // 010F00 + scripts_Zzzz, /* 010F00 */ scripts_011000, scripts_011100, scripts_011200, @@ -3156,189 +3157,189 @@ static const uint8_t *scripts_00F800_02FAFF[] = scripts_011600, scripts_011700, scripts_011800, - scripts_Zzzz, // 011900 + scripts_Zzzz, /* 011900 */ scripts_011A00, - scripts_Zzzz, // 011B00 + scripts_Zzzz, /* 011B00 */ scripts_011C00, - scripts_Zzzz, // 011D00 - scripts_Zzzz, // 011E00 - scripts_Zzzz, // 011F00 - scripts_Xsux, // 012000 - scripts_Xsux, // 012100 - scripts_Xsux, // 012200 + scripts_Zzzz, /* 011D00 */ + scripts_Zzzz, /* 011E00 */ + scripts_Zzzz, /* 011F00 */ + scripts_Xsux, /* 012000 */ + scripts_Xsux, /* 012100 */ + scripts_Xsux, /* 012200 */ scripts_012300, scripts_012400, scripts_012500, - scripts_Zzzz, // 012600 - scripts_Zzzz, // 012700 - scripts_Zzzz, // 012800 - scripts_Zzzz, // 012900 - scripts_Zzzz, // 012A00 - scripts_Zzzz, // 012B00 - scripts_Zzzz, // 012C00 - scripts_Zzzz, // 012D00 - scripts_Zzzz, // 012E00 - scripts_Zzzz, // 012F00 - scripts_Egyp, // 013000 - scripts_Egyp, // 013100 - scripts_Egyp, // 013200 - scripts_Egyp, // 013300 + scripts_Zzzz, /* 012600 */ + scripts_Zzzz, /* 012700 */ + scripts_Zzzz, /* 012800 */ + scripts_Zzzz, /* 012900 */ + scripts_Zzzz, /* 012A00 */ + scripts_Zzzz, /* 012B00 */ + scripts_Zzzz, /* 012C00 */ + scripts_Zzzz, /* 012D00 */ + scripts_Zzzz, /* 012E00 */ + scripts_Zzzz, /* 012F00 */ + scripts_Egyp, /* 013000 */ + scripts_Egyp, /* 013100 */ + scripts_Egyp, /* 013200 */ + scripts_Egyp, /* 013300 */ scripts_013400, - scripts_Zzzz, // 013500 - scripts_Zzzz, // 013600 - scripts_Zzzz, // 013700 - scripts_Zzzz, // 013800 - scripts_Zzzz, // 013900 - scripts_Zzzz, // 013A00 - scripts_Zzzz, // 013B00 - scripts_Zzzz, // 013C00 - scripts_Zzzz, // 013D00 - scripts_Zzzz, // 013E00 - scripts_Zzzz, // 013F00 - scripts_Zzzz, // 014000 - scripts_Zzzz, // 014100 - scripts_Zzzz, // 014200 - scripts_Zzzz, // 014300 - scripts_Hluw, // 014400 - scripts_Hluw, // 014500 + scripts_Zzzz, /* 013500 */ + scripts_Zzzz, /* 013600 */ + scripts_Zzzz, /* 013700 */ + scripts_Zzzz, /* 013800 */ + scripts_Zzzz, /* 013900 */ + scripts_Zzzz, /* 013A00 */ + scripts_Zzzz, /* 013B00 */ + scripts_Zzzz, /* 013C00 */ + scripts_Zzzz, /* 013D00 */ + scripts_Zzzz, /* 013E00 */ + scripts_Zzzz, /* 013F00 */ + scripts_Zzzz, /* 014000 */ + scripts_Zzzz, /* 014100 */ + scripts_Zzzz, /* 014200 */ + scripts_Zzzz, /* 014300 */ + scripts_Hluw, /* 014400 */ + scripts_Hluw, /* 014500 */ scripts_014600, - scripts_Zzzz, // 014700 - scripts_Zzzz, // 014800 - scripts_Zzzz, // 014900 - scripts_Zzzz, // 014A00 - scripts_Zzzz, // 014B00 - scripts_Zzzz, // 014C00 - scripts_Zzzz, // 014D00 - scripts_Zzzz, // 014E00 - scripts_Zzzz, // 014F00 - scripts_Zzzz, // 015000 - scripts_Zzzz, // 015100 - scripts_Zzzz, // 015200 - scripts_Zzzz, // 015300 - scripts_Zzzz, // 015400 - scripts_Zzzz, // 015500 - scripts_Zzzz, // 015600 - scripts_Zzzz, // 015700 - scripts_Zzzz, // 015800 - scripts_Zzzz, // 015900 - scripts_Zzzz, // 015A00 - scripts_Zzzz, // 015B00 - scripts_Zzzz, // 015C00 - scripts_Zzzz, // 015D00 - scripts_Zzzz, // 015E00 - scripts_Zzzz, // 015F00 - scripts_Zzzz, // 016000 - scripts_Zzzz, // 016100 - scripts_Zzzz, // 016200 - scripts_Zzzz, // 016300 - scripts_Zzzz, // 016400 - scripts_Zzzz, // 016500 - scripts_Zzzz, // 016600 - scripts_Zzzz, // 016700 - scripts_Bamu, // 016800 - scripts_Bamu, // 016900 + scripts_Zzzz, /* 014700 */ + scripts_Zzzz, /* 014800 */ + scripts_Zzzz, /* 014900 */ + scripts_Zzzz, /* 014A00 */ + scripts_Zzzz, /* 014B00 */ + scripts_Zzzz, /* 014C00 */ + scripts_Zzzz, /* 014D00 */ + scripts_Zzzz, /* 014E00 */ + scripts_Zzzz, /* 014F00 */ + scripts_Zzzz, /* 015000 */ + scripts_Zzzz, /* 015100 */ + scripts_Zzzz, /* 015200 */ + scripts_Zzzz, /* 015300 */ + scripts_Zzzz, /* 015400 */ + scripts_Zzzz, /* 015500 */ + scripts_Zzzz, /* 015600 */ + scripts_Zzzz, /* 015700 */ + scripts_Zzzz, /* 015800 */ + scripts_Zzzz, /* 015900 */ + scripts_Zzzz, /* 015A00 */ + scripts_Zzzz, /* 015B00 */ + scripts_Zzzz, /* 015C00 */ + scripts_Zzzz, /* 015D00 */ + scripts_Zzzz, /* 015E00 */ + scripts_Zzzz, /* 015F00 */ + scripts_Zzzz, /* 016000 */ + scripts_Zzzz, /* 016100 */ + scripts_Zzzz, /* 016200 */ + scripts_Zzzz, /* 016300 */ + scripts_Zzzz, /* 016400 */ + scripts_Zzzz, /* 016500 */ + scripts_Zzzz, /* 016600 */ + scripts_Zzzz, /* 016700 */ + scripts_Bamu, /* 016800 */ + scripts_Bamu, /* 016900 */ scripts_016A00, scripts_016B00, - scripts_Zzzz, // 016C00 - scripts_Zzzz, // 016D00 - scripts_Zzzz, // 016E00 + scripts_Zzzz, /* 016C00 */ + scripts_Zzzz, /* 016D00 */ + scripts_Zzzz, /* 016E00 */ scripts_016F00, - scripts_Tang, // 017000 - scripts_Tang, // 017100 - scripts_Tang, // 017200 - scripts_Tang, // 017300 - scripts_Tang, // 017400 - scripts_Tang, // 017500 - scripts_Tang, // 017600 - scripts_Tang, // 017700 - scripts_Tang, // 017800 - scripts_Tang, // 017900 - scripts_Tang, // 017A00 - scripts_Tang, // 017B00 - scripts_Tang, // 017C00 - scripts_Tang, // 017D00 - scripts_Tang, // 017E00 - scripts_Tang, // 017F00 - scripts_Tang, // 018000 - scripts_Tang, // 018100 - scripts_Tang, // 018200 - scripts_Tang, // 018300 - scripts_Tang, // 018400 - scripts_Tang, // 018500 - scripts_Tang, // 018600 + scripts_Tang, /* 017000 */ + scripts_Tang, /* 017100 */ + scripts_Tang, /* 017200 */ + scripts_Tang, /* 017300 */ + scripts_Tang, /* 017400 */ + scripts_Tang, /* 017500 */ + scripts_Tang, /* 017600 */ + scripts_Tang, /* 017700 */ + scripts_Tang, /* 017800 */ + scripts_Tang, /* 017900 */ + scripts_Tang, /* 017A00 */ + scripts_Tang, /* 017B00 */ + scripts_Tang, /* 017C00 */ + scripts_Tang, /* 017D00 */ + scripts_Tang, /* 017E00 */ + scripts_Tang, /* 017F00 */ + scripts_Tang, /* 018000 */ + scripts_Tang, /* 018100 */ + scripts_Tang, /* 018200 */ + scripts_Tang, /* 018300 */ + scripts_Tang, /* 018400 */ + scripts_Tang, /* 018500 */ + scripts_Tang, /* 018600 */ scripts_018700, - scripts_Tang, // 018800 - scripts_Tang, // 018900 + scripts_Tang, /* 018800 */ + scripts_Tang, /* 018900 */ scripts_018A00, - scripts_Zzzz, // 018B00 - scripts_Zzzz, // 018C00 - scripts_Zzzz, // 018D00 - scripts_Zzzz, // 018E00 - scripts_Zzzz, // 018F00 - scripts_Zzzz, // 019000 - scripts_Zzzz, // 019100 - scripts_Zzzz, // 019200 - scripts_Zzzz, // 019300 - scripts_Zzzz, // 019400 - scripts_Zzzz, // 019500 - scripts_Zzzz, // 019600 - scripts_Zzzz, // 019700 - scripts_Zzzz, // 019800 - scripts_Zzzz, // 019900 - scripts_Zzzz, // 019A00 - scripts_Zzzz, // 019B00 - scripts_Zzzz, // 019C00 - scripts_Zzzz, // 019D00 - scripts_Zzzz, // 019E00 - scripts_Zzzz, // 019F00 - scripts_Zzzz, // 01A000 - scripts_Zzzz, // 01A100 - scripts_Zzzz, // 01A200 - scripts_Zzzz, // 01A300 - scripts_Zzzz, // 01A400 - scripts_Zzzz, // 01A500 - scripts_Zzzz, // 01A600 - scripts_Zzzz, // 01A700 - scripts_Zzzz, // 01A800 - scripts_Zzzz, // 01A900 - scripts_Zzzz, // 01AA00 - scripts_Zzzz, // 01AB00 - scripts_Zzzz, // 01AC00 - scripts_Zzzz, // 01AD00 - scripts_Zzzz, // 01AE00 - scripts_Zzzz, // 01AF00 + scripts_Zzzz, /* 018B00 */ + scripts_Zzzz, /* 018C00 */ + scripts_Zzzz, /* 018D00 */ + scripts_Zzzz, /* 018E00 */ + scripts_Zzzz, /* 018F00 */ + scripts_Zzzz, /* 019000 */ + scripts_Zzzz, /* 019100 */ + scripts_Zzzz, /* 019200 */ + scripts_Zzzz, /* 019300 */ + scripts_Zzzz, /* 019400 */ + scripts_Zzzz, /* 019500 */ + scripts_Zzzz, /* 019600 */ + scripts_Zzzz, /* 019700 */ + scripts_Zzzz, /* 019800 */ + scripts_Zzzz, /* 019900 */ + scripts_Zzzz, /* 019A00 */ + scripts_Zzzz, /* 019B00 */ + scripts_Zzzz, /* 019C00 */ + scripts_Zzzz, /* 019D00 */ + scripts_Zzzz, /* 019E00 */ + scripts_Zzzz, /* 019F00 */ + scripts_Zzzz, /* 01A000 */ + scripts_Zzzz, /* 01A100 */ + scripts_Zzzz, /* 01A200 */ + scripts_Zzzz, /* 01A300 */ + scripts_Zzzz, /* 01A400 */ + scripts_Zzzz, /* 01A500 */ + scripts_Zzzz, /* 01A600 */ + scripts_Zzzz, /* 01A700 */ + scripts_Zzzz, /* 01A800 */ + scripts_Zzzz, /* 01A900 */ + scripts_Zzzz, /* 01AA00 */ + scripts_Zzzz, /* 01AB00 */ + scripts_Zzzz, /* 01AC00 */ + scripts_Zzzz, /* 01AD00 */ + scripts_Zzzz, /* 01AE00 */ + scripts_Zzzz, /* 01AF00 */ scripts_01B000, - scripts_Zzzz, // 01B100 - scripts_Zzzz, // 01B200 - scripts_Zzzz, // 01B300 - scripts_Zzzz, // 01B400 - scripts_Zzzz, // 01B500 - scripts_Zzzz, // 01B600 - scripts_Zzzz, // 01B700 - scripts_Zzzz, // 01B800 - scripts_Zzzz, // 01B900 - scripts_Zzzz, // 01BA00 - scripts_Zzzz, // 01BB00 + scripts_Zzzz, /* 01B100 */ + scripts_Zzzz, /* 01B200 */ + scripts_Zzzz, /* 01B300 */ + scripts_Zzzz, /* 01B400 */ + scripts_Zzzz, /* 01B500 */ + scripts_Zzzz, /* 01B600 */ + scripts_Zzzz, /* 01B700 */ + scripts_Zzzz, /* 01B800 */ + scripts_Zzzz, /* 01B900 */ + scripts_Zzzz, /* 01BA00 */ + scripts_Zzzz, /* 01BB00 */ scripts_01BC00, - scripts_Zzzz, // 01BD00 - scripts_Zzzz, // 01BE00 - scripts_Zzzz, // 01BF00 - scripts_Zzzz, // 01C000 - scripts_Zzzz, // 01C100 - scripts_Zzzz, // 01C200 - scripts_Zzzz, // 01C300 - scripts_Zzzz, // 01C400 - scripts_Zzzz, // 01C500 - scripts_Zzzz, // 01C600 - scripts_Zzzz, // 01C700 - scripts_Zzzz, // 01C800 - scripts_Zzzz, // 01C900 - scripts_Zzzz, // 01CA00 - scripts_Zzzz, // 01CB00 - scripts_Zzzz, // 01CC00 - scripts_Zzzz, // 01CD00 - scripts_Zzzz, // 01CE00 - scripts_Zzzz, // 01CF00 + scripts_Zzzz, /* 01BD00 */ + scripts_Zzzz, /* 01BE00 */ + scripts_Zzzz, /* 01BF00 */ + scripts_Zzzz, /* 01C000 */ + scripts_Zzzz, /* 01C100 */ + scripts_Zzzz, /* 01C200 */ + scripts_Zzzz, /* 01C300 */ + scripts_Zzzz, /* 01C400 */ + scripts_Zzzz, /* 01C500 */ + scripts_Zzzz, /* 01C600 */ + scripts_Zzzz, /* 01C700 */ + scripts_Zzzz, /* 01C800 */ + scripts_Zzzz, /* 01C900 */ + scripts_Zzzz, /* 01CA00 */ + scripts_Zzzz, /* 01CB00 */ + scripts_Zzzz, /* 01CC00 */ + scripts_Zzzz, /* 01CD00 */ + scripts_Zzzz, /* 01CE00 */ + scripts_Zzzz, /* 01CF00 */ scripts_01D000, scripts_01D100, scripts_01D200, @@ -3347,296 +3348,296 @@ static const uint8_t *scripts_00F800_02FAFF[] = scripts_01D500, scripts_01D600, scripts_01D700, - scripts_Sgnw, // 01D800 - scripts_Sgnw, // 01D900 + scripts_Sgnw, /* 01D800 */ + scripts_Sgnw, /* 01D900 */ scripts_01DA00, - scripts_Zzzz, // 01DB00 - scripts_Zzzz, // 01DC00 - scripts_Zzzz, // 01DD00 - scripts_Zzzz, // 01DE00 - scripts_Zzzz, // 01DF00 + scripts_Zzzz, /* 01DB00 */ + scripts_Zzzz, /* 01DC00 */ + scripts_Zzzz, /* 01DD00 */ + scripts_Zzzz, /* 01DE00 */ + scripts_Zzzz, /* 01DF00 */ scripts_01E000, - scripts_Zzzz, // 01E100 - scripts_Zzzz, // 01E200 - scripts_Zzzz, // 01E300 - scripts_Zzzz, // 01E400 - scripts_Zzzz, // 01E500 - scripts_Zzzz, // 01E600 - scripts_Zzzz, // 01E700 + scripts_Zzzz, /* 01E100 */ + scripts_Zzzz, /* 01E200 */ + scripts_Zzzz, /* 01E300 */ + scripts_Zzzz, /* 01E400 */ + scripts_Zzzz, /* 01E500 */ + scripts_Zzzz, /* 01E600 */ + scripts_Zzzz, /* 01E700 */ scripts_01E800, scripts_01E900, - scripts_Zzzz, // 01EA00 - scripts_Zzzz, // 01EB00 - scripts_Zzzz, // 01EC00 - scripts_Zzzz, // 01ED00 + scripts_Zzzz, /* 01EA00 */ + scripts_Zzzz, /* 01EB00 */ + scripts_Zzzz, /* 01EC00 */ + scripts_Zzzz, /* 01ED00 */ scripts_01EE00, - scripts_Zzzz, // 01EF00 + scripts_Zzzz, /* 01EF00 */ scripts_01F000, scripts_01F100, scripts_01F200, - scripts_Zyyy, // 01F300 - scripts_Zyyy, // 01F400 - scripts_Zyyy, // 01F500 + scripts_Zyyy, /* 01F300 */ + scripts_Zyyy, /* 01F400 */ + scripts_Zyyy, /* 01F500 */ scripts_01F600, scripts_01F700, scripts_01F800, scripts_01F900, - scripts_Zzzz, // 01FA00 - scripts_Zzzz, // 01FB00 - scripts_Zzzz, // 01FC00 - scripts_Zzzz, // 01FD00 - scripts_Zzzz, // 01FE00 - scripts_Zzzz, // 01FF00 - scripts_Hani, // 020000 - scripts_Hani, // 020100 - scripts_Hani, // 020200 - scripts_Hani, // 020300 - scripts_Hani, // 020400 - scripts_Hani, // 020500 - scripts_Hani, // 020600 - scripts_Hani, // 020700 - scripts_Hani, // 020800 - scripts_Hani, // 020900 - scripts_Hani, // 020A00 - scripts_Hani, // 020B00 - scripts_Hani, // 020C00 - scripts_Hani, // 020D00 - scripts_Hani, // 020E00 - scripts_Hani, // 020F00 - scripts_Hani, // 021000 - scripts_Hani, // 021100 - scripts_Hani, // 021200 - scripts_Hani, // 021300 - scripts_Hani, // 021400 - scripts_Hani, // 021500 - scripts_Hani, // 021600 - scripts_Hani, // 021700 - scripts_Hani, // 021800 - scripts_Hani, // 021900 - scripts_Hani, // 021A00 - scripts_Hani, // 021B00 - scripts_Hani, // 021C00 - scripts_Hani, // 021D00 - scripts_Hani, // 021E00 - scripts_Hani, // 021F00 - scripts_Hani, // 022000 - scripts_Hani, // 022100 - scripts_Hani, // 022200 - scripts_Hani, // 022300 - scripts_Hani, // 022400 - scripts_Hani, // 022500 - scripts_Hani, // 022600 - scripts_Hani, // 022700 - scripts_Hani, // 022800 - scripts_Hani, // 022900 - scripts_Hani, // 022A00 - scripts_Hani, // 022B00 - scripts_Hani, // 022C00 - scripts_Hani, // 022D00 - scripts_Hani, // 022E00 - scripts_Hani, // 022F00 - scripts_Hani, // 023000 - scripts_Hani, // 023100 - scripts_Hani, // 023200 - scripts_Hani, // 023300 - scripts_Hani, // 023400 - scripts_Hani, // 023500 - scripts_Hani, // 023600 - scripts_Hani, // 023700 - scripts_Hani, // 023800 - scripts_Hani, // 023900 - scripts_Hani, // 023A00 - scripts_Hani, // 023B00 - scripts_Hani, // 023C00 - scripts_Hani, // 023D00 - scripts_Hani, // 023E00 - scripts_Hani, // 023F00 - scripts_Hani, // 024000 - scripts_Hani, // 024100 - scripts_Hani, // 024200 - scripts_Hani, // 024300 - scripts_Hani, // 024400 - scripts_Hani, // 024500 - scripts_Hani, // 024600 - scripts_Hani, // 024700 - scripts_Hani, // 024800 - scripts_Hani, // 024900 - scripts_Hani, // 024A00 - scripts_Hani, // 024B00 - scripts_Hani, // 024C00 - scripts_Hani, // 024D00 - scripts_Hani, // 024E00 - scripts_Hani, // 024F00 - scripts_Hani, // 025000 - scripts_Hani, // 025100 - scripts_Hani, // 025200 - scripts_Hani, // 025300 - scripts_Hani, // 025400 - scripts_Hani, // 025500 - scripts_Hani, // 025600 - scripts_Hani, // 025700 - scripts_Hani, // 025800 - scripts_Hani, // 025900 - scripts_Hani, // 025A00 - scripts_Hani, // 025B00 - scripts_Hani, // 025C00 - scripts_Hani, // 025D00 - scripts_Hani, // 025E00 - scripts_Hani, // 025F00 - scripts_Hani, // 026000 - scripts_Hani, // 026100 - scripts_Hani, // 026200 - scripts_Hani, // 026300 - scripts_Hani, // 026400 - scripts_Hani, // 026500 - scripts_Hani, // 026600 - scripts_Hani, // 026700 - scripts_Hani, // 026800 - scripts_Hani, // 026900 - scripts_Hani, // 026A00 - scripts_Hani, // 026B00 - scripts_Hani, // 026C00 - scripts_Hani, // 026D00 - scripts_Hani, // 026E00 - scripts_Hani, // 026F00 - scripts_Hani, // 027000 - scripts_Hani, // 027100 - scripts_Hani, // 027200 - scripts_Hani, // 027300 - scripts_Hani, // 027400 - scripts_Hani, // 027500 - scripts_Hani, // 027600 - scripts_Hani, // 027700 - scripts_Hani, // 027800 - scripts_Hani, // 027900 - scripts_Hani, // 027A00 - scripts_Hani, // 027B00 - scripts_Hani, // 027C00 - scripts_Hani, // 027D00 - scripts_Hani, // 027E00 - scripts_Hani, // 027F00 - scripts_Hani, // 028000 - scripts_Hani, // 028100 - scripts_Hani, // 028200 - scripts_Hani, // 028300 - scripts_Hani, // 028400 - scripts_Hani, // 028500 - scripts_Hani, // 028600 - scripts_Hani, // 028700 - scripts_Hani, // 028800 - scripts_Hani, // 028900 - scripts_Hani, // 028A00 - scripts_Hani, // 028B00 - scripts_Hani, // 028C00 - scripts_Hani, // 028D00 - scripts_Hani, // 028E00 - scripts_Hani, // 028F00 - scripts_Hani, // 029000 - scripts_Hani, // 029100 - scripts_Hani, // 029200 - scripts_Hani, // 029300 - scripts_Hani, // 029400 - scripts_Hani, // 029500 - scripts_Hani, // 029600 - scripts_Hani, // 029700 - scripts_Hani, // 029800 - scripts_Hani, // 029900 - scripts_Hani, // 029A00 - scripts_Hani, // 029B00 - scripts_Hani, // 029C00 - scripts_Hani, // 029D00 - scripts_Hani, // 029E00 - scripts_Hani, // 029F00 - scripts_Hani, // 02A000 - scripts_Hani, // 02A100 - scripts_Hani, // 02A200 - scripts_Hani, // 02A300 - scripts_Hani, // 02A400 - scripts_Hani, // 02A500 + scripts_Zzzz, /* 01FA00 */ + scripts_Zzzz, /* 01FB00 */ + scripts_Zzzz, /* 01FC00 */ + scripts_Zzzz, /* 01FD00 */ + scripts_Zzzz, /* 01FE00 */ + scripts_Zzzz, /* 01FF00 */ + scripts_Hani, /* 020000 */ + scripts_Hani, /* 020100 */ + scripts_Hani, /* 020200 */ + scripts_Hani, /* 020300 */ + scripts_Hani, /* 020400 */ + scripts_Hani, /* 020500 */ + scripts_Hani, /* 020600 */ + scripts_Hani, /* 020700 */ + scripts_Hani, /* 020800 */ + scripts_Hani, /* 020900 */ + scripts_Hani, /* 020A00 */ + scripts_Hani, /* 020B00 */ + scripts_Hani, /* 020C00 */ + scripts_Hani, /* 020D00 */ + scripts_Hani, /* 020E00 */ + scripts_Hani, /* 020F00 */ + scripts_Hani, /* 021000 */ + scripts_Hani, /* 021100 */ + scripts_Hani, /* 021200 */ + scripts_Hani, /* 021300 */ + scripts_Hani, /* 021400 */ + scripts_Hani, /* 021500 */ + scripts_Hani, /* 021600 */ + scripts_Hani, /* 021700 */ + scripts_Hani, /* 021800 */ + scripts_Hani, /* 021900 */ + scripts_Hani, /* 021A00 */ + scripts_Hani, /* 021B00 */ + scripts_Hani, /* 021C00 */ + scripts_Hani, /* 021D00 */ + scripts_Hani, /* 021E00 */ + scripts_Hani, /* 021F00 */ + scripts_Hani, /* 022000 */ + scripts_Hani, /* 022100 */ + scripts_Hani, /* 022200 */ + scripts_Hani, /* 022300 */ + scripts_Hani, /* 022400 */ + scripts_Hani, /* 022500 */ + scripts_Hani, /* 022600 */ + scripts_Hani, /* 022700 */ + scripts_Hani, /* 022800 */ + scripts_Hani, /* 022900 */ + scripts_Hani, /* 022A00 */ + scripts_Hani, /* 022B00 */ + scripts_Hani, /* 022C00 */ + scripts_Hani, /* 022D00 */ + scripts_Hani, /* 022E00 */ + scripts_Hani, /* 022F00 */ + scripts_Hani, /* 023000 */ + scripts_Hani, /* 023100 */ + scripts_Hani, /* 023200 */ + scripts_Hani, /* 023300 */ + scripts_Hani, /* 023400 */ + scripts_Hani, /* 023500 */ + scripts_Hani, /* 023600 */ + scripts_Hani, /* 023700 */ + scripts_Hani, /* 023800 */ + scripts_Hani, /* 023900 */ + scripts_Hani, /* 023A00 */ + scripts_Hani, /* 023B00 */ + scripts_Hani, /* 023C00 */ + scripts_Hani, /* 023D00 */ + scripts_Hani, /* 023E00 */ + scripts_Hani, /* 023F00 */ + scripts_Hani, /* 024000 */ + scripts_Hani, /* 024100 */ + scripts_Hani, /* 024200 */ + scripts_Hani, /* 024300 */ + scripts_Hani, /* 024400 */ + scripts_Hani, /* 024500 */ + scripts_Hani, /* 024600 */ + scripts_Hani, /* 024700 */ + scripts_Hani, /* 024800 */ + scripts_Hani, /* 024900 */ + scripts_Hani, /* 024A00 */ + scripts_Hani, /* 024B00 */ + scripts_Hani, /* 024C00 */ + scripts_Hani, /* 024D00 */ + scripts_Hani, /* 024E00 */ + scripts_Hani, /* 024F00 */ + scripts_Hani, /* 025000 */ + scripts_Hani, /* 025100 */ + scripts_Hani, /* 025200 */ + scripts_Hani, /* 025300 */ + scripts_Hani, /* 025400 */ + scripts_Hani, /* 025500 */ + scripts_Hani, /* 025600 */ + scripts_Hani, /* 025700 */ + scripts_Hani, /* 025800 */ + scripts_Hani, /* 025900 */ + scripts_Hani, /* 025A00 */ + scripts_Hani, /* 025B00 */ + scripts_Hani, /* 025C00 */ + scripts_Hani, /* 025D00 */ + scripts_Hani, /* 025E00 */ + scripts_Hani, /* 025F00 */ + scripts_Hani, /* 026000 */ + scripts_Hani, /* 026100 */ + scripts_Hani, /* 026200 */ + scripts_Hani, /* 026300 */ + scripts_Hani, /* 026400 */ + scripts_Hani, /* 026500 */ + scripts_Hani, /* 026600 */ + scripts_Hani, /* 026700 */ + scripts_Hani, /* 026800 */ + scripts_Hani, /* 026900 */ + scripts_Hani, /* 026A00 */ + scripts_Hani, /* 026B00 */ + scripts_Hani, /* 026C00 */ + scripts_Hani, /* 026D00 */ + scripts_Hani, /* 026E00 */ + scripts_Hani, /* 026F00 */ + scripts_Hani, /* 027000 */ + scripts_Hani, /* 027100 */ + scripts_Hani, /* 027200 */ + scripts_Hani, /* 027300 */ + scripts_Hani, /* 027400 */ + scripts_Hani, /* 027500 */ + scripts_Hani, /* 027600 */ + scripts_Hani, /* 027700 */ + scripts_Hani, /* 027800 */ + scripts_Hani, /* 027900 */ + scripts_Hani, /* 027A00 */ + scripts_Hani, /* 027B00 */ + scripts_Hani, /* 027C00 */ + scripts_Hani, /* 027D00 */ + scripts_Hani, /* 027E00 */ + scripts_Hani, /* 027F00 */ + scripts_Hani, /* 028000 */ + scripts_Hani, /* 028100 */ + scripts_Hani, /* 028200 */ + scripts_Hani, /* 028300 */ + scripts_Hani, /* 028400 */ + scripts_Hani, /* 028500 */ + scripts_Hani, /* 028600 */ + scripts_Hani, /* 028700 */ + scripts_Hani, /* 028800 */ + scripts_Hani, /* 028900 */ + scripts_Hani, /* 028A00 */ + scripts_Hani, /* 028B00 */ + scripts_Hani, /* 028C00 */ + scripts_Hani, /* 028D00 */ + scripts_Hani, /* 028E00 */ + scripts_Hani, /* 028F00 */ + scripts_Hani, /* 029000 */ + scripts_Hani, /* 029100 */ + scripts_Hani, /* 029200 */ + scripts_Hani, /* 029300 */ + scripts_Hani, /* 029400 */ + scripts_Hani, /* 029500 */ + scripts_Hani, /* 029600 */ + scripts_Hani, /* 029700 */ + scripts_Hani, /* 029800 */ + scripts_Hani, /* 029900 */ + scripts_Hani, /* 029A00 */ + scripts_Hani, /* 029B00 */ + scripts_Hani, /* 029C00 */ + scripts_Hani, /* 029D00 */ + scripts_Hani, /* 029E00 */ + scripts_Hani, /* 029F00 */ + scripts_Hani, /* 02A000 */ + scripts_Hani, /* 02A100 */ + scripts_Hani, /* 02A200 */ + scripts_Hani, /* 02A300 */ + scripts_Hani, /* 02A400 */ + scripts_Hani, /* 02A500 */ scripts_02A600, - scripts_Hani, // 02A700 - scripts_Hani, // 02A800 - scripts_Hani, // 02A900 - scripts_Hani, // 02AA00 - scripts_Hani, // 02AB00 - scripts_Hani, // 02AC00 - scripts_Hani, // 02AD00 - scripts_Hani, // 02AE00 - scripts_Hani, // 02AF00 - scripts_Hani, // 02B000 - scripts_Hani, // 02B100 - scripts_Hani, // 02B200 - scripts_Hani, // 02B300 - scripts_Hani, // 02B400 - scripts_Hani, // 02B500 - scripts_Hani, // 02B600 + scripts_Hani, /* 02A700 */ + scripts_Hani, /* 02A800 */ + scripts_Hani, /* 02A900 */ + scripts_Hani, /* 02AA00 */ + scripts_Hani, /* 02AB00 */ + scripts_Hani, /* 02AC00 */ + scripts_Hani, /* 02AD00 */ + scripts_Hani, /* 02AE00 */ + scripts_Hani, /* 02AF00 */ + scripts_Hani, /* 02B000 */ + scripts_Hani, /* 02B100 */ + scripts_Hani, /* 02B200 */ + scripts_Hani, /* 02B300 */ + scripts_Hani, /* 02B400 */ + scripts_Hani, /* 02B500 */ + scripts_Hani, /* 02B600 */ scripts_02B700, scripts_02B800, - scripts_Hani, // 02B900 - scripts_Hani, // 02BA00 - scripts_Hani, // 02BB00 - scripts_Hani, // 02BC00 - scripts_Hani, // 02BD00 - scripts_Hani, // 02BE00 - scripts_Hani, // 02BF00 - scripts_Hani, // 02C000 - scripts_Hani, // 02C100 - scripts_Hani, // 02C200 - scripts_Hani, // 02C300 - scripts_Hani, // 02C400 - scripts_Hani, // 02C500 - scripts_Hani, // 02C600 - scripts_Hani, // 02C700 - scripts_Hani, // 02C800 - scripts_Hani, // 02C900 - scripts_Hani, // 02CA00 - scripts_Hani, // 02CB00 - scripts_Hani, // 02CC00 - scripts_Hani, // 02CD00 + scripts_Hani, /* 02B900 */ + scripts_Hani, /* 02BA00 */ + scripts_Hani, /* 02BB00 */ + scripts_Hani, /* 02BC00 */ + scripts_Hani, /* 02BD00 */ + scripts_Hani, /* 02BE00 */ + scripts_Hani, /* 02BF00 */ + scripts_Hani, /* 02C000 */ + scripts_Hani, /* 02C100 */ + scripts_Hani, /* 02C200 */ + scripts_Hani, /* 02C300 */ + scripts_Hani, /* 02C400 */ + scripts_Hani, /* 02C500 */ + scripts_Hani, /* 02C600 */ + scripts_Hani, /* 02C700 */ + scripts_Hani, /* 02C800 */ + scripts_Hani, /* 02C900 */ + scripts_Hani, /* 02CA00 */ + scripts_Hani, /* 02CB00 */ + scripts_Hani, /* 02CC00 */ + scripts_Hani, /* 02CD00 */ scripts_02CE00, - scripts_Zzzz, // 02CF00 - scripts_Zzzz, // 02D000 - scripts_Zzzz, // 02D100 - scripts_Zzzz, // 02D200 - scripts_Zzzz, // 02D300 - scripts_Zzzz, // 02D400 - scripts_Zzzz, // 02D500 - scripts_Zzzz, // 02D600 - scripts_Zzzz, // 02D700 - scripts_Zzzz, // 02D800 - scripts_Zzzz, // 02D900 - scripts_Zzzz, // 02DA00 - scripts_Zzzz, // 02DB00 - scripts_Zzzz, // 02DC00 - scripts_Zzzz, // 02DD00 - scripts_Zzzz, // 02DE00 - scripts_Zzzz, // 02DF00 - scripts_Zzzz, // 02E000 - scripts_Zzzz, // 02E100 - scripts_Zzzz, // 02E200 - scripts_Zzzz, // 02E300 - scripts_Zzzz, // 02E400 - scripts_Zzzz, // 02E500 - scripts_Zzzz, // 02E600 - scripts_Zzzz, // 02E700 - scripts_Zzzz, // 02E800 - scripts_Zzzz, // 02E900 - scripts_Zzzz, // 02EA00 - scripts_Zzzz, // 02EB00 - scripts_Zzzz, // 02EC00 - scripts_Zzzz, // 02ED00 - scripts_Zzzz, // 02EE00 - scripts_Zzzz, // 02EF00 - scripts_Zzzz, // 02F000 - scripts_Zzzz, // 02F100 - scripts_Zzzz, // 02F200 - scripts_Zzzz, // 02F300 - scripts_Zzzz, // 02F400 - scripts_Zzzz, // 02F500 - scripts_Zzzz, // 02F600 - scripts_Zzzz, // 02F700 - scripts_Hani, // 02F800 - scripts_Hani, // 02F900 + scripts_Zzzz, /* 02CF00 */ + scripts_Zzzz, /* 02D000 */ + scripts_Zzzz, /* 02D100 */ + scripts_Zzzz, /* 02D200 */ + scripts_Zzzz, /* 02D300 */ + scripts_Zzzz, /* 02D400 */ + scripts_Zzzz, /* 02D500 */ + scripts_Zzzz, /* 02D600 */ + scripts_Zzzz, /* 02D700 */ + scripts_Zzzz, /* 02D800 */ + scripts_Zzzz, /* 02D900 */ + scripts_Zzzz, /* 02DA00 */ + scripts_Zzzz, /* 02DB00 */ + scripts_Zzzz, /* 02DC00 */ + scripts_Zzzz, /* 02DD00 */ + scripts_Zzzz, /* 02DE00 */ + scripts_Zzzz, /* 02DF00 */ + scripts_Zzzz, /* 02E000 */ + scripts_Zzzz, /* 02E100 */ + scripts_Zzzz, /* 02E200 */ + scripts_Zzzz, /* 02E300 */ + scripts_Zzzz, /* 02E400 */ + scripts_Zzzz, /* 02E500 */ + scripts_Zzzz, /* 02E600 */ + scripts_Zzzz, /* 02E700 */ + scripts_Zzzz, /* 02E800 */ + scripts_Zzzz, /* 02E900 */ + scripts_Zzzz, /* 02EA00 */ + scripts_Zzzz, /* 02EB00 */ + scripts_Zzzz, /* 02EC00 */ + scripts_Zzzz, /* 02ED00 */ + scripts_Zzzz, /* 02EE00 */ + scripts_Zzzz, /* 02EF00 */ + scripts_Zzzz, /* 02F000 */ + scripts_Zzzz, /* 02F100 */ + scripts_Zzzz, /* 02F200 */ + scripts_Zzzz, /* 02F300 */ + scripts_Zzzz, /* 02F400 */ + scripts_Zzzz, /* 02F500 */ + scripts_Zzzz, /* 02F600 */ + scripts_Zzzz, /* 02F700 */ + scripts_Hani, /* 02F800 */ + scripts_Hani, /* 02F900 */ scripts_02FA00, }; @@ -3648,23 +3649,23 @@ static const uint8_t *scripts_0E0000_0E01FF[] = ucd_script ucd_lookup_script(codepoint_t c) { - if (c <= 0x00D7FF) // 000000..00D7FF + if (c <= 0x00D7FF) /* 000000..00D7FF */ { const uint8_t *table = scripts_000000_00D7FF[(c - 0x000000) / 256]; return (ucd_script)table[c % 256]; } - if (c <= 0x00F7FF) return Zzzz; // 00D800..00F7FF : Surrogates / Private Use Area - if (c <= 0x02FAFF) // 00F800..02FAFF + if (c <= 0x00F7FF) return Zzzz; /* 00D800..00F7FF : Surrogates / Private Use Area */ + if (c <= 0x02FAFF) /* 00F800..02FAFF */ { const uint8_t *table = scripts_00F800_02FAFF[(c - 0x00F800) / 256]; return (ucd_script)table[c % 256]; } - if (c <= 0x0DFFFF) return Zzzz; // 02FB00..0DFFFF : Unassigned - if (c <= 0x0E01FF) // 0E0000..0E01FF + if (c <= 0x0DFFFF) return Zzzz; /* 02FB00..0DFFFF : Unassigned */ + if (c <= 0x0E01FF) /* 0E0000..0E01FF */ { const uint8_t *table = scripts_0E0000_0E01FF[(c - 0x0E0000) / 256]; return (ucd_script)table[c % 256]; } - if (c <= 0x10FFFF) return Zzzz; // 0E0200..10FFFF : Unassigned - return Zzzz; // Invalid Unicode Codepoint + if (c <= 0x10FFFF) return Zzzz; /* 0E0200..10FFFF : Unassigned */ + return Zzzz; /* Invalid Unicode Codepoint */ } diff --git a/tests/printcdata.c b/tests/printcdata.c index 686ef44a..ec3ca6d7 100644 --- a/tests/printcdata.c +++ b/tests/printcdata.c @@ -86,7 +86,7 @@ void uprintf_codepoint(FILE *out, codepoint_t c, char mode) { switch (mode) { - case 'c': // character + case 'c': /* character */ switch (c) { case '\t': fputs("\\t", out); break; @@ -95,10 +95,10 @@ void uprintf_codepoint(FILE *out, codepoint_t c, char mode) default: fput_utf8c(out, c); break; } break; - case 'h': // hexadecimal (lower) + case 'h': /* hexadecimal (lower) */ fprintf(out, "%06x", c); break; - case 'H': // hexadecimal (upper) + case 'H': /* hexadecimal (upper) */ fprintf(out, "%06X", c); break; } @@ -108,40 +108,40 @@ void uprintf_is(FILE *out, codepoint_t c, char mode) { switch (mode) { - case 'A': // alpha-numeric + case 'A': /* alpha-numeric */ fputc(iswalnum(c) ? '1' : '0', out); break; - case 'a': // alpha + case 'a': /* alpha */ fputc(iswalpha(c) ? '1' : '0', out); break; - case 'b': // blank + case 'b': /* blank */ fputc(iswblank(c) ? '1' : '0', out); break; - case 'c': // control + case 'c': /* control */ fputc(iswcntrl(c) ? '1' : '0', out); break; - case 'd': // numeric + case 'd': /* numeric */ fputc(iswdigit(c) ? '1' : '0', out); break; - case 'g': // glyph + case 'g': /* glyph */ fputc(iswgraph(c) ? '1' : '0', out); break; - case 'l': // lower case + case 'l': /* lower case */ fputc(iswlower(c) ? '1' : '0', out); break; - case 'P': // printable + case 'P': /* printable */ fputc(iswprint(c) ? '1' : '0', out); break; - case 'p': // punctuation + case 'p': /* punctuation */ fputc(iswpunct(c) ? '1' : '0', out); break; - case 's': // whitespace + case 's': /* whitespace */ fputc(iswspace(c) ? '1' : '0', out); break; - case 'u': // upper case + case 'u': /* upper case */ fputc(iswupper(c) ? '1' : '0', out); break; - case 'x': // xdigit + case 'x': /* xdigit */ fputc(iswxdigit(c) ? '1' : '0', out); break; } @@ -154,31 +154,31 @@ void uprintf(FILE *out, codepoint_t c, const char *format) case '%': switch (*++format) { - case 'c': // category + case 'c': /* category */ fputs(ucd_get_category_string(ucd_lookup_category(c)), out); break; - case 'C': // category group + case 'C': /* category group */ fputs(ucd_get_category_group_string(ucd_lookup_category_group(c)), out); break; - case 'p': // codepoint + case 'p': /* codepoint */ uprintf_codepoint(out, c, *++format); break; - case 'P': // properties + case 'P': /* properties */ fprintf(out, "%016llx", ucd_properties(c, ucd_lookup_category(c))); break; - case 'i': // is* + case 'i': /* is* */ uprintf_is(out, c, *++format); break; - case 'L': // lowercase + case 'L': /* lowercase */ uprintf_codepoint(out, towlower(c), *++format); break; - case 's': // script + case 's': /* script */ fputs(ucd_get_script_string(ucd_lookup_script(c)), out); break; - case 'T': // titlecase + case 'T': /* titlecase */ uprintf_codepoint(out, ucd_totitle(c), *++format); break; - case 'U': // uppercase + case 'U': /* uppercase */ uprintf_codepoint(out, towupper(c), *++format); break; } diff --git a/tests/printucddata.c b/tests/printucddata.c index bdcb783f..ad7bbc28 100644 --- a/tests/printucddata.c +++ b/tests/printucddata.c @@ -83,7 +83,7 @@ void uprintf_codepoint(FILE *out, codepoint_t c, char mode) { switch (mode) { - case 'c': // character + case 'c': /* character */ switch (c) { case '\t': fputs("\\t", out); break; @@ -92,10 +92,10 @@ void uprintf_codepoint(FILE *out, codepoint_t c, char mode) default: fput_utf8c(out, c); break; } break; - case 'h': // hexadecimal (lower) + case 'h': /* hexadecimal (lower) */ fprintf(out, "%06x", c); break; - case 'H': // hexadecimal (upper) + case 'H': /* hexadecimal (upper) */ fprintf(out, "%06X", c); break; } @@ -105,40 +105,40 @@ void uprintf_is(FILE *out, codepoint_t c, char mode) { switch (mode) { - case 'A': // alpha-numeric + case 'A': /* alpha-numeric */ fputc(ucd_isalnum(c) ? '1' : '0', out); break; - case 'a': // alpha + case 'a': /* alpha */ fputc(ucd_isalpha(c) ? '1' : '0', out); break; - case 'b': // blank + case 'b': /* blank */ fputc(ucd_isblank(c) ? '1' : '0', out); break; - case 'c': // control + case 'c': /* control */ fputc(ucd_iscntrl(c) ? '1' : '0', out); break; - case 'd': // numeric + case 'd': /* numeric */ fputc(ucd_isdigit(c) ? '1' : '0', out); break; - case 'g': // glyph + case 'g': /* glyph */ fputc(ucd_isgraph(c) ? '1' : '0', out); break; - case 'l': // lower case + case 'l': /* lower case */ fputc(ucd_islower(c) ? '1' : '0', out); break; - case 'P': // printable + case 'P': /* printable */ fputc(ucd_isprint(c) ? '1' : '0', out); break; - case 'p': // punctuation + case 'p': /* punctuation */ fputc(ucd_ispunct(c) ? '1' : '0', out); break; - case 's': // whitespace + case 's': /* whitespace */ fputc(ucd_isspace(c) ? '1' : '0', out); break; - case 'u': // upper case + case 'u': /* upper case */ fputc(ucd_isupper(c) ? '1' : '0', out); break; - case 'x': // xdigit + case 'x': /* xdigit */ fputc(ucd_isxdigit(c) ? '1' : '0', out); break; } @@ -151,31 +151,31 @@ void uprintf(FILE *out, codepoint_t c, const char *format) case '%': switch (*++format) { - case 'c': // category + case 'c': /* category */ fputs(ucd_get_category_string(ucd_lookup_category(c)), out); break; - case 'C': // category group + case 'C': /* category group */ fputs(ucd_get_category_group_string(ucd_lookup_category_group(c)), out); break; - case 'p': // codepoint + case 'p': /* codepoint */ uprintf_codepoint(out, c, *++format); break; - case 'P': // properties + case 'P': /* properties */ fprintf(out, "%016llx", ucd_properties(c, ucd_lookup_category(c))); break; - case 'i': // is* + case 'i': /* is* */ uprintf_is(out, c, *++format); break; - case 'L': // lowercase + case 'L': /* lowercase */ uprintf_codepoint(out, ucd_tolower(c), *++format); break; - case 's': // script + case 's': /* script */ fputs(ucd_get_script_string(ucd_lookup_script(c)), out); break; - case 'T': // titlecase + case 'T': /* titlecase */ uprintf_codepoint(out, ucd_totitle(c), *++format); break; - case 'U': // uppercase + case 'U': /* uppercase */ uprintf_codepoint(out, ucd_toupper(c), *++format); break; } diff --git a/tools/case.py b/tools/case.py index 7af5d55c..3c237a47 100755 --- a/tools/case.py +++ b/tools/case.py @@ -51,14 +51,15 @@ if __name__ == '__main__': * along with ucd-tools. If not, see . */ -// NOTE: This file is automatically generated from the UnicodeData.txt file in -// the Unicode Character database by the ucd-tools/tools/categories.py script. +/* NOTE: This file is automatically generated from the UnicodeData.txt file in + * the Unicode Character database by the ucd-tools/tools/categories.py script. + */ #include "ucd/ucd.h" #include -// Unicode Character Data %s +/* Unicode Character Data %s */ struct case_conversion_entry { diff --git a/tools/categories.py b/tools/categories.py index 35dca2bf..43b46eb0 100755 --- a/tools/categories.py +++ b/tools/categories.py @@ -110,8 +110,9 @@ if __name__ == '__main__': * along with ucd-tools. If not, see . */ -// NOTE: This file is automatically generated from the UnicodeData.txt file in -// the Unicode Character database by the ucd-tools/tools/categories.py script. +/* NOTE: This file is automatically generated from the UnicodeData.txt file in + * the Unicode Character database by the ucd-tools/tools/categories.py script. + */ #include "ucd/ucd.h" @@ -149,7 +150,7 @@ if __name__ == '__main__': #define Zs UCD_CATEGORY_Zs #define Ii UCD_CATEGORY_Ii -// Unicode Character Data %s +/* Unicode Character Data %s */ """ % ucd_version) for category in special_categories: @@ -187,7 +188,7 @@ if __name__ == '__main__': sys.stdout.write('{\n') for codepoint, table in sorted(category_tables[table_index].items()): if isinstance(table, str): - sys.stdout.write('\tcategories_%s, // %s\n' % (table, codepoint)) + sys.stdout.write('\tcategories_%s, /* %s */\n' % (table, codepoint)) else: sys.stdout.write('\tcategories_%s,\n' % codepoint) sys.stdout.write('};\n') @@ -197,14 +198,14 @@ if __name__ == '__main__': sys.stdout.write('{\n') for codepoints, category, comment in category_sets: if category: - sys.stdout.write('\tif (c <= 0x%s) return %s; // %s : %s\n' % (codepoints.last, category, codepoints, comment)) + sys.stdout.write('\tif (c <= 0x%s) return %s; /* %s : %s */\n' % (codepoints.last, category, codepoints, comment)) else: - sys.stdout.write('\tif (c <= 0x%s) // %s\n' % (codepoints.last, codepoints)) + sys.stdout.write('\tif (c <= 0x%s) /* %s */\n' % (codepoints.last, codepoints)) sys.stdout.write('\t{\n') sys.stdout.write('\t\tconst uint8_t *table = categories_%s_%s[(c - 0x%s) / 256];\n' % (codepoints.first, codepoints.last, codepoints.first)) sys.stdout.write('\t\treturn (ucd_category)table[c % 256];\n') sys.stdout.write('\t}\n') - sys.stdout.write('\treturn Ii; // Invalid Unicode Codepoint\n') + sys.stdout.write('\treturn Ii; /* Invalid Unicode Codepoint */\n') sys.stdout.write('}\n') sys.stdout.write(""" diff --git a/tools/scripts.py b/tools/scripts.py index 54fcfc6a..ba125f6d 100755 --- a/tools/scripts.py +++ b/tools/scripts.py @@ -104,8 +104,9 @@ if __name__ == '__main__': * along with ucd-tools. If not, see . */ -// NOTE: This file is automatically generated from the Scripts.txt file in -// the Unicode Character database by the ucd-tools/tools/scripts.py script. +/* NOTE: This file is automatically generated from the Scripts.txt file in + * the Unicode Character database by the ucd-tools/tools/scripts.py script. + */ #include "ucd/ucd.h" @@ -285,7 +286,7 @@ if __name__ == '__main__': #define Zyyy UCD_SCRIPT_Zyyy #define Zzzz UCD_SCRIPT_Zzzz -// Unicode Character Data %s +/* Unicode Character Data %s */ """ % ucd_version) for script in special_scripts: @@ -323,7 +324,7 @@ if __name__ == '__main__': sys.stdout.write('{\n') for codepoint, table in sorted(script_tables[table_index].items()): if isinstance(table, str): - sys.stdout.write('\tscripts_%s, // %s\n' % (table, codepoint)) + sys.stdout.write('\tscripts_%s, /* %s */\n' % (table, codepoint)) else: sys.stdout.write('\tscripts_%s,\n' % codepoint) sys.stdout.write('};\n') @@ -333,12 +334,12 @@ if __name__ == '__main__': sys.stdout.write('{\n') for codepoints, script, comment in script_sets: if script: - sys.stdout.write('\tif (c <= 0x%s) return %s; // %s : %s\n' % (codepoints.last, script, codepoints, comment)) + sys.stdout.write('\tif (c <= 0x%s) return %s; /* %s : %s */\n' % (codepoints.last, script, codepoints, comment)) else: - sys.stdout.write('\tif (c <= 0x%s) // %s\n' % (codepoints.last, codepoints)) + sys.stdout.write('\tif (c <= 0x%s) /* %s */\n' % (codepoints.last, codepoints)) sys.stdout.write('\t{\n') sys.stdout.write('\t\tconst uint8_t *table = scripts_%s_%s[(c - 0x%s) / 256];\n' % (codepoints.first, codepoints.last, codepoints.first)) sys.stdout.write('\t\treturn (ucd_script)table[c % 256];\n') sys.stdout.write('\t}\n') - sys.stdout.write('\treturn Zzzz; // Invalid Unicode Codepoint\n') + sys.stdout.write('\treturn Zzzz; /* Invalid Unicode Codepoint */\n') sys.stdout.write('}\n') From 223d14bec8f3dee7a9c866248fccef2113dda92f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 12:25:26 +0100 Subject: [PATCH 011/137] Move the type declaration out of the for loops to support building with a C89 compiler. --- tests/printcdata.c | 6 ++++-- tests/printucddata.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/printcdata.c b/tests/printcdata.c index ec3ca6d7..09eaf1cd 100644 --- a/tests/printcdata.c +++ b/tests/printcdata.c @@ -224,7 +224,8 @@ int main(int argc, char **argv) { FILE *in = NULL; const char *format = NULL; - for (int argn = 1; argn != argc; ++argn) + int argn; + for (argn = 1; argn != argc; ++argn) { const char *arg = argv[argn]; if (!strcmp(arg, "--stdin") || !strcmp(arg, "-")) @@ -250,7 +251,8 @@ int main(int argc, char **argv) } else { - for (codepoint_t c = 0; c <= 0x10FFFF; ++c) + codepoint_t c; + for (c = 0; c <= 0x10FFFF; ++c) uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %id %ix %ic %is %ib %ip %iP %ig %iA %ia %iu %il %P\n"); } diff --git a/tests/printucddata.c b/tests/printucddata.c index ad7bbc28..b592f820 100644 --- a/tests/printucddata.c +++ b/tests/printucddata.c @@ -221,7 +221,8 @@ int main(int argc, char **argv) { FILE *in = NULL; const char *format = NULL; - for (int argn = 1; argn != argc; ++argn) + int argn; + for (argn = 1; argn != argc; ++argn) { const char *arg = argv[argn]; if (!strcmp(arg, "--stdin") || !strcmp(arg, "-")) @@ -245,7 +246,8 @@ int main(int argc, char **argv) } else { - for (codepoint_t c = 0; c <= 0x10FFFF; ++c) + codepoint_t c; + for (c = 0; c <= 0x10FFFF; ++c) uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %id %ix %ic %is %ib %ip %iP %ig %iA %ia %iu %il %P\n"); } From bdc255835ecd2a188ad4f20f8bed618a07204dc7 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 12:39:13 +0100 Subject: [PATCH 012/137] Provide a compatibility implementation of iswblank for C89 compilers. --- .gitignore | 1 + configure.ac | 1 + tests/printcdata.c | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/.gitignore b/.gitignore index fdfc86f9..532cd277 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .*.swp +*~ # intermediate files: diff --git a/configure.ac b/configure.ac index c99d67ce..0a7e6665 100644 --- a/configure.ac +++ b/configure.ac @@ -24,6 +24,7 @@ dnl library checks. dnl ================================================================ AC_CHECK_HEADERS([stddef.h]) dnl C89 +AC_CHECK_FUNCS([iswblank]) dnl C99 AC_TYPE_UINT8_T AC_TYPE_UINT32_T diff --git a/tests/printcdata.c b/tests/printcdata.c index 09eaf1cd..6992bb94 100644 --- a/tests/printcdata.c +++ b/tests/printcdata.c @@ -17,6 +17,7 @@ * along with ucd-tools. If not, see . */ +#include "config.h" #include "ucd/ucd.h" #include @@ -25,6 +26,13 @@ #include #include +#ifndef HAVE_ISWBLANK +static int iswblank(wint_t c) +{ + return iswspace(c) && !(c >= 0x0A && c <= 0x0D); +} +#endif + void fput_utf8c(FILE *out, codepoint_t c) { if (c < 0x80) From 4c1ff765f1dd9a5951ce01650bab03fe3308204c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 15:13:08 +0100 Subject: [PATCH 013/137] Unicode Character Data 10.0.0 --- CHANGELOG.md | 1 + src/categories.c | 238 +++++++++++++++++++++-------------- src/include/ucd/ucd.h | 6 + src/proplist.c | 57 +++++++-- src/scripts.c | 279 ++++++++++++++++++++++++++---------------- src/tostring.c | 3 + tools/scripts.py | 3 + 7 files changed, 381 insertions(+), 206 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ce304d7..3dbb62f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Improve ctype compatibility. * PropList and emoji-data property lookup. * Support building with a C89 compiler. +* Update to Unicode Character Data 10.0.0. ## 9.0.0 - 2016-12-28 diff --git a/src/categories.c b/src/categories.c index 6ec02144..4eade2eb 100644 --- a/src/categories.c +++ b/src/categories.c @@ -328,7 +328,7 @@ static const uint8_t categories_000800[256] = /* 30 */ Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Cn, /* 40 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* 50 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Cn, Cn, Po, Cn, - /* 60 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 60 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, /* 70 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 80 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 90 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, @@ -357,7 +357,7 @@ static const uint8_t categories_000900[256] = /* C0 */ Mc, Mn, Mn, Mn, Mn, Cn, Cn, Mc, Mc, Cn, Cn, Mc, Mc, Mn, Lo, Cn, /* D0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Mc, Cn, Cn, Cn, Cn, Lo, Lo, Cn, Lo, /* E0 */ Lo, Lo, Mn, Mn, Cn, Cn, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, - /* F0 */ Lo, Lo, Sc, Sc, No, No, No, No, No, No, So, Sc, Cn, Cn, Cn, Cn, + /* F0 */ Lo, Lo, Sc, Sc, No, No, No, No, No, No, So, Sc, Lo, Po, Cn, Cn, }; static const uint8_t categories_000A00[256] = @@ -377,7 +377,7 @@ static const uint8_t categories_000A00[256] = /* C0 */ Mc, Mn, Mn, Mn, Mn, Mn, Cn, Mn, Mn, Mc, Cn, Mc, Mc, Mn, Cn, Cn, /* D0 */ Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* E0 */ Lo, Lo, Mn, Mn, Cn, Cn, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, - /* F0 */ Po, Sc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, + /* F0 */ Po, Sc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Mn, Mn, Mn, Mn, Mn, Mn, }; static const uint8_t categories_000B00[256] = @@ -422,10 +422,10 @@ static const uint8_t categories_000C00[256] = static const uint8_t categories_000D00[256] = { - /* 00 */ Cn, Mn, Mc, Mc, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, + /* 00 */ Mn, Mn, Mc, Mc, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, /* 10 */ Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* 20 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, - /* 30 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Mc, Mc, + /* 30 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Lo, Mc, Mc, /* 40 */ Mc, Mn, Mn, Mn, Mn, Cn, Mc, Mc, Mc, Cn, Mc, Mc, Mc, Mn, Lo, So, /* 50 */ Cn, Cn, Cn, Cn, Lo, Lo, Lo, Mc, No, No, No, No, No, No, No, Lo, /* 60 */ Lo, Lo, Mn, Mn, Cn, Cn, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, @@ -697,7 +697,7 @@ static const uint8_t categories_001C00[256] = /* C0 */ Po, Po, Po, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* D0 */ Mn, Mn, Mn, Po, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, /* E0 */ Mn, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Lo, Lo, Lo, Lo, Mn, Lo, Lo, - /* F0 */ Lo, Lo, Mc, Mc, Mn, Lo, Lo, Cn, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, + /* F0 */ Lo, Lo, Mc, Mc, Mn, Lo, Lo, Mc, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, }; static const uint8_t categories_001D00[256] = @@ -717,7 +717,7 @@ static const uint8_t categories_001D00[256] = /* C0 */ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, /* D0 */ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, /* E0 */ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, - /* F0 */ Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Mn, Mn, Mn, Mn, Mn, + /* F0 */ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Mn, Mn, Mn, Mn, Mn, }; static const uint8_t categories_001E00[256] = @@ -773,7 +773,7 @@ static const uint8_t categories_002000[256] = /* 80 */ No, No, No, No, No, No, No, No, No, No, Sm, Sm, Sm, Ps, Pe, Cn, /* 90 */ Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Cn, Cn, Cn, /* A0 */ Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, - /* B0 */ Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Cn, + /* B0 */ Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, /* C0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* D0 */ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Me, Me, Me, /* E0 */ Me, Mn, Me, Me, Me, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, @@ -817,7 +817,7 @@ static const uint8_t categories_002300[256] = /* C0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, /* D0 */ So, So, So, So, So, So, So, So, So, So, So, So, Sm, Sm, Sm, Sm, /* E0 */ Sm, Sm, So, So, So, So, So, So, So, So, So, So, So, So, So, So, - /* F0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, + /* F0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, }; static const uint8_t categories_002400[256] = @@ -935,7 +935,7 @@ static const uint8_t categories_002B00[256] = /* A0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, /* B0 */ So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, So, So, So, /* C0 */ So, So, So, So, So, So, So, So, So, Cn, So, So, So, So, So, So, - /* D0 */ So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* D0 */ So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* E0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, So, So, So, So, /* F0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, }; @@ -986,7 +986,7 @@ static const uint8_t categories_002E00[256] = /* 10 */ Po, Po, Po, Po, Po, Po, Po, Pd, Po, Po, Pd, Po, Pi, Pf, Po, Po, /* 20 */ Pi, Pf, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Po, Po, Po, Po, Po, Lm, /* 30 */ Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Pd, Pd, Po, Po, Po, Po, - /* 40 */ Pd, Po, Ps, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 40 */ Pd, Po, Ps, Po, Po, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, /* 50 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 60 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 70 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, @@ -1044,7 +1044,7 @@ static const uint8_t categories_003100[256] = { /* 00 */ Cn, Cn, Cn, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* 10 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, - /* 20 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, + /* 20 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, /* 30 */ Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* 40 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* 50 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, @@ -1115,8 +1115,8 @@ static const uint8_t categories_009F00[256] = /* A0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* B0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* C0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, - /* D0 */ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* E0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* D0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* E0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, /* F0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, }; @@ -1464,7 +1464,7 @@ static const uint8_t categories_010300[256] = { /* 00 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* 10 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, - /* 20 */ No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 20 */ No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Lo, Lo, /* 30 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* 40 */ Lo, Nl, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Nl, Cn, Cn, Cn, Cn, Cn, /* 50 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, @@ -1842,17 +1842,17 @@ static const uint8_t categories_011800[256] = static const uint8_t categories_011A00[256] = { - /* 00 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 10 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 20 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 30 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 40 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 50 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 60 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 70 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 80 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 90 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* A0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 00 */ Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mc, Mn, Mn, Lo, Lo, Lo, Lo, Lo, + /* 10 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 20 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 30 */ Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Lo, Mn, Mn, Mn, Mn, Po, + /* 40 */ Po, Po, Po, Po, Po, Po, Po, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 50 */ Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mc, Mn, Mn, Mn, Lo, Lo, Lo, Lo, + /* 60 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 70 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 80 */ Lo, Lo, Lo, Lo, Cn, Cn, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, + /* 90 */ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mn, Mn, Po, Po, Po, Cn, Po, Po, + /* A0 */ Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* B0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* C0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* D0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, @@ -1880,6 +1880,26 @@ static const uint8_t categories_011C00[256] = /* F0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, }; +static const uint8_t categories_011D00[256] = +{ + /* 00 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, + /* 10 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 20 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 30 */ Lo, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Mn, Cn, Mn, Mn, Cn, Mn, + /* 40 */ Mn, Mn, Mn, Mn, Mn, Mn, Lo, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 50 */ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, Cn, Cn, Cn, Cn, Cn, + /* 60 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 70 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 80 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 90 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* A0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* B0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* C0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* D0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* E0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* F0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, +}; + static const uint8_t categories_012300[256] = { /* 00 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, @@ -2036,7 +2056,7 @@ static const uint8_t categories_016F00[256] = /* B0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* C0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* D0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* E0 */ Lm, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* E0 */ Lm, Lm, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* F0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, }; @@ -2080,24 +2100,44 @@ static const uint8_t categories_018A00[256] = /* F0 */ Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, }; -static const uint8_t categories_01B000[256] = +static const uint8_t categories_01B100[256] = { - /* 00 */ Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 10 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 00 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 10 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, /* 20 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 30 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 40 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 50 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 60 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 70 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 80 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 90 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* A0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* B0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* C0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* D0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* E0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* F0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 70 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 80 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 90 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* A0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* B0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* C0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* D0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* E0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* F0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, +}; + +static const uint8_t categories_01B200[256] = +{ + /* 00 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 10 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 20 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 30 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 40 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 50 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 60 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 70 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 80 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 90 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* A0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* B0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* C0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* D0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* E0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* F0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, }; static const uint8_t categories_01BC00[256] = @@ -2428,7 +2468,7 @@ static const uint8_t categories_01F200[256] = /* 30 */ So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, /* 40 */ So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 50 */ So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 60 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 60 */ So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 70 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 80 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 90 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, @@ -2475,9 +2515,9 @@ static const uint8_t categories_01F600[256] = /* A0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, /* B0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, /* C0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, - /* D0 */ So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* D0 */ So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* E0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, - /* F0 */ So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* F0 */ So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, }; static const uint8_t categories_01F700[256] = @@ -2522,21 +2562,21 @@ static const uint8_t categories_01F800[256] = static const uint8_t categories_01F900[256] = { - /* 00 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 10 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, - /* 20 */ So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* 30 */ So, Cn, Cn, So, So, So, So, So, So, So, So, So, So, So, So, Cn, - /* 40 */ So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, - /* 50 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, - /* 60 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 00 */ So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, + /* 10 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, + /* 20 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, + /* 30 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, + /* 40 */ So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, + /* 50 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, + /* 60 */ So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, /* 70 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* 80 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, - /* 90 */ So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* 90 */ So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* A0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* B0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* C0 */ So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* D0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* E0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* D0 */ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, + /* E0 */ So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* F0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, }; @@ -2613,10 +2653,30 @@ static const uint8_t categories_02CE00[256] = /* 80 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* 90 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, /* A0 */ Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* B0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* C0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* D0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, - /* E0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, + /* B0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* C0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* D0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* E0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* F0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, +}; + +static const uint8_t categories_02EB00[256] = +{ + /* 00 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 10 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 20 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 30 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 40 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 50 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 60 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 70 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 80 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* 90 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* A0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* B0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* C0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* D0 */ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, + /* E0 */ Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, /* F0 */ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, }; @@ -2939,7 +2999,7 @@ static const uint8_t *categories_00F800_02FAFF[] = categories_011A00, categories_Cn, /* 011B00 */ categories_011C00, - categories_Cn, /* 011D00 */ + categories_011D00, categories_Cn, /* 011E00 */ categories_Cn, /* 011F00 */ categories_Lo, /* 012000 */ @@ -3086,9 +3146,9 @@ static const uint8_t *categories_00F800_02FAFF[] = categories_Cn, /* 01AD00 */ categories_Cn, /* 01AE00 */ categories_Cn, /* 01AF00 */ - categories_01B000, - categories_Cn, /* 01B100 */ - categories_Cn, /* 01B200 */ + categories_Lo, /* 01B000 */ + categories_01B100, + categories_01B200, categories_Cn, /* 01B300 */ categories_Cn, /* 01B400 */ categories_Cn, /* 01B500 */ @@ -3373,35 +3433,35 @@ static const uint8_t *categories_00F800_02FAFF[] = categories_Lo, /* 02CC00 */ categories_Lo, /* 02CD00 */ categories_02CE00, - categories_Cn, /* 02CF00 */ - categories_Cn, /* 02D000 */ - categories_Cn, /* 02D100 */ - categories_Cn, /* 02D200 */ - categories_Cn, /* 02D300 */ - categories_Cn, /* 02D400 */ - categories_Cn, /* 02D500 */ - categories_Cn, /* 02D600 */ - categories_Cn, /* 02D700 */ - categories_Cn, /* 02D800 */ - categories_Cn, /* 02D900 */ - categories_Cn, /* 02DA00 */ - categories_Cn, /* 02DB00 */ - categories_Cn, /* 02DC00 */ - categories_Cn, /* 02DD00 */ - categories_Cn, /* 02DE00 */ - categories_Cn, /* 02DF00 */ - categories_Cn, /* 02E000 */ - categories_Cn, /* 02E100 */ - categories_Cn, /* 02E200 */ - categories_Cn, /* 02E300 */ - categories_Cn, /* 02E400 */ - categories_Cn, /* 02E500 */ - categories_Cn, /* 02E600 */ - categories_Cn, /* 02E700 */ - categories_Cn, /* 02E800 */ - categories_Cn, /* 02E900 */ - categories_Cn, /* 02EA00 */ - categories_Cn, /* 02EB00 */ + categories_Lo, /* 02CF00 */ + categories_Lo, /* 02D000 */ + categories_Lo, /* 02D100 */ + categories_Lo, /* 02D200 */ + categories_Lo, /* 02D300 */ + categories_Lo, /* 02D400 */ + categories_Lo, /* 02D500 */ + categories_Lo, /* 02D600 */ + categories_Lo, /* 02D700 */ + categories_Lo, /* 02D800 */ + categories_Lo, /* 02D900 */ + categories_Lo, /* 02DA00 */ + categories_Lo, /* 02DB00 */ + categories_Lo, /* 02DC00 */ + categories_Lo, /* 02DD00 */ + categories_Lo, /* 02DE00 */ + categories_Lo, /* 02DF00 */ + categories_Lo, /* 02E000 */ + categories_Lo, /* 02E100 */ + categories_Lo, /* 02E200 */ + categories_Lo, /* 02E300 */ + categories_Lo, /* 02E400 */ + categories_Lo, /* 02E500 */ + categories_Lo, /* 02E600 */ + categories_Lo, /* 02E700 */ + categories_Lo, /* 02E800 */ + categories_Lo, /* 02E900 */ + categories_Lo, /* 02EA00 */ + categories_02EB00, categories_Cn, /* 02EC00 */ categories_Cn, /* 02ED00 */ categories_Cn, /* 02EE00 */ diff --git a/src/include/ucd/ucd.h b/src/include/ucd/ucd.h index ddabe65a..33133c5f 100644 --- a/src/include/ucd/ucd.h +++ b/src/include/ucd/ucd.h @@ -176,6 +176,7 @@ typedef enum ucd_script_ UCD_SCRIPT_Geok, /**< @brief Khutsuri Script */ UCD_SCRIPT_Geor, /**< @brief Geirgian Script */ UCD_SCRIPT_Glag, /**< @brief Glagolitic Script */ + UCD_SCRIPT_Gonm, /**< @brief Masaram Gondi */ UCD_SCRIPT_Goth, /**< @brief Gothic Script */ UCD_SCRIPT_Gran, /**< @brief Grantha Script */ UCD_SCRIPT_Grek, /**< @brief Greek Script */ @@ -273,6 +274,7 @@ typedef enum ucd_script_ UCD_SCRIPT_Sind, /**< @brief Sindhi Script */ UCD_SCRIPT_Sinh, /**< @brief Sinhala Script */ UCD_SCRIPT_Sora, /**< @brief Sora Sompeng Script */ + UCD_SCRIPT_Soyo, /**< @brief Soyombo */ UCD_SCRIPT_Sund, /**< @brief Sundanese Script */ UCD_SCRIPT_Sylo, /**< @brief Syloti Nagri Script */ UCD_SCRIPT_Syrc, /**< @brief Syriac Script */ @@ -302,6 +304,7 @@ typedef enum ucd_script_ UCD_SCRIPT_Xpeo, /**< @brief Old Persian Script */ UCD_SCRIPT_Xsux, /**< @brief Cuneiform Script */ UCD_SCRIPT_Yiii, /**< @brief Yi Script */ + UCD_SCRIPT_Zanb, /**< @brief Zanabazar Square */ UCD_SCRIPT_Zinh, /**< @brief Inherited Script */ UCD_SCRIPT_Zmth, /**< @brief Mathematical Notation */ UCD_SCRIPT_Zsym, /**< @brief Symbols */ @@ -665,6 +668,7 @@ namespace ucd Geok = UCD_SCRIPT_Geok, /**< @brief Khutsuri Script */ Geor = UCD_SCRIPT_Geor, /**< @brief Geirgian Script */ Glag = UCD_SCRIPT_Glag, /**< @brief Glagolitic Script */ + Gonm = UCD_SCRIPT_Gonm, /**< @brief Masaram Gondi */ Goth = UCD_SCRIPT_Goth, /**< @brief Gothic Script */ Gran = UCD_SCRIPT_Gran, /**< @brief Grantha Script */ Grek = UCD_SCRIPT_Grek, /**< @brief Greek Script */ @@ -762,6 +766,7 @@ namespace ucd Sind = UCD_SCRIPT_Sind, /**< @brief Sindhi Script */ Sinh = UCD_SCRIPT_Sinh, /**< @brief Sinhala Script */ Sora = UCD_SCRIPT_Sora, /**< @brief Sora Sompeng Script */ + Soyo = UCD_SCRIPT_Soyo, /**< @brief Soyombo */ Sund = UCD_SCRIPT_Sund, /**< @brief Sundanese Script */ Sylo = UCD_SCRIPT_Sylo, /**< @brief Syloti Nagri Script */ Syrc = UCD_SCRIPT_Syrc, /**< @brief Syriac Script */ @@ -791,6 +796,7 @@ namespace ucd Xpeo = UCD_SCRIPT_Xpeo, /**< @brief Old Persian Script */ Xsux = UCD_SCRIPT_Xsux, /**< @brief Cuneiform Script */ Yiii = UCD_SCRIPT_Yiii, /**< @brief Yi Script */ + Zanb = UCD_SCRIPT_Zanb, /**< @brief Zanabazar Square */ Zinh = UCD_SCRIPT_Zinh, /**< @brief Inherited Script */ Zmth = UCD_SCRIPT_Zmth, /**< @brief Mathematical Notation */ Zsym = UCD_SCRIPT_Zsym, /**< @brief Symbols */ diff --git a/src/proplist.c b/src/proplist.c index c0229512..f8f0dc2d 100644 --- a/src/proplist.c +++ b/src/proplist.c @@ -72,9 +72,6 @@ static ucd_property properties_Cn(codepoint_t c) case 0x2000: if (c == 0x2065) return UCD_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT; break; - case 0x2300: - if (c == 0x23FF) return UCD_PROPERTY_PATTERN_SYNTAX; - break; case 0x2400: if (c >= 0x2427 && c <= 0x243F) return UCD_PROPERTY_PATTERN_SYNTAX; if (c >= 0x244B && c <= 0x245F) return UCD_PROPERTY_PATTERN_SYNTAX; @@ -84,7 +81,7 @@ static ucd_property properties_Cn(codepoint_t c) if (c >= 0x2B96 && c <= 0x2B97) return UCD_PROPERTY_PATTERN_SYNTAX; if (c >= 0x2BBA && c <= 0x2BBC) return UCD_PROPERTY_PATTERN_SYNTAX; if (c == 0x2BC9) return UCD_PROPERTY_PATTERN_SYNTAX; - if (c >= 0x2BD2 && c <= 0x2BEB) return UCD_PROPERTY_PATTERN_SYNTAX; + if (c >= 0x2BD3 && c <= 0x2BEB) return UCD_PROPERTY_PATTERN_SYNTAX; if (c >= 0x2BF0 && c <= 0x2BFF) return UCD_PROPERTY_PATTERN_SYNTAX; break; case 0x2E00: @@ -326,7 +323,7 @@ static ucd_property properties_Lm(codepoint_t c) break; case 0x016F00: if (c >= 0x016F93 && c <= 0x016F9F) return UCD_PROPERTY_DIACRITIC; - if (c == 0x016FE0) return UCD_PROPERTY_EXTENDER; + if (c >= 0x016FE0 && c <= 0x016FE1) return UCD_PROPERTY_EXTENDER; break; } return 0; @@ -400,19 +397,21 @@ static ucd_property properties_Lo_ideographic(codepoint_t c) { case 0x000000: if (c >= 0x3400 && c <= 0x4DB5) return UCD_PROPERTY_IDEOGRAPHIC | UCD_PROPERTY_UNIFIED_IDEOGRAPH; - if (c >= 0x4E00 && c <= 0x9FD5) return UCD_PROPERTY_IDEOGRAPHIC | UCD_PROPERTY_UNIFIED_IDEOGRAPH; + if (c >= 0x4E00 && c <= 0x9FEA) return UCD_PROPERTY_IDEOGRAPHIC | UCD_PROPERTY_UNIFIED_IDEOGRAPH; if (c >= 0xF900 && c <= 0xFA6D) return UCD_PROPERTY_IDEOGRAPHIC; if (c >= 0xFA70 && c <= 0xFAD9) return UCD_PROPERTY_IDEOGRAPHIC; break; case 0x010000: if (c >= 0x017000 && c <= 0x0187EC) return UCD_PROPERTY_IDEOGRAPHIC; if (c >= 0x018800 && c <= 0x018AF2) return UCD_PROPERTY_IDEOGRAPHIC; + if (c >= 0x01B170 && c <= 0x01B2FB) return UCD_PROPERTY_IDEOGRAPHIC; break; case 0x020000: if (c >= 0x020000 && c <= 0x02A6D6) return UCD_PROPERTY_IDEOGRAPHIC | UCD_PROPERTY_UNIFIED_IDEOGRAPH; if (c >= 0x02A700 && c <= 0x02B734) return UCD_PROPERTY_IDEOGRAPHIC | UCD_PROPERTY_UNIFIED_IDEOGRAPH; if (c >= 0x02B740 && c <= 0x02B81D) return UCD_PROPERTY_IDEOGRAPHIC | UCD_PROPERTY_UNIFIED_IDEOGRAPH; if (c >= 0x02B820 && c <= 0x02CEA1) return UCD_PROPERTY_IDEOGRAPHIC | UCD_PROPERTY_UNIFIED_IDEOGRAPH; + if (c >= 0x02CEB0 && c <= 0x02EBE0) return UCD_PROPERTY_IDEOGRAPHIC | UCD_PROPERTY_UNIFIED_IDEOGRAPH; if (c >= 0x02F800 && c <= 0x02FA1D) return UCD_PROPERTY_IDEOGRAPHIC; break; } @@ -606,6 +605,7 @@ static ucd_property properties_Mc(codepoint_t c) if (c >= 0x1C34 && c <= 0x1C35) return UCD_PROPERTY_OTHER_ALPHABETIC; if (c == 0x1CE1) return UCD_PROPERTY_DIACRITIC; if (c >= 0x1CF2 && c <= 0x1CF3) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c == 0x1CF7) return UCD_PROPERTY_DIACRITIC; break; case 0x3000: if (c >= 0x302E && c <= 0x302F) return UCD_PROPERTY_DIACRITIC | UCD_PROPERTY_OTHER_GRAPHEME_EXTEND; @@ -702,6 +702,12 @@ static ucd_property properties_Mc(codepoint_t c) if (c >= 0x011720 && c <= 0x011721) return UCD_PROPERTY_OTHER_ALPHABETIC; if (c == 0x011726) return UCD_PROPERTY_OTHER_ALPHABETIC; break; + case 0x011A00: + if (c >= 0x011A07 && c <= 0x011A08) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c == 0x011A39) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x011A57 && c <= 0x011A58) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c == 0x011A97) return UCD_PROPERTY_OTHER_ALPHABETIC; + break; case 0x011C00: if (c == 0x011C2F) return UCD_PROPERTY_OTHER_ALPHABETIC; if (c == 0x011C3E) return UCD_PROPERTY_OTHER_ALPHABETIC; @@ -811,6 +817,8 @@ static ucd_property properties_Mn(codepoint_t c) if (c >= 0x0AC7 && c <= 0x0AC8) return UCD_PROPERTY_OTHER_ALPHABETIC; if (c == 0x0ACD) return UCD_PROPERTY_DIACRITIC; if (c >= 0x0AE2 && c <= 0x0AE3) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x0AFA && c <= 0x0AFC) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x0AFD && c <= 0x0AFF) return UCD_PROPERTY_DIACRITIC; break; case 0x0B00: if (c == 0x0B01) return UCD_PROPERTY_OTHER_ALPHABETIC; @@ -841,7 +849,8 @@ static ucd_property properties_Mn(codepoint_t c) if (c >= 0x0CE2 && c <= 0x0CE3) return UCD_PROPERTY_OTHER_ALPHABETIC; break; case 0x0D00: - if (c == 0x0D01) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x0D00 && c <= 0x0D01) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x0D3B && c <= 0x0D3C) return UCD_PROPERTY_DIACRITIC; if (c >= 0x0D41 && c <= 0x0D44) return UCD_PROPERTY_OTHER_ALPHABETIC; if (c == 0x0D4D) return UCD_PROPERTY_DIACRITIC; if (c >= 0x0D62 && c <= 0x0D63) return UCD_PROPERTY_OTHER_ALPHABETIC; @@ -957,7 +966,7 @@ static ucd_property properties_Mn(codepoint_t c) case 0x1D00: if (c >= 0x1DC4 && c <= 0x1DCF) return UCD_PROPERTY_DIACRITIC; if (c >= 0x1DE7 && c <= 0x1DF4) return UCD_PROPERTY_OTHER_ALPHABETIC; - if (c == 0x1DF5) return UCD_PROPERTY_DIACRITIC; + if (c >= 0x1DF5 && c <= 0x1DF9) return UCD_PROPERTY_DIACRITIC; if (c >= 0x1DFD && c <= 0x1DFF) return UCD_PROPERTY_DIACRITIC; break; case 0x2000: @@ -1104,6 +1113,16 @@ static ucd_property properties_Mn(codepoint_t c) if (c >= 0x011727 && c <= 0x01172A) return UCD_PROPERTY_OTHER_ALPHABETIC; if (c == 0x01172B) return UCD_PROPERTY_DIACRITIC; break; + case 0x011A00: + if (c >= 0x011A01 && c <= 0x011A0A) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c == 0x011A34) return UCD_PROPERTY_DIACRITIC; + if (c >= 0x011A35 && c <= 0x011A3E) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c == 0x011A47) return UCD_PROPERTY_DIACRITIC; + if (c >= 0x011A51 && c <= 0x011A5B) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x011A8A && c <= 0x011A96) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c == 0x011A98) return UCD_PROPERTY_EXTENDER; + if (c == 0x011A99) return UCD_PROPERTY_DIACRITIC; + break; case 0x011C00: if (c >= 0x011C30 && c <= 0x011C36) return UCD_PROPERTY_OTHER_ALPHABETIC; if (c >= 0x011C38 && c <= 0x011C3D) return UCD_PROPERTY_OTHER_ALPHABETIC; @@ -1113,6 +1132,16 @@ static ucd_property properties_Mn(codepoint_t c) if (c >= 0x011CB2 && c <= 0x011CB3) return UCD_PROPERTY_OTHER_ALPHABETIC; if (c >= 0x011CB5 && c <= 0x011CB6) return UCD_PROPERTY_OTHER_ALPHABETIC; break; + case 0x011D00: + if (c >= 0x011D31 && c <= 0x011D36) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c == 0x011D3A) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x011D3C && c <= 0x011D3D) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x011D3F && c <= 0x011D41) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c == 0x011D42) return UCD_PROPERTY_DIACRITIC; + if (c == 0x011D43) return UCD_PROPERTY_OTHER_ALPHABETIC; + if (c >= 0x011D44 && c <= 0x011D45) return UCD_PROPERTY_DIACRITIC; + if (c == 0x011D47) return UCD_PROPERTY_OTHER_ALPHABETIC; + break; case 0x016A00: if (c >= 0x016AF0 && c <= 0x016AF4) return UCD_PROPERTY_DIACRITIC; break; @@ -1537,6 +1566,11 @@ static ucd_property properties_Po(codepoint_t c) case 0x11700: if (c >= 0x01173C && c <= 0x01173E) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_SENTENCE_TERMINAL; break; + case 0x11A00: + if (c >= 0x011A42 && c <= 0x011A43) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_SENTENCE_TERMINAL; + if (c >= 0x011A9B && c <= 0x011A9C) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_SENTENCE_TERMINAL; + if (c >= 0x011AA1 && c <= 0x011AA2) return UCD_PROPERTY_TERMINAL_PUNCTUATION; + break; case 0x11C00: if (c >= 0x011C41 && c <= 0x011C42) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_SENTENCE_TERMINAL; if (c == 0x011C43) return UCD_PROPERTY_TERMINAL_PUNCTUATION; @@ -1758,7 +1792,7 @@ static ucd_property properties_So(codepoint_t c) if (c == 0x23F3) return UCD_PROPERTY_PATTERN_SYNTAX | UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c >= 0x23E9 && c <= 0x23F3) return UCD_PROPERTY_PATTERN_SYNTAX | UCD_PROPERTY_EMOJI; if (c >= 0x23F8 && c <= 0x23FA) return UCD_PROPERTY_PATTERN_SYNTAX | UCD_PROPERTY_EMOJI; - if (c >= 0x23E3 && c <= 0x23FE) return UCD_PROPERTY_PATTERN_SYNTAX; + if (c >= 0x23E3) return UCD_PROPERTY_PATTERN_SYNTAX; break; case 0x2400: if (c >= 0x2400 && c <= 0x244A) return UCD_PROPERTY_PATTERN_SYNTAX; @@ -1999,14 +2033,19 @@ static ucd_property properties_So(codepoint_t c) if (c == 0x01F926) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c >= 0x01F920 && c <= 0x01F927) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c == 0x01F930) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; + if (c <= 0x01F932) return 0; if (c == 0x01F93B) return 0; if (c >= 0x01F93A && c <= 0x01F93C) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c >= 0x01F933 && c <= 0x01F93E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c == 0x01F946) return 0; if (c >= 0x01F940 && c <= 0x01F94B) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c == 0x01F94C) return 0; if (c >= 0x01F950 && c <= 0x01F95E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c >= 0x01F95F && c <= 0x01F96B) return 0; if (c >= 0x01F980 && c <= 0x01F991) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c >= 0x01F992 && c <= 0x01F997) return 0; if (c == 0x01F9C0) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c >= 0x01F9D0 && c <= 0x01F9E6) return 0; return UCD_PROPERTY_EMOJI; } return 0; diff --git a/src/scripts.c b/src/scripts.c index f5883d12..ae1a4893 100644 --- a/src/scripts.c +++ b/src/scripts.c @@ -67,6 +67,7 @@ #define Geok UCD_SCRIPT_Geok #define Geor UCD_SCRIPT_Geor #define Glag UCD_SCRIPT_Glag +#define Gonm UCD_SCRIPT_Gonm #define Goth UCD_SCRIPT_Goth #define Gran UCD_SCRIPT_Gran #define Grek UCD_SCRIPT_Grek @@ -164,6 +165,7 @@ #define Sind UCD_SCRIPT_Sind #define Sinh UCD_SCRIPT_Sinh #define Sora UCD_SCRIPT_Sora +#define Soyo UCD_SCRIPT_Soyo #define Sund UCD_SCRIPT_Sund #define Sylo UCD_SCRIPT_Sylo #define Syrc UCD_SCRIPT_Syrc @@ -193,6 +195,7 @@ #define Xpeo UCD_SCRIPT_Xpeo #define Xsux UCD_SCRIPT_Xsux #define Yiii UCD_SCRIPT_Yiii +#define Zanb UCD_SCRIPT_Zanb #define Zinh UCD_SCRIPT_Zinh #define Zmth UCD_SCRIPT_Zmth #define Zsym UCD_SCRIPT_Zsym @@ -645,7 +648,7 @@ static const uint8_t scripts_000500[256] = static const uint8_t scripts_000600[256] = { /* 00 */ Arab, Arab, Arab, Arab, Arab, Zyyy, Arab, Arab, Arab, Arab, Arab, Arab, Zyyy, Arab, Arab, Arab, - /* 10 */ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zyyy, Zyyy, Zzzz, Arab, Zyyy, + /* 10 */ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zyyy, Arab, Zzzz, Arab, Zyyy, /* 20 */ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, /* 30 */ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, /* 40 */ Zyyy, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zinh, Zinh, Zinh, Zinh, Zinh, @@ -690,7 +693,7 @@ static const uint8_t scripts_000800[256] = /* 30 */ Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Zzzz, /* 40 */ Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, /* 50 */ Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Zzzz, Zzzz, Mand, Zzzz, - /* 60 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 60 */ Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 70 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 80 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 90 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, @@ -719,7 +722,7 @@ static const uint8_t scripts_000900[256] = /* C0 */ Beng, Beng, Beng, Beng, Beng, Zzzz, Zzzz, Beng, Beng, Zzzz, Zzzz, Beng, Beng, Beng, Beng, Zzzz, /* D0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Beng, Zzzz, Zzzz, Zzzz, Zzzz, Beng, Beng, Zzzz, Beng, /* E0 */ Beng, Beng, Beng, Beng, Zzzz, Zzzz, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, - /* F0 */ Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Zzzz, Zzzz, Zzzz, Zzzz, + /* F0 */ Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Zzzz, Zzzz, }; static const uint8_t scripts_000A00[256] = @@ -739,7 +742,7 @@ static const uint8_t scripts_000A00[256] = /* C0 */ Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Zzzz, Gujr, Gujr, Gujr, Zzzz, Gujr, Gujr, Gujr, Zzzz, Zzzz, /* D0 */ Gujr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* E0 */ Gujr, Gujr, Gujr, Gujr, Zzzz, Zzzz, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, - /* F0 */ Gujr, Gujr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Gujr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* F0 */ Gujr, Gujr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, }; static const uint8_t scripts_000B00[256] = @@ -784,10 +787,10 @@ static const uint8_t scripts_000C00[256] = static const uint8_t scripts_000D00[256] = { - /* 00 */ Zzzz, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym, + /* 00 */ Mlym, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym, /* 10 */ Mlym, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, /* 20 */ Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, - /* 30 */ Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Zzzz, Zzzz, Mlym, Mlym, Mlym, + /* 30 */ Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, /* 40 */ Mlym, Mlym, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, /* 50 */ Zzzz, Zzzz, Zzzz, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, /* 60 */ Mlym, Mlym, Mlym, Mlym, Zzzz, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, @@ -1039,7 +1042,7 @@ static const uint8_t scripts_001C00[256] = /* C0 */ Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* D0 */ Zinh, Zinh, Zinh, Zyyy, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, /* E0 */ Zinh, Zyyy, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zyyy, Zyyy, - /* F0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zyyy, Zyyy, Zzzz, Zinh, Zinh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* F0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zyyy, Zyyy, Zyyy, Zinh, Zinh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, }; static const uint8_t scripts_001D00[256] = @@ -1059,7 +1062,7 @@ static const uint8_t scripts_001D00[256] = /* C0 */ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, /* D0 */ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, /* E0 */ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, - /* F0 */ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zinh, Zinh, Zinh, Zinh, Zinh, + /* F0 */ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zzzz, Zinh, Zinh, Zinh, Zinh, Zinh, }; static const uint8_t scripts_001F00[256] = @@ -1095,7 +1098,7 @@ static const uint8_t scripts_002000[256] = /* 80 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, /* 90 */ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zzzz, Zzzz, Zzzz, /* A0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* B0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, + /* B0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, /* C0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* D0 */ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, /* E0 */ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, @@ -1122,26 +1125,6 @@ static const uint8_t scripts_002100[256] = /* F0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, }; -static const uint8_t scripts_002300[256] = -{ - /* 00 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 10 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 20 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 30 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 40 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 50 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 60 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 70 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 80 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 90 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* A0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* B0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* C0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* D0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* E0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* F0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, -}; - static const uint8_t scripts_002400[256] = { /* 00 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, @@ -1177,7 +1160,7 @@ static const uint8_t scripts_002B00[256] = /* A0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, /* B0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, /* C0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* D0 */ Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* D0 */ Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* E0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, /* F0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, }; @@ -1228,7 +1211,7 @@ static const uint8_t scripts_002E00[256] = /* 10 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, /* 20 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, /* 30 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 40 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 40 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 50 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 60 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 70 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, @@ -1286,7 +1269,7 @@ static const uint8_t scripts_003100[256] = { /* 00 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, /* 10 */ Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, - /* 20 */ Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Zzzz, Zzzz, + /* 20 */ Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Zzzz, /* 30 */ Zzzz, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, /* 40 */ Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, /* 50 */ Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, @@ -1377,8 +1360,8 @@ static const uint8_t scripts_009F00[256] = /* A0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, /* B0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, /* C0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, - /* D0 */ Hani, Hani, Hani, Hani, Hani, Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* E0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* D0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* E0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* F0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, }; @@ -1706,7 +1689,7 @@ static const uint8_t scripts_010300[256] = { /* 00 */ Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, /* 10 */ Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, - /* 20 */ Ital, Ital, Ital, Ital, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 20 */ Ital, Ital, Ital, Ital, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Ital, Ital, Ital, /* 30 */ Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, /* 40 */ Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 50 */ Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, @@ -2084,17 +2067,17 @@ static const uint8_t scripts_011800[256] = static const uint8_t scripts_011A00[256] = { - /* 00 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 10 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 20 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 30 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 40 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 50 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 60 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 70 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 80 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 90 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* A0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 00 */ Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, + /* 10 */ Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, + /* 20 */ Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, + /* 30 */ Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, + /* 40 */ Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 50 */ Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, + /* 60 */ Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, + /* 70 */ Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, + /* 80 */ Soyo, Soyo, Soyo, Soyo, Zzzz, Zzzz, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, + /* 90 */ Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Zzzz, Soyo, Soyo, + /* A0 */ Soyo, Soyo, Soyo, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* B0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* C0 */ Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, /* D0 */ Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, @@ -2122,6 +2105,26 @@ static const uint8_t scripts_011C00[256] = /* F0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, }; +static const uint8_t scripts_011D00[256] = +{ + /* 00 */ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Zzzz, Gonm, Gonm, Zzzz, Gonm, Gonm, Gonm, Gonm, Gonm, + /* 10 */ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, + /* 20 */ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, + /* 30 */ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Zzzz, Zzzz, Zzzz, Gonm, Zzzz, Gonm, Gonm, Zzzz, Gonm, + /* 40 */ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 50 */ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 60 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 70 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 80 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 90 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* A0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* B0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* C0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* D0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* E0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* F0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, +}; + static const uint8_t scripts_012300[256] = { /* 00 */ Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, @@ -2278,7 +2281,7 @@ static const uint8_t scripts_016F00[256] = /* B0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* C0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* D0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* E0 */ Tang, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* E0 */ Tang, Nshu, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* F0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, }; @@ -2324,22 +2327,62 @@ static const uint8_t scripts_018A00[256] = static const uint8_t scripts_01B000[256] = { - /* 00 */ Kana, Hira, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 10 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 00 */ Kana, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 10 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 20 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 30 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 40 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 50 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 60 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 70 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 80 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 90 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* A0 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* B0 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* C0 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* D0 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* E0 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* F0 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, +}; + +static const uint8_t scripts_01B100[256] = +{ + /* 00 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, + /* 10 */ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Zzzz, /* 20 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 30 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 40 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 50 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 60 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 70 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 80 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 90 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* A0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* B0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* C0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* D0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* E0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* F0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 70 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 80 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 90 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* A0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* B0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* C0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* D0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* E0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* F0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, +}; + +static const uint8_t scripts_01B200[256] = +{ + /* 00 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 10 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 20 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 30 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 40 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 50 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 60 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 70 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 80 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* 90 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* A0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* B0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* C0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* D0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* E0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, + /* F0 */ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Zzzz, Zzzz, Zzzz, Zzzz, }; static const uint8_t scripts_01BC00[256] = @@ -2670,7 +2713,7 @@ static const uint8_t scripts_01F200[256] = /* 30 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, /* 40 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 50 */ Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 60 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 60 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 70 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 80 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 90 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, @@ -2697,9 +2740,9 @@ static const uint8_t scripts_01F600[256] = /* A0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, /* B0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, /* C0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* D0 */ Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* D0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* E0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, - /* F0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* F0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, }; static const uint8_t scripts_01F700[256] = @@ -2744,21 +2787,21 @@ static const uint8_t scripts_01F800[256] = static const uint8_t scripts_01F900[256] = { - /* 00 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 10 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, - /* 20 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* 30 */ Zyyy, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, - /* 40 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, - /* 50 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, - /* 60 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 00 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, + /* 10 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, + /* 20 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, + /* 30 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, + /* 40 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, + /* 50 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, + /* 60 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, /* 70 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* 80 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, - /* 90 */ Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* 90 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* A0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* B0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* C0 */ Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* D0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* E0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* D0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, + /* E0 */ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* F0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, }; @@ -2835,10 +2878,30 @@ static const uint8_t scripts_02CE00[256] = /* 80 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, /* 90 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, /* A0 */ Hani, Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* B0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* C0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* D0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, - /* E0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, + /* B0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* C0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* D0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* E0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* F0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, +}; + +static const uint8_t scripts_02EB00[256] = +{ + /* 00 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 10 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 20 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 30 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 40 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 50 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 60 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 70 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 80 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* 90 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* A0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* B0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* C0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* D0 */ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, + /* E0 */ Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, /* F0 */ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, }; @@ -2939,7 +3002,7 @@ static const uint8_t *scripts_000000_00D7FF[] = scripts_002000, scripts_002100, scripts_Zyyy, /* 002200 */ - scripts_002300, + scripts_Zyyy, /* 002300 */ scripts_002400, scripts_Zyyy, /* 002500 */ scripts_Zyyy, /* 002600 */ @@ -3161,7 +3224,7 @@ static const uint8_t *scripts_00F800_02FAFF[] = scripts_011A00, scripts_Zzzz, /* 011B00 */ scripts_011C00, - scripts_Zzzz, /* 011D00 */ + scripts_011D00, scripts_Zzzz, /* 011E00 */ scripts_Zzzz, /* 011F00 */ scripts_Xsux, /* 012000 */ @@ -3309,8 +3372,8 @@ static const uint8_t *scripts_00F800_02FAFF[] = scripts_Zzzz, /* 01AE00 */ scripts_Zzzz, /* 01AF00 */ scripts_01B000, - scripts_Zzzz, /* 01B100 */ - scripts_Zzzz, /* 01B200 */ + scripts_01B100, + scripts_01B200, scripts_Zzzz, /* 01B300 */ scripts_Zzzz, /* 01B400 */ scripts_Zzzz, /* 01B500 */ @@ -3595,35 +3658,35 @@ static const uint8_t *scripts_00F800_02FAFF[] = scripts_Hani, /* 02CC00 */ scripts_Hani, /* 02CD00 */ scripts_02CE00, - scripts_Zzzz, /* 02CF00 */ - scripts_Zzzz, /* 02D000 */ - scripts_Zzzz, /* 02D100 */ - scripts_Zzzz, /* 02D200 */ - scripts_Zzzz, /* 02D300 */ - scripts_Zzzz, /* 02D400 */ - scripts_Zzzz, /* 02D500 */ - scripts_Zzzz, /* 02D600 */ - scripts_Zzzz, /* 02D700 */ - scripts_Zzzz, /* 02D800 */ - scripts_Zzzz, /* 02D900 */ - scripts_Zzzz, /* 02DA00 */ - scripts_Zzzz, /* 02DB00 */ - scripts_Zzzz, /* 02DC00 */ - scripts_Zzzz, /* 02DD00 */ - scripts_Zzzz, /* 02DE00 */ - scripts_Zzzz, /* 02DF00 */ - scripts_Zzzz, /* 02E000 */ - scripts_Zzzz, /* 02E100 */ - scripts_Zzzz, /* 02E200 */ - scripts_Zzzz, /* 02E300 */ - scripts_Zzzz, /* 02E400 */ - scripts_Zzzz, /* 02E500 */ - scripts_Zzzz, /* 02E600 */ - scripts_Zzzz, /* 02E700 */ - scripts_Zzzz, /* 02E800 */ - scripts_Zzzz, /* 02E900 */ - scripts_Zzzz, /* 02EA00 */ - scripts_Zzzz, /* 02EB00 */ + scripts_Hani, /* 02CF00 */ + scripts_Hani, /* 02D000 */ + scripts_Hani, /* 02D100 */ + scripts_Hani, /* 02D200 */ + scripts_Hani, /* 02D300 */ + scripts_Hani, /* 02D400 */ + scripts_Hani, /* 02D500 */ + scripts_Hani, /* 02D600 */ + scripts_Hani, /* 02D700 */ + scripts_Hani, /* 02D800 */ + scripts_Hani, /* 02D900 */ + scripts_Hani, /* 02DA00 */ + scripts_Hani, /* 02DB00 */ + scripts_Hani, /* 02DC00 */ + scripts_Hani, /* 02DD00 */ + scripts_Hani, /* 02DE00 */ + scripts_Hani, /* 02DF00 */ + scripts_Hani, /* 02E000 */ + scripts_Hani, /* 02E100 */ + scripts_Hani, /* 02E200 */ + scripts_Hani, /* 02E300 */ + scripts_Hani, /* 02E400 */ + scripts_Hani, /* 02E500 */ + scripts_Hani, /* 02E600 */ + scripts_Hani, /* 02E700 */ + scripts_Hani, /* 02E800 */ + scripts_Hani, /* 02E900 */ + scripts_Hani, /* 02EA00 */ + scripts_02EB00, scripts_Zzzz, /* 02EC00 */ scripts_Zzzz, /* 02ED00 */ scripts_Zzzz, /* 02EE00 */ diff --git a/src/tostring.c b/src/tostring.c index 25852355..3d89d198 100644 --- a/src/tostring.c +++ b/src/tostring.c @@ -120,6 +120,7 @@ const char *ucd_get_script_string(ucd_script s) "Geok", "Geor", "Glag", + "Gonm", "Goth", "Gran", "Grek", @@ -217,6 +218,7 @@ const char *ucd_get_script_string(ucd_script s) "Sind", "Sinh", "Sora", + "Soyo", "Sund", "Sylo", "Syrc", @@ -246,6 +248,7 @@ const char *ucd_get_script_string(ucd_script s) "Xpeo", "Xsux", "Yiii", + "Zanb", "Zinh", "Zmth", "Zsym", diff --git a/tools/scripts.py b/tools/scripts.py index ba125f6d..b6aaa752 100755 --- a/tools/scripts.py +++ b/tools/scripts.py @@ -153,6 +153,7 @@ if __name__ == '__main__': #define Geok UCD_SCRIPT_Geok #define Geor UCD_SCRIPT_Geor #define Glag UCD_SCRIPT_Glag +#define Gonm UCD_SCRIPT_Gonm #define Goth UCD_SCRIPT_Goth #define Gran UCD_SCRIPT_Gran #define Grek UCD_SCRIPT_Grek @@ -250,6 +251,7 @@ if __name__ == '__main__': #define Sind UCD_SCRIPT_Sind #define Sinh UCD_SCRIPT_Sinh #define Sora UCD_SCRIPT_Sora +#define Soyo UCD_SCRIPT_Soyo #define Sund UCD_SCRIPT_Sund #define Sylo UCD_SCRIPT_Sylo #define Syrc UCD_SCRIPT_Syrc @@ -279,6 +281,7 @@ if __name__ == '__main__': #define Xpeo UCD_SCRIPT_Xpeo #define Xsux UCD_SCRIPT_Xsux #define Yiii UCD_SCRIPT_Yiii +#define Zanb UCD_SCRIPT_Zanb #define Zinh UCD_SCRIPT_Zinh #define Zmth UCD_SCRIPT_Zmth #define Zsym UCD_SCRIPT_Zsym From 023ebace9aa44ccad2ad9ff73925c40e3df2fa9f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 15:27:53 +0100 Subject: [PATCH 014/137] Add Regional_Indicator support from PropList.txt. --- src/include/ucd/ucd.h | 2 ++ src/proplist.c | 2 +- tools/printdata.py | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/include/ucd/ucd.h b/src/include/ucd/ucd.h index 33133c5f..d3d90a18 100644 --- a/src/include/ucd/ucd.h +++ b/src/include/ucd/ucd.h @@ -369,6 +369,7 @@ typedef uint64_t ucd_property; #define UCD_PROPERTY_EMOJI_PRESENTATION 0x0000000400000000ull /**< @brief Emoji_Presentation */ #define UCD_PROPERTY_EMOJI_MODIFIER 0x0000000800000000ull /**< @brief Emoji_Modifier */ #define UCD_PROPERTY_EMOJI_MODIFIER_BASE 0x0000001000000000ull /**< @brief Emoji_Modifier_Base */ +#define UCD_PROPERTY_REGIONAL_INDICATOR 0x0000002000000000ull /**< @brief Regional_Indicator */ /** @brief Return the properties of the specified codepoint. * @@ -868,6 +869,7 @@ namespace ucd Emoji_Presentation = UCD_PROPERTY_EMOJI_PRESENTATION, /**< @brief Emoji_Presentation */ Emoji_Modifier = UCD_PROPERTY_EMOJI_MODIFIER, /**< @brief Emoji_Modifier */ Emoji_Modifier_Base = UCD_PROPERTY_EMOJI_MODIFIER_BASE, /**< @brief Emoji_Modifier_Base */ + Regional_Indicator = UCD_PROPERTY_REGIONAL_INDICATOR, /**< @brief Regional_Indicator */ }; /** @brief Return the properties of the specified codepoint. diff --git a/src/proplist.c b/src/proplist.c index f8f0dc2d..eae604f0 100644 --- a/src/proplist.c +++ b/src/proplist.c @@ -1929,7 +1929,7 @@ static ucd_property properties_So(codepoint_t c) if (c >= 0x01F170 && c <= 0x01F189) return UCD_PROPERTY_OTHER_ALPHABETIC | UCD_PROPERTY_OTHER_UPPERCASE; if (c == 0x01F18E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c >= 0x01F191 && c <= 0x01F19A) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F1E6) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c >= 0x01F1E6) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_REGIONAL_INDICATOR; break; case 0x01F200: if (c == 0x01F201) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; diff --git a/tools/printdata.py b/tools/printdata.py index eac2892f..42241036 100755 --- a/tools/printdata.py +++ b/tools/printdata.py @@ -165,6 +165,7 @@ def properties(data): props += (2 ** 34) * data.get('Emoji_Presentation', 0) # emoji-data props += (2 ** 35) * data.get('Emoji_Modifier', 0) # emoji-data props += (2 ** 36) * data.get('Emoji_Modifier_Base', 0) # emoji-data + props += (2 ** 37) * data.get('Regional_Indicator', 0) return props if __name__ == '__main__': From 18d3a0819a5e581b87344575583969e7f9bf59b8 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 15:41:46 +0100 Subject: [PATCH 015/137] Unicode Emoji 5.0 --- CHANGELOG.md | 1 + Makefile.am | 2 +- src/proplist.c | 19 ++++++++++--------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dbb62f6..73ef2ea8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * PropList and emoji-data property lookup. * Support building with a C89 compiler. * Update to Unicode Character Data 10.0.0. +* Unicode Emoji 5.0. ## 9.0.0 - 2016-12-28 diff --git a/Makefile.am b/Makefile.am index 1d9931d1..3a331e85 100644 --- a/Makefile.am +++ b/Makefile.am @@ -55,7 +55,7 @@ EXTRA_DIST += ChangeLog ############################# Unicode Data #################################### -EMOJI_VERSION=4.0 +EMOJI_VERSION=5.0 UCD_VERSION=@UCD_VERSION@ UCD_ROOTDIR=data/ucd UCD_SRCDIR=http://www.unicode.org/Public diff --git a/src/proplist.c b/src/proplist.c index eae604f0..29c1e0f5 100644 --- a/src/proplist.c +++ b/src/proplist.c @@ -2024,28 +2024,29 @@ static ucd_property properties_So(codepoint_t c) if (c >= 0x01F6EB && c <= 0x01F6EC) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c == 0x01F6F0) return UCD_PROPERTY_EMOJI; if (c == 0x01F6F3) return UCD_PROPERTY_EMOJI; - if (c >= 0x01F6F4 && c <= 0x01F6F6) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c >= 0x01F6F4 && c <= 0x01F6F8) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; break; case 0x01F900: + if (c <= 0x01F90B) return 0; if (c >= 0x01F918 && c <= 0x01F91C) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c >= 0x01F910 && c <= 0x01F91D) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c == 0x01F91E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; + if (c >= 0x01F91E && c <= 0x01F91F) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c == 0x01F926) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; - if (c >= 0x01F920 && c <= 0x01F927) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c == 0x01F930) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; - if (c <= 0x01F932) return 0; + if (c >= 0x01F920 && c <= 0x01F92F) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c >= 0x01F930 && c <= 0x01F932) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c == 0x01F93B) return 0; if (c >= 0x01F93A && c <= 0x01F93C) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c >= 0x01F933 && c <= 0x01F93E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c == 0x01F946) return 0; if (c >= 0x01F940 && c <= 0x01F94B) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c == 0x01F94C) return 0; + if (c == 0x01F94C) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c >= 0x01F950 && c <= 0x01F95E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F95F && c <= 0x01F96B) return 0; + if (c >= 0x01F95F && c <= 0x01F96B) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c >= 0x01F980 && c <= 0x01F991) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F992 && c <= 0x01F997) return 0; + if (c >= 0x01F992 && c <= 0x01F997) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c == 0x01F9C0) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F9D0 && c <= 0x01F9E6) return 0; + if (c >= 0x01F9D1 && c <= 0x01F9DD) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; + if (c >= 0x01F9D0 && c <= 0x01F9E6) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; return UCD_PROPERTY_EMOJI; } return 0; From 1cb4115eabddc0d012c2c1a008bbe9086f0fe2bf Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 15:51:37 +0100 Subject: [PATCH 016/137] Add Emoji_Component support from emoji-data.txt. --- src/include/ucd/ucd.h | 2 ++ src/proplist.c | 10 +++++----- tools/printdata.py | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/include/ucd/ucd.h b/src/include/ucd/ucd.h index d3d90a18..2c6bee24 100644 --- a/src/include/ucd/ucd.h +++ b/src/include/ucd/ucd.h @@ -370,6 +370,7 @@ typedef uint64_t ucd_property; #define UCD_PROPERTY_EMOJI_MODIFIER 0x0000000800000000ull /**< @brief Emoji_Modifier */ #define UCD_PROPERTY_EMOJI_MODIFIER_BASE 0x0000001000000000ull /**< @brief Emoji_Modifier_Base */ #define UCD_PROPERTY_REGIONAL_INDICATOR 0x0000002000000000ull /**< @brief Regional_Indicator */ +#define UCD_PROPERTY_EMOJI_COMPONENT 0x0000004000000000ull /**< @brief Emoji_Component */ /** @brief Return the properties of the specified codepoint. * @@ -870,6 +871,7 @@ namespace ucd Emoji_Modifier = UCD_PROPERTY_EMOJI_MODIFIER, /**< @brief Emoji_Modifier */ Emoji_Modifier_Base = UCD_PROPERTY_EMOJI_MODIFIER_BASE, /**< @brief Emoji_Modifier_Base */ Regional_Indicator = UCD_PROPERTY_REGIONAL_INDICATOR, /**< @brief Regional_Indicator */ + Emoji_Component = UCD_PROPERTY_EMOJI_COMPONENT, /**< @brief Emoji_Component */ }; /** @brief Return the properties of the specified codepoint. diff --git a/src/proplist.c b/src/proplist.c index 29c1e0f5..c468a9e8 100644 --- a/src/proplist.c +++ b/src/proplist.c @@ -1187,7 +1187,7 @@ static ucd_property properties_Nd(codepoint_t c) switch (c & 0xFFFFFF00) { case 0x0000: - if (c >= 0x0030 && c <= 0x0039) return UCD_PROPERTY_HEX_DIGIT | UCD_PROPERTY_ASCII_HEX_DIGIT | UCD_PROPERTY_EMOJI; + if (c >= 0x0030 && c <= 0x0039) return UCD_PROPERTY_HEX_DIGIT | UCD_PROPERTY_ASCII_HEX_DIGIT | UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_COMPONENT; break; case 0xFF00: if (c >= 0xFF10 && c <= 0xFF19) return UCD_PROPERTY_HEX_DIGIT; @@ -1349,9 +1349,9 @@ static ucd_property properties_Po(codepoint_t c) case 0x0000: if (c == 0x0021) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_SENTENCE_TERMINAL | UCD_PROPERTY_PATTERN_SYNTAX; if (c == 0x0022) return UCD_PROPERTY_QUOTATION_MARK | UCD_PROPERTY_PATTERN_SYNTAX; - if (c == 0x0023) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_PATTERN_SYNTAX; + if (c == 0x0023) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_PATTERN_SYNTAX | UCD_PROPERTY_EMOJI_COMPONENT; if (c == 0x0027) return UCD_PROPERTY_QUOTATION_MARK | UCD_PROPERTY_PATTERN_SYNTAX; - if (c == 0x002A) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_PATTERN_SYNTAX; + if (c == 0x002A) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_PATTERN_SYNTAX | UCD_PROPERTY_EMOJI_COMPONENT; if (c == 0x002C) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_PATTERN_SYNTAX; if (c == 0x002E) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_SENTENCE_TERMINAL | UCD_PROPERTY_PATTERN_SYNTAX; if (c >= 0x003A && c <= 0x003B) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_PATTERN_SYNTAX; @@ -1701,7 +1701,7 @@ static ucd_property properties_Sk(codepoint_t c) if (c == 0xFFE3) return UCD_PROPERTY_DIACRITIC; break; case 0x01F300: - return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER; + return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER | UCD_PROPERTY_EMOJI_COMPONENT; } return 0; } @@ -1929,7 +1929,7 @@ static ucd_property properties_So(codepoint_t c) if (c >= 0x01F170 && c <= 0x01F189) return UCD_PROPERTY_OTHER_ALPHABETIC | UCD_PROPERTY_OTHER_UPPERCASE; if (c == 0x01F18E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c >= 0x01F191 && c <= 0x01F19A) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F1E6) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_REGIONAL_INDICATOR; + if (c >= 0x01F1E6) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_REGIONAL_INDICATOR | UCD_PROPERTY_EMOJI_COMPONENT; break; case 0x01F200: if (c == 0x01F201) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; diff --git a/tools/printdata.py b/tools/printdata.py index 42241036..513a890c 100755 --- a/tools/printdata.py +++ b/tools/printdata.py @@ -165,7 +165,8 @@ def properties(data): props += (2 ** 34) * data.get('Emoji_Presentation', 0) # emoji-data props += (2 ** 35) * data.get('Emoji_Modifier', 0) # emoji-data props += (2 ** 36) * data.get('Emoji_Modifier_Base', 0) # emoji-data - props += (2 ** 37) * data.get('Regional_Indicator', 0) + props += (2 ** 37) * data.get('Regional_Indicator', 0) # PropList 10.0.0 + props += (2 ** 38) * data.get('Emoji_Component', 0) # emoji-data 5.0 return props if __name__ == '__main__': From f26aca0aa1b9485634314d0d1710d2a0bb67776d Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 25 Jun 2017 15:55:34 +0100 Subject: [PATCH 017/137] ucd-tools 10.0.0 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73ef2ea8..6fe7275d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 10.0.0 - (In Progress) +## 10.0.0 - 2017-06-25 * Add `iswblank` and `iswxdigit` compatibility. * Improve ctype compatibility. From 1f63acd93d6a750d1857ae5ff3cc05968fb7b961 Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Mon, 26 Jun 2017 22:42:12 +0300 Subject: [PATCH 018/137] Documentation: links to sonic and pcaudiolib changed to forks of espeak-ng project --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 79dd7896..f624c4ad 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ To build eSpeak NG on Windows, you will need: 1. a copy of Visual Studio 2013 or later, such as the Community Edition; 2. the Windows 8.1 SDK; 3. the [WiX installer](http://wixtoolset.org) plugin; -4. the [pcaudiolib](http://github.com/rhdunn/pcaudiolib) project checked out to +4. the [pcaudiolib](https://github.com/espeak-ng/pcaudiolib) project checked out to `src` (as `src/pcaudiolib`). You can then open and build the `src/windows/espeak-ng.sln` solution in Visual @@ -104,9 +104,9 @@ In order to build eSpeak NG, you need: Optionally, you need: -1. the [pcaudiolib](https://github.com/rhdunn/pcaudiolib) development library +1. the [pcaudiolib](https://github.com/espeak-ng/pcaudiolib) development library to enable audio output; -3. the [sonic](https://github.com/waywardgeek/sonic) development library to +3. the [sonic](https://github.com/espeak-ng/sonic) development library to enable sonic audio speed up support; 4. the `ronn` man-page markdown processor to build the man pages. From 58a036376296864d58337401817ab6f209ab6e86 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 6 Jul 2017 19:29:14 +0100 Subject: [PATCH 019/137] Android: Fix the location of ucd-tools (it is now in src/ucd-tools). --- android/jni/Android.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/jni/Android.mk b/android/jni/Android.mk index 45be3745..e423e7e2 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -5,7 +5,7 @@ LOCAL_CFLAGS = -std=c11 # ucd-tools wide-character compatibility support: -UCDTOOLS_SRC_PATH := ../../ucd-tools/src +UCDTOOLS_SRC_PATH := ../../src/ucd-tools/src UCDTOOLS_SRC_FILES := \ $(subst $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH),$(UCDTOOLS_SRC_PATH),$(wildcard $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH)/*.c*)) From d20422f1923c5a4868c79f8ebfc5d86a3c5ceaf7 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 9 Jul 2017 15:06:26 +0100 Subject: [PATCH 020/137] en: various pronunciation fixes --- dictsource/en_list | 9 ++++++--- dictsource/en_rules | 17 +++++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/dictsource/en_list b/dictsource/en_list index b1e02404..bbba908c 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -2716,6 +2716,7 @@ nonsense n0ns@ns nonetheless nVnD@l'Es nosedive noUzdaIv nosir noUs3: +?5 nosir noUsIR not noUt // for noted, notable, etc nots n0ts (nôtre dame) noUtr@'dA:m @@ -3420,7 +3421,7 @@ sincerest sIns'i@r@st sinus saIn@s siphon $alt2 sir s,3: $only -?5 sir s,VR $only +?5 sir s,IR $only siren saIr@n site saIt // for sited ski ski: @@ -3455,12 +3456,13 @@ sommelier s0m'Eli@ son sVn sonar soUnA@ sonny sVnI +sooth su:T $only +sopapilla soUp@p'i:@ sope soUpeI +sorbet sO@beI souffle su:fl'eI soundbite saUndbaIt souvenir su:v@n'i@3 -sopapilla soUp@p'i:@ -sorbet sO@beI soyabean sOI@bi:n specific sp@sIfIk specimen spEsI2m@n @@ -3913,6 +3915,7 @@ yer j3 $u+ ye ji: $u+ yea jeI yessir jEss3: +?5 yessir jEssIR yoghurt j0g3t ?3 yoghurt joUg3t ?3 yogurt joUg3t diff --git a/dictsource/en_rules b/dictsource/en_rules index a74b8b46..ecc53d15 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -180,7 +180,8 @@ _n) a (tional a @) a (tious 'eI ell) a (trix @ - a (triC 'eI + a (trix 'eI + a (trice 'eI n) a (tur eI n) a (tura a &) a (ture_ @ @@ -512,7 +513,7 @@ _m) ag (ell a#dZ Cp) age (_ eIdZ pp) age (_ I2dZ - _ant) ag 'ag + _ant) ag (on 'ag enr) ag (e_ 'eIdZ outr) ag (e_ eIdZ der) ag (e_ eIdZ @@ -1463,7 +1464,7 @@ _it_separ) ate (_ @t may) be (_ bi: _) be (CA bI# _) bete (lg bi:t@ - _) be (C% bE + _) be (C%+ bE _) be (atiC b%i: _) be (b bi: _) be (cl bI# @@ -1477,7 +1478,7 @@ _it_separ) ate (_ @t _) be (kn bI# _) belarus bEl@r'u:s _) be (lC bE - _) be (llig bI# + _) be (llig+ bI# _) be (re bE _) be (sC bI# _) be (stia bE @@ -2378,6 +2379,7 @@ _it_separ) ate (_ @t y) ed (_S2v d# debut) ed (_S2 d# edly (_S4m I#dl%i + eg) edly (_S3m I#dl%i c) ed (e_ 'i:d p) ed (e_ i:d p) edal Ed@L @@ -2567,6 +2569,8 @@ _it_separ) ate (_ @t en (core 0n &) ency (_ @ns%i ency (cli %EnsI + _) en (dg@ %En + _) en (dp@ %En k) en (d_ En s) en (d_ En t) en (d_ En @@ -2890,6 +2894,7 @@ _it_separ) ate (_ @t &z) es (_S2 %I#z &C) es (_S1i z xus) es (_S2 %I#z + tamus) es (_S2 %I#z // hippopotamuses es (carp I2s es (cape %Es es (capi %Es @@ -4299,6 +4304,7 @@ multip) ly laI &) mouth (_ m@T &) mouth (_$w_alt1 maUT _) multi mVlti + _) multi (pl m,VltI _) multi (@@P5 m,VltI .group mi @@ -5878,6 +5884,7 @@ multip) ly laI &) s (ic_ z n) s (ic_ s ss (ic s + mu) s (e z mu) s (ic z ea) s (ie z ea) s (il z @@ -6082,6 +6089,8 @@ multip) ly laI th (ill th gh) th (A th ee) thing DI2N + soo) th D + soo) th (say T the (_ D &) th (L03_ =T ou) thed (_ Dd From 3278ddaa721c9a9d7de2415e64cba941e2e908f8 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Mon, 10 Jul 2017 07:21:29 +0100 Subject: [PATCH 021/137] Update the UCD version to 10.0.0. --- configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 0a7e6665..9da5bfa4 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.65]) -AC_INIT([Unicode Character Database Tools], [9.0.0], [https://github.com/rhdunn/ucd-tools/issues], [ucd-tools], [https://github.com/rhdunn/ucd-tools]) +AC_INIT([Unicode Character Database Tools], [10.0.0], [https://github.com/rhdunn/ucd-tools/issues], [ucd-tools], [https://github.com/rhdunn/ucd-tools]) AM_INIT_AUTOMAKE() m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES]) @@ -34,10 +34,10 @@ dnl UCD data configuration. dnl ================================================================ AC_ARG_WITH([unicode-version], - [AS_HELP_STRING([--with-unicode-version], [Unicode version to support @<:@default=9.0.0@:>@])], + [AS_HELP_STRING([--with-unicode-version], [Unicode version to support @<:@default=10.0.0@:>@])], [AS_IF([test x"$withval" != x], [UCD_VERSION="$withval"])], - [UCD_VERSION="9.0.0"]) + [UCD_VERSION="10.0.0"]) AC_SUBST(UCD_VERSION) From 46f935d9de69a528d938746635ed4a4fa918cf83 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 15 Jul 2017 10:30:19 +0100 Subject: [PATCH 022/137] en: pronunciation fixes, including some Irish names/words --- dictsource/en_list | 10 +++------- dictsource/en_rules | 20 ++++++++++++++++---- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/dictsource/en_list b/dictsource/en_list index bbba908c..4dbf4406 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -2228,7 +2228,7 @@ idevice $alt6 idly aIdlI idiocy IdI@si ifrog $alt6 -ignoramus Igno@r'eIm@s +ignoramus IgnO@r'eIm@s illiterate $alt2 illumine $alt2 imagery ImIdZri @@ -3570,7 +3570,6 @@ tallyho talI'hoU tamale ta#mA:li tampon tamp0n tangerine tandZ@r'i:n -taoiseach ti:S@x tapestry tapI#stri tarantula t@rantS@l@ tardis $alt1 @@ -4549,8 +4548,6 @@ Annise a#ni:s ?!3 Anthony ant@ni Anton ant0n Anya anj@ -Aoife i:f@ -Aoiffe i:f@ Aphrodite afr@d'aIti Archibald A@tSIbO:ld Archie A@tSi @@ -4901,7 +4898,6 @@ Sabine sa#b'i:n Salman sa#lmA:n Samantha sa#manT@ (Santa claus) s'ant@||kl'O:z -Saoirse si@S@ Sarah se@r@ Sarisa $alt3 Seamus SeIm@s @@ -4915,8 +4911,8 @@ Sheila Si:l@ Simon saIm@n Sinead SI2neId Sinéad SI2neId -Siobhan S@vO:n -Siobhán S@vO:n +Siobhan SI2vO:n +Siobhán SI2vO:n Sonia s0nj@ Sophia soUf'i@ Sophie soUfi diff --git a/dictsource/en_rules b/dictsource/en_rules index ecc53d15..a456f48f 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -150,12 +150,16 @@ sw) a (m_ a sw) a (nk a ao eI0 + mh) ao eI // Irish, e.g. 'mhaol' /weIl/ m) ao aU p) ao aU t) ao aU ao (_ =aU - aois (_ i:S - aoise (_ i:S@ + ao (ism aU + ao (ist aU + aoi (C i: // Irish, e.g. 'Aoife' /i:f@/ + aoir (C e@ // Irish, e.g. 'Saoirse' /se@S@/ +?3 aoir (C 3: // Irish, e.g. 'Saoirse' /s3:S@/ g) ao (l eI@ aor eI'o@ m) ao (ri aU @@ -2151,6 +2155,8 @@ _it_separ) ate (_ @t e (Cical 'E e (CiuB i: &) e (_ + aoiC) e (_ @ // Irish, e.g. 'Aoife' /i:fe/ + aoiCC) e (_ @ // Irish, e.g. 'Saoirse' /se@S@/ acB) e (_ %I XC) e (_N i: vert) e (b I @@ -2775,7 +2781,7 @@ _it_separ) ate (_ @t exp) eri (en i@rI2 XC) er 3: th) er (@ 3: - h) er (@ %3 + h) er (nan %3 X) er (A E#r _h) eretical I#rEtIk@L _qu) er 3: @@ -3104,7 +3110,7 @@ _it_separ) ate (_ @t &) ford (_S4 f3d &f) ford (_S4 3d for (see f%O@ - for (ward f'o@ // straightforward + for (ward f'O@ ft (en f &) ful (_S3i f@L @@ -4293,6 +4299,8 @@ multip) ly laI _) metall (ic m@tal metabo m@t'ab0 _) meta (llu m%Eta + mh (ao w // Irish, e.g. 'mhaol' /weIl/ + aoi) mh (e v // Irish, e.g. 'Caoimhe' /ki:v@/ &) mobile m@bi:l _) mocha moUk@ mono (ga m@n'0 @@ -5853,6 +5861,10 @@ multip) ly laI Co) s (Er z Co) s (En z e) s (d z + aoi) s (e S // Irish, e.g. 'Laoise' + aoi) seach S@x // Irish, e.g. 'Taoiseach' + aoi) sigh Si // Irish, e.g. 'Taoisigh' + aoir) s (e S // Irish, e.g. 'Saoirse' _) se (clu sI# secur sI#kjU@ _) se (duc sI# From d0169db7929461793c0050d0d68651f177744b58 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 23 Jul 2017 20:32:28 +0100 Subject: [PATCH 023/137] af: Updates from Christo de Klerk. --- dictsource/af_list | 28 +++++++++++++++++++++++++++- dictsource/af_rules | 45 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 66 insertions(+), 7 deletions(-) diff --git a/dictsource/af_list b/dictsource/af_list index 9443be40..42008178 100644 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -218,6 +218,7 @@ afganistan afg'anistan alaska al'aska albanië alb'A:ne@:@- algerië alx2'e@re@:@- +alhambra al'ambra amanzimtoti $4 antwerpen antv&rp@n avignon _^_FR @@ -333,6 +334,7 @@ oberammergau o@b@r'am@rgaU oklahoma @Ukl@h'@Uma outeniekwa @Ut@n'ikwa oxford _^_EN +paardeneiland pA:rd@n_'eIlant palermo pal'&rmu pelindaba p&l@nd'A:ba perú p@ru @@ -342,6 +344,7 @@ portugal pOrtyx2al potchefstroom pOtSIfstr'o@m rhône _^_FR richardsbaai ritS@dsb'AI +riversdal r@v@rsdal riviersonderend r@fi:rsOn@r_'Ent robertson _^_EN salvador salvadO:r @@ -585,6 +588,7 @@ james _^_EN jane _^_EN janine dZ@ni:n Jean ZA~n $capital +jeff _^_EN jesebel je@s@b&l jessica _^_EN jimmy _^_EN @@ -769,9 +773,11 @@ stockenström stOk@nstro@m stuart _^_EN suzanne suz'A:n suzette suz'Et +sylvia _^_EN tania tanja telemann te@l@man terblanche t@rblA:nS +thelma _^_EN theo tiu theron tr'On thessalonicense tEsalo@nis'E:ns@ @@ -816,6 +822,7 @@ vivaldi viv'aldi viviers v@v@je@ wilhelm v@lh&l@-m williston _^_EN +woltemade vOlt@mA:d@ khumalo kum'A:lu zuma zu:ma @@ -825,6 +832,7 @@ alibama $3 antares $2 beatles _^_EN boeing _^_EN +cadillac _^_EN checkers tSEk@rs chevrolet _^_FR chrysler kraIsl@r @@ -1044,7 +1052,8 @@ fides _^_LA forma _^_LA grata _^_LA habitatio _^_LA -inclusio _^_LA +inclusio _^_LA +(in camera) @n||kam@ra (in debiti) _^_LA (in absentia) _^_LA (in extremis) _^_LA @@ -1075,6 +1084,7 @@ vivos _^_LA // main word list aangaande $2 +aanmerklik $2 aanstaande $2 (a cappella) a||kap'&la adagio ad'A:dZi;%@U @@ -1091,6 +1101,7 @@ algaande $2 alge alx2@ algehele alx2@h,e@l@ allegro al'Egru +allengs alENs allergene $3 almiskie $3 alom al_'Om @@ -1116,11 +1127,13 @@ aversie av'&rsi babelaas bab@lA:s barrikade $3 +beaming b@_A:m@N bedewete be@d@ve@t@ beide beId@ bekaf b&kaf belangriker b@laNr@k,Ir bene be@n@ +beringde b@rINd@ beswil bEsv@l besnedene b@sne@d@n@ bestes bEst@s @@ -1130,6 +1143,7 @@ bewe be@v@ bewebeen be@v@be@n bewend be@v@nt bewering b@ve@rIN +bilharzia b@lharsia biopsie bi'Opsi bomaat bo@mA:t bordegoed bO:rd@x2ut @@ -1155,6 +1169,7 @@ cedille s@dIl@ charisma kar'Isma cinsaut s@nso@ cliché kliS'eI: +clientèle _^_FR clivia klIvija cognac kOn^ak confetti $2 @@ -1173,6 +1188,7 @@ dawidster dA:v@tst&r déjà _^_FR dekade dEk'A:d@ dekreling dEkre@l@N +demensie d@me~nsi deurentyd dy@r@nteIt deurgaans $1 deurkruis $2 @@ -1219,12 +1235,14 @@ ewentwil e@v@ntv@l exodus Eks'o@dWs factotum $2 +faktotum $2 fakture $2 fetakaas fEtakA:s figuur f@x2yr filippense f@l@pEns@ finalis $3 finaliste $3 +fluktuasie $3 fort fOrt forte fOrt@ @@ -1269,6 +1287,7 @@ hekke h&k@ helaas he@l'A:s here he@r@ herero hEr'E:ru +herontmoeting h&r_Ontmut@N herrysenis h&r'eIs@n@s hierso hi:rsO hippie _^_EN @@ -1294,6 +1313,7 @@ inkatha iNk'A:ta inkluis $2 innestel InnEst@l insomnia @nsOmnija +inteling Inte@l@N intens @nt'Ens intensiteit $4 ironieë irun'i:@ @@ -1312,6 +1332,7 @@ kaviaar kavi'A:r kennisvaardig $1 kimono $2 klaasvakie $2 +kliënteel $3 klimeid klImeIt knapsekêrel knaps@k&:r@l kolossense kOl@s'e~ns@ @@ -1325,11 +1346,13 @@ kopiereg kup'ir&x2 korswel kOrsv@l kotiljons kOt@lj'o~ns kritiek krIt'ik +kruisteling krYyste@l@N kulture $2 kunsmatige kWnsm'A:t@x2@ kwansuis $2 kweekwal kwe@kval +landswye lantsveI@ lasagne las'anj@ legaat l@x2A:t legate l@x2A:t@ @@ -1532,6 +1555,7 @@ sonore sun'o@r@ sonure sOn_yr@ sover so@f&r staccato $2 +steekhoudendheid $2 sterwens st&rv@ns stilswye $1 strydros streIt_rOs @@ -1555,6 +1579,7 @@ tevrede t@fre@d@ thula tu:la toegee tux2e@ toereken ture@k@n +toleransie tOl@r'ansi tornado $2 totale tut'A:l@ totsiens $2 @@ -1566,6 +1591,7 @@ tsoenami tsun'A:mi uitdaging YydA:x2@N uiteraard Yyt@r_'A:rt uitermate $3 +uitgeslotene Yytx2@slo@t@n@ uniforme $3 vaarwel fA:rv'&l diff --git a/dictsource/af_rules b/dictsource/af_rules index d8f65eda..193465c1 100644 --- a/dictsource/af_rules +++ b/dictsource/af_rules @@ -73,6 +73,7 @@ @@@smokkel) ary %ar%eI // default stress: diamant-/drank-/dwelm-/goud-/kokaïensmokkelary, etc. amarula %am%arul%a // fix stress and a sounds: amarula and compounds a (ment %a // shorten a sound: perkament/testament and compounds + _) arendag (CAC %A:r@ntax2 // fix e sound: arendagtig/-e/-heid arends A:r@nts_ // fix e sound: arendsoog/-kloue/-nes argen (tA %arx2@n // move default stress: Argentinië/Argentyns/-e a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria @@ -310,7 +311,7 @@ attaché _%at%aSe@ // correct pronunciation: (handels-/inligtings-)attaché attrib (u %atr@b // move default stress: attribuut/bute/attributêr K) au @U // trauma/-ties/Aucamp/Paul/-a/-us - auer aU@r //Sauer etc. fixed au and e sounds in compounds. + auer aU@r //Sauer etc. fix au and e sounds in compounds. augustus %Ox2WstWs avokado %af%ukA:du // stress and o sounds avokade %af%ukA:d@ // variant form of avokado @@ -431,7 +432,8 @@ bo (grond bo@ // fix 1st o sound: bogronds/-e _) bo (kle bo@ // fix o sound: bokleed/boklere bokma (kier b%Okm%a // fix stress and a sound: bokmakierie/-s/-tjie - bom (AA bOm_ // fix a sound, pause: bomaanval/-aanslag/-aard/-eenheid and compounds + bom (AA bOm_ // fix a sound, pause: bomaanval/-aard/-eenheid and compounds + bomaans (la bOm_A:ns // fix o sound: bomaanslag/-aanslae bomaans bo@mA:ns // but fix O sound: bomaans/-e bonde (C bOnd@ // verbondenheid/bondeldraer/gebondene/saambondelend boos (aardig b%o@s_ // move default stress: boosaardig/-e/-heid @@ -526,6 +528,7 @@ bakate (l b%ak@t& // fix stress and vowel sounds: bakatel/-le/-letjie baken bA:k@n // fix e sound: afbakening and compounds bakte (ri b%akte@ // fix stress and e sound: bakterie/-ë + balalaika b%al%alaIk%a // fix a sounds and stress: balalaika/-s/-musiek _) bam (boes b%am // move default stress: bamboes/-e/bamboesfluit... ba (nalA b%a // fix stress and 1st a sound: banale/banaliteit band (Alier b,and // fix stress and d sound: band(e/o)lier/-e @@ -547,6 +550,7 @@ ba (sieli b%a // fix stress and 1st a sound: basielie/-kruit, etc. basotho b%asut%u // fix stress and vowel sounds: Basotho/-0ponie and similar basi (s bA:s@ // basis and compounds + basilie b%asil%i // fix a sound and stress: basilie/-kruid, etc. bastille b%asti:l // Bastille and compounds like Bastilledag batal (jon b%at%al // shorten 1st a sound, moved stress: bataljon and compounds ba (tik b%a // fix stress and a sound: batik/-doek/-kuns/-werk @@ -646,6 +650,8 @@ bere (_ be@r@ //tediebere pandabere etc. _) ber (C b&r // fix e sound: Bert/Berta/Bertie/Bertus/berke/-boom beste (_ bEst@ // fix e sound: beste/allerbeste/naasbeste/-s + beton (C@ b@tOn // split ng sounds: betongebou/-gietsel/-gruis + beton (inC@ b@t'On // fix O sound: betoninrigting/-ingenieur be (weging b@ // draaibeweging/swaaibeweging bewende be@v@nd@ // first e pronounced long bewe (rig be@v@ // fix e sound and stress: bewerig/-e/-heid @@ -749,6 +755,7 @@ dia (C d%i%a // diabeet/diafragma/diagnose/dialek/dialoog/diamant diaken d%iA:k@n // diaken and compounds diako (nie d%i%ak%u // fix stress and o sound: diakonie/-ë + diende dind@ // fix last e sound in many compounds of bediende: bediendekamer diens (willi d%ins // move default stress: dienswillig/-e/-heid dieper (@ dip@r // fix e sound: diepere/dieperliggend/-e digi (ta d%ix2%i // move default stress: digitaal/digitale @@ -983,6 +990,7 @@ @C) e (reekK @ // fix e sound: duine-/rotsereeks aai) e (C @ // fix e sound: baaierd/waaierstert/paaiement/compounds starting with baaiers- lat) eres @r@s //lateres + @C) erm (K &r@-m // a catch-all for words ending in -erm(s) fp) ers (_ &rs // fix e sound: dof-/gif-/olyf-/tydskrifpers, etc. bloup) ers &:rs // fix e sound: bloupers iew) ers (ter @rs // fix e sound: (l)iewerster @@ -1074,6 +1082,7 @@ p) e (talje @ // fix stress and 1st e sound: petalje and compounds l) e (moen @ //fix lemoen and compounds Cy) e (C+ @ // fix connecting e sound in compounds like byekorf/skilderyemuseum, etc. + effe (kleur Ef@ // fix stress and 2nd e sound: effekleur(ig/-e) eier eI@r // eiergeel/eierwit/leierfiguur/leiergroep @C) ei (land _,eI // insert short pause: skiereiland and many -eiland compounds @) ei (sen _'eI // (on)veeleisend/spoedeisend @@ -1589,6 +1598,7 @@ flu (we fl%y // move default stress: fluweel/fluwele and compounds _) fok (o fOk_ // fix o sound, insert short break: fokop/fokof folio fo@li_u // fix o sounds: folio and compounds + fondsw fOntsv // fix v sound: fondswerwing & compounds/-waardes fondue f%Ondy // fix stress and ue sound: fondue and compounds fone (tiek f%o@n@ // fix e sound: fonetiek and compounds fone (tie f%une@ // fix stress and o sound: foneties/-e @@ -1602,6 +1612,7 @@ formi (da f%Orm%i // move default stress: formidabel/-e formu (lier f%Orm%y // move default stress: formulier/-e/-boek _) for (se_ f'Or // stress back to 1st slb; se rule: _) for (C + forse (nd fOrs@ // fix e sound: forsend/-e fos (fa f%Os // move default stress: fosfaat/fosfate fo (ssiel f%O // move default stress: fossiel/-e and compounds foto fo@tu @@ -1694,6 +1705,7 @@ _) gra (na x2r@ // granaat(boom)/granate grandi (o x2r%and%i // move default stress: grandioos/-ose _) gra (vA x2r%a // fix stress and a sound: gravin/-ne/gravure + grenadella gr@n@d&la // fix stress and vowels: grenadella and compounds like -heining griekwa x2rikwa // fix w sound and a sound in compounds: Griekwa/-land, etc. ouCa) gr (ootjie x2r' // move default stress: ouma/oupagrootjie/-s _) graad (e x2r%A:t_ // fix stress and d sound: graadeen(tjies)/-elfs @@ -1726,6 +1738,7 @@ gegesel x2@x2e@s@l // fix middle e sound K) gele (_ x2e@l@ // fix stress and e sound: (eier)gele _) geler x2e@l@r // stress and 1st e sound: geler/gelerig + _) gell x2&l gemel (d x2@m&l // fix e sound: bo-/bowe-/laas-/meergemeld/-e gems x2Ems // fix e sound: (baster)gemsbok/-bul/-ooi, etc. gene (_ x2e@n@ // gene/diegene @@ -1741,7 +1754,7 @@ _) ge (ossP2 x2@ // but ge- prefix: geossilleer/geossifiseer, etc. ni) ge (ri x2'e@ //nigeriese etc. gese (_ x2'e@s@ //Portugese, and others - + gesp (etjie x2Esp // fix e sounds: gespetjie/-s gespe (_ x2Esp@ // gespe and compounds gespes (_ x2Esp@s // gespes and compounds gewens (g x2e@v@ns // (on)vergewensgesind/-e/-heid @@ -1847,6 +1860,7 @@ hart (stogte_ h%art // move default stress: hartstogtelik hart (stogte_N hart // restore default stress: hartstogte ha (we hA: // fix stress and a sound: hawearbeider/lewendehaweafdeling + _) hef (a hEf_ // fix e sound, insert break: hefapparaat/-arm(s) hia (sint h%ij%a // fix stress: hiasint/-e and compounds _) hi (bis h%i // move default stress: hibiskus/-se and compounds hierna (maal h%i:rnA: // fix stress and a sound: hiernamaals/-e @@ -1984,6 +1998,7 @@ _) idi (o %id%i // idioom/idiome/idioot _) id (A %id // idille/idillies/ideëryk &l) iker (C @k@r // fix i sound: menslikerwys/redelikerwyse, etc. + &l) iker (_ @k@r // fix i sound: afstootliker/(ge)redeliker/onberispeliker illumi (nA %il%um%i // fix stress and vowel sounds: illuminasie/illumineer/illuminati illu (si %ily // illusie/-s/illusief illu (strA %il%W // fix i sound: illustreer/illustrering/illustrasie @@ -2114,6 +2129,7 @@ _) in (a@P2 In // inakkuraat/inaktief/inaktiwiteit _) inbe (lC Inb%& // fix e sound in compounds like inbelprogram indone (si @nd%uni: // fix stress and vowel sounds: Indonesië/Indonesiese + s) in (gestel @n // split n g: compounds with ingesteldheid/winsingestelde _) in (oe In_ // fix i sound, pause: inoefen/-oes and derivatives invest (eer @nv%Est // fix stress, v and e sounds: investeer/-der investe (r@ @nv%Este@ // fix e sound: (kapitaal)investering/investerende @@ -2324,10 +2340,11 @@ krieketw krik@tv //krieket followed by w in compounds always v krokodi (l kr%Ok@dI // (wyfie)krokodil/-le + kro (niek kr%u // fix stress and o sound: kroniek and many compounds kruger kr'Y@@r ku (ba@ k%y // move default stress: kubaan/kubane ku (biek k%y // move default stress: kubiek/-e/-getal - _) kuber kyb@r // fixed e sound: kuberruim(te) + _) kuber kyb@r // fix e sound: kuberruim(te) kulin k%Wl%in // Move default stress and fix u sound: kulinër/-e @) kundi (g k'Wnd@ // wiskundige/onoordeelkundigheid and many similar kurwe kWrv@ // fix e sound: kurwes/skurwebas/skurwebek/skurwepadda @@ -2364,6 +2381,7 @@ kafe (te k%af@ // fix stress and vowel sounds: kafeteria and compounds kafe (ï k%af%i // fix stress and vowel sounds: kafeïene and compounds ka (jak k%a // fix stress and 1st a sound: kajak/-ke/-vaarder + kakao k%akA:w // fix stress and vowel sounds: kakao and many compounds kake (C kA:k@ // kakebeen/skakelaar/skakelbord/skakelfunksie kalahari kalah'A:ri // stress: Kalahari/-sand/-woestyn _) ka (lAnC k%a // kalender and compounds/kalant/kalander and compounds @@ -2544,6 +2562,7 @@ kontrasep k%Ontr%asEp // fix stress and e sound: kontrasepsie and derivatives kontrover (s k%Ontr%uv&r // o and v sounds: kontroversie/kontroversieel kop (o kOp? // fix o sound: koponderstebo/kopomdraai/kopoperasie/gryskoponderwyser/poenskopolifant + kop (agtig k%Op_ // fix o sound, insert break: hamer-/spinnekop-/penkopagtig(e(s)) kopu (lA k%Op%y // fix o sound: kopulasie/kopuleer and derivatives _) kor (dA k%Or // kordaat/kordon ko (rint k%u // fix stress and o sound: korint/-e and compounds @@ -2656,6 +2675,7 @@ loboto (mie l%ub%Ot%u // fix stress and o sounds: lobotomie lo (ja l%u // fix stress and o sound: lojale/lojaliteit lo (kalA l%u // fix stress and o sound: lokale/ontvangslokale, etc. + loke (t l%ukE // fix stress and vowel sounds: many compounds with loket lom (bardA l%Om // move default stress: Lombardies/-e/Lombarde _) lore (C@ lo@r@ // fix e sound: verloregaan/verloregoederekantoor/Verlorerivier _) losge (@P5 l'Osx2@ @@ -2805,6 +2825,7 @@ medisyne m@d@seIn@ //medisyne and compounds meganies m@x2'A:nis _) meege (@P5 m'e@x2@ + _) meegewe (nd me@x2e@v@ // fix e sounds and stress: meegewend(e) me (juf m@ // move default stress and shorten e sound me (laats m@ // fix stress and e sound: melaats/-e/-heid melancholie (_N m%El%aNk%o@li // fix stress and 1st e sound: melancholie @@ -2946,6 +2967,7 @@ morf (otomie m%Orf // move default stress: morfotomie _) morr (i mOr // restore default stress: morrig/morrie/-doring _) mors (@ mOrs // restore default stress: morsaf/morsdood/morsig + mos (agtig mOs_ // fix o sound, insert break: (kos)mosagtig(e) mosam (biek m%o@s%am // move default stress: Mosambiek/-er/-se mosa (ïek m%o@s%a // move default stress: mosaïek and compounds mo (skee m%O // move default stress: moskee/-s and compounds @@ -3035,6 +3057,7 @@ ne (anderCa n%i // move default stress: Neander(d/t)al/-ler neger (in n%e@x2@r // move default stress: negerin/-ne ne (gosie n@ // fix stress and e sound: negosie/-ware, etc. + nek (_ n&k // catch-all for words ending in -nek: koedoe-/swaannek nek (om n&k_ // fix e sound, insert pause: nekom(ge)draai nekta (rien n%Ekt%a // fix stress and a sound: nektarien/-perske, etc. neo (li n%i%u // fix stress and vowel sounds: neolities/-e/neolitikum @@ -3080,6 +3103,7 @@ nood (lotti n%o@t // move default stress: noodlottig/-e nood (saak n%o@t // move default stress: noodsaaklik/-e/-heid, vs. noodsaak nood (saak_N no@t // restore default stress: (ge)noodsaak + nooien (tjie noIN // remove the e sound: nooientjie(s) and compounds noord (oos n%o@rt_ // move default stress: noordoos/-te/-telik/-e nor (ma@ n%Or // normaal/normaalweg/normale/abnormaal/-ale nostal (gie_N n%Ost%al // stress on last slb.: nostalgie @@ -3417,6 +3441,7 @@ ooi oI ooy oI oodjie oIci + CC) ool (A o@l_ // insert break: skooluur/-ure, steenkooluitvoer, but not: Karoolug ootjie oIci oontjie oINki oondjie oINki @@ -3483,6 +3508,7 @@ oot (moedig %o@t // move default stress: ootmoedig/-e/-heid .group op + _) opaal %o@pA:l // fix o sound, remove break: opaal and compounds opaat up'A:t // homeopaat/psigopaat and similar opatie upat'i // homeopatie/neuropatie and similar opaties up'A:tis // psigopaties/osteopaties and similar @@ -3578,6 +3604,7 @@ pol (vy p%Ol // move default stress: polvy/-e and compounds pomelo p%ume@l%u // fix stress and o sounds: pomelo(sap/-drankie...) _) pon (dok p%On // move default stress: pondok/-ke/-kie + pop (agtig p%Op_ // fix o sound, insert break: popagtig(e) and compounds popu ,pOpy _) por (C %pOr //portret portaal etc. por (ie p%o@r // move default stress: porie/-ë @@ -4118,6 +4145,7 @@ sker (muts sk%&r // move default stress: (ge)skermutsel/skermutseling/-e skerpi (oen sk%&rp%i // move default stress: skerpioen/-e and compounds skilder (y sk@ld@r // move stress to y: skildery and compounds like skilderymuseum + skim (agtig sk@m_ // fix i sound, insert break: skimagtig(e) skisofr (e sk%is%ufr // fix stress and o sound: skisofreen/skisofrene skle (rose skl@ // fix stress and e sound: sklerose and compounds _) skok (AP4 sk''Ok_ // fix o sound and stress: skokaankondiging/-effek/-insluiting/-onthulling... @@ -4252,6 +4280,7 @@ _) su (meri s%u // fix stress and u sound: sumeries/-e su (mmier s%W // move default stress: sumier/-e super (A s''yp@r_ // fix stress, break in compounds like superintelligent + superi (A s%up%e@r%i // fix stress and vowel sounds: superieur/superioriteit superintendent s,upr@nt%EndEnt // fix stress and vowel sounds: superintendent and compounds surro (ga s%Wr%u // fix stress and o sound: surrogaat/surrogate and compounds su (saC s%u // fix stress and u sound: susan/-na/susara @@ -4561,7 +4590,7 @@ toe (riste@ t%u // move default stress: toeristebedryf/-sentrum and similar toer (n t%ur // move default stress: compounds of toernooi toere (_ tu:r@ // restore default stress - toi (let t%OI // move default stress: toilet and compounds + toilet t%OIlEt // move default stress: toilet and compounds: toiletartikel/-emmer/-opsigter tokke (lo t%Ok@ // move default stress: tokkelos/-sie/tokkelok and compounds tok (tokk t%Ok // move default stress: toktokkie/-s/-spelery, etc. tombola t%Ombo@l%a // move default stress: tombola and compounds @@ -4574,6 +4603,7 @@ @) toris (_ t'o@r@s // fix stress: pectoris/klitoris _) tor (nyn t%Or // move default stress: tornyn/-e and compounds _) tos (ka t%Os // move default stress: Toskaanse/Toskane + tser (tjie ts@r // fix e sound: (skoen)poetsertjie/weerkaatsertjie ttel t@l // many compounds of bottel/skottelgoed tuberkulose t%yb@rk%ylo@s@ // fix stress; e sound in compounds: tuberkulose/-behandeling tug (A tWx2_ // fix u sound: (on)tugondersoek/-oortreding/-ordonnansie @@ -4875,6 +4905,7 @@ _) vanklik faNkl@k // (on)ontvanklik/-e/-er/-heid vanself (spr f%ans%&lf // move default stress: vanselfsprekend/-e/-heid vari (A v%ar%i // fix v sound and stress: variasie/-s/varieer + va (sal v%a // fix stress and v and a sounds: vasal/-le vaseline v%as@lin // fix stress, v and vowel sounds: vaseline/-bottel, etc. vasste (l fast& // fix e sound: vasstel(ling/-lende) _) vat (A@ fat_ // fix a sound: vatafstand/-orgaan @@ -4943,9 +4974,11 @@ ve (l f& // maagvel, stress on 1st slb @) vel (A fe@l // aanbeveling/aanbevelingsbrief + vel (djie f&l // fix -djie sound: veldjie(s) and compounds veld (C f< // fix d sound: veldreuk/-radio/-rantsoen, etc. veld (eks f<_ // fix d sound, pause: veldekskursie/-ekspedisie/-s veld (o f<_ // fix d sound, pause: veldorgideë/-opsigter/-oppervlakte/-opname, etc. + veld (t f&l // eliminate double t sound: veldtog and many compounds, Langeveldt, Springveldt vele f'e@l@ ven (detta v%En // fix stress and v sound: vendatta and compounds ven (dusie f@n // fix stress and e sound: vendusie and compounds @@ -5048,7 +5081,7 @@ vol (kome f%Ol vo (llA_ fO // volle/vollê/Volla - exception to: vo (lC f%O volle (dig f%Ole@ // fix stress and e sound: (on)volledig/-e/-heid... - voll (engte fOlE + volle (ngte fOlE vo (ller fO // exception to: vo (lC f%O volles (_ fOl@s // fix stress and e sound: volles/passievolles, etc. vol (hou_ fOl // exception to: vo (lC f%O From 0994206f710a4defc1eecfb78ab70ff57c58fcda Mon Sep 17 00:00:00 2001 From: Reef Turner Date: Wed, 19 Jul 2017 12:29:32 +0800 Subject: [PATCH 024/137] address buffer overrun when dict listx file has no trailling newline See ar_listx as an example. --- src/libespeak-ng/compiledict.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index 2472694e..c0006ea9 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -411,8 +411,8 @@ static int compile_line(char *linebuf, char *dict_line, int n_dict_line, int *ha step = LINE_PARSER_WORD; - c = 0; - while (c != '\n') { + c = *p; + while (c != '\n' && c != '\0') { c = *p; if ((c == '?') && (step == 0)) { From 669b9f16c2f84d3a6654c2fe8206b8142642e8de Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Wed, 26 Jul 2017 17:06:16 +0300 Subject: [PATCH 025/137] Improvements for Sindhi and Urdu Languages by Ejaz Shah --- dictsource/sd_list | 12 +++++++----- dictsource/sd_rules | 20 +++++++++----------- dictsource/ur_list | 12 +++++++++--- dictsource/ur_rules | 15 ++++++++------- 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/dictsource/sd_list b/dictsource/sd_list index 5f9b98fc..24b25872 100644 --- a/dictsource/sd_list +++ b/dictsource/sd_list @@ -8,7 +8,7 @@ ڀ b#e: پ pe: ت te: -ٿ the: +ٿ t#e: ٽ t.e: ٺ t.#e: ث se: @@ -28,7 +28,6 @@ ذ za:l ر Re: ڙ r.e: -ڙھ r.he: ز ze: ژ Ze: س si:n @@ -58,9 +57,9 @@ ھ dO||caSmi:||he: ء hamzah ي je: -ئ h'amza +ئ h'amza||je: ۂ he:h'amza -_ؤ va:Oh'amza +ؤ va:Oh'amza َ z@b@R ِ ze:R @@ -68,6 +67,7 @@ _ؤ va:Oh'amza ٰ ,alIfmaqs'u:r,a ّ t,aSd'i:d ً d'o:zab'ar +ٗ Ubto:pe:S // The numbers @@ -187,6 +187,8 @@ _dpt _d.aha:i:_ آهن a:hIn $u هن hIna ۾ me~ $u -۽ ae~ $u +۽ ae~ $brk آهي a:he: $u هڪ HIk +ٿي t#i: $u +ئي i: \ No newline at end of file diff --git a/dictsource/sd_rules b/dictsource/sd_rules index b9e13b9a..f5c111cb 100644 --- a/dictsource/sd_rules +++ b/dictsource/sd_rules @@ -21,7 +21,7 @@ .L01 َ ِ ُ و ي ع ا ے // Consonants -.L02 ب ٻ ڀ پ ت ٿ ٺ ٹ ث ج ڄ چ ڇ ح خ د ڌ ڊ ڏ ڈ ذ ر ڙ ڑ ز ژ س ش ص ض ط ظ غ ف ڦ ق ڪ ک گ ڳ ل م ن ڻ ڃ ه ھ ء +.L02 ب ٻ ڀ پ ت ٿ ٺ ث ج جھ ڄ چ ڇ ح خ د ڌ ڊ ڏ ذ ر ڙ ڙھ ز س ش ص ض ط ظ غ ف ڦ ق ڪ ک گ ڳ گھ ل م ن ڻ ڃ ه ھ ء // VOWELS @@ -91,7 +91,6 @@ _)اي e: .group آ آ a: آتش 'a:tIS - آہست a:h'Ist .group ع @@ -122,6 +121,7 @@ _)اي e: يع(_ i: @)ي i: يٰ a: + ي(_ٿ e: .group ے // yeh barree ے e: @@ -133,6 +133,9 @@ _)اي e: .group ئ ئ +.group ٗ + ٗ u: + .group ؤ ؤ aU // ?? @@ -236,7 +239,6 @@ _)اي e: خّ (L01 xx _) خوش x'US _) خود x'Ud - _) خواہش xv'a:hIS _) خیا x'aja: @@ -250,7 +252,6 @@ _)اي e: دیوا d'i:va: دفاع d'Ifa: _) دہ (L02 d'Eh - دہشت d'EhS'at دلچسپ d,Ilc'asp .group ڌ @@ -280,11 +281,8 @@ _)اي e: @) ڈز (_ d:z .group ذ - ذ DV - ذ (L01 D - ذّ DDV - ذّ (L01 DD - _) ذہ (L02 D'Eh + ذ zV + ذ(L01 z .group ر ر RV @@ -365,7 +363,7 @@ _)اي e: ص (L01 s. صّ ssV صّ (L01 ss - صوب s.'u:b + صو(ب s.'u: .group ض ض zV @@ -440,7 +438,7 @@ _)اي e: ڳ(L01 g .group گھ - گھ g#v + گھ g#V گھ(L01 g# .group ڱ diff --git a/dictsource/ur_list b/dictsource/ur_list index 40348cd3..41b8510a 100644 --- a/dictsource/ur_list +++ b/dictsource/ur_list @@ -791,7 +791,7 @@ _dpt _ISaRI'Ia_ ابرق abRaq ابرنا UbaRna: ابرو abRu: -کنول kanval $2 +کنول ka~val $2 ابل Ubal ابلا Ubla: ابلی Ubli: @@ -945,7 +945,7 @@ _dpt _ISaRI'Ia_ الفت Ulfat برگزیدہ baRgUzi:da برہمن bRaHman -الذمہ UDDIma +الذمہ UzzIma صحبت s.OHbat برے bURe: بزدل bUzdIl @@ -973,7 +973,13 @@ _dpt _ISaRI'Ia_ (بن بلائے) bIn||bUla:e: (بن مول) bIn||mo:l بنت bInt -سنور sanvaR +سنور sa~vaR بو bu: $only بورڈنگ bo:Rd.Ing بولنگ bo:lIng +امرت amRIt +(ان بجھا) anbUJ#a: +(ان بن) anban +(ان پڑھ) anpar.h +(ان گنت) an||gInat +قدرت qUdRat diff --git a/dictsource/ur_rules b/dictsource/ur_rules index bd7713ee..b79b6efc 100644 --- a/dictsource/ur_rules +++ b/dictsource/ur_rules @@ -24,10 +24,10 @@ .L01 َ ِ ُ و ی ع ا ے // Consonants -.L02 ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ غ ف ق ک گ ل م ن ہ ئ +.L02 ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ غ ف ق ک کھ گ گھ ل م ن ہ ئ // Letter group - L03: Most of the letters -.L03 ا ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ہ ئ ی ے +.L03 ا ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک کھ گ گھ ل م ن و ہ ئ ی ے // VOWELS @@ -162,6 +162,9 @@ _) ای e: _)ارا(د IRa: _)اونچ u:nc اں a~ + _)امت(L02L01 ImtI + _)انح(L02L01 InHI + _)انخ(L02L01 InxI .group آ آ a: @@ -427,11 +430,9 @@ _) ای e: ڈرائیور d.R'a:jvaR .group ذ - ذ DV - ذ (L01 D - ذّ DDV - ذّ (L01 DD - _) ذہ (L02 D'EH + ذ zV + ذ (L01 z + _) ذہ (L02 z'EH .group ر ر RV From 921229259d58ddce801aa7ace77408f3ffc656a5 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 26 Jul 2017 19:50:03 +0100 Subject: [PATCH 026/137] Use int to store the value from GetFileLength. This fixes the clang warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare] Reported by Reef Turner --- src/libespeak-ng/dictionary.c | 2 +- src/libespeak-ng/synthdata.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index d03f7d2a..febddd93 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -198,7 +198,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) int *pw; int length; FILE *f; - unsigned int size; + int size; char fname[sizeof(path_home)+20]; strncpy(dictionary_name, name, 40); // currently loaded dictionary name diff --git a/src/libespeak-ng/synthdata.c b/src/libespeak-ng/synthdata.c index 4087197e..9bf47423 100644 --- a/src/libespeak-ng/synthdata.c +++ b/src/libespeak-ng/synthdata.c @@ -73,7 +73,7 @@ static espeak_ng_STATUS ReadPhFile(void **ptr, const char *fname, int *size, esp if (!ptr) return EINVAL; FILE *f_in; - unsigned int length; + int length; char buf[sizeof(path_home)+40]; sprintf(buf, "%s%c%s", path_home, PATHSEP, fname); From e7ac4b819daa3c2b0547b5933efc1549416b80ed Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 26 Jul 2017 20:21:05 +0100 Subject: [PATCH 027/137] hash_counts is never used, so remove it. Reported by Reef Turner --- src/libespeak-ng/compiledict.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index c0006ea9..12e80910 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -52,7 +52,6 @@ static int text_mode = 0; static int debug_flag = 0; static int error_need_dictionary = 0; -static int hash_counts[N_HASH_DICT]; static char *hash_chains[N_HASH_DICT]; static char letterGroupsDefined[N_LETTER_GROUPS]; @@ -669,7 +668,6 @@ static void compile_dictlist_start(void) p = p2; } hash_chains[ix] = NULL; - hash_counts[ix] = 0; } } @@ -682,7 +680,6 @@ static void compile_dictlist_end(FILE *f_out) for (hash = 0; hash < N_HASH_DICT; hash++) { p = hash_chains[hash]; - hash_counts[hash] = (int)ftell(f_out); while (p != NULL) { length = *(p+sizeof(char *)); @@ -725,8 +722,6 @@ static int compile_dictlist_file(const char *path, const char *filename) length = compile_line(buf, dict_line, sizeof(dict_line), &hash); if (length == 0) continue; // blank line - hash_counts[hash]++; - p = (char *)malloc(length+sizeof(char *)); if (p == NULL) { if (f_log != NULL) { From ebfa320956169e3419234b72fee51bd596867661 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 26 Jul 2017 20:44:27 +0100 Subject: [PATCH 028/137] Fix storing the line length in the hash chain. The length is stored as the first byte in the output from compile_line. As the data pointer is char, if char is signed then length could be negative resulting in undefined behaviour. This commit fixes the issue by reading and writing that byte as a uint8_t. This bug was caused by 2a00ca79f635d8e7979ad09846901d59a4ea4ee0. Previously, the entries could only be a maximum of 128 bytes, and would not be negative on platforms with signed chars. That commit was made to support long emoji entries, especially for non-Latin languages where the utf-8 representations could be longer than 128 bytes. This change also adds some documentation to make it clearer what is going on. NOTE: The code should really be using actual struct objects instead of writing to opaque char buffers. Reported by Reef Turner --- src/libespeak-ng/compiledict.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index 12e80910..509b8fa7 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -52,7 +52,15 @@ static int text_mode = 0; static int debug_flag = 0; static int error_need_dictionary = 0; +// A hash chain is a linked-list of hash chain entry objects: +// struct hash_chain_entry { +// hash_chain_entry *next_entry; +// // dict_line output from compile_line: +// uint8_t length; +// char contents[length]; +// }; static char *hash_chains[N_HASH_DICT]; + static char letterGroupsDefined[N_LETTER_GROUPS]; MNEM_TAB mnem_rules[] = { @@ -648,7 +656,7 @@ static int compile_line(char *linebuf, char *dict_line, int n_dict_line, int *ha length += ix; } } - dict_line[0] = length; + *((uint8_t *)dict_line) = (uint8_t)length; return length; } @@ -682,7 +690,7 @@ static void compile_dictlist_end(FILE *f_out) p = hash_chains[hash]; while (p != NULL) { - length = *(p+sizeof(char *)); + length = *(uint8_t *)(p+sizeof(char *)); fwrite(p+sizeof(char *), length, 1, f_out); memcpy(&p, p, sizeof(char *)); } @@ -699,7 +707,7 @@ static int compile_dictlist_file(const char *path, const char *filename) FILE *f_in; char buf[200]; char fname[sizeof(path_home)+45]; - char dict_line[200]; + char dict_line[256]; // length is uint8_t, so an entry can't take up more than 256 bytes text_mode = 0; @@ -733,6 +741,7 @@ static int compile_dictlist_file(const char *path, const char *filename) memcpy(p, &hash_chains[hash], sizeof(char *)); hash_chains[hash] = p; + // NOTE: dict_line[0] is the entry length (0-255) memcpy(p+sizeof(char *), dict_line, length); count++; } From 22270bd25952b3bab0fe8249e3692cd4a0cb2c53 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 26 Jul 2017 21:11:44 +0100 Subject: [PATCH 029/137] Fix reading hash table entries > 128. This is related to ebfa320956169e3419234b72fee51bd596867661, but when reading the hash chain entry length, not writing it. If char is signed, then before this change the length would be negative, causing problems loading the dictionary. --- src/libespeak-ng/dictionary.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index febddd93..ef887f9c 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -254,7 +254,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) for (hash = 0; hash < N_HASH_DICT; hash++) { tr->dict_hashtab[hash] = p; - while ((length = *p) != 0) + while ((length = *(uint8_t *)p) != 0) p += length; p++; // skip over the zero which terminates the list for this hash value } From c98ed977f29c5d1f3616307c76d0f326a71ae9a2 Mon Sep 17 00:00:00 2001 From: Ben Date: Fri, 28 Jul 2017 17:06:55 +0200 Subject: [PATCH 030/137] Adding IPA output to emscripten js library and demo --- emscripten/demo.html | 9 ++++++++- emscripten/espeakng_glue.cpp | 29 +++++++++++++++++++++++++++++ emscripten/espeakng_glue.idl | 1 + emscripten/js/demo.js | 30 +++++++++++++++++++++++++++--- emscripten/js/espeakng.js | 3 ++- emscripten/post.js | 23 +++++++++++++++++++++++ 6 files changed, 90 insertions(+), 5 deletions(-) diff --git a/emscripten/demo.html b/emscripten/demo.html index 33d5dc6b..4a82ba84 100644 --- a/emscripten/demo.html +++ b/emscripten/demo.html @@ -52,6 +52,12 @@ display: block; margin-bottom: 1rem; } + #ipaarea { + width: 100%; + height: 8rem; + display: block; + margin-bottom: 1rem; + } p.gh { color: #333; text-align: right; @@ -100,6 +106,7 @@

espeakng.js 1.49.1 Demo

+
@@ -110,7 +117,7 @@
- +

Original Code for eSpeak: Eitan Isaacson

diff --git a/emscripten/espeakng_glue.cpp b/emscripten/espeakng_glue.cpp index 7bbb2963..24398dc1 100644 --- a/emscripten/espeakng_glue.cpp +++ b/emscripten/espeakng_glue.cpp @@ -50,6 +50,35 @@ public: espeak_SetSynthCallback(NULL); } + int synth_ipa_(const char* aText, const char* virtualFileName) { + + /* phoneme_mode + bit 1: 0=eSpeak's ascii phoneme names, 1= International Phonetic Alphabet (as UTF-8 characters). + bit 7: use (bits 8-23) as a tie within multi-letter phonemes names + bits 8-23: separator character, between phoneme names + */ + + espeak_SetSynthCallback(NULL); + + int phoneme_options = (1 << 1); // Use IPA + int use_custom_phoneme_separator = (0 << 7); + int phonemes_separator = ' '; // Use a default value + + int phoneme_conf = phoneme_options | (phonemes_separator << 8); + + FILE* f_phonemes_out = fopen(virtualFileName,"wb"); + if(!f_phonemes_out) + return -1; + + //espeak_ng_InitializeOutput(ENOUTPUT_MODE_SYNCHRONOUS, 0, NULL); + espeak_SetPhonemeTrace(phoneme_conf, f_phonemes_out); + espeak_Synth(aText, 0, 0, POS_CHARACTER, 0, 0, NULL, NULL); + espeak_SetPhonemeTrace(0, NULL); + fclose(f_phonemes_out); + + return 0; + } + long set_voice( const char* aName, const char* aLang=NULL, diff --git a/emscripten/espeakng_glue.idl b/emscripten/espeakng_glue.idl index 83b865a1..cac42999 100644 --- a/emscripten/espeakng_glue.idl +++ b/emscripten/espeakng_glue.idl @@ -52,6 +52,7 @@ interface espeak_EVENT { interface eSpeakNGWorker { void eSpeakNGWorker(); void synth_(DOMString aText, VoidPtr aCallback); + long synth_ipa_(DOMString aText, DOMString virtualFileName); long getSizeOfEventStruct_(); long set_voice(DOMString aName, DOMString aLang, optional octet gender=0, optional octet age=0, optional octet aVariant=0); [Const] attribute espeak_VOICE[] voices; diff --git a/emscripten/js/demo.js b/emscripten/js/demo.js index 086f7185..5a23c375 100644 --- a/emscripten/js/demo.js +++ b/emscripten/js/demo.js @@ -179,10 +179,12 @@ function speak() { pusher.connect(ctx.destination); console.log(' Creating pusher... done'); + var user_text = document.getElementById('texttospeak').value; + // actual synthesis console.log(' Calling synthesize...'); tts.synthesize( - document.getElementById('texttospeak').value, + user_text, function cb(samples, events) { //console.log(' Inside synt cb'); if (!samples) { @@ -203,11 +205,32 @@ function speak() { //console.log(' Leaving synt cb'); } // end of function cb ); // end of tts.synthesize() - console.log(' Calling synthesize... done'); - + console.log(' Calling synthesize... done'); console.log('Leaving speak()'); + } // end of speak() +function ipa() { + + console.log("Synthesizing ipa ... "); + var ts = new Date(); + var user_text = document.getElementById('texttospeak').value; + + //user_text = user_text.repeat(50); + + tts.set_voice(document.getElementById('voice').value); + tts.synthesize_ipa(user_text, function(result) { + var te = new Date(); + document.getElementById('ipaarea').value = result.ipa; + console.log("Ipa synthesis done in " + (te-ts) + " ms.") + }); +} + +function speakAndIpa() { + speak(); + ipa(); +} + function resetPitch() { document.getElementById('pitch').value = 50; } @@ -254,5 +277,6 @@ function initializeDemo() { console.log('Leaving cb1'); } // end of function cb1 ); + console.log('Creating eSpeakNG instance... done'); } diff --git a/emscripten/js/espeakng.js b/emscripten/js/espeakng.js index 1e88acf5..a2258350 100644 --- a/emscripten/js/espeakng.js +++ b/emscripten/js/espeakng.js @@ -63,7 +63,8 @@ for (var method of [ 'set_rate', 'set_pitch', 'set_voice', - 'synthesize' + 'synthesize', + 'synthesize_ipa' ]) { eSpeakNG.prototype[method] = _createAsyncMethod(method); } diff --git a/emscripten/post.js b/emscripten/post.js index 5311d7fc..f5e13bc6 100644 --- a/emscripten/post.js +++ b/emscripten/post.js @@ -93,6 +93,28 @@ eSpeakNGWorker.prototype.synthesize = function (aText, aCallback) { Runtime.removeFunction(fp); }; +eSpeakNGWorker.prototype.synthesize_ipa = function (aText, aCallback) { + + // Use a unique temp file for the worker. Avoid collisions, just in case. + var ipaVirtualFileName = "espeak-ng-ipa-tmp-" + Math.random().toString().substring(2); + + var res = ""; + var code = this.synth_ipa_(aText, ipaVirtualFileName); + + if(code == 0) + res = FS.readFile(ipaVirtualFileName, { encoding: 'utf8' }) + + // Clean up the tmp file + FS.unlink(ipaVirtualFileName); + + var ret = { + code: code, + ipa: res + } + + return ret; +}; + // Make this a worker if (typeof WorkerGlobalScope !== 'undefined') { @@ -104,6 +126,7 @@ if (typeof WorkerGlobalScope !== 'undefined') { }); onmessage = function(e) { + if (!worker) { throw 'eSpeakNGWorker worker not initialized'; } From 01919cd48a566cdf34347784b2e74554b376e900 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Mon, 31 Jul 2017 07:59:38 +0100 Subject: [PATCH 031/137] en: fix -edly pronunciation. --- dictsource/en_rules | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dictsource/en_rules b/dictsource/en_rules index a456f48f..d36512b1 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -2384,8 +2384,7 @@ _it_separ) ate (_ @t @x) ed (_S2vi d# y) ed (_S2v d# debut) ed (_S2 d# - edly (_S4m I#dl%i - eg) edly (_S3m I#dl%i + edly (_S3m I#dl%i c) ed (e_ 'i:d p) ed (e_ i:d p) edal Ed@L From 4c696620bb934b7f1e60e0990d6d6d32fe4a904d Mon Sep 17 00:00:00 2001 From: chrislm Date: Tue, 1 Aug 2017 17:21:38 +0200 Subject: [PATCH 032/137] IT: new improvements (tested on june/july 2017) --- dictsource/it_list | 12 ++++++++---- dictsource/it_listx | 1 + dictsource/it_rules | 9 +++++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/dictsource/it_list b/dictsource/it_list index 49e8e482..fef8493b 100644 --- a/dictsource/it_list +++ b/dictsource/it_list @@ -1,6 +1,6 @@  // This file is UTF-8 encoded -// Updated 2017 june 11 by Christian Leo M, +// Updated 2017 31 july by Christian Leo M, // $alt change [e] or [o] in the stressed syllable to [E] or [O] // $alt2 change [E] or [O] in the stressed syllable to [e] or [o] @@ -148,6 +148,8 @@ _‑ t@-*at:,ino||duni'one ʔ glotalst'Op ɡ dZ'i||vel'aRe||ok:luz'iva // U+0261 ɣ g'am:a||min'uskola // U+0263 voiced velar fricative +ß 'esse||ak'uta +ɑ 'alfa _‣ punt'ato ◦ punt'ato @@ -783,6 +785,7 @@ black bl'E:k blackout bl'Ek'aUt blind bl'aInd $onlys blues bl'u:z +bluff bl'ef: $only boiler $1 bonjour b,O:_Z'u:r brioche b@-*I'oS @@ -1016,7 +1019,7 @@ logging l'Oging lord $alt $only love l'O:v $onlys lover $1 -manche m'a:nS $only +manche m'a:nS $onlys my _^_EN myspace m'aI||sp'Eis machine maS'in $onlys @@ -2377,6 +2380,7 @@ ivano $2 jace _^_en $only jack dZ'E:k jackson _^_EN +jefferson $1 jacopo j'a:kopo james _^_EN jane _^_EN @@ -2473,6 +2477,7 @@ paul p'O:l $only peggy p'Eg:I pericle $1 peter $1 $onlys +peterson p'Ete@-*s,on pettarin $3 $only peugeot p,EZ'o piquet pik'E $only @@ -4774,6 +4779,7 @@ espellerl $2 esprimiti $2 evolverci $2 evolversi $2 +facendomici fatS'endom,itSi fammel $1 fattel f'at:el fattoci $1 @@ -4824,7 +4830,6 @@ orientaci $3 pensaci $1 perdonatel $3 permettigli $2 -pervenutaci $3 pizzical $1 pizzicami $1 portala $1 @@ -4840,7 +4845,6 @@ pulisciti $2 redigerl $2 raddrizzarl @-*ad:@-*its2:'a@-*l rafforzal $2 -regalaci $2 regalati $2 $atstart regalavi $3 reinseritasi $4 diff --git a/dictsource/it_listx b/dictsource/it_listx index ad253889..2f11d95a 100644 --- a/dictsource/it_listx +++ b/dictsource/it_listx @@ -81,6 +81,7 @@ afonie afon'i;e agadez $3 agapit $2 agave $1 +agendine $3 agenzia $3 agenzie adZents'ie agerol $2 diff --git a/dictsource/it_rules b/dictsource/it_rules index 036dbe32..ec4045d0 100644 --- a/dictsource/it_rules +++ b/dictsource/it_rules @@ -1,7 +1,7 @@ // Italian translation rules // This file is UTF-8 encoded -// Last update: 2017 may 31 by Christian Leo Mameli +// Last update: 2017 july 31 by Christian Leo Mameli // letter groups // A any vowel // C any consonant @@ -28,7 +28,7 @@ au a|%U @C) a (_S1q a/ // lookup it_list without suffix @i) a (_S1q a // lookup it_list without suffix - C) a (cY_ 'a +// C) a (cY_ 'a @) a (co_ =a @) a (ca_ =a @) a (che_ =a/ @@ -210,6 +210,8 @@ fob (A_ =fob farma (ci_ f'a@-*ma ferma (L07_ f'e@-*ma/ + _) fatt (AL04_ f'at: + _ri) fatt (AL04_ f'at: .group g g g @@ -525,6 +527,7 @@ _) ripeter (L04_ @-*ip'E:te@-* _) romper (L04_ @-*'ompe@-* ca) re (zzaL07_ R'e + _) regala (tAL04_ @-*egal'a C) rai (_ @-*'a:I A) rai (_ R'a:I rrai (_ R*'a:I @@ -639,6 +642,7 @@ _) vota (L07_ v'Ota s) veglia (L07_ v'el^a volta (L07_ v'Olta + venut (AL04_ ven'ut _) v' (P2t v .group w @@ -700,6 +704,7 @@ man) zie (_ ts'i;e me) zz dz: amma) zziamo (L04_ _tsi'a:mo + sbara) zz (arL04_ ts: .group From afa99784ab9a3fdd3405af0e0bed4b645cd07422 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 5 Aug 2017 14:30:33 +0100 Subject: [PATCH 033/137] en: various pronunciation fixes --- dictsource/en_list | 4 +++- dictsource/en_rules | 10 +++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dictsource/en_list b/dictsource/en_list index 4dbf4406..736559f8 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1047,6 +1047,7 @@ autocracy O:t'0kr@si automobile O:t@m@bi@l automaton O:t'0m@t@n autopsy O:t20psi +?3 aurora $2 avalanche av@laanS avast $alt3 avatar ava#tA@ @@ -1668,7 +1669,7 @@ derogative $2 descant dEskant descry dI#skreI desert dI#z3:t -desert dEz3t $only +desert dEz3t $onlys desert dI#z3:t $verb desi deIsi desolate dEs@l@t $only @@ -4044,6 +4045,7 @@ Assam A:s'A:m Assamese A:sA:m'i:z Audubon O:d@b0n Augusta $2 +Austen O2stI2n Baghdad $2 Bahawalpur $alt3 Bahia ba'i:@ diff --git a/dictsource/en_rules b/dictsource/en_rules index d36512b1..3fe3e9ef 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -852,6 +852,7 @@ _) anony (m a#n0n@ _c) an (ood a#n &) an (_ @n + &) an (ize @n &) an (_$w_alt1+ an ?8 &) an (_ a#n @u) an (_S1 n @@ -1207,6 +1208,7 @@ calend) ar 3 _) as (in as as (k aas _) as (k aas + s) as (k as _) as (n az _) as (oc eIs C) as (p aas @@ -1232,6 +1234,7 @@ calend) ar 3 ass (u @S ass (ump a#s assur @SU@ + _) ass (wh as C) as (t aas C) ast (ell aas _bl) as (to as //not aa @@ -1396,7 +1399,7 @@ _it_separ) ate (_ @t au (m_ aU _) au (nt aa aur (_ O@ - _) au (ror a# +?!3 _) au (rora a# s) au (rus_ 'O: @) au (ri 'O: C) aus (_ aUs @@ -2385,6 +2388,8 @@ _it_separ) ate (_ @t y) ed (_S2v d# debut) ed (_S2 d# edly (_S3m I#dl%i + nt) edly (_S4m I#dl%i + tur) edly (_S3v d#l%i c) ed (e_ 'i:d p) ed (e_ i:d p) edal Ed@L @@ -5635,6 +5640,7 @@ multip) ly laI .group re _) re (C@ rI# + _) re (collec rE _) reflex ri:flE2ks _) reflexive rI#fl'EksIv &Ct) red (_ @d @@ -5878,6 +5884,7 @@ multip) ly laI @) s (head_ s @) s (hill_ s @) s (hous s + @) s (hors s _) she' %Si: A) sh (A_ =S &) ship (_S4 SIp @@ -6431,6 +6438,7 @@ contin) u ju: j) ui (c u: uir (_ jU@ n) ui (s ju: +?3 n) ui (s u: r) uis (A u:z r) ui (t u: gr) ui (t u:I2 From 9ac98311294d5611a82a37f3191f947eb9a8414b Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 5 Aug 2017 14:36:28 +0100 Subject: [PATCH 034/137] af: Updates from Christo de Klerk. --- dictsource/af_rules | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dictsource/af_rules b/dictsource/af_rules index 193465c1..78fa80e8 100644 --- a/dictsource/af_rules +++ b/dictsource/af_rules @@ -3058,7 +3058,7 @@ neger (in n%e@x2@r // move default stress: negerin/-ne ne (gosie n@ // fix stress and e sound: negosie/-ware, etc. nek (_ n&k // catch-all for words ending in -nek: koedoe-/swaannek - nek (om n&k_ // fix e sound, insert pause: nekom(ge)draai + _) nek (A n&k_ // fix e sound, insert pause: nekom(ge)draai/-operasie nekta (rien n%Ekt%a // fix stress and a sound: nektarien/-perske, etc. neo (li n%i%u // fix stress and vowel sounds: neolities/-e/neolitikum ner (veu n%&r // move default stress: nerveus/-e @@ -4440,6 +4440,7 @@ stede (_ ste@d@ //voorstede, hoofstede etc. stele (_ ste@l@ //kastele lepelstele etc. + stema (_ ste@ma // fix e sound: doods-/gespreks/-herhalingstema and many similar stene (_ ste@n@ //skoorstene, bakstene etc. sten (sil stEn // fix e sound in compounds like wolbaalstensil chri) stene (_ st@n@ //fix christene and compounds From cec0e773a4032101961da2656023b355c1a5b46c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 16 Aug 2017 18:46:56 +0100 Subject: [PATCH 035/137] Remove the tokenizer code. This is not currently used, and should be designed from espeak's behaviour. --- Makefile.am | 11 +- android/jni/Android.mk | 1 - src/include/espeak-ng/tokenizer.h | 75 --- src/libespeak-ng/readclause.c | 49 ++ src/libespeak-ng/tokenizer.c | 410 ------------- src/windows/libespeak-ng.vcxproj | 3 +- src/windows/libespeak-ng.vcxproj.filters | 5 +- tests/tokenizer.c | 704 ----------------------- 8 files changed, 52 insertions(+), 1206 deletions(-) delete mode 100644 src/include/espeak-ng/tokenizer.h delete mode 100644 src/libespeak-ng/tokenizer.c delete mode 100644 tests/tokenizer.c diff --git a/Makefile.am b/Makefile.am index 490388a0..c1369403 100644 --- a/Makefile.am +++ b/Makefile.am @@ -131,8 +131,7 @@ espeak_ng_includedir = $(includedir)/espeak-ng espeak_ng_include_HEADERS = \ src/include/espeak-ng/encoding.h \ src/include/espeak-ng/espeak_ng.h \ - src/include/espeak-ng/speak_lib.h \ - src/include/espeak-ng/tokenizer.h + src/include/espeak-ng/speak_lib.h lib_LTLIBRARIES += src/libespeak-ng.la @@ -171,7 +170,6 @@ src_libespeak_ng_la_SOURCES = \ src/libespeak-ng/synthdata.c \ src/libespeak-ng/synthesize.c \ src/libespeak-ng/synth_mbrola.c \ - src/libespeak-ng/tokenizer.c \ src/libespeak-ng/translate.c \ src/libespeak-ng/tr_languages.c \ src/libespeak-ng/voices.c \ @@ -233,12 +231,6 @@ noinst_bin_PROGRAMS += tests/encoding.test tests_encoding_test_LDADD = src/libespeak-ng.la tests_encoding_test_SOURCES = tests/encoding.c -noinst_bin_PROGRAMS += tests/tokenizer.test - -tests_tokenizer_test_CFLAGS = -Isrc/libespeak-ng ${AM_CFLAGS} -tests_tokenizer_test_LDADD = src/libespeak-ng.la -tests_tokenizer_test_SOURCES = tests/tokenizer.c - noinst_bin_PROGRAMS += tests/readclause.test tests_readclause_test_CFLAGS = -Isrc/libespeak-ng ${AM_CFLAGS} @@ -256,7 +248,6 @@ tests_api_test_SOURCES = tests/api.c @ESPEAK_DATA_PATH=$(PWD) $< && echo " PASSED $<" check: tests/encoding.check \ - tests/tokenizer.check \ tests/readclause.check \ tests/api.check \ tests/languages.check diff --git a/android/jni/Android.mk b/android/jni/Android.mk index e423e7e2..5dd4cc7f 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -33,7 +33,6 @@ ESPEAK_SOURCES := \ src/libespeak-ng/synthdata.c \ src/libespeak-ng/synthesize.c \ src/libespeak-ng/synth_mbrola.c \ - src/libespeak-ng/tokenizer.c \ src/libespeak-ng/translate.c \ src/libespeak-ng/tr_languages.c \ src/libespeak-ng/voices.c \ diff --git a/src/include/espeak-ng/tokenizer.h b/src/include/espeak-ng/tokenizer.h deleted file mode 100644 index fc35257b..00000000 --- a/src/include/espeak-ng/tokenizer.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2017 Reece H. Dunn - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see: . - */ -#ifndef ESPEAK_NG_TOKENIZER_H -#define ESPEAK_NG_TOKENIZER_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef struct espeak_ng_TOKENIZER_ espeak_ng_TOKENIZER; - -ESPEAK_NG_API espeak_ng_TOKENIZER * -create_tokenizer(void); - -ESPEAK_NG_API void -destroy_tokenizer(espeak_ng_TOKENIZER *tokenizer); - -typedef enum -{ - ESPEAKNG_TOKENIZER_OPTION_TEXT = 0, -} espeak_ng_TOKENIZER_OPTIONS; - -ESPEAK_NG_API int -tokenizer_reset(espeak_ng_TOKENIZER *tokenizer, - espeak_ng_TEXT_DECODER *decoder, - espeak_ng_TOKENIZER_OPTIONS options); - -typedef enum -{ - ESPEAKNG_TOKEN_END_OF_BUFFER, - ESPEAKNG_TOKEN_UNKNOWN, - ESPEAKNG_TOKEN_NEWLINE, - ESPEAKNG_TOKEN_PARAGRAPH, - ESPEAKNG_TOKEN_WHITESPACE, - ESPEAKNG_TOKEN_WORD_UPPERCASE, - ESPEAKNG_TOKEN_WORD_LOWERCASE, - ESPEAKNG_TOKEN_WORD_MIXEDCASE, - ESPEAKNG_TOKEN_WORD_CAPITALIZED, - ESPEAKNG_TOKEN_FULL_STOP, - ESPEAKNG_TOKEN_QUESTION_MARK, - ESPEAKNG_TOKEN_EXCLAMATION_MARK, - ESPEAKNG_TOKEN_COMMA, - ESPEAKNG_TOKEN_COLON, - ESPEAKNG_TOKEN_SEMICOLON, - ESPEAKNG_TOKEN_ELLIPSIS, - ESPEAKNG_TOKEN_PUNCTUATION, - ESPEAKNG_TOKEN_SYMBOL, -} espeak_ng_TOKEN_TYPE; - -ESPEAK_NG_API espeak_ng_TOKEN_TYPE -tokenizer_read_next_token(espeak_ng_TOKENIZER *tokenizer); - -ESPEAK_NG_API const char * -tokenizer_get_token_text(espeak_ng_TOKENIZER *tokenizer); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/libespeak-ng/readclause.c b/src/libespeak-ng/readclause.c index e14d71a6..c660c89a 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -89,6 +89,55 @@ PARAM_STACK param_stack[N_PARAM_STACK]; static int speech_parameters[N_SPEECH_PARAM]; // current values, from param_stack int saved_parameters[N_SPEECH_PARAM]; // Parameters saved on synthesis start +#define ESPEAKNG_CLAUSE_TYPE_PROPERTY_MASK 0xFFF0000000000000ull + +int clause_type_from_codepoint(uint32_t c) +{ + ucd_category cat = ucd_lookup_category(c); + ucd_property props = ucd_properties(c, cat); + + switch (props & ESPEAKNG_CLAUSE_TYPE_PROPERTY_MASK) + { + case ESPEAKNG_PROPERTY_FULL_STOP: + return CLAUSE_PERIOD; + case ESPEAKNG_PROPERTY_FULL_STOP | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: + return CLAUSE_PERIOD | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_QUESTION_MARK: + return CLAUSE_QUESTION; + case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: + return CLAUSE_QUESTION | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD: + return CLAUSE_QUESTION | CLAUSE_PUNCTUATION_IN_WORD; + case ESPEAKNG_PROPERTY_EXCLAMATION_MARK: + return CLAUSE_EXCLAMATION; + case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: + return CLAUSE_EXCLAMATION | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD: + return CLAUSE_EXCLAMATION | CLAUSE_PUNCTUATION_IN_WORD; + case ESPEAKNG_PROPERTY_COMMA: + return CLAUSE_COMMA; + case ESPEAKNG_PROPERTY_COMMA | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: + return CLAUSE_COMMA | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_COLON: + return CLAUSE_COLON; + case ESPEAKNG_PROPERTY_COLON | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: + return CLAUSE_COLON | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_SEMI_COLON: + case ESPEAKNG_PROPERTY_EXTENDED_DASH: + return CLAUSE_SEMICOLON; + case ESPEAKNG_PROPERTY_SEMI_COLON | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: + case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER | ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION: + case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER | ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION: + return CLAUSE_SEMICOLON | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_ELLIPSIS: + return CLAUSE_SEMICOLON | CLAUSE_SPEAK_PUNCTUATION_NAME | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_PARAGRAPH_SEPARATOR: + return CLAUSE_PARAGRAPH; + } + + return CLAUSE_NONE; +} + const int param_defaults[N_SPEECH_PARAM] = { 0, // silence (internal use) 175, // rate wpm diff --git a/src/libespeak-ng/tokenizer.c b/src/libespeak-ng/tokenizer.c deleted file mode 100644 index 7b7c8a64..00000000 --- a/src/libespeak-ng/tokenizer.c +++ /dev/null @@ -1,410 +0,0 @@ -/* Tokenizer APIs. - * - * Copyright (C) 2017 Reece H. Dunn - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see: . - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "speech.h" -#include "phoneme.h" -#include "synthesize.h" -#include "translate.h" - -#define ESPEAKNG_CLAUSE_TYPE_PROPERTY_MASK 0xFFF0000000000000ull - -int clause_type_from_codepoint(uint32_t c) -{ - ucd_category cat = ucd_lookup_category(c); - ucd_property props = ucd_properties(c, cat); - - switch (props & ESPEAKNG_CLAUSE_TYPE_PROPERTY_MASK) - { - case ESPEAKNG_PROPERTY_FULL_STOP: - return CLAUSE_PERIOD; - case ESPEAKNG_PROPERTY_FULL_STOP | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: - return CLAUSE_PERIOD | CLAUSE_OPTIONAL_SPACE_AFTER; - case ESPEAKNG_PROPERTY_QUESTION_MARK: - return CLAUSE_QUESTION; - case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: - return CLAUSE_QUESTION | CLAUSE_OPTIONAL_SPACE_AFTER; - case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD: - return CLAUSE_QUESTION | CLAUSE_PUNCTUATION_IN_WORD; - case ESPEAKNG_PROPERTY_EXCLAMATION_MARK: - return CLAUSE_EXCLAMATION; - case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: - return CLAUSE_EXCLAMATION | CLAUSE_OPTIONAL_SPACE_AFTER; - case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD: - return CLAUSE_EXCLAMATION | CLAUSE_PUNCTUATION_IN_WORD; - case ESPEAKNG_PROPERTY_COMMA: - return CLAUSE_COMMA; - case ESPEAKNG_PROPERTY_COMMA | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: - return CLAUSE_COMMA | CLAUSE_OPTIONAL_SPACE_AFTER; - case ESPEAKNG_PROPERTY_COLON: - return CLAUSE_COLON; - case ESPEAKNG_PROPERTY_COLON | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: - return CLAUSE_COLON | CLAUSE_OPTIONAL_SPACE_AFTER; - case ESPEAKNG_PROPERTY_SEMI_COLON: - case ESPEAKNG_PROPERTY_EXTENDED_DASH: - return CLAUSE_SEMICOLON; - case ESPEAKNG_PROPERTY_SEMI_COLON | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: - case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER | ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION: - case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER | ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION: - return CLAUSE_SEMICOLON | CLAUSE_OPTIONAL_SPACE_AFTER; - case ESPEAKNG_PROPERTY_ELLIPSIS: - return CLAUSE_SEMICOLON | CLAUSE_SPEAK_PUNCTUATION_NAME | CLAUSE_OPTIONAL_SPACE_AFTER; - case ESPEAKNG_PROPERTY_PARAGRAPH_SEPARATOR: - return CLAUSE_PARAGRAPH; - } - - return CLAUSE_NONE; -} - -typedef enum { - ESPEAKNG_CTYPE_OTHER, - ESPEAKNG_CTYPE_CARRIAGE_RETURN, - ESPEAKNG_CTYPE_NEWLINE, - ESPEAKNG_CTYPE_END_OF_STRING, - ESPEAKNG_CTYPE_PARAGRAPH, - ESPEAKNG_CTYPE_WHITESPACE, - ESPEAKNG_CTYPE_LOWERCASE, - ESPEAKNG_CTYPE_UPPERCASE, - ESPEAKNG_CTYPE_FULL_STOP, - ESPEAKNG_CTYPE_QUESTION_MARK, - ESPEAKNG_CTYPE_EXCLAMATION_MARK, - ESPEAKNG_CTYPE_COMMA, - ESPEAKNG_CTYPE_COLON, - ESPEAKNG_CTYPE_SEMICOLON, - ESPEAKNG_CTYPE_ELLIPSIS, - ESPEAKNG_CTYPE_PUNCTUATION, - ESPEAKNG_CTYPE_SYMBOL, -} espeakng_CTYPE; - -#define ESPEAKNG_CTYPE_PROPERTY_MASK 0xFE0000000000C001ull - -// Reference: http://www.unicode.org/reports/tr14/tr14-32.html -- Unicode Line Breaking Algorithm -static espeakng_CTYPE codepoint_type(uint32_t c) -{ - // 1. Detect and classify specific codepoints. - - switch (c) - { - case 0x0000: return ESPEAKNG_CTYPE_END_OF_STRING; // NULL - case 0x000A: return ESPEAKNG_CTYPE_NEWLINE; // LINE FEED (LF) - case 0x000C: return ESPEAKNG_CTYPE_NEWLINE; // FORM FEED (FF) - case 0x000D: return ESPEAKNG_CTYPE_CARRIAGE_RETURN; // CARRIAGE RETURN (CR) - case 0x0085: return ESPEAKNG_CTYPE_NEWLINE; // NEW LINE (NEL) - } - - // 2. Override property types for codepoints by their Unicode General Category. - - ucd_category cat = ucd_lookup_category(c); - switch (cat) - { - case UCD_CATEGORY_Zl: return ESPEAKNG_CTYPE_NEWLINE; - case UCD_CATEGORY_Zp: return ESPEAKNG_CTYPE_PARAGRAPH; - } - - // 3. Classify codepoints by their Unicode properties. - - ucd_property props = ucd_properties(c, cat); - switch (props & ESPEAKNG_CTYPE_PROPERTY_MASK) - { - case UCD_PROPERTY_WHITE_SPACE: - return ESPEAKNG_CTYPE_WHITESPACE; - case UCD_PROPERTY_OTHER_LOWERCASE: - return ESPEAKNG_CTYPE_LOWERCASE; - case UCD_PROPERTY_OTHER_UPPERCASE: - return ESPEAKNG_CTYPE_UPPERCASE; - case ESPEAKNG_PROPERTY_FULL_STOP: - return ESPEAKNG_CTYPE_FULL_STOP; - case ESPEAKNG_PROPERTY_QUESTION_MARK: - return ESPEAKNG_CTYPE_QUESTION_MARK; - case ESPEAKNG_PROPERTY_EXCLAMATION_MARK: - return ESPEAKNG_CTYPE_EXCLAMATION_MARK; - case ESPEAKNG_PROPERTY_COMMA: - return ESPEAKNG_CTYPE_COMMA; - case ESPEAKNG_PROPERTY_COLON: - return ESPEAKNG_CTYPE_COLON; - case ESPEAKNG_PROPERTY_SEMI_COLON: - return ESPEAKNG_CTYPE_SEMICOLON; - case ESPEAKNG_PROPERTY_ELLIPSIS: - return ESPEAKNG_CTYPE_ELLIPSIS; - } - - // 4. Classify codepoints by their Unicode General Category. - - switch (cat) - { - case UCD_CATEGORY_Lu: return ESPEAKNG_CTYPE_UPPERCASE; - case UCD_CATEGORY_Ll: return ESPEAKNG_CTYPE_LOWERCASE; - case UCD_CATEGORY_Pc: return ESPEAKNG_CTYPE_PUNCTUATION; - case UCD_CATEGORY_Pd: return ESPEAKNG_CTYPE_PUNCTUATION; - case UCD_CATEGORY_Pe: return ESPEAKNG_CTYPE_PUNCTUATION; - case UCD_CATEGORY_Pf: return ESPEAKNG_CTYPE_PUNCTUATION; - case UCD_CATEGORY_Pi: return ESPEAKNG_CTYPE_PUNCTUATION; - case UCD_CATEGORY_Po: return ESPEAKNG_CTYPE_PUNCTUATION; - case UCD_CATEGORY_Ps: return ESPEAKNG_CTYPE_PUNCTUATION; - case UCD_CATEGORY_Sc: return ESPEAKNG_CTYPE_SYMBOL; - case UCD_CATEGORY_Sk: return ESPEAKNG_CTYPE_SYMBOL; - case UCD_CATEGORY_Sm: return ESPEAKNG_CTYPE_SYMBOL; - case UCD_CATEGORY_So: return ESPEAKNG_CTYPE_SYMBOL; - } - - // 5. Classify the remaining codepoints. - - return ESPEAKNG_CTYPE_OTHER; -} - -#define ESPEAKNG_CODEPOINT_INVALID 0xFFFFFFFF - -struct espeak_ng_TOKENIZER_ -{ - espeak_ng_TEXT_DECODER *decoder; - char token[256]; - uint32_t keepc; - - espeak_ng_TOKEN_TYPE (*read)(espeak_ng_TOKENIZER *tokenizer); -}; - -static espeak_ng_TOKEN_TYPE -tokenizer_state_end_of_buffer(espeak_ng_TOKENIZER *tokenizer) -{ - *tokenizer->token = '\0'; - return ESPEAKNG_TOKEN_END_OF_BUFFER; -} - -static espeak_ng_TOKEN_TYPE -tokenizer_read_word_token(espeak_ng_TOKENIZER *tokenizer, char *current, espeak_ng_TOKEN_TYPE type) -{ - char *end = tokenizer->token + sizeof(tokenizer->token) - 5; // allow for UTF-8 trailing bytes - int initial_state = 1; - - while (current < end && !text_decoder_eof(tokenizer->decoder)) { - uint32_t c = text_decoder_getc(tokenizer->decoder); - switch (codepoint_type(c)) - { - case ESPEAKNG_CTYPE_LOWERCASE: - current += utf8_out(c, current); - switch (type) - { - case ESPEAKNG_TOKEN_WORD_LOWERCASE: - case ESPEAKNG_TOKEN_WORD_MIXEDCASE: - case ESPEAKNG_TOKEN_WORD_CAPITALIZED: - break; - case ESPEAKNG_TOKEN_WORD_UPPERCASE: - type = initial_state - ? ESPEAKNG_TOKEN_WORD_CAPITALIZED - : ESPEAKNG_TOKEN_WORD_MIXEDCASE; - break; - } - initial_state = 0; - break; - case ESPEAKNG_CTYPE_UPPERCASE: - current += utf8_out(c, current); - switch (type) - { - case ESPEAKNG_TOKEN_WORD_UPPERCASE: - case ESPEAKNG_TOKEN_WORD_MIXEDCASE: - break; - case ESPEAKNG_TOKEN_WORD_LOWERCASE: - case ESPEAKNG_TOKEN_WORD_CAPITALIZED: - type = ESPEAKNG_TOKEN_WORD_MIXEDCASE; - break; - } - initial_state = 0; - break; - default: - tokenizer->keepc = c; - *current = '\0'; - return type; - } - } - - *current = '\0'; - return type; -} - -static espeak_ng_TOKEN_TYPE -tokenizer_state_default(espeak_ng_TOKENIZER *tokenizer) -{ - if (text_decoder_eof(tokenizer->decoder)) { - tokenizer->read = tokenizer_state_end_of_buffer; - return tokenizer_state_end_of_buffer(tokenizer); - } - - char *current = tokenizer->token; - char *end = tokenizer->token + sizeof(tokenizer->token) - 5; // allow for UTF-8 trailing bytes - - uint32_t c; - if (tokenizer->keepc != ESPEAKNG_CODEPOINT_INVALID) { - c = tokenizer->keepc; - tokenizer->keepc = ESPEAKNG_CODEPOINT_INVALID; - } else { - c = text_decoder_getc(tokenizer->decoder); - } - - switch (codepoint_type(c)) - { - case ESPEAKNG_CTYPE_END_OF_STRING: // '\0' - tokenizer->read = tokenizer_state_end_of_buffer; - return tokenizer_state_end_of_buffer(tokenizer); - case ESPEAKNG_CTYPE_CARRIAGE_RETURN: // '\r' - if (text_decoder_peekc(tokenizer->decoder) == '\n') { - current += utf8_out(c, current); - c = text_decoder_getc(tokenizer->decoder); - } - // fallthrough - case ESPEAKNG_CTYPE_NEWLINE: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_NEWLINE; - case ESPEAKNG_CTYPE_PARAGRAPH: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_PARAGRAPH; - case ESPEAKNG_CTYPE_WHITESPACE: - current += utf8_out(c, current); - while (!text_decoder_eof(tokenizer->decoder) && - current < end && - codepoint_type(c = text_decoder_getc(tokenizer->decoder)) == ESPEAKNG_CTYPE_WHITESPACE) - { - current += utf8_out(c, current); - } - tokenizer->keepc = c; - *current = '\0'; - return ESPEAKNG_TOKEN_WHITESPACE; - case ESPEAKNG_CTYPE_LOWERCASE: - current += utf8_out(c, current); - return tokenizer_read_word_token(tokenizer, current, ESPEAKNG_TOKEN_WORD_LOWERCASE); - case ESPEAKNG_CTYPE_UPPERCASE: - current += utf8_out(c, current); - return tokenizer_read_word_token(tokenizer, current, ESPEAKNG_TOKEN_WORD_UPPERCASE); - case ESPEAKNG_CTYPE_FULL_STOP: - current += utf8_out(c, current); - if (c == '.' && text_decoder_peekc(tokenizer->decoder) == '.') { - c = text_decoder_getc(tokenizer->decoder); - if (text_decoder_peekc(tokenizer->decoder) == '.') { - c = text_decoder_getc(tokenizer->decoder); - current += utf8_out('.', current); - current += utf8_out('.', current); - *current = '\0'; - return ESPEAKNG_TOKEN_ELLIPSIS; - } else { - tokenizer->keepc = c; - } - } - *current = '\0'; - return ESPEAKNG_TOKEN_FULL_STOP; - case ESPEAKNG_CTYPE_QUESTION_MARK: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_QUESTION_MARK; - case ESPEAKNG_CTYPE_EXCLAMATION_MARK: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_EXCLAMATION_MARK; - case ESPEAKNG_CTYPE_COMMA: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_COMMA; - case ESPEAKNG_CTYPE_COLON: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_COLON; - case ESPEAKNG_CTYPE_SEMICOLON: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_SEMICOLON; - case ESPEAKNG_CTYPE_ELLIPSIS: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_ELLIPSIS; - case ESPEAKNG_CTYPE_PUNCTUATION: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_PUNCTUATION; - case ESPEAKNG_CTYPE_SYMBOL: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_SYMBOL; - default: - current += utf8_out(c, current); - *current = '\0'; - return ESPEAKNG_TOKEN_UNKNOWN; - } - - return ESPEAKNG_TOKEN_END_OF_BUFFER; -} - -#pragma GCC visibility push(default) - -espeak_ng_TOKENIZER * -create_tokenizer(void) -{ - espeak_ng_TOKENIZER *tokenizer = malloc(sizeof(espeak_ng_TOKENIZER)); - if (!tokenizer) return NULL; - - tokenizer->decoder = NULL; - tokenizer->keepc = ESPEAKNG_CODEPOINT_INVALID; - tokenizer->read = tokenizer_state_end_of_buffer; - - *tokenizer->token = '\0'; - return tokenizer; -} - -void -destroy_tokenizer(espeak_ng_TOKENIZER *tokenizer) -{ - if (tokenizer) free(tokenizer); -} - -int -tokenizer_reset(espeak_ng_TOKENIZER *tokenizer, - espeak_ng_TEXT_DECODER *decoder, - espeak_ng_TOKENIZER_OPTIONS options) -{ - if (!tokenizer) return 0; - - tokenizer->decoder = decoder; - tokenizer->keepc = ESPEAKNG_CODEPOINT_INVALID; - tokenizer->read = decoder ? tokenizer_state_default : tokenizer_state_end_of_buffer; - return 1; -} - -espeak_ng_TOKEN_TYPE -tokenizer_read_next_token(espeak_ng_TOKENIZER *tokenizer) -{ - return tokenizer->read(tokenizer); -} - -const char * -tokenizer_get_token_text(espeak_ng_TOKENIZER *tokenizer) -{ - return tokenizer->token; -} - -#pragma GCC visibility pop diff --git a/src/windows/libespeak-ng.vcxproj b/src/windows/libespeak-ng.vcxproj index 0325e7b3..da2016d3 100644 --- a/src/windows/libespeak-ng.vcxproj +++ b/src/windows/libespeak-ng.vcxproj @@ -186,7 +186,6 @@ - @@ -221,4 +220,4 @@ - \ No newline at end of file + diff --git a/src/windows/libespeak-ng.vcxproj.filters b/src/windows/libespeak-ng.vcxproj.filters index fd91ed15..19eba62a 100644 --- a/src/windows/libespeak-ng.vcxproj.filters +++ b/src/windows/libespeak-ng.vcxproj.filters @@ -135,9 +135,6 @@ Source Files - - Source Files - @@ -194,4 +191,4 @@ Source Files - \ No newline at end of file + diff --git a/tests/tokenizer.c b/tests/tokenizer.c deleted file mode 100644 index c046842b..00000000 --- a/tests/tokenizer.c +++ /dev/null @@ -1,704 +0,0 @@ -/* - * Copyright (C) 2017 Reece H. Dunn - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write see: - * . - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "speech.h" -#include "phoneme.h" -#include "synthesize.h" -#include "translate.h" - -// TODO: Find a better place for this than speech.c, so it can be implemented -// in one place without having to include all of speech.c. -int GetFileLength(const char *filename) -{ - struct stat statbuf; - - if (stat(filename, &statbuf) != 0) - return -errno; - - if (S_ISDIR(statbuf.st_mode)) - return -EISDIR; - - return statbuf.st_size; -} - -void -test_unbound_tokenizer() -{ - printf("testing unbound tokenizer\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - assert(tokenizer != NULL); - - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - assert(tokenizer_reset(tokenizer, NULL, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_tokenizer(tokenizer); -} - -void -test_linux_newline_tokens() -{ - printf("testing linux newline tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "\n\n", -1, ESPEAKNG_ENCODING_US_ASCII) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\n") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\n") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_mac_newline_tokens() -{ - printf("testing mac newline tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "\r\r", -1, ESPEAKNG_ENCODING_US_ASCII) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\r") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\r") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_windows_newline_tokens() -{ - printf("testing windows newline tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "\r\n\r\n", -1, ESPEAKNG_ENCODING_US_ASCII) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\r\n") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\r\n") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_unicode_newline_tokens() -{ - printf("testing unicode newline tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "\x0C\x0C\xC2\x85\xC2\x85\xE2\x80\xA8\xE2\x80\xA8", -1, ESPEAKNG_ENCODING_UTF_8) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - // FORM FEED (FF) -- Used as a page (not paragraph) break. - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\x0C") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\x0C") == 0); - - // NEXT LINE (NEL) [U+0085] -- Used in EBCDIC systems as a combined CR+LF character. - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xC2\x85") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xC2\x85") == 0); - - // General Category: Zl -- LINE SEPARATOR [U+2028] - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xE2\x80\xA8") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xE2\x80\xA8") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_paragraph_tokens() -{ - printf("testing paragraph tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "\xE2\x80\xA9\xE2\x80\xA9", -1, ESPEAKNG_ENCODING_UTF_8) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - // General Category: Zp, PARAGRAPH SEPARATOR [U+2029] - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PARAGRAPH); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xE2\x80\xA9") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PARAGRAPH); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xE2\x80\xA9") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_whitespace_tokens() -{ - printf("testing whitespace tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "\t\t\n\x0B\x0B\n \xE3\x80\x80 \n\xC2\xA0\xC2\xA0", -1, ESPEAKNG_ENCODING_UTF_8) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - // General Category: Cc, Property: White_Space - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\t\t") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\n") == 0); - - // General Category: Cc, Property: White_Space, VERTICAL TAB (VT) -- Not treated as newline tokens. - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\x0B\x0B") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\n") == 0); - - // General Category: Zs, Property: White_Space - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " \xE3\x80\x80 ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_NEWLINE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\n") == 0); - - // General Category: Zs, Property: White_Space, Decomposition: , NO-BREAK SPACE [U+00A0] - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xC2\xA0\xC2\xA0") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_Latn_word_tokens() -{ - printf("testing Latin (Latn) script word tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "One one ONE OneTwo ONETwo", -1, ESPEAKNG_ENCODING_US_ASCII) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WORD_CAPITALIZED); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "One") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WORD_LOWERCASE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "one") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WORD_UPPERCASE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "ONE") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WORD_MIXEDCASE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "OneTwo") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WORD_MIXEDCASE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "ONETwo") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_Latn_punctuation_tokens() -{ - printf("testing Latin (Latn) script punctuation tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, ". ? .. ! ... , .... : ; \xE2\x80\xA6", -1, ESPEAKNG_ENCODING_UTF_8) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_FULL_STOP); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), ".") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_QUESTION_MARK); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "?") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_FULL_STOP); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), ".") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_FULL_STOP); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), ".") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_EXCLAMATION_MARK); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "!") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_ELLIPSIS); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "...") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_COMMA); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), ",") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_ELLIPSIS); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "...") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_FULL_STOP); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), ".") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_COLON); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), ":") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_SEMICOLON); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), ";") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - // HORIZONTAL ELLIPSIS [U+2026] - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_ELLIPSIS); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xE2\x80\xA6") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_Latn_general_punctuation_tokens() -{ - printf("testing Latin (Latn) script general punctuation tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "\" () - _ \xC2\xAB\xC2\xBB", -1, ESPEAKNG_ENCODING_UTF_8) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - // General Category: Po - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PUNCTUATION); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\"") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - // General Category: Ps - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PUNCTUATION); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "(") == 0); - - // General Category: Pe - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PUNCTUATION); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), ")") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - // General Category: Pd - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PUNCTUATION); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "-") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - // General Category: Pc - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PUNCTUATION); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "_") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - // General Category: Pi, LEFT-POINTING DOUBLE ANGLE QUOTATION MARK [U+00AB] - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PUNCTUATION); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xC2\xAB") == 0); - - // General Category: Pf, RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK [U+00BB] - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_PUNCTUATION); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xC2\xBB") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -test_Latn_symbol_tokens() -{ - printf("testing Latin (Latn) script symbol tokens\n"); - - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - - assert(text_decoder_decode_string(decoder, "$ ^ + \xC2\xA9", -1, ESPEAKNG_ENCODING_UTF_8) == ENS_OK); - assert(tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT) == 1); - - // General Category: Sc - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_SYMBOL); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "$") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - // General Category: Sk - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_SYMBOL); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "^") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - // General Category: Sm - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_SYMBOL); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "+") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_WHITESPACE); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), " ") == 0); - - // General Category: So, COPYRIGHT SIGN [U+00A9] - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_SYMBOL); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(strcmp(tokenizer_get_token_text(tokenizer), "\xC2\xA9") == 0); - - assert(tokenizer_read_next_token(tokenizer) == ESPEAKNG_TOKEN_END_OF_BUFFER); - assert(tokenizer_get_token_text(tokenizer) != NULL); - assert(*tokenizer_get_token_text(tokenizer) == '\0'); - - destroy_text_decoder(decoder); - destroy_tokenizer(tokenizer); -} - -void -run_tests() -{ - test_unbound_tokenizer(); - - test_linux_newline_tokens(); - test_mac_newline_tokens(); - test_windows_newline_tokens(); - test_unicode_newline_tokens(); - test_paragraph_tokens(); - test_whitespace_tokens(); - - test_Latn_word_tokens(); - test_Latn_punctuation_tokens(); - test_Latn_general_punctuation_tokens(); - test_Latn_symbol_tokens(); -} - -void -escape_newline(const char *s) -{ - for ( ; *s; ++s) switch (*s) - { - case '\r': printf("\\r"); break; - case '\n': printf("\\n"); break; - default: putc(*s, stdout); break; - } -} - -void -print_tokens(espeak_ng_TEXT_DECODER *decoder) -{ - espeak_ng_TOKENIZER *tokenizer = create_tokenizer(); - if (!tokenizer_reset(tokenizer, decoder, ESPEAKNG_TOKENIZER_OPTION_TEXT)) { - destroy_tokenizer(tokenizer); - return; - } - - while (1) switch (tokenizer_read_next_token(tokenizer)) - { - case ESPEAKNG_TOKEN_END_OF_BUFFER: - destroy_tokenizer(tokenizer); - return; - case ESPEAKNG_TOKEN_UNKNOWN: - printf("unknown : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_NEWLINE: - printf("newline : "); - escape_newline(tokenizer_get_token_text(tokenizer)); - putc('\n', stdout); - break; - case ESPEAKNG_TOKEN_PARAGRAPH: - printf("paragraph : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_WHITESPACE: - printf("whitespace : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_WORD_UPPERCASE: - printf("word (upper case) : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_WORD_LOWERCASE: - printf("word (lower case) : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_WORD_MIXEDCASE: - printf("word (mixed case) : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_WORD_CAPITALIZED: - printf("word (capitalized) : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_FULL_STOP: - printf("full stop : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_QUESTION_MARK: - printf("question mark : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_EXCLAMATION_MARK: - printf("exclamation mark : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_COMMA: - printf("comma : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_COLON: - printf("colon : %s\n", tokenizer_get_token_text(tokenizer)); - break; - case ESPEAKNG_TOKEN_SEMICOLON: - printf("semicolon : %s\n", tokenizer_get_token_text(tokenizer)); - break; - } -} - -void -print_tokens_from_file(const char *filename, const char *encoding_name) -{ - espeak_ng_ENCODING encoding = espeak_ng_EncodingFromName(encoding_name); - if (encoding == ESPEAKNG_ENCODING_UNKNOWN) { - printf("Unknown encoding \"%s\".\n", encoding_name); - return; - } - - int length = GetFileLength(filename); - FILE *f = (length > 0) ? fopen(filename, "rb") : NULL; - if (!f) { - printf("Cannot open file: %s\n", filename); - return; - } - - char *buffer = malloc(length); - if (!buffer) { - fclose(f); - printf("Out of memory!\n"); - return; - } - - fread(buffer, 1, length, f); - fclose(f); - - espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); - if (text_decoder_decode_string(decoder, buffer, length, encoding) == ENS_OK) - print_tokens(decoder); - - destroy_text_decoder(decoder); -} - -void -usage(const char *program) -{ - printf("%s -- Run the tokenizer tests.\n", program); - printf("%s ENCODING FILENAME -- Print the tokens for FILENAME.\n", program); -} - -int -main(int argc, char **argv) -{ - switch (argc) - { - case 1: run_tests(); break; - case 3: print_tokens_from_file(argv[2], argv[1]); break; - default: usage(argv[0]); return EXIT_FAILURE; - } - - return EXIT_SUCCESS; -} From 0bb4501253fc326fb5e47c9383f12477728ca7a0 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 16 Aug 2017 19:08:51 +0100 Subject: [PATCH 036/137] Revert "pa: remove the emoji support for now, as it fails to build" This reverts commit 593949dec62d6cdc78ed8383e113c48654829243. --- CHANGELOG.md | 1 + Makefile.am | 2 +- dictsource/pa_emoji | 1678 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1680 insertions(+), 1 deletion(-) create mode 100644 dictsource/pa_emoji diff --git a/CHANGELOG.md b/CHANGELOG.md index 497e85e6..073eef61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,7 @@ Unicode Emoji support (from the Unicode Emoji 5.0, and CLDR 31.0.1 data files): * ms (Malay) * nl (Dutch) * or (Oriya) +* pa (Punjabi) * pl (Polish) * pt (Portuguese) -- Brazil * ro (Romanian) diff --git a/Makefile.am b/Makefile.am index c1369403..a70785b9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -696,7 +696,7 @@ or: espeak-ng-data/or_dict espeak-ng-data/or_dict: dictsource/or_list dictsource/or_rules dictsource/or_extra dictsource/or_emoji pa: espeak-ng-data/pa_dict -espeak-ng-data/pa_dict: dictsource/pa_list dictsource/pa_rules dictsource/pa_extra +espeak-ng-data/pa_dict: dictsource/pa_list dictsource/pa_rules dictsource/pa_extra dictsource/pa_emoji pap: espeak-ng-data/pap_dict espeak-ng-data/pap_dict: dictsource/pap_list dictsource/pap_rules dictsource/pap_extra diff --git a/dictsource/pa_emoji b/dictsource/pa_emoji new file mode 100644 index 00000000..664114f8 --- /dev/null +++ b/dictsource/pa_emoji @@ -0,0 +1,1678 @@ +// Emoji and Other Symbol pronunciations for Punjabi +// +// Entries with `text|emoji` in the comments have text and emoji forms. They +// can be followed by [FE0E] to select the text style, and [FE0F] to select +// the emoji style. +// +// NOTE: See `src/ucd-tools/data/espeak-ng/emoji-data.txt` for additional data +// in interpreting ZWJ emoji sequences. + +$textmode + +// 0080..00FF : C1 Controls and Latin-1 Supplement + +© ਕਾਪੀਰਾਈਟ ਚਿੰਨ੍ਹ // [00A9] text|emoji +® ਰਜਿਸਟਰਡ ਚਿੰਨ੍ਹ // [00AE] text|emoji + +// 2000..203C : General Punctuation + +‼ ਦੋਹਰਾ ਹੈਰਾਨੀਵਾਚਕ ਚਿੰਨ੍ਹ // [203C] text|emoji +⁉ ਹੈਰਾਨੀਵਾਚਕ ਸਵਾਲ ਚਿੰਨ੍ਹ // [2049] text|emoji + +// 2100..214F : Letterlike Symbols + +™ ਟ੍ਰੇਡਮਾਰਕ // [2122] text|emoji +ℹ ਜਾਣਕਾਰੀ ਸਰੋਤ // [2139] text|emoji + +// 2190..21FF : Arrows + +↔ ਖੱੱਬੇ-ਸੱਜੇ ਤੀਰ // [2194] text|emoji +↕ ਉੱਪਰ-ਥੱਲੇ ਤੀਰ // [2195] text|emoji +↖ ਉੱਪਰ-ਖੱਬੇ ਤੀਰ // [2196] text|emoji +↗ ਉੱਪਰ-ਸੱਜੇ ਤੀਰ // [2197] text|emoji +↘ ਥੱਲੇ-ਸੱਜੇ ਤੀਰ // [2198] text|emoji +↙ ਥੱਲੇ-ਖੱਬੇ ਤੀਰ // [2199] text|emoji +↩ ਸੱੱਜੇ ਮੁੜਨ ਵਾਲਾ ਖੱਬਾ ਤੀਰ // [21A9] text|emoji +↪ ਖੱਬੇੇ ਮੁੜਨ ਵਾਲਾ ਸੱਜਾ ਤੀਰ // [21AA] text|emoji + +// 2300..23FF : Miscellaneous Technical + +⌚ ਗੁੱਟ ਘੜੀ // [231A] +⌛ ਰੇਤ ਘੜੀ // [231B] +⌨ ਕੀ-ਬੋਰਡ // [2328] text|emoji +⏏ ਬਾਹਰ ਕੱਢਣ ਵਾਲਾ ਬਟਨ // [23CF] text|emoji +⏩ ਤੇਜ਼ੀ ਨਾਲ ਅੱਗੇ ਕਰਨ ਲਈ ਬਟਨ // [23E9] +⏪ ਤੇਜ਼ੀ ਨਾਲ ਪਿੱਛੇ ਕਰਨ ਲਈ ਬਟਨ // [23EA] +⏫ ਤੇਜ਼ੀ ਨਾਲ ਉੱਪਰ ਬਟਨ // [23EB] +⏬ ਤੇਜ਼ੀ ਨਾਲ ਥੱਲੇ ਬਟਨ // [23EC] +⏭ ਅਗਲੇ ਟਰੈਕ ਲਈ ਬਟਨ // [23ED] text|emoji +⏮ ਪਿਛਲੇ ਟਰੈਕ ਲਈ ਬਟਨ // [23EE] text|emoji +⏯ ਚਲਾਉਣ ਜਾਂ ਰੋਕਣ ਲਈ ਬਟਨ // [23EF] text|emoji +⏰ ਅਲਾਰਮ // [23F0] +⏱ ਸਟਾਪਵਾਚ // [23F1] text|emoji +⏲ ਟਾਈਮਰ ਘੜੀ // [23F2] text|emoji +⏳ ਵਗਦੀ ਰੇਤ ਨਾਲ ਰੇਤ ਘੜੀ // [23F3] +⏸ ਰੋਕਣ ਲਈ ਬਟਨ // [23F8] text|emoji +⏹ ਮੁਕੰਮਲ ਤੌਰ ‘ਤੇ ਰੋਕਣ ਲਈ ਬਟਨ // [23F9] text|emoji +⏺ ਰਿਕਾਰਡ ਬਟਨ // [23FA] text|emoji + +// 2460..24FF : Enclosed Alphanumerics + +Ⓜ ਘੇਰੇ ਵਿੱਚ ਲਿਖਿਆ ਅੱਖਰ m // [24C2] text|emoji + +// 25A0..25FF : Geometric Shapes + +▪ ਛੋਟਾ ਕਾਲਾ ਵਰਗ // [25AA] text|emoji +▫ ਛੋਟਾ ਚਿੱਟਾ ਵਰਗ // [25AB] text|emoji +▶ ਪਲੇ ਬਟਨ // [25B6] text|emoji +◀ ਪਿੱਛੇ ਜਾਣ ਲਈ ਬਟਨ // [25C0] text|emoji +◻ ਦਰਮਿਆਨਾ ਚਿੱਟਾ ਵਰਗ // [25FB] text|emoji +◼ ਦਰਮਿਆਨਾ ਕਾਲਾ ਵਰਗ // [25FC] text|emoji +◽ ਦਰਮਿਆਨਾ-ਛੋਟਾ ਚਿੱਟਾ ਵਰਗ // [25FD] +◾ ਦਰਮਿਆਨਾ-ਛੋਟਾ ਕਾਲਾ ਵਰਗ // [25FE] + +// 2600..26FF : Miscellaneous Symbols + +☀ ਸੂਰਜ // [2600] text|emoji +☁ ਬੱਦਲ // [2601] text|emoji +☂ ਛੱਤਰੀ // [2602] text|emoji +☃ ਸਨੋਮੈਨ // [2603] text|emoji +☄ ਧੂਮਕੇਤੂ // [2604] text|emoji +☎ ਟੈਲੀਫੋਨ // [260E] text|emoji +☑ ਨਿਸ਼ਾਨ ਵਾਲੀ ਮਤਦਾਨ ਪੇਟੀ // [2611] text|emoji +☔ ਛੱਤਰੀ ਅਤੇ ਮੀਂਹ ਦੀਆਂ ਬੂੰਦਾਂ // [2614] +☕ ਪੀਣ ਵਾਲੀਆਂ ਗਰਮ ਚੀਜ਼ਾਂ // [2615] +☘ ਘਾਹ ਦੀ ਇੱਕ ਕਿਸਮ, ਆਇਰਲੈਂਡ // [2618] text|emoji +☝ ਉੱਪਰ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੀ ਉਂਗਲ // [261D] text|emoji +☠ ਖ਼ਤਰੇ ਦਾ ਨਿਸ਼ਾਨ // [2620] text|emoji +☢ ਰੇਡੀਓਐਕਟਿਵ // [2622] text|emoji +☣ ਜੈਵਿਕ-ਜੋਖਮ // [2623] text|emoji +☦ ਆਰਥੋਡਾਕਸ ਕ੍ਰਾਸ // [2626] text|emoji +☪ ਚੰਦ ਅਤੇ ਤਾਰਾ // [262A] text|emoji +☮ ਅਮਨ ਚਿੰਨ੍ਹ // [262E] text|emoji +☯ ਯਿਨ ਯੈਂਗ // [262F] text|emoji +☸ ਧਰਮ ਚੱਕਰ // [2638] text|emoji +☹ ਨਰਾਜ਼ ਚਿਹਰਾ // [2639] text|emoji +☺ ਹੱਸਦਾ ਚਿਹਰਾ // [263A] text|emoji +♀ ਇਸਤਰੀ ਚਿੰਨ੍ਹ // [2640] text|emoji +♂ ਪੁਰਸ਼ ਚਿੰਨ੍ਹ // [2642] text|emoji +♈ ਮੇਖ ਰਾਸ਼ੀ // [2648] +♉ ਵ੍ਰਸ਼ ਰਾਸ਼ੀ // [2649] +♊ ਮਿਥੁਨ ਰਾਸ਼ੀ // [264A] +♋ ਕਰਕ ਰਾਸ਼ੀ // [264B] +♌ ਸਿੰਗ ਰਾਸ਼ੀ // [264C] +♍ ਕੰਨਿਆ ਰਾਸ਼ੀ // [264D] +♎ ਤੁਲਾ ਰਾਸ਼ੀ // [264E] +♏ ਵ੍ਰਿਸ਼ਚਕ ਰਾਸ਼ੀ // [264F] +♐ ਧਨੁ ਰਾਸ਼ੀ // [2650] +♑ ਮੱਕਰ ਰਾਸ਼ੀ // [2651] +♒ ਕੁੰਭ ਰਾਸ਼ੀ // [2652] +♓ ਮੀਨ ਰਾਸ਼ੀ // [2653] +♠ ਹੁਕਮ ਦਾ ਪੱਤਾ // [2660] text|emoji +♣ ਚਿੜੀ ਦਾ ਪੱਤਾ // [2663] text|emoji +♥ ਪਾਨ ਦਾ ਪੱਤਾ // [2665] text|emoji +♦ ਇੱਟ ਦਾ ਪੱਤਾ // [2666] text|emoji +♨ ਬਹੁਤ ਗਰਮ // [2668] text|emoji +♻ ਰੀਸਾਈਕਲਿੰਗ ਚਿੰਨ੍ਹ // [267B] text|emoji +♿ ਪਹੀਆ ਕੁਰਸੀ // [267F] +⚒ ਹਥੌੜਾ ਅਤੇ ਕੁਹਾੜੀ // [2692] text|emoji +⚓ ਲੰਗਰ // [2693] +⚔ ਕ੍ਰਾਸ ਬਣਾਉਂਦੀਆਂ ਤਲਵਾਰਾਂ // [2694] text|emoji +⚕ ਡਾਕਟਰੀ ਚਿੰਨ੍ਹ // [2695] text|emoji +⚖ ਤੱਕੜੀ // [2696] text|emoji +⚗ ਰਸਾਇਣ ਔਜ਼ਾਰ // [2697] text|emoji +⚙ ਗਿਅਰ // [2699] text|emoji +⚛ ਐਟਮ ਦਾ ਚਿੰਨ੍ਹ // [269B] text|emoji +⚜ ਕਮੁਦਿਨੀ ਦਾ ਫੁੱਲ // [269C] text|emoji +⚠ ਚਿਤਾਵਨੀ // [26A0] text|emoji +⚡ ਹਾਈ ਵੋਲਟੇਜ // [26A1] +⚪ ਚਿੱਟਾ ਗੋਲਾ // [26AA] +⚫ ਕਾਲਾ ਗੋਲਾ // [26AB] +⚰ ਤਾਬੂਤ // [26B0] text|emoji +⚱ ਅੰਤਿਮ ਸੰਸਕਾਰ ਕਲਸ਼ // [26B1] text|emoji +⚽ ਫੁੱਟਬਾਲ // [26BD] +⚾ ਬੇਸਬਾਲ // [26BE] +⛄ ਬਿਨਾਂ ਬਰਫ਼ ਦਾ ਸਨੋਮੈਨ // [26C4] +⛅ ਬੱਦਲਾਂਂ ਪਿੱਛੇ ਸੂਰਜ // [26C5] +⛈ ਬੱਦਲ ਅਤੇ ਬਿਜਲੀ ਅਤੇ ਮੀਂਹ // [26C8] text|emoji +⛎ ਓਪੀਊਚਸ // [26CE] +⛏ ਗੈਂਤੀ // [26CF] text|emoji +⛑ ਮੈਡੀਕਲ ਸਹਾਇਤਾ ਵਾਲਾ ਹੈਲਮੇਟ // [26D1] text|emoji +⛓ ਜੰਜੀਰ // [26D3] text|emoji +⛔ ਦਾਖਲਾ ਮਨ੍ਹਾ // [26D4] +⛩ ਸਿੰਟੋ ਮੰਦਿਰ // [26E9] text|emoji +⛪ ਗਿਰਜਾ ਘਰ // [26EA] +⛰ ਪਰਬਤ // [26F0] text|emoji +⛱ ਧਰਤੀ ‘ਤੇ ਛੱਤਰੀ // [26F1] text|emoji +⛲ ਫੁਹਾਰਾ // [26F2] +⛳ ਖੁੱਡ ਵਿੱਚ ਝੰਡਾ // [26F3] +⛴ ਫੈਰੀ // [26F4] text|emoji +⛵ ਬੇੜੀ // [26F5] +⛷ ਸਕੀਅਰ // [26F7] text|emoji +⛸ ਆਈਸ ਸਕੇਟ // [26F8] text|emoji +⛹ ਗੇਂਦ ਅਤੇ ਵਿਅਕਤੀ // [26F9] text|emoji +⛺ ਟੈਂਟ // [26FA] +⛽ ਤੇਲ ਪੰਪ // [26FD] + +// 2700..27BF : Dingbats + +✂ ਕੈਂਚੀ // [2702] text|emoji +✅ ਠੀਕ ਦਾ ਵੱਡਾ ਚਿੰਨ੍ਹ // [2705] +✈ ਹਵਾਈ ਜਹਾਜ਼ // [2708] text|emoji +✉ ਲਿਫਾਫ਼ਾ // [2709] text|emoji +✊ ਚੁੱੱਕੀ ਹੋਈ ਮੁੱਠੀ // [270A] +✋ ਚੁੱਕਿਆ ਹੋਇਆ ਹੱਥ // [270B] +✌ ਜਿੱਤ ਦਾ ਹੱਥ ਚਿੰਨ੍ਹ // [270C] text|emoji +✍ ਲਿਖਣਾ, ਲਿਖਾਈ // [270D] text|emoji +✏ ਪੈਨਸਿਲ // [270F] text|emoji +✒ ਕਾਲੀ ਨੋਕ // [2712] text|emoji +✔ ਗੂੜ੍ਹਾ ਸਹੀ ਦਾ ਨਿਸ਼ਾਨ // [2714] text|emoji +✖ ਗੂ੍ੜ੍ਹਾ ਗੁਣਾ ਦਾ ਨਿਸ਼ਾਨ // [2716] text|emoji +✝ ਲੇਟਿਨ ਕ੍ਰਾਸ // [271D] text|emoji +✡ ਡ੍ਰਾਵਿਡ ਤਾਰਾ // [2721] text|emoji +✨ ਚਮਕਦਾਰ ਤਾਰੇ // [2728] +✳ ਅੱਠ-ਕਿਰਨਾਂ ਵਾਲਾ ਤਾਰਾ // [2733] text|emoji +✴ ਅੱਠ-ਬਿੰਦੂਆਂ ਵਾਲਾ ਤਾਰਾ // [2734] text|emoji +❄ ਬਰਫ ਦਾ ਕ੍ਰਿਸਟਲ // [2744] text|emoji +❇ ਚਮਕ // [2747] text|emoji +❌ ਕ੍ਰਾਸ ਮਾਰਕ // [274C] +❎ ਕ੍ਰਾਸ ਮਾਰਕ ਬਟਨ // [274E] +❓ ਸਵਾਲ ਚਿੰਨ੍ਹ // [2753] +❔ ਸਫੇਦ ਸਵਾਲ ਚਿੰਨ੍ਹ // [2754] +❕ ਸਫੇੇਦ ਹੈਰਾਨੀਵਾਚਕ ਚਿੰਨ੍ਹ // [2755] +❗ ਹੈਰਾਨੀਵਾਚਕ ਚਿੰਨ੍ਹ // [2757] +❣ ਸਜਾਵਟੀ ਹੈਰਾਨੀਵਾਚਕ ਚਿੰਨ੍ਹ // [2763] text|emoji +❤ ਪਿਆਰ ਵਿਖਾਉਣਾ // [2764] text|emoji +➕ ਜਮ੍ਹਾਂ ਦਾ ਵੱਡਾ ਚਿੰਨ੍ਹ // [2795] +➖ ਘਟਾਓ ਦਾ ਵੱਡਾ ਚਿੰਨ੍ਹ // [2796] +➗ ਵੰਡ ਦਾ ਵੱਡਾ ਚਿੰਨ੍ਹ // [2797] +➡ ਸੱਜੇ ਤੀਰ // [27A1] text|emoji +➰ ਕਰਲੀ ਲੂਪ // [27B0] +➿ ਡਬਲ ਕਰਲੀ ਲੂਪ // [27BF] + +// 2900..297F : Supplemental Arrows-B + +⤴ ਉੱਪਰ ਮੁੜਨ ਵਾਲਾ ਸੱਜਾ ਤੀਰ // [2934] text|emoji +⤵ ਥੱਲੇ ਮੁੜਨ ਵਾਲਾ ਖੱਬਾ ਤੀਰ // [2935] text|emoji + +// 2B00..2BFF : Miscellaneous Symbols and Arrows + +⬅ ਖੱਬੇ ਤੀਰ // [2B05] text|emoji +⬆ ਉੱਪਰ ਤੀਰ // [2B06] text|emoji +⬇ ਥੱਲੇੇ ਤੀਰ // [2B07] text|emoji +⬛ ਵੱਡਾ ਕਾਲਾ ਵਰਗ // [2B1B] +⬜ ਵੱਡਾ ਚਿੱਟਾ ਵਰਗ // [2B1C] +⭐ ਮੱਧਮ ਸਫੇਦ ਤਾਰਾ // [2B50] +⭕ ਗੂੜ੍ਹਾ ਲਾਲ ਘੇਰਾ // [2B55] + +// 3000..303F : CJK Symbols and Punctuation + +〰 ਲਹਿਰ ਡੈਸ // [3030] text|emoji +〽 ਭਾਗ ਅਦਲਾ-ਬਦਲੀ ਚਿੰਨ੍ਹ // [303D] text|emoji + +// 3200..32FF : Enclosed CJK Letters and Months + +㊗ ਚੀਨੀ ਵਧਾਈਆਂ ਆਈਡਿਓਗ੍ਰਾਫ // [3297] text|emoji +㊙ ਚੀਨੀ ਗੁਪਤ ਆਈਡਿਓਗ੍ਰਾਫ // [3299] text|emoji + +// 1F100..1F1FF : Enclosed Alphanumeric Supplement + +🅰 a ਬਟਨ // [1F170] text|emoji +🅱 b ਬਟਨ // [1F171] text|emoji +🅾 o ਬਟਨ // [1F17E] text|emoji +🅿 p ਬਟਨ // [1F17F] text|emoji +🆎 ab ਬਟਨ // [1F18E] +🆑 ਵਰਗਾਕਾਰ cl // [1F191] +🆒 ਵਰਗਾਕਾਰ ਠੰਡਾ ਚਿੰਨ੍ਹ // [1F192] +🆓 ਵਰਗਾਕਾਰ ਮੁਫ਼ਤ ਚਿੰਨ੍ਹ // [1F193] +🆔 ਵਰਗਾਕਾਰ id ਚਿੰਨ੍ਹ // [1F194] +🆕 ਵਰਗਾਕਾਰ ਨਵਾਂ ਚਿੰਨ੍ਹ // [1F195] +🆖 ਵਰਗਾਕਾਰ ng ਚਿੰਨ੍ਹ // [1F196] +🆗 ਵਰਗਾਕਾਰ ok ਚਿੰਨ੍ਹ // [1F197] +🆘 ਵਰਗਾਕਾਰ sos ਚਿੰਨ੍ਹ // [1F198] +🆙 ਉੱਪਰ! ਬਟਨ // [1F199] +🆚 ਵਰਗਾਕਾਰ vs ਚਿੰਨ੍ਹ // [1F19A] + +// 1F200..1F2FF : Enclosed Ideographic Supplement + +🈁 ਵਰਗਾਕਾਰ ਕਾਟਾਕਾਨਾ ਕੋਕੋ // [1F201] +🈂 ਵਰਗਾਕਾਰ ਕਾਟਾਕਾਨਾ ਸਾ // [1F202] text|emoji +🈚 ਵਰਗਾਕਾਰ ਨਕਰਾਤਮਕ ਆਈਡਿਓਗ੍ਰਾਫ // [1F21A] +🈯 ਵਰਗਾਕਾਰ ਉਂਗਲ ਆਈਡਿਓਗ੍ਰਾਫ // [1F22F] +🈲 ਵਰਗਾਕਾਰ ਪਾਬੰਦੀ ਆਈਡਿਓਗ੍ਰਾਫ // [1F232] +🈳 ਵਰਗਾਕਾਰ ਖਾਲੀ ਆਈਡਿਓਗ੍ਰਾਫ // [1F233] +🈴 ਵਰਗਾਕਾਰ ਇਕੱਠਾ ਆਈਡਿਓਗ੍ਰਾਫ // [1F234] +🈵 ਚੀਨੀ ਸੰਪੂਰਨਤਾ ਆਈਡਿਓਗ੍ਰਾਫ // [1F235] +🈶 ਵਰਗਾਕਾਰ ਬਾਹਰ ਆਈਡਿਓਗ੍ਰਾਫ // [1F236] +🈷 ਵਰਗਾਕਾਰ ਚੰਨ ਆਈਡੀਓਗ੍ਰਾਫ // [1F237] text|emoji +🈸 ਵਰਗਾਕਾਰ ਲਾਗੂ ਆਈਡਿਓਗ੍ਰਾਫ // [1F238] +🈹 ਵਰਗਾਕਾਰ ਵੰਡ ਆਈਡਿਓਗ੍ਰਾਫ // [1F239] +🈺 ਚੀਨੀ ਓਪਰੇਟਿੰਗ ਆਈਡਿਓਗ੍ਰਾਫ // [1F23A] +🉐 ਗੋਲ ਫਾਇਦਾ ਆਈਡਿਓਗ੍ਰਾਫ // [1F250] +🉑 ਗੋਲ ਮਨਜ਼ੂਰ ਆਈਡਿਓਗ੍ਰਾਫ // [1F251] + +// 1F000..1F02F : Mahjong Tiles + +🀄 ਮਹਾਂਜੌਂਗ ਲਾਲ ਡ੍ਰੈਗਨ // [1F004] + +// 1F0A0..1F0FF : Playing Cards + +🃏 ਜੋਕਰ ਪਤਾ // [1F0CF] + +// 1F300..1F5FF : Miscellaneous Symbols and Pictographs + +🌀 ਝੱਖੜ // [1F300] +🌁 ਧੁੰਦਲਾ // [1F301] +🌂 ਬੰਦ ਛੱਤਰੀ // [1F302] +🌃 ਰਾਤੀ ਤਾਰੇ // [1F303] +🌄 ਪਹਾੜਾਂ ਵਿੱੱਚ ਚੜ੍ਹਦਾ ਸੂਰਜ // [1F304] +🌅 ਚੜ੍ਹਦਾ ਸੂਰਜ // [1F305] +🌆 ਸ਼ਾਮ ਵੇਲੇ ਸ਼ਹਿਰ ਦਾ ਦ੍ਰਿਸ // [1F306] +🌇 ਸ਼ਾਮ // [1F307] +🌈 ਸਤਰੰਗੀ ਪੀਂਘ // [1F308] +🌉 ਰਾਤ ਨੂੰ ਪੁੱਲ ਦਾ ਦ੍ਰਿਸ਼ // [1F309] +🌊 ਪਾਣੀ ਦੀ ਲਹਿਰ // [1F30A] +🌋 ਜਵਾਲਾਮੁਖੀ // [1F30B] +🌌 ਆਕਾਸ਼ਗੰਗਾ // [1F30C] +🌍 ਯੂਰਪ-ਅਫਰੀਕਾ ਵਿਖਾਉਂਦਾ ਗਲੋਬ // [1F30D] +🌎 ਅਮਰੀਕਾ ਵਿਖਾਉਂਦਾ ਗਲੋਬ // [1F30E] +🌏 ਏਸ਼ੀਆ-ਆਸਟ੍ਰੇਲੀਆ ਵਿਖਾਉਂਦਾ ਗਲੋਬ // [1F30F] +🌐 ਮੈਰੀਡੀਅਨ ਨਾਲ ਗਲੋਬ // [1F310] +🌑 ਨਵਾਂ ਚੰਦ // [1F311] +🌒 ਵੱਧਦਾ ਚੰਦ // [1F312] +🌓 ਪਹਿਲੀ ਤਿਮਾਹੀ ਚੰਦ // [1F313] +🌔 ਨੌਮਾਹੀ ਚੰਦ // [1F314] +🌕 ਪੂਰਾ ਚੰਦ // [1F315] +🌖 ਘੱਟਦਾ ਚੰਦ // [1F316] +🌗 ਆਖਰੀ ਤਿਮਾਹੀ ਚੰਦ // [1F317] +🌘 ਘੱੱਟਦਾ ਚੰਦ // [1F318] +🌙 ਅੱਧਾ ਚੰਦ // [1F319] +🌚 ਚੰਦ ਦਾ ਨਵਾਂ ਚਿਹਰਾ // [1F31A] +🌛 ਪਹਿਲੀ ਤਿਮਾਹੀ ਚੰਦ ਦਾ ਚਿਹਰਾ // [1F31B] +🌜 ਆਖਰੀ ਤਿਮਾਹੀ ਚੰਦ ਦਾ ਚਿਹਰਾ // [1F31C] +🌝 ਪੂਰੇ ਚੰਦ ਦਾ ਚਿਹਰਾ // [1F31D] +🌞 ਸੂਰਜ ਦਾ ਚਿਹਰਾ // [1F31E] +🌟 ਜਗਮਗਾਉਂਦਾ ਤਾਰਾ // [1F31F] +🌠 ਟੁੱਟਦਾ ਤਾਰਾ // [1F320] +🌡 ਥਰਮਾਮੀਟਰ // [1F321] text|emoji +🌤 ਛੋਟੇ ਬੱਦਲਾਂ ਵਿੱਚ ਲੁਕਿਆ ਸੂਰਜ // [1F324] text|emoji +🌥 ਵੱਡੇ ਬੱਦਲਾਂ ਵਿੱਚ ਲੁਕਿਆ ਸੂਰਜ // [1F325] text|emoji +🌦 ਬੱਦਲਾਂ ਵਿੱਚ ਲੁਕਿਆ ਸੂਰਜ ਅਤੇ ਮੀਂਹ // [1F326] text|emoji +🌧 ਬੱਦਲ ਅਤੇ ਮੀਂਹ // [1F327] text|emoji +🌨 ਬੱਦਲ ਅਤੇ ਬਰਫ // [1F328] text|emoji +🌩 ਬੱਦਲ ਅਤੇ ਬਿਜਲੀ // [1F329] text|emoji +🌪 ਤੂਫਾਨ // [1F32A] text|emoji +🌫 ਧੁੰਦ // [1F32B] text|emoji +🌬 ਹਵਾ // [1F32C] text|emoji +🌭 ਹਾਟ-ਡਾਗ // [1F32D] +🌮 ਟਾਕੋ // [1F32E] +🌯 ਬਰੀਟੋ // [1F32F] +🌰 ਚੈਸਟਨਟ // [1F330] +🌱 ਜਵਾਨ ਬੂਟਾ // [1F331] +🌲 ਸਦਾਬਹਾਰ // [1F332] +🌳 ਝਾੜ ਦਾ ਰੁੱਖ // [1F333] +🌴 ਪਾਮ ਦਾ ਰੁੱਖ // [1F334] +🌵 ਨਾਗਫਨੀ // [1F335] +🌶 ਤਿੱਖੀ ਮਿਰਚ // [1F336] text|emoji +🌷 ਟਯੂਲਿਪ // [1F337] +🌸 ਚੈਰੀ ਫੁੱਲ // [1F338] +🌹 ਗੁਲਾਬ // [1F339] +🌺 ਗੁੜਹਲ // [1F33A] +🌻 ਸੂਰਜਮੁਖੀ // [1F33B] +🌼 ਖਿੜਨਾ // [1F33C] +🌽 ਮੱਕੀ // [1F33D] +🌾 ਚੌਲ ਦਾ ਬੂਟਾ // [1F33E] +🌿 ਬੂਟੀ // [1F33F] +🍀 ਚਾਰ ਪੱਤਿਆਂ ਵਾਲਾ ਲੌਂਗ // [1F340] +🍁 ਚਿਨਾਰ ਪੱਤਾ // [1F341] +🍂 ਝੜੇ ਪੱਤੇ // [1F342] +🍃 ਹਵਾ ਵਿੱਚ ਲਹਿਰਾਉਂਦੇ ਪੱਤੇ // [1F343] +🍄 ਖੁੰਭ // [1F344] +🍅 ਟਮਾਟਰ // [1F345] +🍆 ਬੈਂਗਣ // [1F346] +🍇 ਅੰਗੂਰ // [1F347] +🍈 ਖਰਬੂਜਾ // [1F348] +🍉 ਤਰਬੂਜ // [1F349] +🍊 ਕੀਨੂ // [1F34A] +🍋 ਨਿੰਬੂ // [1F34B] +🍌 ਕੇਲਾ // [1F34C] +🍍 ਅਨਾਨਾਸ // [1F34D] +🍎 ਲਾਲ ਸੇਬ // [1F34E] +🍏 ਹਰਾ ਸੇਬ // [1F34F] +🍐 ਨਾਸਪਾਤੀ // [1F350] +🍑 ਆੜੂ // [1F351] +🍒 ਚੈਰੀ // [1F352] +🍓 ਸਟ੍ਰਾਬੇਰੀ // [1F353] +🍔 ਹੈਮਬਰਗਰ // [1F354] +🍕 ਪੀਜ਼ਾ // [1F355] +🍖 ਹੱਡੀ ‘ਤੇ ਮੀਟ // [1F356] +🍗 ਕੁੱਕੜ ਦੀ ਲੱਤ // [1F357] +🍘 ਚੌਲਾਂ ਤੋਂ ਬਣੀ ਚੀਜ਼ // [1F358] +🍙 ਚੌਲਾਂਂ ਦੀ ਪਿੰਨੀ // [1F359] +🍚 ਪੱਕੇ ਹੋਏ ਚੌਲ // [1F35A] +🍛 ਕੜ੍ਹੀ ਅਤੇ ਚੌਲ // [1F35B] +🍜 ਨੂਡਲਜ਼ ਦਾ ਬਰਤਨ // [1F35C] +🍝 ਸਪੈਗੇਟੀ // [1F35D] +🍞 ਬ੍ਰੈਡ // [1F35E] +🍟 ਫਰੈਂਚ ਫਰਾਈਜ਼ // [1F35F] +🍠 ਭੁਨੀ ਸ਼ਕਰਗੰਦੀ // [1F360] +🍡 ਡਾਂਗੋ // [1F361] +🍢 ਓਡੇਨ // [1F362] +🍣 ਸੁਸ਼ੀ // [1F363] +🍤 ਤੜਕਿਆ ਸ਼ਰਿੰਪ // [1F364] +🍥 ਘੁਮਾਵਦਾਰ ਮੱਛੀ ਕੇਕ // [1F365] +🍦 ਨਰਮ ਆਇਸਕ੍ਰੀਮ // [1F366] +🍧 ਡਿਜ਼ਾਈਨਦਾਰ ਆਇਸਕ੍ਰੀਮ // [1F367] +🍨 ਆਇਸ ਕ੍ਰੀਮ // [1F368] +🍩 ਡੋਨਟ // [1F369] +🍪 ਬਿਸਕੁਟ // [1F36A] +🍫 ਚਾਕਲੇਟ ਬਾਰ // [1F36B] +🍬 ਟੌਫੀ // [1F36C] +🍭 ਲਾਲੀਪਾਪ // [1F36D] +🍮 ਕਸਟਰਡ // [1F36E] +🍯 ਸ਼ਹਿਦ ਦਾ ਬਰਤਨ // [1F36F] +🍰 ਪੇਸਟਰੀ // [1F370] +🍱 ਬੇਂਟੋ ਬਾਕਸ // [1F371] +🍲 ਭੋਜਨ ਦਾ ਭਾਂਡਾ // [1F372] +🍳 ਪਕਾਉਣਾ // [1F373] +🍴 ਕਾਂਟਾ ਅਤੇ ਛੁਰੀ // [1F374] +🍵 ਬਿਨਾਂ ਡੰਡੀ ਵਾਲਾ ਚਾਹ ਦੀ ਪਿਆਲਾ // [1F375] +🍶 ਸੇਕ // [1F376] +🍷 ਵਾਈਨ ਦਾ ਗਿਲਾਸ // [1F377] +🍸 ਕੋਕਟੇਲ ਦਾ ਗਿਲਾਸ // [1F378] +🍹 ਸਦਾਬਹਾਰ ਡ੍ਰਿੰਕ // [1F379] +🍺 ਬੀਅਰ ਦਾ ਪਿਆਲਾ // [1F37A] +🍻 ਬੀਅਰ ਦੇ ਪਿਆਲੇ ਟਕਰਾਉਣਾ // [1F37B] +🍼 ਬੱਚੇ ਦੀ ਬੋਤਲ // [1F37C] +🍽 ਪਲੇਟ ਨਾਲ ਕਾਂਟਾ ਅਤੇ ਛੁਰੀ // [1F37D] text|emoji +🍾 ਖੁੱਲ੍ਹਦੀ ਹੋਈ ਬੋਤਲ // [1F37E] +🍿 ਖਿੱਲਾਂ // [1F37F] +🎀 ਰਿਬਨ // [1F380] +🎁 ਪੈਕ ਕੀਤਾ ਤੋਹਫ਼ਾ // [1F381] +🎂 ਜਨਮਦਿਨ ਕੇਕ // [1F382] +🎃 ਜੈਕ-ਓ-ਲੈਂਟਰਨ // [1F383] +🎄 ਕ੍ਰਿਸਮਸ ਟ੍ਰੀ // [1F384] +🎅 ਸੈਂਟਾ ਕਲਾਜ਼ // [1F385] +🎆 ਆਤਿਸਬਾਜ਼ੀ // [1F386] +🎇 ਫੁੱਲਝੜੀ // [1F387] +🎈 ਗੁਬਾਰਾ // [1F388] +🎉 ਪਾਰਟੀ ਪੋਪਰ // [1F389] +🎊 ਕਾਨਫੈਟੀ ਬਾਲ // [1F38A] +🎋 ਰੁੱਖ ਅਤੇ ਕਾਗਜ਼ ਦੀਆਂ ਪੱਤੀਆਂ // [1F38B] +🎌 ਕ੍ਰਾਸ ਕੀਤੇ ਝੰਡੇ // [1F38C] +🎍 ਪਾਈਨ ਸਜਾਵਟ // [1F38D] +🎎 ਜਾਪਾਨੀ ਗੁੱਡੀਆਂ // [1F38E] +🎏 ਕਾਰਪ ਸਟ੍ਰੀਮਰ // [1F38F] +🎐 ਵਿੰਡ ਚਾਈਮ, ਘੰਟੀ // [1F390] +🎑 ਚੰਦ ਵੇਖਣ ਦਾ ਜਸ਼ਨ // [1F391] +🎒 ਸਕੂਲ ਬੈਗ // [1F392] +🎓 ਗ੍ਰੈਜੂਏਸ਼ਨ ਟੋਪੀ // [1F393] +🎖 ਮਿਲਟਰੀ ਮੈਡਲ // [1F396] text|emoji +🎗 ਯਾਦ-ਦਹਾਨੀ ਰਿਬਨ // [1F397] text|emoji +🎙 ਸਟੂਡੀਓ ਮਾਈਕ੍ਰੋਫੋਨ // [1F399] text|emoji +🎚 ਲੈਵਲ ਸਲਾਈਡਰ // [1F39A] text|emoji +🎛 ਕੰਟਰੋਲ ਬਟਨ // [1F39B] text|emoji +🎞 ਫਿਲਮ ਫਰੇਮ // [1F39E] text|emoji +🎟 ਦਾਖਲਾ ਟਿਕਟਾਂ // [1F39F] text|emoji +🎠 ਘੋੜੇ ਵਾਲਾ ਝੂਲਾ // [1F3A0] +🎡 ਫੇਰੀਸ ਚੱਕਰ // [1F3A1] +🎢 ਰੋਲਰ ਕੋਸਟਰ // [1F3A2] +🎣 ਮੱਛੀ ਫੜਨ ਵਾਲਾ ਡੰਡਾ // [1F3A3] +🎤 ਮਾਈਕਰੋਫੋਨ // [1F3A4] +🎥 ਮੂਵੀ ਕੈਮਰਾ // [1F3A5] +🎦 ਸਿਨੇਮਾ // [1F3A6] +🎧 ਹੈਡਫੋਨ // [1F3A7] +🎨 ਕਲਾਕਾਰ ਪੈਲਅਟ // [1F3A8] +🎩 ਵੱਡੀ ਟੋਪੀ // [1F3A9] +🎪 ਸਰਕਸ ਤੰਬੂ // [1F3AA] +🎫 ਟਿਕਟਾਂ // [1F3AB] +🎬 ਕਲੈਪਰ ਬੋਰਡ // [1F3AC] +🎭 ਕਲਾ ਵਿਖਾਉਣਾ // [1F3AD] +🎮 ਵੀਡੀਓ ਗੇਮ // [1F3AE] +🎯 ਸਿੱਧਾ ਨਿਸ਼ਾਨਾ // [1F3AF] +🎰 ਸਲੋਟ ਮਸ਼ੀਨ // [1F3B0] +🎱 ਬਿਲਿਅਰਡ // [1F3B1] +🎲 ਗੇਮ ਡਾਈਸ // [1F3B2] +🎳 ਬੌਲਿੰਗ // [1F3B3] +🎴 ਫੁੱਲ ਵਾਲਾ ਪੱਤਾ // [1F3B4] +🎵 ਸੰਗੀਤ ਨੋਟ // [1F3B5] +🎶 ਸੰਗੀਤ ਸੁਰ // [1F3B6] +🎷 ਸੈਕਸੋਫੋਨ // [1F3B7] +🎸 ਗਿਟਾਰ // [1F3B8] +🎹 ਸੰਗੀਤ ਕੀ-ਬੋਰਡ // [1F3B9] +🎺 ਤੁਰਹੀ // [1F3BA] +🎻 ਵਾਇਲਨ // [1F3BB] +🎼 ਸੰਗੀਤ ਅੰਕ // [1F3BC] +🎽 ਰਨਿੰਗ ਸ਼ਰਟ // [1F3BD] +🎾 ਟੈਨਿਸ // [1F3BE] +🎿 ਸਕੀਸ // [1F3BF] +🏀 ਬਾਸਕਟਬਾਲ // [1F3C0] +🏁 ਡੱਬੀਦਾਰ ਝੰਡਾ // [1F3C1] +🏂 ਸਨੋਬੋਰਡਰ // [1F3C2] +🏃 ਦੌੜਦਾ ਵਿਅਕਤੀ // [1F3C3] +🏄 ਸਰਫ਼ਰ // [1F3C4] +🏅 ਖੇਡ ਮੈਡਲ // [1F3C5] +🏆 ਟ੍ਰਾਫੀ // [1F3C6] +🏇 ਘੋੜ-ਸਵਾਰੀ // [1F3C7] +🏈 ਅਮਰੀਕਨ ਫੁੱਟਬਾਲ // [1F3C8] +🏉 ਰਗਬੀ ਫੁੱਟਬਾਲ // [1F3C9] +🏊 ਤੈਰਾਕ // [1F3CA] +🏋 ਵੇਟ ਮਾਰ ਰਿਹਾ ਵਿਅਕਤੀ // [1F3CB] text|emoji +🏌 ਗੋਲਫਰ // [1F3CC] text|emoji +🏍 ਮੋਟਰਸਾਈਕਲ // [1F3CD] text|emoji +🏎 ਰੇਸਿੰਗ ਕਾਰ // [1F3CE] text|emoji +🏏 ਕ੍ਰਿਕੇਟ // [1F3CF] +🏐 ਵਾਲੀਬਾਲ // [1F3D0] +🏑 ਫੀਲਡ ਹਾਕੀ // [1F3D1] +🏒 ਹਾਕੀ ਅਤੇ ਪਕ ਨਾਲ ਆਈਸ ਹਾਕੀ // [1F3D2] +🏓 ਪਿੰਗ ਪਾਗ // [1F3D3] +🏔 ਬਰਫੀਲੀ ਚੋਟੀ ਵਾਲਾ ਪਹਾੜ // [1F3D4] text|emoji +🏕 ਤੰਬੂ ਲਗਾਉਣਾ // [1F3D5] text|emoji +🏖 ਛੱਤਰੀ ਨਾਲ ਸਮੁੰਦਰੀ ਕਿਨਾਰਾ // [1F3D6] text|emoji +🏗 ਇਮਾਰਤ ਦਾ ਨਿਰਮਾਣ // [1F3D7] text|emoji +🏘 ਘਰਾਂ ਦੀਆਂ ਇਮਾਰਤਾਂ // [1F3D8] text|emoji +🏙 ਉੱਚੀਆਂ ਇਮਾਰਤਾਂ ਦਾ ਦ੍ਰਿਸ਼ // [1F3D9] text|emoji +🏚 ਖਸਤਾ ਹਾਲਤ ਘਰ // [1F3DA] text|emoji +🏛 ਪੁਰਾਣੀ ਇਮਾਰਤ // [1F3DB] text|emoji +🏜 ਮਾਰੂਥਲ // [1F3DC] text|emoji +🏝 ਮਾਰੂੂਥਲ ਟਾਪੂ // [1F3DD] text|emoji +🏞 ਨੈਸ਼ਨਲ ਪਾਰਕ // [1F3DE] text|emoji +🏟 ਸਟੇਡੀਅਮ // [1F3DF] text|emoji +🏠 ਘਰਾਂ ਦੀ ਇਮਾਰਤ // [1F3E0] +🏡 ਬਗੀਚੇ ਵਾਲਾ ਘਰ // [1F3E1] +🏢 ਦਫਤਰ ਦੀ ਇਮਾਰਤ // [1F3E2] +🏣 ਜਾਪਾਨੀ ਡਾਕਘਰ // [1F3E3] +🏤 ਡਾਕਘਰ // [1F3E4] +🏥 ਹਸਤਪਾਲ // [1F3E5] +🏦 ਬੈਂਕ // [1F3E6] +🏧 ATM ਚਿੰਨ੍ਹ // [1F3E7] +🏨 ਹੋਟਲ // [1F3E8] +🏩 ਪਿਆਰ ਹੋਟਲ // [1F3E9] +🏪 ਸਹੂਲਤ ਸਟੋਰ // [1F3EA] +🏫 ਸਕੂਲ // [1F3EB] +🏬 ਡਿਪਾਰਟਮੈਂਟ ਸਟੋਰ // [1F3EC] +🏭 ਫੈਕਟਰੀ // [1F3ED] +🏮 ਲਾਲ ਕਾਗਜ਼ ਵਾਲੀ ਲਾਲਟੇਨ // [1F3EE] +🏯 ਜਾਪਾਨੀ ਕਿਲ੍ਹਾ // [1F3EF] +🏰 ਕਿਲ੍ਹਾ // [1F3F0] +🏳 ਲਹਿਰਾਉਂਦਾ ਸਫੇਦ ਝੰਡਾ // [1F3F3] text|emoji +🏴 ਲਹਿਰਾਉਂਦਾ ਕਾਲਾ ਝੰਡਾ // [1F3F4] +🏵 ਸਨਮਾਨ ਚਿੰਨ੍ਹ, ਰਿਬਨ ਦਾ ਬਣਿਆ ਹੋਇਆ ਫੁੱਲ // [1F3F5] text|emoji +🏷 ਲੇਬਲ // [1F3F7] text|emoji +🏸 ਬੈਡਮਿੰਟਨ // [1F3F8] +🏹 ਤੀਰ-ਕਮਾਨ // [1F3F9] +🏺 ਲੰਬੀ ਸੁਰਾਹੀ // [1F3FA] +🏻 ਚਮੜੀ ਕਿਸਮ-1-2 // [1F3FB] +🏼 ਚਮੜੀ ਕਿਸਮ-3 // [1F3FC] +🏽 ਚਮੜੀ ਕਿਸਮ-4 // [1F3FD] +🏾 ਚਮੜੀ ਕਿਸਮ-5 // [1F3FE] +🏿 ਚਮੜੀ ਕਿਸਮ-6 // [1F3FF] +🐀 ਕਾਲਾ ਚੂਹਾ // [1F400] +🐁 ਸਫੇਦ ਚੂਹਾ // [1F401] +🐂 ਬਲਦ // [1F402] +🐃 ਮੱਝ // [1F403] +🐄 ਗਾਂ // [1F404] +🐅 ਚੀਤਾ // [1F405] +🐆 ਤੇਂਦੂਆ // [1F406] +🐇 ਖਰਗੋੋਸ਼ // [1F407] +🐈 ਬਿੱਲੀ // [1F408] +🐉 ਡ੍ਰੈਗਨ // [1F409] +🐊 ਮਗਰਮੱਛ // [1F40A] +🐋 ਵੇਲ੍ਹ // [1F40B] +🐌 ਘੋਗਾ // [1F40C] +🐍 ਸੱਪ // [1F40D] +🐎 ਘੋੋੜਾ // [1F40E] +🐏 ਨਰ ਭੇੜ // [1F40F] +🐐 ਬੱਕਰੀ // [1F410] +🐑 ਭੇੜ // [1F411] +🐒 ਬਾਂਂਦਰ // [1F412] +🐓 ਕੁੱਕੜ // [1F413] +🐔 ਚੂਚਾ // [1F414] +🐕 ਕੁੱਤਾ // [1F415] +🐖 ਸੂਰ // [1F416] +🐗 ਜੰਗਲੀ ਸੂਰ // [1F417] +🐘 ਹਾਥੀ // [1F418] +🐙 ਆਕਟੋਪਸ // [1F419] +🐚 ਚੂੜੀਦਾਰ ਘੋਗਾ // [1F41A] +🐛 ਸੁੰਡੀ // [1F41B] +🐜 ਕੀੜੀ // [1F41C] +🐝 ਮਖਿਆਲ ਮੱਖੀ // [1F41D] +🐞 ਭੂੰਡੀ // [1F41E] +🐟 ਮੱਛੀ // [1F41F] +🐠 ਖੰਡੀ ਮੱਛੀ // [1F420] +🐡 ਬਲੋਫਿਸ // [1F421] +🐢 ਕੱਛੂਕੰਮਾ // [1F422] +🐣 ਅੰਡੇ ਵਿੱਚੋਂ ਨਿਕਲਦਾ ਚੂਚਾ // [1F423] +🐤 ਕੁੱਕੜੀ ਦਾ ਬੱਚਾ // [1F424] +🐥 ਤੁਹਾਡੇ ਵੱਲ ਵੇਖਦਾ ਚੂਚਾ // [1F425] +🐦 ਪੰਛੀ // [1F426] +🐧 ਪੈਂਗੂਇਨ // [1F427] +🐨 ਕੋਆਲਾ // [1F428] +🐩 ਪੂਡਲ ਕੁੱਤਾ // [1F429] +🐪 ਊਠ // [1F42A] +🐫 ਦੋ-ਕੁੱਬ ਵਾਲਾ ਊਠ // [1F42B] +🐬 ਡਾਲਫਿਨ // [1F42C] +🐭 ਚੂਹੇ ਦਾ ਚਿਹਰਾ // [1F42D] +🐮 ਗਾਂ ਦਾ ਚਿਹਰਾ // [1F42E] +🐯 ਚੀਤੇ ਦਾ ਚਿਹਰਾ // [1F42F] +🐰 ਖਰਗੋਸ਼ ਦਾ ਚਿਹਰਾ // [1F430] +🐱 ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F431] +🐲 ਡ੍ਰੈਗਨ ਦਾ ਚਿਹਰਾ // [1F432] +🐳 ਸਪਾਊਟਿੰਗ ਵੇਲ੍ਹ // [1F433] +🐴 ਘੋੜੇ ਦਾ ਚਿਹਰਾ // [1F434] +🐵 ਬਾਂਦਰ ਦਾ ਚਿਹਰਾ // [1F435] +🐶 ਕੁੱਤੇ ਦਾ ਚਿਹਰਾ // [1F436] +🐷 ਸੂਰ ਦਾ ਚਿਹਰਾ // [1F437] +🐸 ਡੱਡੂ ਦਾ ਚਿਹਰਾ // [1F438] +🐹 ਹੈਮਸਟਰ, ਚੂਹੇ ਦੇ ਇੱਕ ਪ੍ਰਜਾਤੀ // [1F439] +🐺 ਬਘਿਆੜ ਦਾ ਚਿਹਰਾ // [1F43A] +🐻 ਭਾਲੂ ਦਾ ਚਿਹਰਾ // [1F43B] +🐼 ਪਾਂਡੇ ਦਾ ਚਿਹਰਾ // [1F43C] +🐽 ਸੂਰ ਦਾ ਨੱਕ // [1F43D] +🐾 ਪੰਜਿਆਂ ਦੀ ਛਾਪ // [1F43E] +🐿 ਕਾਟੋ // [1F43F] text|emoji +👀 ਅੱਖਾਂ // [1F440] +👁 ਅੱਖ // [1F441] text|emoji +👂 ਕੰਨ // [1F442] +👃 ਨੱਕ // [1F443] +👄 ਮੂੰਹ // [1F444] +👅 ਜੀਭ // [1F445] +👆 ਹੱਥ ਦਾ ਪਿਛਲਾ ਹਿੱੱਸਾ ਅਤੇ ਉੱਪਰ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੀ ਉਂਗਲੀ // [1F446] +👇 ਹੱਥ ਦਾ ਪਿਛਲਾ ਹਿੱਸਾ ਅਤੇ ਥੱਲੇ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੀ ਉਂਗਲੀ // [1F447] +👈 ਖੱਬੇ ਪਾਸੇ ਇਸ਼ਾਰਾ ਕਰਦੀ ਉਂਗਲ // [1F448] +👉 ਸੱਜੇ ਪਾਸੇੇ ਇਸ਼ਾਰਾ ਕਰਦੀ ਉਂਗਲ // [1F449] +👊 ਮੁੱਕਾ ਮਾਰਨਾ // [1F44A] +👋 ਹੱਥ ਹਿਲਾਉਣਾ // [1F44B] +👌 ਠੀਕ ਦਾ ਹੱਥ ਚਿੰਨ੍ਹ // [1F44C] +👍 ਥੰਮਸ ਅੱਪ // [1F44D] +👎 ਥੰਮਸ ਡਾਊਨ // [1F44E] +👏 ਤਾੜੀ ਮਾਰਦੇ ਹੱਥਾਂ ਦਾ ਚਿੰਨ੍ਹ // [1F44F] +👐 ਖੁੱਲ੍ਹੇ ਹੱਥ // [1F450] +👑 ਤਾਜ // [1F451] +👒 ਔਰਤ ਦੀ ਟੋਪੀ // [1F452] +👓 ਐਨਕਾਂ // [1F453] +👔 ਟਾਈ // [1F454] +👕 ਟੀ-ਸ਼ਰਟ // [1F455] +👖 ਜੀਨ ਦੀ ਪੈਂਟ // [1F456] +👗 ਲਿਬਾਸ // [1F457] +👘 ਕਿਮੋਨੋ // [1F458] +👙 ਬਿਕਨੀ // [1F459] +👚 ਔਰਤਾਂ ਦੇ ਕੱਪੜੇ // [1F45A] +👛 ਪਰਸ਼ // [1F45B] +👜 ਹੈਂਡਬੈਗ // [1F45C] +👝 ਪਾਉਚ ਬੈਗ // [1F45D] +👞 ਆਦਮੀ ਦਾ ਬੂਟ // [1F45E] +👟 ਦੌੜਨ ਵਾਲੇ ਬੂਟ // [1F45F] +👠 ਉੱਚੀ-ਅੱਡੀ ਵਾਲੀ ਜੁੱਤੀ // [1F460] +👡 ਔਰਤ ਦਾ ਸੈਂਡਲ // [1F461] +👢 ਔਰਤਾਂ ਦਾ ਬੂਟ // [1F462] +👣 ਪੈੜਾਂ ਦੇ ਨਿਸ਼ਾਨ // [1F463] +👤 ਛਾਤੀ ਤੱਕ ਬਣਤਰ // [1F464] +👥 ਛਾਤੀਆਂ ਤੱਕ ਬਣਤਰ // [1F465] +👦 ਮੁੰਡਾ // [1F466] +👧 ਕੁੜੀ // [1F467] +👨 ਆਦਮੀ // [1F468] +👩 ਔਰਤ // [1F469] +👪 ਪਰਿਵਾਰ // [1F46A] +👫 ਆਦਮੀ ਅਤੇ ਔਰਤ ਨੇ ਹੱਥ ਫੜਿਆ ਹੋਇਆ // [1F46B] +👬 ਦੋ ਆਦਮੀਆਂ ਨੇ ਹੱਥ ਫੜਿਆ ਹੋਇਆ // [1F46C] +👭 ਦੋ ਔਰਤਾਂ ਨੇ ਹੱਥ ਫੜਿਆ ਹੋਇਆ // [1F46D] +👮 ਪੁਲਿਸ ਅਫਸਰ // [1F46E] +👯 ਪਾਰਟੀ ਕਰਦੀਆਂ ਔਰਤਾਂ // [1F46F] +👰 ਘੁੰਡ ਵਿੱਚ ਲਾੜੀ // [1F470] +👱 ਸੁਨਿਹਰੀ ਵਾਲਾਂ ਵਾਲਾ ਵਿਅਕਤੀ // [1F471] +👲 ਚੀਨੀ ਟੋਪੀ ਵਾਲਾ ਆਦਮੀ // [1F472] +👳 ਦਸਤਾਰ ਵਾਲਾ ਆਦਮੀ // [1F473] +👴 ਬਜ਼ੁਰਗ ਆਦਮੀ // [1F474] +👵 ਬਜ਼ੁਰਗ ਔਰਤ // [1F475] +👶 ਬਾਲ // [1F476] +👷 ਉਸਾਰੀ ਕਰਨ ਵਾਲਾ ਮਜ਼ਦੂਰ // [1F477] +👸 ਰਾਜਕੁਮਾਰੀ // [1F478] +👹 ਦੈਂਤ // [1F479] +👺 ਪ੍ਰੇਤ // [1F47A] +👻 ਭੂਤ // [1F47B] +👼 ਦੇਵਦੂਤ ਬੱਚਾ // [1F47C] +👽 ਏਲੀਅਨ // [1F47D] +👾 ਏਲੀਅਨ ਰਾਖਸ਼ // [1F47E] +👿 ਸੋਹਣਾ ਸ਼ੈਤਾਨੀ ਚਿਹਰਾ // [1F47F] +💀 ਖੋਪੜੀ // [1F480] +💁 ਜਾਣਕਾਰੀ ਦੇਣ ਵਾਲਾ ਵਿਅਕਤੀ // [1F481] +💂 ਸੰਤਰੀ // [1F482] +💃 ਡਾਂਸਰ // [1F483] +💄 ਲਿਪਸਟਿਕ // [1F484] +💅 ਨੇਲ ਪਾਲਿਸ਼ // [1F485] +💆 ਮੂੰਹ ਦੀ ਮਾਲਸ਼ // [1F486] +💇 ਵਾਲ ਕਟਵਾਉਣਾ // [1F487] +💈 ਬਾਰਬਰ ਪੋਲ // [1F488] +💉 ਸਰਿੰਜ // [1F489] +💊 ਦਵਾਈ ਦੀ ਗੋਲੀ // [1F48A] +💋 ਚੁੰਮੀ ਦਾ ਨਿਸ਼ਾਨ // [1F48B] +💌 ਪ੍ਰੇਮ ਪੱਤਰ // [1F48C] +💍 ਮੁੰਦਰੀ // [1F48D] +💎 ਨਗ // [1F48E] +💏 ਚੁੰਮੀ // [1F48F] +💐 ਗੁਲਦਸਤਾ // [1F490] +💑 ਦਿਲ ਨਾਲ ਪ੍ਰੇਮੀ ਜੋੜਾ // [1F491] +💒 ਵਿਆਹ // [1F492] +💓 ਧੜਕਦਾ ਦਿਲ // [1F493] +💔 ਟੁੱਟਿਆ ਦਿਲ // [1F494] +💕 ਦੋ ਦਿਲ // [1F495] +💖 ਚਮਕਦਾ ਦਿਲ // [1F496] +💗 ਵੱਧਦਾ ਦਿਲ // [1F497] +💘 ਦਿਲ ਵਿੱਚ ਲੱਗਿਆ ਤੀਰ // [1F498] +💙 ਨੀਲਾ ਦਿਲ // [1F499] +💚 ਹਰਾ ਦਿਲ // [1F49A] +💛 ਪੀਲਾ ਦਿਲ // [1F49B] +💜 ਜਾਮਨੀ ਦਿਲ // [1F49C] +💝 ਰਿਬਨ ਨਾਲ ਦਿਲ // [1F49D] +💞 ਘੁੰਮਦੇ ਦਿਲ // [1F49E] +💟 ਦਿਲ ਦੀ ਸਜਾਵਟ // [1F49F] +💠 ਬਿੰਦੂ ਨਾਲ ਹੀਰਾ // [1F4A0] +💡 ਲਾਈਟ ਬੱਲਬ // [1F4A1] +💢 ਗੁੱਸੇ ਦਾ ਚਿੰਨ੍ਹ // [1F4A2] +💣 ਬੰਬ // [1F4A3] +💤 ਘੁਰਾੜੇ // [1F4A4] +💥 ਟੱਕਰਾਉਣਾ // [1F4A5] +💦 ਮੁੜ੍ਹਕੇ ਦੀਆਂ ਬੂੰਦਾਂ // [1F4A6] +💧 ਬੂੰਦਾਂ // [1F4A7] +💨 ਦੌੜਨਾ // [1F4A8] +💩 ਗੰਦਗੀ ਦਾ ਢੇਰ // [1F4A9] +💪 ਬਾਇਸੇਪਸ // [1F4AA] +💫 ਤਾਰੇ ਵਿਖਾਈ ਦੇਣਾ // [1F4AB] +💬 ਬੋਲੀ ਬਬਲ // [1F4AC] +💭 ਵਿਚਾਰ ਬਬਲ // [1F4AD] +💮 ਚਿੱਟਾ ਫੁੱਲ // [1F4AE] +💯 ਸੌ ਅੰਕ // [1F4AF] +💰 ਪੈਸੇ ਵਾਲਾ ਬੈਗ // [1F4B0] +💱 ਕਰੰਸੀ ਐਕਸਚੇਂਜ // [1F4B1] +💲 ਡਾਲਰ ਦਾ ਵੱਡਾ ਨਿਸ਼ਾਨ // [1F4B2] +💳 ਕ੍ਰੈਡਿਟ ਕਾਰਡ // [1F4B3] +💴 ਯੇਨ ਬੈਂਕਨੋਟ // [1F4B4] +💵 ਡਾਲਰ ਬੈਂਕਨੋਟ // [1F4B5] +💶 ਯੂਰੋ ਬੈਂਕਨੋਟ // [1F4B6] +💷 ਪੌਂਡ ਬੈਂਕਨੋਟ // [1F4B7] +💸 ਖੰਬ ਲੱਗੇ ਪੈਸੇ // [1F4B8] +💹 ਯੇਨ ਵਿੱਚ ਵਾਧਾ ਵਿਖਾਉਣ ਵਾਲਾ ਚਾਰਟ // [1F4B9] +💺 ਸੀਟ // [1F4BA] +💻 ਲੈਪਟਾਪ ਕੰਪਿਊਟਰ // [1F4BB] +💼 ਬਰੀਫਕੇਸ // [1F4BC] +💽 ਮਿਨੀ ਡਿਸਕ // [1F4BD] +💾 ਫਲੌਪੀ ਡਿਸਕ // [1F4BE] +💿 ਬਲੂ-ਰੇ ਡਿਸਕ // [1F4BF] +📀 ਡੀ.ਵੀ.ਡੀ // [1F4C0] +📁 ਫ਼ਾਈਲ ਫੋਲਡਰ // [1F4C1] +📂 ਖੁੱਲ੍ਹਾ ਫ਼ਾਈਲ ਫੋਲਡਰ // [1F4C2] +📃 ਮੁੜਿਆ ਹੋਇਆ ਪੰਨਾ // [1F4C3] +📄 ਉੱਤਲਾ ਪੰਨਾ // [1F4C4] +📅 ਕੈਲੰਡਰ // [1F4C5] +📆 ਫਟਿਆ ਹੋਇਆ ਕੈਲੰਡਰ // [1F4C6] +📇 ਕਾਰਡ ਸੂੂਚੀ // [1F4C7] +📈 ਵੱਧਦਾ ਹੋਇਆ ਚਾਰਟ // [1F4C8] +📉 ਘੱਟਦਾ ਹੋਇਆ ਚਾਰਟ // [1F4C9] +📊 ਬਾਰ ਚਾਰਟ // [1F4CA] +📋 ਕਲਿੱਪਬੋਰਡ // [1F4CB] +📌 ਪੁਸ਼ ਪਿੰਨ // [1F4CC] +📍 ਗੋਲ ਪੁਸ਼ ਪਿੰਨ // [1F4CD] +📎 ਪੇਪਰ ਕਲਿੱਪ // [1F4CE] +📏 ਸਿੱਧਾ ਰੂਲਰ // [1F4CF] +📐 ਤਿਕੋਣਾ ਰੂਲਰ // [1F4D0] +📑 ਬੁੱਕਮਾਰਕ ਟੈਬਾਂ // [1F4D1] +📒 ਬਹੀ // [1F4D2] +📓 ਨੋਟਬੁੱਕ // [1F4D3] +📔 ਸਜਾਵਟੀ ਕਵਰ ਨਾਲ ਨੋਟਬੁੱਕ // [1F4D4] +📕 ਬੰਦ ਕਿਤਾਬ // [1F4D5] +📖 ਖੁੱਲ੍ਹੀ ਕਿਤਾਬ // [1F4D6] +📗 ਹਰੀ ਕਿਤਾਬ // [1F4D7] +📘 ਨੀਲੀ ਕਿਤਾਬ // [1F4D8] +📙 ਸੰਤਰੀ ਕਿਤਾਬ // [1F4D9] +📚 ਕਿਤਾਬਾਂ // [1F4DA] +📛 ਨਵਾਂ ਬੈਜ // [1F4DB] +📜 ਸਕਰੋਲ // [1F4DC] +📝 ਮੈਮੋ // [1F4DD] +📞 ਟੈੈਲੀਫੋਨ ਰਸੀਵਰ // [1F4DE] +📟 ਪੇਜ਼ਰ // [1F4DF] +📠 ਫੈਕਸ ਮਸ਼ੀਨ // [1F4E0] +📡 ਸੈਟੇਲਾਈਟ ਅੰਟੀਨਾ // [1F4E1] +📢 ਲਾਊਡ-ਸਪੀਕਰ // [1F4E2] +📣 ਮੈਗਾਫੋਨ // [1F4E3] +📤 ਆਉਟਬਾਕਸ ਟ੍ਰੇ // [1F4E4] +📥 ਇਨਬਾਕਸ ਟ੍ਰੇ // [1F4E5] +📦 ਪੈਕੇਜ // [1F4E6] +📧 ਈ-ਮੇਲ // [1F4E7] +📨 ਆ ਰਿਹਾ ਲਿਫਾਫ਼ਾ // [1F4E8] +📩 ਤੀ ਵਾਲਾ ਲਿਫਾਫ਼ਾ // [1F4E9] +📪 ਥੱਲੇ ਹੋਏ ਝੰਡੇ ਨਾਲ ਬੰਦ ਮੇਲਬਾਕਸ // [1F4EA] +📫 ਉੱਠੇ ਹੋਏ ਝੰਡੇ ਨਾਲ ਬੰਦ ਮੇਲਬਾਕਸ // [1F4EB] +📬 ਉੱਠੇੇ ਹੋਏ ਝੰਡੇ ਨਾਲ ਖੁੱਲ੍ਹਿਆ ਮੇਲਬਾਕਸ // [1F4EC] +📭 ਥੱਲੇ ਹੋਏ ਝੰਡੇ ਨਾਲ ਖੁੱਲ੍ਹਿਆ ਮੇਲਬਾਕਸ // [1F4ED] +📮 ਪੋਸਟਬਾਕਸ // [1F4EE] +📯 ਪੋਸਟਲ ਹਾਰਨ // [1F4EF] +📰 ਅਖ਼ਬਾਰ // [1F4F0] +📱 ਮੋਬਾਇਲ ਫੋਨ // [1F4F1] +📲 ਤੀਰ ਨਾਲ ਮੋਬਾਇਲ ਫੋਨ // [1F4F2] +📳 ਕੰਬਣੀ ਮੋਡ // [1F4F3] +📴 ਮੋਬਾਇਲ ਫੋਨ ਬੰਦ // [1F4F4] +📵 ਮੋਬਾਇਲ ਫੋਨਾਂ ‘ਤੇ ਪਾਬੰਦੀ // [1F4F5] +📶 ਅੰਟੀਨਾ ਬਾਰਾਂ // [1F4F6] +📷 ਕੈਮਰਾ // [1F4F7] +📸 ਫਲੈਸ ਵਾਲਾ ਕੈਮਰਾ // [1F4F8] +📹 ਵੀਡੀਓ ਕੈਮਰਾ // [1F4F9] +📺 ਟੈਲੀਵਿਜ਼ਨ // [1F4FA] +📻 ਰੇਡੀਓ // [1F4FB] +📼 ਵੀਡੀਓ ਕੈਸੇਟ // [1F4FC] +📽 ਫਿਲਮ ਪ੍ਰੋਜੈਕਟਰ // [1F4FD] text|emoji +📿 ਪ੍ਰਾਰਥਨਾ ਦੀ ਮਾਲਾ // [1F4FF] +🔀 ਟਰੈਕ ਨੂੰ ਸ਼ਫਲ ਕਰਨ ਲਈ ਬਟਨ // [1F500] +🔁 ਦੁਹਰਾਉਣਾ ਲਈ ਬਟਨ // [1F501] +🔂 ਇਕੱਲੇ ਟਰੈਕ ਨੂੰ ਦੁਹਰਾਉਣ ਲਈ ਬਟਨ // [1F502] +🔃 ਘੜੀ ਦੀ ਦਿਸ਼ਾ ਵਿੱਚ ਲੰਬਕਾਰੀ ਤੀਰ // [1F503] +🔄 ਘੜੀ ਦੀ ਉਲਟ ਦਿਸ਼ਾ ਵਿੱਚ ਤੀਰ ਬਟਨ // [1F504] +🔅 ਘੱਟ ਚਮਕ ਬਟਨ // [1F505] +🔆 ਤੇਜ਼ ਚਮਕ ਬਟਨ // [1F506] +🔇 ਸਪੀਕਰ ਬੰਦ // [1F507] +🔈 ਸਪੀਕਰ // [1F508] +🔉 ਸਪੀਕਰ ਚਾਲੂ // [1F509] +🔊 ਉੱਚੀ ਸਪੀਕਰ // [1F50A] +🔋 ਬੈਟਰੀ // [1F50B] +🔌 ਬਿਜਲੀ ਪਲੱਗ // [1F50C] +🔍 ਖੱਬੇ-ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਮੈਗਨੀਫਾਇੰਗ ਗਲਾਸ // [1F50D] +🔎 ਸੱਜੇ-ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਮੈਗਨੀਫਾਇੰਗ ਗਲਾਸ // [1F50E] +🔏 ਪੈਨ ਨਾਲ ਲਾਕ // [1F50F] +🔐 ਕੁੰਜੀ ਨਾਲ ਬੰਦ ਕੀਤਾ ਲਾਕ // [1F510] +🔑 ਕੁੰਜੀ // [1F511] +🔒 ਲਾਕ // [1F512] +🔓 ਖੁੱਲ੍ਹਿਆ ਲਾਕ // [1F513] +🔔 ਘੰਟੀ // [1F514] +🔕 ਬਿਨਾਂ ਆਵਾਜ਼ ਘੰਟੀ ਦਾ ਚਿੰਨ੍ਹ // [1F515] +🔖 ਬੁੱੱਕਮਾਰਕ // [1F516] +🔗 ਲਿੰਕ // [1F517] +🔘 ਰੇਡੀਓ ਬਟਨ // [1F518] +🔙 ਪਿੱਛੇ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਵਾਲਾ ਤੀਰ // [1F519] +🔚 ਸਮਾਪਤੀ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਵਾਲਾ ਤੀਰ // [1F51A] +🔛 ਦੋ ਪਾਸੇ ਚਾਲੂ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਵਾਲਾ ਤੀਰ // [1F51B] +🔜 ਜਲਦ ਹੀ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਵਾਲਾ ਤੀਰ // [1F51C] +🔝 ਉੱਪਰ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਵਾਲਾ ਤੀਰ // [1F51D] +🔞 18 ਸਾਲਾਂ ਤੋਂ ਘੱਟ ਨਹੀਂ // [1F51E] +🔟 ਕੀਕੈਪ ਦਸ // [1F51F] +🔠 ਵੱਡੇ ਲੇਟਿਨ ਇਨਪੁੱਟ // [1F520] +🔡 ਛੋਟੇ ਲੇਟਿਨ ਇਨਪੁੱਟ // [1F521] +🔢 ਇਨਪੁੱਟ ਨੰਬਰ // [1F522] +🔣 ਇਨਪੁੱਟ ਚਿੰਨ੍ਹ // [1F523] +🔤 ਇਨਪੁੱਟ ਲੇਟਿਨ ਅੱਖਰ // [1F524] +🔥 ਅੱਗ // [1F525] +🔦 ਫਲੈਸਲਾਈਟ // [1F526] +🔧 ਰੈਂਚ // [1F527] +🔨 ਹਥੌੜਾ // [1F528] +🔩 ਨੱਟ ਅਤੇ ਬੋਲਟ // [1F529] +🔪 ਰਸੋਈ ਚਾਕੂ // [1F52A] +🔫 ਪਿਸਟਲ // [1F52B] +🔬 ਮਾਈਕਰੋੋਸਕੋਪ // [1F52C] +🔭 ਟੈਲੀਸਕੋਪ // [1F52D] +🔮 ਕ੍ਰਿਸਟਲ ਬਾਲ // [1F52E] +🔯 ਛੇ-ਬਿੰਦੂ ਤਾਰਾ // [1F52F] +🔰 ਸ਼ੁਰੂਆਤ ਲਈ ਜਾਪਾਨੀ ਚਿੰਨ੍ਹ // [1F530] +🔱 ਤਿਰਸੂਲ ਨਿਸ਼ਾਨ // [1F531] +🔲 ਵਰਗਾਕਾਰ ਕਾਲਾ ਬਟਨ // [1F532] +🔳 ਵਰਗਾਕਾਰ ਸਫੇਦ ਬਟਨ // [1F533] +🔴 ਲਾਲ ਗੋਲਾ // [1F534] +🔵 ਨੀਲਾ ਗੋਲਾ // [1F535] +🔶 ਵੱਡਾ ਸੰਤਰੀ ਹੀਰਾ // [1F536] +🔷 ਵੱਡਾ ਨੀਲਾ ਹੀਰਾ // [1F537] +🔸 ਛੋਟਾ ਸੰਤਰੀ ਹੀਰਾ // [1F538] +🔹 ਛੋਟਾ ਨੀਲਾ ਹੀਰਾ // [1F539] +🔺 ਉੱਪਰ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਲਾਲ ਤਿਕੋਣ // [1F53A] +🔻 ਥੱਲੇ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਲਾਲ ਤਿਕੋਣ // [1F53B] +🔼 ਉੱਪਰ ਬਟਨ // [1F53C] +🔽 ਥੱਲੇ ਬਟਨ // [1F53D] +🕉 ਓਮ // [1F549] text|emoji +🕊 ਅਮਨ ਦਾ ਪੰਛੀ, ਘੁੱਗੀ // [1F54A] text|emoji +🕋 ਕਾਬਾ // [1F54B] +🕌 ਮਸੀਤ // [1F54C] +🕍 ਪ੍ਰਾਰਥਨਾ ਸਥਾਨ // [1F54D] +🕎 ਮੋਮਬੱਤੀ ਸਟੈਂਡ // [1F54E] +🕐 1 ਵਜੇ // [1F550] +🕑 2 ਵਜੇ // [1F551] +🕒 3 ਵਜੇ // [1F552] +🕓 4 ਵਜੇ // [1F553] +🕔 5 ਵਜੇ // [1F554] +🕕 6 ਵਜੇ // [1F555] +🕖 7 ਵਜੇ // [1F556] +🕗 8 ਵਜੇ // [1F557] +🕘 9 ਵਜੇ // [1F558] +🕙 10 ਵਜੇ // [1F559] +🕚 11 ਵਜੇ // [1F55A] +🕛 12 ਵਜੇ // [1F55B] +🕜 ਇੱਕ-ਤੀਹ // [1F55C] +🕝 ਦੋ-ਤੀਹ // [1F55D] +🕞 ਤਿੰਨ-ਤੀਹ // [1F55E] +🕟 ਚਾਰ-ਤੀਹ // [1F55F] +🕠 ਪੰਜ-ਤੀਹ // [1F560] +🕡 ਛੇ-ਤੀਹ // [1F561] +🕢 ਸੱਤ-ਤੀਹ // [1F562] +🕣 ਅੱਠ-ਤੀਹ // [1F563] +🕤 ਨੌ-ਤੀਹ // [1F564] +🕥 ਦਸ-ਤੀਹ // [1F565] +🕦 ਗਿਆਰਾਂ-ਤੀਹ // [1F566] +🕧 ਬਾਰਾਂ-ਤੀਹ // [1F567] +🕯 ਮੋਮਬੱਤੀ // [1F56F] text|emoji +🕰 ਅਲਾਰਮ ਘੜੀ // [1F570] text|emoji +🕳 ਖੁੱਡ // [1F573] text|emoji +🕴 ਕਾਰੋਬਾਰ ਵਿਅਕਤੀ, ਵਪਾਰਕ ਸੂਟ ਵਿੱਚ ਵਿਅਕਤੀ // [1F574] text|emoji +🕵 ਜਾਸੂਸ ਵਿਅਕਤੀ // [1F575] text|emoji +🕶 ਕਾਲੀਆਂ ਐਨਕਾਂ // [1F576] text|emoji +🕷 ਮੱਕੜੀ // [1F577] text|emoji +🕸 ਮੱਕੜੀ ਦਾ ਜਾਲਾ // [1F578] text|emoji +🕹 ਜਾਏਸਟਿੱਕ // [1F579] text|emoji +🕺 ਨੱਚਦਾ ਬੰਦਾ // [1F57A] +🖇 ਲਿੰਕ ਕੀਤੀਆਂ ਪੇਪਰਕਲਿੱਪਾਂ // [1F587] text|emoji +🖊 ਪੈਨ // [1F58A] text|emoji +🖋 ਫਾਊਂਟੇਨ ਪੈਨ // [1F58B] text|emoji +🖌 ਪੇਂਟਬੁਰਸ਼ // [1F58C] text|emoji +🖍 ਮੋਮੀ ਰੰਗ // [1F58D] text|emoji +🖐 ਪੰਜਾ ਵਿਖਾਉਣਾ // [1F590] text|emoji +🖕 ਉੱਪਰ ਵੱਲ ਉਂਗਲ // [1F595] +🖖 ਸਲੂਟ ਕਰਨ ਵਾਲਾ ਹੱਥ, ਵਲਕਨ ਸਲੂਟ // [1F596] +🖤 ਕਾਲਾ ਦਿਲ // [1F5A4] +🖥 ਡੈਸਕਟਾਪ ਕੰਪਿਊਟਰ // [1F5A5] text|emoji +🖨 ਪ੍ਰਿੰਟਰ // [1F5A8] text|emoji +🖱 ਕੰਪਿਊਟਰ ਮਾਊਸ // [1F5B1] text|emoji +🖲 ਟ੍ਰੇਕਬਾਲ // [1F5B2] text|emoji +🖼 ਫਰੇਮ ਵਾਲੀ ਤਸਵੀਰ // [1F5BC] text|emoji +🗂 ਕਾਰਡ ਸੂਚੀਆਂ ਵੰਡਣ ਵਾਲਾ // [1F5C2] text|emoji +🗃 ਕਾਰਡ ਫ਼ਾਈਲਾਂ ਦਾ ਬਕਸਾ // [1F5C3] text|emoji +🗄 ਫਾਇਲ ਕੈਬਿਨੇਟ // [1F5C4] text|emoji +🗑 ਰੱਦ ਦੀ ਟੋਕਰੀ // [1F5D1] text|emoji +🗒 ਚੂੜੀਦਾਰ ਨੋਟਪੈਡ // [1F5D2] text|emoji +🗓 ਚੂੜੀਦਾਰ ਕੈਲੰਡਰ // [1F5D3] text|emoji +🗜 ਦਬਾਉਣਾ // [1F5DC] text|emoji +🗝 ਪੁਰਾਣੀ ਕੁੰਜੀ // [1F5DD] text|emoji +🗞 ਲਪੇਟੀ ਹੋਈ ਅਖ਼ਬਾਰ // [1F5DE] text|emoji +🗡 ਕਟਾਰ // [1F5E1] text|emoji +🗣 ਬੋਲਦਾ ਵਿਅਕਤੀ // [1F5E3] text|emoji +🗨 ਖੱਬਾ ਬੋਲੀ ਬਬਲ // [1F5E8] text|emoji +🗯 ਸੱਜਾ ਨਰਾਜ਼ਗੀ ਬਬਲ // [1F5EF] text|emoji +🗳 ਮਤਦਾਨ ਅਤੇ ਮਤਦਾਨ ਪੇਟੀ // [1F5F3] text|emoji +🗺 ਸੰਸਾਰ ਦਾ ਨਕਸ਼ਾ // [1F5FA] text|emoji +🗻 ਮਾਊਂਟ ਫੂਜੀ // [1F5FB] +🗼 ਟੋਕੀਓ ਟਾਵਰ // [1F5FC] +🗽 ਸਟੈਚ ਆਫ ਲਿਬਰਟੀ // [1F5FD] +🗾 ਜਾਪਾਨ ਦਾ ਨਕਸ਼ਾ // [1F5FE] +🗿 ਮੋਆਈ // [1F5FF] + +// 1F600..1F64F : Emoticons + +😀 ਮੁਸਕਰਾਉਂਦਾ ਚਿਹਰਾ // [1F600] +😁 ਮੁਸਕਰਾਉਂਦੀਆਂ ਅੱਖਾਂ ਨਾਲ ਹਸਦਾ ਚਿਹਰਾ // [1F601] +😂 ਖੁਸ਼ੀ ਦੇ ਹੰਝੂਆਂ ਨਾਲ ਚਿਹਰਾ // [1F602] +😃 ਖੁੱਲ੍ਹੇ ਮੁੰਹ ਨਾਲ ਹੱਸਦਾ ਚਿਹਰਾ // [1F603] +😄 ਖੁੱਲ੍ਹੇ ਮੁੰਹ ਅਤੇ ਮੁਸਕਰਾਉਂਦੀਆਂ ਅੱਖਾਂ ਨਾਲ ਹੱਸਦਾ ਚਿਹਰਾ // [1F604] +😅 ਖੁੱਲ੍ਹੇ ਮੁੰਹ ਅਤੇੇ ਠੰਡੇ ਮੁੜ੍ਹਕੇ ਨਾਲ ਹੱਸਦਾ ਚਿਹਰਾ // [1F605] +😆 ਖੁੱਲ੍ਹੇ ਮੁੰਹ ਅਤੇ ਘੁੱਟ ਕੇ ਬੰਦ ਕੀਤੀਆਂ ਅੱਖਾਂ ਨਾਲ ਹੱਸਦਾ ਚਿਹਰਾ // [1F606] +😇 ਹਾਲੋ ਨਾਲ ਹੱਸਦਾ ਚਿਹਰਾ // [1F607] +😈 ਮੁਸਕਰਾਉਂਦਾ ਸ਼ੈਤਾਨੀ ਚਿਹਰਾ // [1F608] +😉 ਅੱਖ ਮਟਕਾਉਂਦਾ ਚਿਹਰਾ // [1F609] +😊 ਮੁਸਕਰਾਉਂਦੀਆਂ ਅੱਖਾਂ ਨਾਲ ਹੱਸਦਾ ਚਿਹਰਾ // [1F60A] +😋 ਸੁਆਦੀ ਖਾਣੇ ਦਾ ਆਨੰਦ ਲੈਂਦਾ ਚਿਹਰਾ // [1F60B] +😌 ਰਾਹਤ ਵਾਲਾ ਚਿਹਰਾ // [1F60C] +😍 ਦਿਲ-ਵਰਗੀਆਂ ਅੱਖਾਂ ਨਾਲ ਹੱਸਦਾ ਚਿਹਰਾ // [1F60D] +😎 ਕਾਲੀਆਂ ਐਨਕਾਂ ਨਾਲ ਹੱਸਦਾ ਚਿਹਰਾ // [1F60E] +😏 ਨੱਖਰੇ ਵਾਲਾ ਚਿਹਰਾ // [1F60F] +😐 ਨਿਰਪੱਖ ਚਿਹਰਾ // [1F610] +😑 ਬਿਨਾਂ ਹਾਵ-ਭਾਵ ਵਾਲਾ ਚਿਹਰਾ // [1F611] +😒 ਨਾ-ਖਸ਼ ਚਿਹਰਾ // [1F612] +😓 ਠੰਡੇ ਮੁੜ੍ਹਕੇ ਵਾਲਾ ਚਿਹਰਾ // [1F613] +😔 ਵਿਚਾਰਸ਼ੀਲ ਚਿਹਰਾ // [1F614] +😕 ਉਲਝਣ ਵਾਲਾ ਚਿਹਰਾ // [1F615] +😖 ਹੈਰਾਨ ਅਤੇ ਉਲਝਿਆ ਹੋਇਆ ਚਿਹਰਾ // [1F616] +😗 ਚੁੰਮੀ ਦਿੰਦਾ ਚਿਹਰਾ // [1F617] +😘 ਚੁੰਮੀ-ਸੁੱਟਦਾ ਚਿਹਰਾ // [1F618] +😙 ਮੁਸਕਰਾਉਂਦੀਆਂ ਅੱਖਾਂ ਨਾਲ ਚੁੰਮੀ ਦਿੰਦਾ ਚਿਹਰਾ // [1F619] +😚 ਬੰਦ ਅੱਖਾਂ ਨਾਲ ਚੁੰਮੀ ਦਿੰਦਾ ਚਿਹਰਾ // [1F61A] +😛 ਬਾਹਰ ਨਿਕਲੀ ਜੀਭ ਨਾਲ ਚਿਹਰਾ // [1F61B] +😜 ਬਾਹਰ ਨਿਕਲੀ ਜੀਭ ਅਤੇ ਅੱਖ ਮਟਕਾਉਂਦਾ ਚਿਹਰਾ // [1F61C] +😝 ਘੁੱਟ ਕੇ ਬੰਦ ਕੀਤੀਆਂ ਅੱਖਾਂ ਅਤੇ ਬਾਹਰ ਨਿਕਲੀ ਜੀਭ ਵਾਲਾ ਚਿਹਰਾ // [1F61D] +😞 ਨਿਰਾਸ਼ ਚਿਹਰਾ // [1F61E] +😟 ਫਿਕਰਮੰਦ ਚਿਹਰਾ // [1F61F] +😠 ਗੁੱਸੇ ਵਿੱਚ ਚਿਹਰਾ // [1F620] +😡 ਨਰਾਜ਼਼ਗੀ ਨਾਲ ਲਾਲ ਚਿਹਰਾ // [1F621] +😢 ਰੋਂਦਾ ਚਿਹਰਾ // [1F622] +😣 ਸੁਰੱਖਿਆ ਵਿਖਾਉਣ ਵਾਲਾ ਚਿਹਰਾ // [1F623] +😤 ਜਿੱਤ ਦਰਸਾਉਂਦਾ ਚਿਹਰਾ // [1F624] +😥 ਨਿਰਾਸ਼ ਪਰ ਰਾਹਤ ਵਾਲਾ ਚਿਹਰਾ // [1F625] +😦 ਖੁੱਲ੍ਹੇ ਮੂੰਹ ਨਾਲ ਨਰਾਜ਼ ਚਿਹਰਾ // [1F626] +😧 ਦੁੱਖੀ ਚਿਹਰਾ // [1F627] +😨 ਡਰਿਆ ਹੋਇਆ ਚਿਹਰਾ // [1F628] +😩 ਹੰਭਿਆ ਹੋਇਆ ਚਿਹਰਾ // [1F629] +😪 ਨੀਂਦਰਾ ਚਿਹਰਾ // [1F62A] +😫 ਥੱਕਿਆ ਚਿਹਰਾ // [1F62B] +😬 ਕਚੀਚੀਆਂ ਲੈਂਦਾ ਚਿਹਰਾ // [1F62C] +😭 ਉੱਚੀ-ਉੱਚੀ ਰੋਂਦਾ ਚਿਹਰਾ // [1F62D] +😮 ਖੁੱਲ੍ਹੇ ਮੂੰਹ ਵਾਲਾ ਚਿਹਰਾ // [1F62E] +😯 ਹੈਰਾਨ ਚਿਹਰਾ // [1F62F] +😰 ਖੁੱਲ੍ਹੇ ਮੂੰਹ ਅਤੇ ਠੰਡੇ ਮੁੜ੍ਹਕੇ ਵਾਲਾ ਚਿਹਰਾ // [1F630] +😱 ਡਰ ਨਾਲ ਚੀਕਦਾ ਚਿਹਰਾ // [1F631] +😲 ਹੈਰਤ ਵਾਲਾ ਚਿਹਰਾ // [1F632] +😳 ਭਖਿਆ ਚਿਹਰਾ // [1F633] +😴 ਸੁੱਤਾ ਚਿਹਰਾ // [1F634] +😵 ਚੱਕਰਾਉਂਦਾ ਚਿਹਰਾ // [1F635] +😶 ਬਿਨਾਂ ਮੂੰਹ ਵਾਲਾ ਚਿਹਰਾ // [1F636] +😷 ਮੈਡੀਕਲ ਨਕਾਬ ਵਾਲਾ ਚਿਹਰਾ // [1F637] +😸 ਹੱਸਦੀਆਂ ਅੱਖਾਂ ਨਾਲ ਮੁਸਕਰਾਉਂਦੀ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F638] +😹 ਖੁਸ਼ੀ ਦੇ ਹੰਝੂਆਂ ਵਾਲੀ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F639] +😺 ਖੱਲ੍ਹੇ ਮੂੰਹ ਨਾਲ ਹੱਸਦੀ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F63A] +😻 ਦਿਲ-ਵਰਗੀਆਂ ਅੱਖਾਂ ਨਾਲ ਹੱਸਦੀ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F63B] +😼 ਵਿਅੰਗਮਈ ਹਾਸੇ ਦੇ ਨਾਲ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F63C] +😽 ਬੰਦ ਅੱੱਖਾਂ ਨਾਲ ਚੁੰਮਦੀ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F63D] +😾 ਨਰਾਜ਼ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F63E] +😿 ਰੋਂਦੀ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F63F] +🙀 ਹੰਭੀ ਹੋਈ ਬਿੱਲੀ ਦਾ ਚਿਹਰਾ // [1F640] +🙁 ਥੋੜ੍ਹਾ ਜਿਹਾ ਨਰਾਜ਼ ਚਿਹਰਾ // [1F641] +🙂 ਥੋੜ੍ਹਾ ਜਿਹਾ ਮੁਸਕਰਾਉਂਦਾ ਚਿਹਰਾ // [1F642] +🙃 ਮੂਰਖ ਚਿਹਰਾ // [1F643] +🙄 ਅੱਖਾਂ ਘੁਮਾਉਂਦਾ ਚਿਹਰਾ // [1F644] +🙅 ਨਹੀਂ ਦਾ ਸੰਕੇਤ ਕਰਨਾ // [1F645] +🙆 ਠੀਕ ਦਾ ਸੰਕੇਤ ਕਰਨਾ // [1F646] +🙇 ਝੁਕਿਆ ਹੋਇਆ ਵਿਅਕਤੀ // [1F647] +🙈 ਬੁਰਾ ਨਾ ਵੇਖੋ // [1F648] +🙉 ਬੁਰਾ ਨਾ ਸੁਣੋ // [1F649] +🙊 ਬੁਰਾ ਨਾ ਬੋਲੋ // [1F64A] +🙋 ਹੱਥ ਚੁੱਕਦਾ ਖੁਸ਼ ਵਿਅਕਤੀ // [1F64B] +🙌 ਦੋਵੇਂ ਹੱਥ ਖੜ੍ਹੇ ਕਰਨ ਵਾਲਾ ਵਿਅਕਤੀ // [1F64C] +🙍 ਮੱਥੇ ਵੱਟ ਪਾਉਂਦਾ ਵਿਅਕਤੀ // [1F64D] +🙎 ਨਰਾਜ਼ਗੀ ਜਾਹਰ ਕਰਦਾ ਵਿਅਕਤੀ // [1F64E] +🙏 ਜੁੜੇ ਹੋਏ ਹੱਥ // [1F64F] + +// 1F680..1F6FF : Transport and Map Symbols + +🚀 ਰਾਕਟ // [1F680] +🚁 ਹੈਲੀਕਾਪਟਰ // [1F681] +🚂 ਲੋਕੋਮੋਟਿਵ // [1F682] +🚃 ਰੇਲਗੱਡੀ ਕਾਰ // [1F683] +🚄 ਤੇਜ਼-ਰਫ਼ਤਾਰ ਰੇਲਗੱਡੀ // [1F684] +🚅 ਗੋਲੀ ਵਰਗੇ ਨੱਕ ਵਾਲੀ ਤੇਜ਼-ਰਫ਼ਤਾਰ ਰੇਲਗੱਡੀ // [1F685] +🚆 ਰੇਲਗੱੱਡੀ // [1F686] +🚇 ਮੈਟਰੋ // [1F687] +🚈 ਲਾਈਟ ਰੇਲ // [1F688] +🚉 ਸਟੇਸ਼ਨ // [1F689] +🚊 ਟ੍ਰੈਮ // [1F68A] +🚋 ਟ੍ਰੈੈਮ ਕਾਰ // [1F68B] +🚌 ਬੱਸ // [1F68C] +🚍 ਆ ਰਹੀ ਬੱਸ // [1F68D] +🚎 ਟਰਾਲੀ ਬੱਸ // [1F68E] +🚏 ਬੱਸ ਸਟਾਪ // [1F68F] +🚐 ਮਿਨੀ ਬੱਸ // [1F690] +🚑 ਐਂਬੂਲੇਂਸ // [1F691] +🚒 ਫਾਇਰ ਇੰਜਣ // [1F692] +🚓 ਪੁਲਿਸ ਕਾਰ // [1F693] +🚔 ਆ ਰਹੀ ਪੁਲਿਸ ਕਾਰ // [1F694] +🚕 ਟੈਕਸੀ // [1F695] +🚖 ਆ ਰਹੀ ਟੈਕਸੀ // [1F696] +🚗 ਆਟੋਮੋਬਾਈਲ // [1F697] +🚘 ਆਉਣ ਵਾਲੇ ਆਟੋਮੋਬਾਈਲ // [1F698] +🚙 ਮਨੋਰੰਜਕ ਵਾਹਨ // [1F699] +🚚 ਡਿਲੀਵਰੀ ਟਰੱਕ // [1F69A] +🚛 ਲਾਰੀ // [1F69B] +🚜 ਟਰੇਕਟਰ // [1F69C] +🚝 ਮੋਨੋਰੇਲ // [1F69D] +🚞 ਪਹਾੜੀ ਰੇਲਵੇ // [1F69E] +🚟 ਸਸਪੈਨਸ਼ਨ ਰੇਲਵੇ // [1F69F] +🚠 ਪਹਾੜੀ ਕੇਬਲਵੇ // [1F6A0] +🚡 ਏਰੀਅਲ ਟ੍ਰੈਮਵੇ // [1F6A1] +🚢 ਜਹਾਜ਼ // [1F6A2] +🚣 ਛੋਟੀ ਕਿਸ਼ਤੀ // [1F6A3] +🚤 ਤੇਜ਼ ਕਿਸ਼ਤੀ // [1F6A4] +🚥 ਸਮਤਲ ਆਵਾਜਾਈ ਲਾਈਟ // [1F6A5] +🚦 ਲੰਬਕਾਰੀ ਆਵਾਜਾਈ ਲਾਈਟ // [1F6A6] +🚧 ਨਿਰਮਾਣ // [1F6A7] +🚨 ਪੁਲਿਸ ਕਾਰ ਦੀ ਲਾਈਟ // [1F6A8] +🚩 ਤਿਕੋੋਣਾ ਝੰਡਾ // [1F6A9] +🚪 ਦਰਵਾਜ਼ਾ // [1F6AA] +🚫 ਪਾਬੰਦੀ // [1F6AB] +🚬 ਸਿਗਰੇਟ ਪੀਣਾ // [1F6AC] +🚭 ਸਿਗਰੇੇਟ ਪੀਣਾ ਮਨ੍ਹਾ ਹੈ // [1F6AD] +🚮 ਕੂੜਾ ਇੱਥੇ ਸੁੱਟੋ ਚਿੰਨ੍ਹ // [1F6AE] +🚯 ਕੂੜਾ ਸੁੱਟਣਾ ਮਨ੍ਹਾ ਹੈ // [1F6AF] +🚰 ਪੀਣ ਵਾਲਾ ਪਾਣੀ // [1F6B0] +🚱 ਪਾਣੀ ਪੀਣਯੋਗ ਨਹੀਂ // [1F6B1] +🚲 ਸਾਈਕਲ // [1F6B2] +🚳 ਸਾਈਕਲ ‘ਤੇ ਪਾਬੰਦੀ // [1F6B3] +🚴 ਸਾਈਕਲ ਸਵਾਰ // [1F6B4] +🚵 ਪਹਾੜਾਂ ‘ਤੇ ਸਾਈਕਲ ਸਵਾਰ // [1F6B5] +🚶 ਪੈਦਲ ਵਿਅਕਤੀ // [1F6B6] +🚷 ਪੈਦਲ ਲੋਕਾਂ ‘ਤੇ ਪਾਬੰਦੀ // [1F6B7] +🚸 ਬੱਚਿਆਂ ਦੇ ਲੰਘਣ ਦਾ ਚਿੰਨ੍ਹ // [1F6B8] +🚹 ਬੰਦਿਆਂ ਦਾ ਕਮਰਾ // [1F6B9] +🚺 ਔਰਤਾਂ ਦਾ ਕਮਰਾ // [1F6BA] +🚻 ਆਰਾਮ ਕਮਰਾ // [1F6BB] +🚼 ਬੱਚੇ ਦਾ ਚਿੰਨ੍ਹ // [1F6BC] +🚽 ਟੋਆਇਲਟ // [1F6BD] +🚾 ਪਾਣੀ ਦਾ ਟੈਂਕੀ // [1F6BE] +🚿 ਸ਼ਾਵਰ // [1F6BF] +🛀 ਨਹਾਉਂਦਾ ਵਿਅਕਤੀ // [1F6C0] +🛁 ਨਹਾਉਣ ਵਾਲਾ ਟੱਬ // [1F6C1] +🛂 ਪਾਸਪੋਰਟ ਕੰਟਰੋਲ // [1F6C2] +🛃 ਕਸਟਮਜ਼ // [1F6C3] +🛄 ਸਾਮਾਨ ‘ਤੇ ਦਾਅਵਾ // [1F6C4] +🛅 ਛੱਡਿਆ ਹੋਇਆ ਸਾਮਾਨ // [1F6C5] +🛋 ਸੋਫਾ ਅਤੇ ਲੈਂਪ // [1F6CB] text|emoji +🛌 ਬਿਸਤਰ ‘ਤੇ ਸੁੱਤਾ ਵਿਅਕਤੀ // [1F6CC] +🛍 ਖਰੀਦਦਾਰੀ ਵਾਲੇ ਬੈਗ // [1F6CD] text|emoji +🛎 ਦਰਬਾਨ ਘੰਟੀ // [1F6CE] text|emoji +🛏 ਬਿਸਤਰ // [1F6CF] text|emoji +🛐 ਭਗਤੀ ਕਰਨ ਦੀ ਥਾਂ // [1F6D0] +🛑 ਰੁਕਣ ਦਾ ਸੰਕੇਤ // [1F6D1] +🛒 ਖਰੀਦਦਾਰੀ ਛਕੜਾ // [1F6D2] +🛠 ਹਥੌੜਾ ਅਤੇ ਰੈਂਚ // [1F6E0] text|emoji +🛡 ਢਾਲ // [1F6E1] text|emoji +🛢 ਤੇਲ ਦਾ ਡ੍ਰਮ // [1F6E2] text|emoji +🛣 ਮੋਟਰਵੇਅ // [1F6E3] text|emoji +🛤 ਰੇਲ ਪਟੜੀ // [1F6E4] text|emoji +🛥 ਮੋਟਰਬੋਟ // [1F6E5] text|emoji +🛩 ਛੋਟਾ ਹਵਾਈ ਜਹਾਜ਼ // [1F6E9] text|emoji +🛫 ਹਵਾਈ ਜਹਾਜ਼ ਰਵਾਨਾ // [1F6EB] +🛬 ਹਵਾਈ ਜਹਾਜ਼ ਆਗਮਨ // [1F6EC] +🛰 ਸੈਟੇਲਾਈਟ // [1F6F0] text|emoji +🛳 ਸਮੁੰਦਰੀ ਯਾਤਰੀ ਜਹਾਜ਼ // [1F6F3] text|emoji +🛴 ਕਿੱਕ ਸਕੂਟਰ // [1F6F4] +🛵 ਮੋਟਰ ਸਕੂਟਰ // [1F6F5] +🛶 ਕੈਨੋਏ // [1F6F6] +🛷 sled // [1F6F7] (no translation) +🛸 flying saucer // [1F6F8] (no translation) + +// 1F900..1F9FF : Supplemental Symbols and Pictographs + +🤐 ਮੂੰਹ ਬੰਦ ਚਿਹਰਾ, ਮੂੰਹ ਬੰਦ ਰੱਖਣਾ // [1F910] +🤑 ਲਾਲਚੀ ਚਿਹਰਾ // [1F911] +🤒 ਬਿਮਾਰ ਚਿਹਰਾ // [1F912] +🤓 ਪੜ੍ਹਾਕੂ ਚਿਹਰਾ // [1F913] +🤔 ਸੋਚ ਰਿਹਾ ਚਿਹਰਾ // [1F914] +🤕 ਜ਼ਖਮੀ ਚਿਹਰਾ // [1F915] +🤖 ਰੋਬੋਟ ਦਾ ਚਿਹਰਾ // [1F916] +🤗 ਜੱਫੀ ਪਾਉਂਦਾ ਚਿਹਰਾ // [1F917] +🤘 ਖੁਸ਼ੀ ਜਾਹਰ ਕਰਨਾ // [1F918] +🤙 ਮੈਨੂੰ ਕਾਲ ਕਰੋ ਸੰਕੇਤ // [1F919] +🤚 ਖੜ੍ਹਾ ਕੀਤਾ ਪੁੱਠਾ ਹੱਥ // [1F91A] +🤛 ਖੱਬੇ ਵੱਲ ਨੂੰ ਮੁੱਠੀ // [1F91B] +🤜 ਸੱਜੇ ਵੱਲ ਨੂੰ ਮੁੱਠੀ // [1F91C] +🤝 ਹੱਥ-ਮਿਲਾਉਣਾ // [1F91D] +🤞 ਕਾਟਵੀਆਂ ਉਂਗਲਾਂ // [1F91E] +🤟 love you gesture // [1F91F] (no translation) +🤠 ਕਾਓਬੌਏ ਹੈਟ ਚਿਹਰਾ // [1F920] +🤡 ਜੋਕਰ ਚਿਹਰਾ // [1F921] +🤢 ਜੀਅ ਮਤਲਾਉਂਦਾ ਚਿਹਰਾ // [1F922] +🤣 ਹੱਸ-ਹੱਸ ਲੋਟ-ਪੋਟ // [1F923] +🤤 ਲਾਰ ਟਪਕਦਾ ਚਿਹਰਾ // [1F924] +🤥 ਝੂਠਾ ਚਿਹਰਾ // [1F925] +🤦 ਉਫ ਹੋ // [1F926] +🤧 ਛਿੱਕਦਾ ਚਿਹਰਾ // [1F927] +🤨 face with raised eyebrow // [1F928] (no translation) +🤩 star struck // [1F929] (no translation) +🤪 crazy face // [1F92A] (no translation) +🤫 shushing face // [1F92B] (no translation) +🤬 face with symbols over mouth // [1F92C] (no translation) +🤭 face with hand over mouth // [1F92D] (no translation) +🤮 face vomiting // [1F92E] (no translation) +🤯 exploding head // [1F92F] (no translation) +🤰 ਗਰਭਵਤੀ ਔਰਤ // [1F930] +🤱 breast feeding // [1F931] (no translation) +🤲 palms up together // [1F932] (no translation) +🤳 ਸੈਲਫੀ // [1F933] +🤴 ਰਾਜਕੁਮਾਰ // [1F934] +🤵 ਬਣਿਆ-ਠਣਿਆ ਵਿਅਕਤੀ // [1F935] +🤶 ਮਾਂ ਕ੍ਰਿਸਮਿਸ // [1F936] +🤷 ਉਚਕਾਉਣਾ // [1F937] +🤸 ਟਾਪੂ ਲਾਉਣਾ // [1F938] +🤹 ਹੱਥਫੇਰੀ // [1F939] +🤺 ਤਲਵਾਰਬਾਜ਼ // [1F93A] +🤼 ਕੁਸ਼ਤੀ // [1F93C] +🤽 ਵਾਟਰ ਪੋਲੋ // [1F93D] +🤾 ਹੈਂਡਬਾਲ // [1F93E] +🥀 ਮੁਰਝਾਇਆ ਫੁੱਲ // [1F940] +🥁 ਡਰੰਮ // [1F941] +🥂 ਖੜਕਦੀਆਂ ਗਲਾਸੀਆਂ // [1F942] +🥃 ਟੰਬਲਰ ਗਲਾਸ // [1F943] +🥄 ਚਮਚਾ // [1F944] +🥅 ਗੋਲ ਨੈੱਟ // [1F945] +🥇 ਸੋਨੇ ਦਾ ਤਮਗਾ // [1F947] +🥈 ਚਾਂਦੀ ਦੀ ਤਮਗਾ // [1F948] +🥉 ਕਾਂਸੀ ਦਾ ਤਮਗਾ // [1F949] +🥊 ਮੁੱਕੇਬਾਜ਼ੀ ਦਸਤਾਨਾ // [1F94A] +🥋 ਮਾਰਸ਼ਲ ਆਰਟ ਵਰਦੀ // [1F94B] +🥌 curling stone // [1F94C] (no translation) +🥐 ਕਰੋਏਸੈਂਟ // [1F950] +🥑 ਅਵੋਕੈਡੋ // [1F951] +🥒 ਖੀਰਾ // [1F952] +🥓 ਬੇਕਨ // [1F953] +🥔 ਆਲੂ // [1F954] +🥕 ਗਾਜਰ // [1F955] +🥖 ਬੇਗਟ ਬ੍ਰੈੱਡ // [1F956] +🥗 ਹਰਾ ਸਲਾਦ // [1F957] +🥘 ਥੋੜ੍ਹੇ ਭੋਜਨ ਵਾਲਾ ਪੈਨ // [1F958] +🥙 ਭਰਕੇ ਬਣਾਇਆ ਫਲੈਟਬ੍ਰੈੱਡ // [1F959] +🥚 ਆਂਡਾ // [1F95A] +🥛 ਦੁੱਧ ਦਾ ਗਲਾਸ // [1F95B] +🥜 ਮੂੰਗਫਲ਼ੀ // [1F95C] +🥝 ਕੀਵੀਫਰੂਟ // [1F95D] +🥞 ਪੈਨਕੇਕ // [1F95E] +🥟 dumpling // [1F95F] (no translation) +🥠 fortune cookie // [1F960] (no translation) +🥡 takeout box // [1F961] (no translation) +🥢 chopsticks // [1F962] (no translation) +🥣 bowl with spoon // [1F963] (no translation) +🥤 cup with straw // [1F964] (no translation) +🥥 coconut // [1F965] (no translation) +🥦 broccoli // [1F966] (no translation) +🥧 pie // [1F967] (no translation) +🥨 pretzel // [1F968] (no translation) +🥩 cut of meat // [1F969] (no translation) +🥪 sandwich // [1F96A] (no translation) +🥫 canned food // [1F96B] (no translation) +🦀 ਕੇਕੜਾ // [1F980] +🦁 ਸ਼ੇਰ ਦਾ ਚਿਹਰਾ // [1F981] +🦂 ਬਿੱਛੂ // [1F982] +🦃 ਟਰਕੀ // [1F983] +🦄 ਯੂਨੀਕੋਰਨ ਦਾ ਚਿਹਰਾ // [1F984] +🦅 ਬਾਜ // [1F985] +🦆 ਬੱਤਖ // [1F986] +🦇 ਚਮਗਿੱਦੜ // [1F987] +🦈 ਸ਼ਾਰਕ // [1F988] +🦉 ਉੱਲੂ // [1F989] +🦊 ਲੂੰਬੜ ਚਿਹਰਾ // [1F98A] +🦋 ਤਿਤਲੀ // [1F98B] +🦌 ਹਿਰਨ // [1F98C] +🦍 ਗੋਰੀਲਾ // [1F98D] +🦎 ਕਿਰਲੀ // [1F98E] +🦏 ਗੈਂਡਾ // [1F98F] +🦐 ਝੀਂਗਾ // [1F990] +🦑 ਸਕਵਿੱਡ // [1F991] +🦒 giraffe // [1F992] (no translation) +🦓 zebra // [1F993] (no translation) +🦔 hedgehog // [1F994] (no translation) +🦕 sauropod // [1F995] (no translation) +🦖 t rex // [1F996] (no translation) +🦗 cricket // [1F997] (no translation) +🧀 ਪਨੀਰ ਦਾ ਟੁਕੜਾ // [1F9C0] +🧐 face with monocle // [1F9D0] (no translation) +🧑 adult // [1F9D1] (no translation) +🧒 child // [1F9D2] (no translation) +🧓 older adult // [1F9D3] (no translation) +🧔 bearded person // [1F9D4] (no translation) +🧕 woman with headscarf // [1F9D5] (no translation) +🧖 person in steamy room // [1F9D6] (no translation) +🧗 person climbing // [1F9D7] (no translation) +🧘 person in lotus position // [1F9D8] (no translation) +🧙 mage // [1F9D9] (no translation) +🧚 fairy // [1F9DA] (no translation) +🧛 vampire // [1F9DB] (no translation) +🧜 merperson // [1F9DC] (no translation) +🧝 elf // [1F9DD] (no translation) +🧞 genie // [1F9DE] (no translation) +🧟 zombie // [1F9DF] (no translation) +🧠 brain // [1F9E0] (no translation) +🧡 orange heart // [1F9E1] (no translation) +🧢 billed cap // [1F9E2] (no translation) +🧣 scarf // [1F9E3] (no translation) +🧤 gloves // [1F9E4] (no translation) +🧥 coat // [1F9E5] (no translation) +🧦 socks // [1F9E6] (no translation) + +// Country Flags (Regional Indicator Symbols) -- ISO 3166-1 Country Codes + +🇦🇨 ਅਸੈਂਸ਼ਨ ਟਾਪੂ // [1F1E6 1F1E8] AC +🇦🇩 ਅੰਡੋਰਾ // [1F1E6 1F1E9] AD +🇦🇪 ਸੰਯੁਕਤ ਅਰਬ ਅਮੀਰਾਤ // [1F1E6 1F1EA] AE +🇦🇫 ਅਫ਼ਗਾਨਿਸਤਾਨ // [1F1E6 1F1EB] AF +🇦🇬 ਐਂਟੀਗੁਆ ਅਤੇ ਬਾਰਬੁਡਾ // [1F1E6 1F1EC] AG +🇦🇮 ਅੰਗੁਇਲਾ // [1F1E6 1F1EE] AI +🇦🇱 ਅਲਬਾਨੀਆ // [1F1E6 1F1F1] AL +🇦🇲 ਅਰਮੀਨੀਆ // [1F1E6 1F1F2] AM +🇦🇴 ਅੰਗੋਲਾ // [1F1E6 1F1F4] AO +🇦🇶 ਅੰਟਾਰਕਟਿਕਾ // [1F1E6 1F1F6] AQ +🇦🇷 ਅਰਜਨਟੀਨਾ // [1F1E6 1F1F7] AR +🇦🇸 ਅਮੈਰੀਕਨ ਸਮੋਆ // [1F1E6 1F1F8] AS +🇦🇹 ਆਸਟਰੀਆ // [1F1E6 1F1F9] AT +🇦🇺 ਆਸਟ੍ਰੇਲੀਆ // [1F1E6 1F1FA] AU +🇦🇼 ਅਰੂਬਾ // [1F1E6 1F1FC] AW +🇦🇽 ਅਲੈਂਡ ਟਾਪੂ // [1F1E6 1F1FD] AX +🇦🇿 ਅਜ਼ਰਬਾਈਜਾਨ // [1F1E6 1F1FF] AZ +🇧🇦 ਬੋਸਨੀਆ ਅਤੇ ਹਰਜ਼ੇਗੋਵੀਨਾ // [1F1E7 1F1E6] BA +🇧🇧 ਬਾਰਬਾਡੋਸ // [1F1E7 1F1E7] BB +🇧🇩 ਬੰਗਲਾਦੇਸ਼ // [1F1E7 1F1E9] BD +🇧🇪 ਬੈਲਜੀਅਮ // [1F1E7 1F1EA] BE +🇧🇫 ਬੁਰਕੀਨਾ ਫ਼ਾਸੋ // [1F1E7 1F1EB] BF +🇧🇬 ਬੁਲਗਾਰੀਆ // [1F1E7 1F1EC] BG +🇧🇭 ਬਹਿਰੀਨ // [1F1E7 1F1ED] BH +🇧🇮 ਬੁਰੁੰਡੀ // [1F1E7 1F1EE] BI +🇧🇯 ਬੇਨਿਨ // [1F1E7 1F1EF] BJ +🇧🇱 ਸੇਂਟ ਬਾਰਥੇਲੇਮੀ // [1F1E7 1F1F1] BL +🇧🇲 ਬਰਮੂਡਾ // [1F1E7 1F1F2] BM +🇧🇳 ਬਰੂਨੇਈ // [1F1E7 1F1F3] BN +🇧🇴 ਬੋਲੀਵੀਆ // [1F1E7 1F1F4] BO +🇧🇶 ਕੈਰੇਬੀਆਈ ਨੀਦਰਲੈਂਡ // [1F1E7 1F1F6] BQ +🇧🇷 ਬ੍ਰਾਜ਼ੀਲ // [1F1E7 1F1F7] BR +🇧🇸 ਬਹਾਮਾਸ // [1F1E7 1F1F8] BS +🇧🇹 ਭੂਟਾਨ // [1F1E7 1F1F9] BT +🇧🇻 ਬੌਵੇਟ ਟਾਪੂ // [1F1E7 1F1FB] BV +🇧🇼 ਬੋਤਸਵਾਨਾ // [1F1E7 1F1FC] BW +🇧🇾 ਬੇਲਾਰੂਸ // [1F1E7 1F1FE] BY +🇧🇿 ਬੇਲੀਜ਼ // [1F1E7 1F1FF] BZ +🇨🇦 ਕੈਨੇਡਾ // [1F1E8 1F1E6] CA +🇨🇨 ਕੋਕੋਸ (ਕੀਲਿੰਗ) ਟਾਪੂ // [1F1E8 1F1E8] CC +🇨🇩 ਕਾਂਗੋ - ਕਿੰਸ਼ਾਸਾ // [1F1E8 1F1E9] CD +🇨🇫 ਕੇਂਦਰੀ ਅਫ਼ਰੀਕੀ ਗਣਰਾਜ // [1F1E8 1F1EB] CF +🇨🇬 ਕਾਂਗੋ - ਬ੍ਰਾਜ਼ਾਵਿਲੇ // [1F1E8 1F1EC] CG +🇨🇭 ਸਵਿਟਜ਼ਰਲੈਂਡ // [1F1E8 1F1ED] CH +🇨🇮 ਕੋਟ ਡੀਵੋਆਰ // [1F1E8 1F1EE] CI +🇨🇰 ਕੁੱਕ ਟਾਪੂ // [1F1E8 1F1F0] CK +🇨🇱 ਚਿਲੀ // [1F1E8 1F1F1] CL +🇨🇲 ਕੈਮਰੂਨ // [1F1E8 1F1F2] CM +🇨🇳 ਚੀਨ // [1F1E8 1F1F3] CN +🇨🇴 ਕੋਲੰਬੀਆ // [1F1E8 1F1F4] CO +🇨🇵 ਕਲਿੱਪਰਟਨ ਟਾਪੂ // [1F1E8 1F1F5] CP +🇨🇷 ਕੋਸਟਾ ਰੀਕਾ // [1F1E8 1F1F7] CR +🇨🇺 ਕਿਊਬਾ // [1F1E8 1F1FA] CU +🇨🇻 ਕੇਪ ਵਰਡੇ // [1F1E8 1F1FB] CV +🇨🇼 ਕੁਰਾਕਾਓ // [1F1E8 1F1FC] CW +🇨🇽 ਕ੍ਰਿਸਮਿਸ ਟਾਪੂ // [1F1E8 1F1FD] CX +🇨🇾 ਸਾਇਪ੍ਰਸ // [1F1E8 1F1FE] CY +🇨🇿 ਚੈਕੀਆ // [1F1E8 1F1FF] CZ +🇩🇪 ਜਰਮਨੀ // [1F1E9 1F1EA] DE +🇩🇬 ਡੀਇਗੋ ਗਾਰਸੀਆ // [1F1E9 1F1EC] DG +🇩🇯 ਜ਼ੀਬੂਤੀ // [1F1E9 1F1EF] DJ +🇩🇰 ਡੈਨਮਾਰਕ // [1F1E9 1F1F0] DK +🇩🇲 ਡੋਮੀਨਿਕਾ // [1F1E9 1F1F2] DM +🇩🇴 ਡੋਮੀਨਿਕਾਈ ਗਣਰਾਜ // [1F1E9 1F1F4] DO +🇩🇿 ਅਲਜੀਰੀਆ // [1F1E9 1F1FF] DZ +🇪🇦 ਸਿਓਟਾ ਅਤੇ ਮੇਲਿੱਲਾ // [1F1EA 1F1E6] EA +🇪🇨 ਇਕਵੇਡੋਰ // [1F1EA 1F1E8] EC +🇪🇪 ਇਸਟੋਨੀਆ // [1F1EA 1F1EA] EE +🇪🇬 ਮਿਸਰ // [1F1EA 1F1EC] EG +🇪🇭 ਪੱਛਮੀ ਸਹਾਰਾ // [1F1EA 1F1ED] EH +🇪🇷 ਇਰੀਟ੍ਰਿਆ // [1F1EA 1F1F7] ER +🇪🇸 ਸਪੇਨ // [1F1EA 1F1F8] ES +🇪🇹 ਇਥੋਪੀਆ // [1F1EA 1F1F9] ET +🇪🇺 ਯੂਰਪੀ ਸੰਘ // [1F1EA 1F1FA] EU +🇫🇮 ਫਿਨਲੈਂਡ // [1F1EB 1F1EE] FI +🇫🇯 ਫ਼ਿਜੀ // [1F1EB 1F1EF] FJ +🇫🇰 ਫ਼ਾਕਲੈਂਡ ਟਾਪੂ // [1F1EB 1F1F0] FI +🇫🇲 ਮਾਇਕ੍ਰੋਨੇਸ਼ੀਆ // [1F1EB 1F1F2] FM +🇫🇴 ਫੈਰੋ ਟਾਪੂ // [1F1EB 1F1F4] FO +🇫🇷 ਫ਼ਰਾਂਸ // [1F1EB 1F1F7] FR +🇬🇦 ਗਬੋਨ // [1F1EC 1F1E6] GA +🇬🇧 ਯੂਨਾਈਟਡ ਕਿੰਗਡਮ // [1F1EC 1F1E7] GB +🇬🇩 ਗ੍ਰੇਨਾਡਾ // [1F1EC 1F1E9] GD +🇬🇪 ਜਾਰਜੀਆ // [1F1EC 1F1EA] GE +🇬🇫 ਫਰੈਂਚ ਗੁਇਆਨਾ // [1F1EC 1F1EB] GF +🇬🇬 ਗਰਨਜੀ // [1F1EC 1F1EC] GG +🇬🇭 ਘਾਨਾ // [1F1EC 1F1ED] GH +🇬🇮 ਜਿਬਰਾਲਟਰ // [1F1EC 1F1EE] GI +🇬🇱 ਗ੍ਰੀਨਲੈਂਡ // [1F1EC 1F1F1] GL +🇬🇲 ਗੈਂਬੀਆ // [1F1EC 1F1F2] GM +🇬🇳 ਗਿਨੀ // [1F1EC 1F1F3] GN +🇬🇵 ਗੁਆਡੇਲੋਪ // [1F1EC 1F1F5] GP +🇬🇶 ਭੂ-ਖੰਡੀ ਗਿਨੀ // [1F1EC 1F1F6] GQ +🇬🇷 ਗ੍ਰੀਸ // [1F1EC 1F1F7] GR +🇬🇸 ਦੱਖਣੀ ਜਾਰਜੀਆ ਅਤੇ ਦੱਖਣੀ ਸੈਂਡਵਿਚ ਟਾਪੂ // [1F1EC 1F1F8] GS +🇬🇹 ਗੁਆਟੇਮਾਲਾ // [1F1EC 1F1F9] GT +🇬🇺 ਗੁਆਮ // [1F1EC 1F1FA] GU +🇬🇼 ਗਿਨੀ-ਬਿਸਾਉ // [1F1EC 1F1FC] GW +🇬🇾 ਗੁਯਾਨਾ // [1F1EC 1F1FE] GY +🇭🇰 ਹਾਂਗ ਕਾਂਗ ਐਸਏਆਰ ਚੀਨ // [1F1ED 1F1F0] HK +🇭🇲 ਹਰਡ ਤੇ ਮੈਕਡੋਨਾਲਡ ਟਾਪੂ // [1F1ED 1F1F2] HM +🇭🇳 ਹੋਂਡੁਰਸ // [1F1ED 1F1F3] HN +🇭🇷 ਕਰੋਏਸ਼ੀਆ // [1F1ED 1F1F7] HR +🇭🇹 ਹੈਤੀ // [1F1ED 1F1F9] HT +🇭🇺 ਹੰਗਰੀ // [1F1ED 1F1FA] HU +🇮🇨 ਕੇਨਾਰੀ ਟਾਪੂ // [1F1EE 1F1E8] IC +🇮🇩 ਇੰਡੋਨੇਸ਼ੀਆ // [1F1EE 1F1E9] ID +🇮🇪 ਆਇਰਲੈਂਡ // [1F1EE 1F1EA] IE +🇮🇱 ਇਜ਼ਰਾਈਲ // [1F1EE 1F1F1] IL +🇮🇲 ਆਇਲ ਆਫ ਮੈਨ // [1F1EE 1F1F2] IM +🇮🇳 ਭਾਰਤ // [1F1EE 1F1F3] IN +🇮🇴 ਬਰਤਾਨਵੀ ਹਿੰਦ ਮਹਾਂਸਾਗਰ ਖਿੱਤਾ // [1F1EE 1F1F4] IO +🇮🇶 ਇਰਾਕ // [1F1EE 1F1F6] IQ +🇮🇷 ਈਰਾਨ // [1F1EE 1F1F7] IR +🇮🇸 ਆਈਸਲੈਂਡ // [1F1EE 1F1F8] IS +🇮🇹 ਇਟਲੀ // [1F1EE 1F1F9] IT +🇯🇪 ਜਰਸੀ // [1F1EF 1F1EA] JE +🇯🇲 ਜਮਾਇਕਾ // [1F1EF 1F1F2] JM +🇯🇴 ਜਾਰਡਨ // [1F1EF 1F1F4] JO +🇯🇵 ਜਪਾਨ // [1F1EF 1F1F5] JP +🇰🇪 ਕੀਨੀਆ // [1F1F0 1F1EA] KE +🇰🇬 ਕਿਰਗਿਜ਼ਸਤਾਨ // [1F1F0 1F1EC] KG +🇰🇭 ਕੰਬੋਡੀਆ // [1F1F0 1F1ED] KH +🇰🇮 ਕਿਰਬਾਤੀ // [1F1F0 1F1EE] KI +🇰🇲 ਕੋਮੋਰੋਸ // [1F1F0 1F1F2] KM +🇰🇳 ਸੇਂਟ ਕਿਟਸ ਐਂਡ ਨੇਵਿਸ // [1F1F0 1F1F3] KN +🇰🇵 ਉੱਤਰ ਕੋਰੀਆ // [1F1F0 1F1F5] KP +🇰🇷 ਦੱਖਣ ਕੋਰੀਆ // [1F1F0 1F1F7] KR +🇰🇼 ਕੁਵੈਤ // [1F1F0 1F1FC] KW +🇰🇾 ਕੇਮੈਨ ਟਾਪੂ // [1F1F0 1F1FE] KY +🇰🇿 ਕਜ਼ਾਖਸਤਾਨ // [1F1F0 1F1FF] KZ +🇱🇦 ਲਾਓਸ // [1F1F1 1F1E6] LA +🇱🇧 ਲੈਬਨਾਨ // [1F1F1 1F1E7] LB +🇱🇨 ਸੇਂਟ ਲੂਸੀਆ // [1F1F1 1F1E8] LC +🇱🇮 ਲਿਚੇਂਸਟਾਇਨ // [1F1F1 1F1EE] LI +🇱🇰 ਸ੍ਰੀ ਲੰਕਾ // [1F1F1 1F1F0] LK +🇱🇷 ਲਾਈਬੀਰੀਆ // [1F1F1 1F1F7] LR +🇱🇸 ਲੇਸੋਥੋ // [1F1F1 1F1F8] LS +🇱🇹 ਲਿਥੁਆਨੀਆ // [1F1F1 1F1F9] LT +🇱🇺 ਲਕਜ਼ਮਬਰਗ // [1F1F1 1F1FA] LU +🇱🇻 ਲਾਤਵੀਆ // [1F1F1 1F1FB] LV +🇱🇾 ਲੀਬੀਆ // [1F1F1 1F1FE] LY +🇲🇦 ਮੋਰੱਕੋ // [1F1F2 1F1E6] MA +🇲🇨 ਮੋਨਾਕੋ // [1F1F2 1F1E8] MC +🇲🇩 ਮੋਲਡੋਵਾ // [1F1F2 1F1E9] MD +🇲🇪 ਮੋਂਟੇਨੇਗਰੋ // [1F1F2 1F1EA] ME +🇲🇫 ਸੇਂਟ ਮਾਰਟਿਨ // [1F1F2 1F1EB] MF +🇲🇬 ਮੈਡਾਗਾਸਕਰ // [1F1F2 1F1EC] MG +🇲🇭 ਮਾਰਸ਼ਲ ਟਾਪੂ // [1F1F2 1F1ED] MH +🇲🇰 ਮੈਕਡੋਨੀਆ // [1F1F2 1F1F0] MK +🇲🇱 ਮਾਲੀ // [1F1F2 1F1F1] ML +🇲🇲 ਮਿਆਂਮਾਰ (ਬਰਮਾ) // [1F1F2 1F1F2] MM +🇲🇳 ਮੰਗੋਲੀਆ // [1F1F2 1F1F3] MN +🇲🇴 ਮਕਾਉ ਐਸਏਆਰ ਚੀਨ // [1F1F2 1F1F4] MO +🇲🇵 ਉੱਤਰੀ ਮਾਰੀਆਨਾ ਟਾਪੂ // [1F1F2 1F1F5] MP +🇲🇶 ਮਾਰਟੀਨਿਕ // [1F1F2 1F1F6] MQ +🇲🇷 ਮੋਰਿਟਾਨੀਆ // [1F1F2 1F1F7] MR +🇲🇸 ਮੋਂਟਸੇਰਾਤ // [1F1F2 1F1F8] MS +🇲🇹 ਮਾਲਟਾ // [1F1F2 1F1F9] MT +🇲🇺 ਮੌਰਿਸ਼ਸ // [1F1F2 1F1FA] MU +🇲🇻 ਮਾਲਦੀਵ // [1F1F2 1F1FB] MV +🇲🇼 ਮਲਾਵੀ // [1F1F2 1F1FC] MW +🇲🇽 ਮੈਕਸੀਕੋ // [1F1F2 1F1FD] MX +🇲🇾 ਮਲੇਸ਼ੀਆ // [1F1F2 1F1FE] MY +🇲🇿 ਮੋਜ਼ਾਮਬੀਕ // [1F1F2 1F1FF] MZ +🇳🇦 ਨਾਮੀਬੀਆ // [1F1F3 1F1E6] NA +🇳🇨 ਨਿਊ ਕੈਲੇਡੋਨੀਆ // [1F1F3 1F1E8] NC +🇳🇪 ਨਾਈਜਰ // [1F1F3 1F1EA] NE +🇳🇫 ਨੋਰਫੌਕ ਟਾਪੂ // [1F1F3 1F1EB] NF +🇳🇬 ਨਾਈਜੀਰੀਆ // [1F1F3 1F1EC] NG +🇳🇮 ਨਿਕਾਰਾਗੁਆ // [1F1F3 1F1EE] NI +🇳🇱 ਨੀਦਰਲੈਂਡ // [1F1F3 1F1F1] NL +🇳🇴 ਨਾਰਵੇ // [1F1F3 1F1F4] NO +🇳🇵 ਨੇਪਾਲ // [1F1F3 1F1F5] NP +🇳🇷 ਨਾਉਰੂ // [1F1F3 1F1F7] NR +🇳🇺 ਨਿਯੂ // [1F1F3 1F1FA] NU +🇳🇿 ਨਿਊਜ਼ੀਲੈਂਡ // [1F1F3 1F1FF] NZ +🇴🇲 ਓਮਾਨ // [1F1F4 1F1F2] OM +🇵🇦 ਪਨਾਮਾ // [1F1F5 1F1E6] PA +🇵🇪 ਪੇਰੂ // [1F1F5 1F1EA] PE +🇵🇫 ਫਰੈਂਚ ਪੋਲੀਨੇਸ਼ੀਆ // [1F1F5 1F1EB] PF +🇵🇬 ਪਾਪੂਆ ਨਿਊ ਗਿਨੀ // [1F1F5 1F1EC] PG +🇵🇭 ਫਿਲੀਪੀਨਜ // [1F1F5 1F1ED] PH +🇵🇰 ਪਾਕਿਸਤਾਨ // [1F1F5 1F1F0] PK +🇵🇱 ਪੋਲੈਂਡ // [1F1F5 1F1F1] PL +🇵🇲 ਸੇਂਟ ਪੀਅਰੇ ਐਂਡ ਮਿਕੇਲਨ // [1F1F5 1F1F2] PM +🇵🇳 ਪਿਟਕੇਰਨ ਟਾਪੂ // [1F1F5 1F1F3] PN +🇵🇷 ਪਿਊਰਟੋ ਰਿਕੋ // [1F1F5 1F1F7] PR +🇵🇸 ਫਿਲੀਸਤੀਨੀ ਇਲਾਕਾ // [1F1F5 1F1F8] PS +🇵🇹 ਪੁਰਤਗਾਲ // [1F1F5 1F1F9] PT +🇵🇼 ਪਲਾਉ // [1F1F5 1F1FC] PW +🇵🇾 ਪੈਰਾਗਵੇ // [1F1F5 1F1FE] PY +🇶🇦 ਕਤਰ // [1F1F6 1F1E6] QA +🇷🇪 ਰਿਯੂਨੀਅਨ // [1F1F7 1F1EA] RE +🇷🇴 ਰੋਮਾਨੀਆ // [1F1F7 1F1F4] RO +🇷🇸 ਸਰਬੀਆ // [1F1F7 1F1F8] RS +🇷🇺 ਰੂਸ // [1F1F7 1F1FA] RU +🇷🇼 ਰਵਾਂਡਾ // [1F1F7 1F1FC] RW +🇸🇦 ਸਾਊਦੀ ਅਰਬ // [1F1F8 1F1E6] SA +🇸🇧 ਸੋਲੋਮਨ ਟਾਪੂ // [1F1F8 1F1E7] SB +🇸🇨 ਸੇਸ਼ਲਸ // [1F1F8 1F1E8] SC +🇸🇩 ਸੂਡਾਨ // [1F1F8 1F1E9] SD +🇸🇪 ਸਵੀਡਨ // [1F1F8 1F1EA] SE +🇸🇬 ਸਿੰਗਾਪੁਰ // [1F1F8 1F1EC] SG +🇸🇭 ਸੇਂਟ ਹੇਲੇਨਾ // [1F1F8 1F1ED] SH +🇸🇮 ਸਲੋਵੇਨੀਆ // [1F1F8 1F1EE] SI +🇸🇯 ਸਵਾਲਬਰਡ ਅਤੇ ਜਾਨ ਮਾਯੇਨ // [1F1F8 1F1EF] SJ +🇸🇰 ਸਲੋਵਾਕੀਆ // [1F1F8 1F1F0] SK +🇸🇱 ਸਿਏਰਾ ਲਿਓਨ // [1F1F8 1F1F1] SL +🇸🇲 ਸੈਨ ਮਰੀਨੋ // [1F1F8 1F1F2] SM +🇸🇳 ਸੇਨੇਗਲ // [1F1F8 1F1F3] SN +🇸🇴 ਸੋਮਾਲੀਆ // [1F1F8 1F1F4] SO +🇸🇷 ਸੂਰੀਨਾਮ // [1F1F8 1F1F7] SR +🇸🇸 ਦੱਖਣ ਸੁਡਾਨ // [1F1F8 1F1F8] SS +🇸🇹 ਸਾਓ ਟੋਮ ਅਤੇ ਪ੍ਰਿੰਸੀਪੇ // [1F1F8 1F1F9] ST +🇸🇻 ਅਲ ਸਲਵਾਡੋਰ // [1F1F8 1F1FB] SV +🇸🇽 ਸਿੰਟ ਮਾਰਟੀਨ // [1F1F8 1F1FD] SX +🇸🇾 ਸੀਰੀਆ // [1F1F8 1F1FE] SY +🇸🇿 ਸਵਾਜ਼ੀਲੈਂਡ // [1F1F8 1F1FF] SZ +🇹🇦 ਟ੍ਰਿਸਟਾਨ ਦਾ ਕੁੰਹਾ // [1F1F9 1F1E6] TA +🇹🇨 ਟੁਰਕਸ ਅਤੇ ਕੈਕੋਸ ਟਾਪੂ // [1F1F9 1F1E8] TC +🇹🇩 ਚਾਡ // [1F1F9 1F1E9] TD +🇹🇫 ਫਰੈਂਚ ਦੱਖਣੀ ਪ੍ਰਦੇਸ਼ // [1F1F9 1F1EB] TF +🇹🇬 ਟੋਗੋ // [1F1F9 1F1EC] TG +🇹🇭 ਥਾਈਲੈਂਡ // [1F1F9 1F1ED] TH +🇹🇯 ਤਾਜਿਕਿਸਤਾਨ // [1F1F9 1F1EF] TJ +🇹🇰 ਟੋਕੇਲਾਉ // [1F1F9 1F1F0] TK +🇹🇱 ਤਿਮੋਰ-ਲੇਸਤੇ // [1F1F9 1F1F1] TL +🇹🇲 ਤੁਰਕਮੇਨਿਸਤਾਨ // [1F1F9 1F1F2] TM +🇹🇳 ਟਿਊਨੀਸ਼ੀਆ // [1F1F9 1F1F3] TN +🇹🇴 ਟੌਂਗਾ // [1F1F9 1F1F4] TO +🇹🇷 ਤੁਰਕੀ // [1F1F9 1F1F7] TR +🇹🇹 ਟ੍ਰਿਨੀਡਾਡ ਅਤੇ ਟੋਬਾਗੋ // [1F1F9 1F1F9] TT +🇹🇻 ਟੁਵਾਲੂ // [1F1F9 1F1FB] TV +🇹🇼 ਤਾਇਵਾਨ // [1F1F9 1F1FC] TW +🇹🇿 ਤਨਜ਼ਾਨੀਆ // [1F1F9 1F1FF] TZ +🇺🇦 ਯੂਕਰੇਨ // [1F1FA 1F1E6] UA +🇺🇬 ਯੂਗਾਂਡਾ // [1F1FA 1F1EC] UG +🇺🇲 ਯੂ.ਐੱਸ. ਦੂਰ-ਦੁਰਾਡੇ ਟਾਪੂ // [1F1FA 1F1F2] UM +🇺🇳 ਸੰਯੁਕਤ ਰਾਸ਼ਟਰ // [1F1FA 1F1F3] UN +🇺🇸 ਸੰਯੁਕਤ ਰਾਜ // [1F1FA 1F1F8] US +🇺🇾 ਉਰੂਗਵੇ // [1F1FA 1F1FE] UY +🇺🇿 ਉਜ਼ਬੇਕਿਸਤਾਨ // [1F1FA 1F1FF] UZ +🇻🇦 ਵੈਟੀਕਨ ਸਿਟੀ // [1F1FB 1F1E6] VA +🇻🇨 ਸੇਂਟ ਵਿਨਸੈਂਟ ਐਂਡ ਗ੍ਰੇਨਾਡੀਨਸ // [1F1FB 1F1E8] VC +🇻🇪 ਵੇਨੇਜ਼ੂਏਲਾ // [1F1FB 1F1EA] VE +🇻🇬 ਬ੍ਰਿਟਿਸ਼ ਵਰਜਿਨ ਟਾਪੂ // [1F1FB 1F1EC] VG +🇻🇮 ਯੂ ਐੱਸ ਵਰਜਿਨ ਟਾਪੂ // [1F1FB 1F1EE] VI +🇻🇳 ਵੀਅਤਨਾਮ // [1F1FB 1F1F3] VN +🇻🇺 ਵਾਨੂਆਟੂ // [1F1FB 1F1FA] VU +🇼🇫 ਵਾਲਿਸ ਅਤੇ ਫੂਟੂਨਾ // [1F1FC 1F1EB] WF +🇼🇸 ਸਾਮੋਆ // [1F1FC 1F1F8] WS +🇽🇰 ਕੋਸੋਵੋ // [1F1FD 1F1F0] XK +🇾🇪 ਯਮਨ // [1F1FE 1F1EA] YE +🇾🇹 ਮਾਯੋਟੀ // [1F1FE 1F1F9] YT +🇿🇦 ਦੱਖਣ ਅਫਰੀਕਾ // [1F1FF 1F1E6] ZA +🇿🇲 ਜ਼ਾਮਬੀਆ // [1F1FF 1F1F2] ZM +🇿🇼 ਜ਼ਿੰਬਾਬਵੇ // [1F1FF 1F1FC] ZW + +// Subdivision Flags -- ISO 3166-2 Subdivision Codes + +🏴󠁧󠁢󠁥󠁮󠁧󠁿 england // [1F3F4 E0067 E0062 E0065 E006E E0067 E007F] (no translation) +🏴󠁧󠁢󠁳󠁣󠁴󠁿 scotland // [1F3F4 E0067 E0062 E0073 E0063 E0074 E007F] (no translation) +🏴󠁧󠁢󠁷󠁬󠁳󠁿 wales // [1F3F4 E0067 E0062 E0077 E006C E0073 E007F] (no translation) + +// Keycaps (NOTE: keycap 10 is a single Unicode codepoint) + +#️⃣ ਕੀਕੈਪ ਨੰਬਰ // [0023 FE0F 20E3] +*️⃣ ਕੀਕੈਪ ਤਾਰਾ // [002A FE0F 20E3] +0️⃣ ਕੀਕੈਪ ਅੰਕ ਸਿਫ਼ਰ // [0030 FE0F 20E3] +1️⃣ ਕੀਕੈਪ ਅੰੰਕ ਇੱਕ // [0031 FE0F 20E3] +2️⃣ ਕੀਕੈਪ ਅੰਕ ਦੋ // [0032 FE0F 20E3] +3️⃣ ਕੀਕੈਪ ਅੰਕ ਤਿੰਨ // [0033 FE0F 20E3] +4️⃣ ਕੀਕੈਪ ਅੰਕ ਚਾਰ // [0034 FE0F 20E3] +5️⃣ ਕੀਕੈਪ ਅੰਕ ਪੰਜ // [0035 FE0F 20E3] +6️⃣ ਕੀਕੈਪ ਅੰਕ ਛੇ // [0036 FE0F 20E3] +7️⃣ ਕੀਕੈਪ ਅੰਕ ਸੱਤ // [0037 FE0F 20E3] +8️⃣ ਕੀਕੈਪ ਅੰਕ ਅੱਠ // [0038 FE0F 20E3] +9️⃣ ਕੀਕੈਪ ਅੰਕ ਨੌ // [0039 FE0F 20E3] + +// Emoji ZWJ Sequence: Family + +👩‍❤‍💋‍👨 ਚੁੰਮੀ: ਔਰਤ, ਆਦਮੀ // [1F469 200D 2764 200D 1F48B 200D 1F468] +👨‍❤‍💋‍👨 ਚੁੰਮੀ: ਆਦਮੀ, ਆਦਮੀ // [1F468 200D 2764 200D 1F48B 200D 1F468] +👩‍❤‍💋‍👩 ਚੁੰਮੀ: ਔਰਤ, ਔਰਤ // [1F469 200D 2764 200D 1F48B 200D 1F469] +👩‍❤‍👨 ਦਿਲ ਨਾਲ ਪ੍ਰੇਮੀ ਜੋੜਾ: ਔਰਤ, ਆਦਮੀ // [1F469 200D 2764 200D 1F468] +👨‍❤‍👨 ਦਿਲ ਨਾਲ ਪ੍ਰੇਮੀ ਜੋੜਾ: ਆਦਮੀ, ਆਦਮੀ // [1F468 200D 2764 200D 1F468] +👩‍❤‍👩 ਦਿਲ ਨਾਲ ਪ੍ਰੇਮੀ ਜੋੜਾ: ਔਰਤ, ਔਰਤ // [1F469 200D 2764 200D 1F469] +👨‍👩‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਔਰਤ, ਮੁੰਡਾ // [1F468 200D 1F469 200D 1F466] +👨‍👩‍👧 ਪਰਿਵਾਰ: ਆਦਮੀ, ਔਰਤ, ਕੁੜੀ // [1F468 200D 1F469 200D 1F467] +👨‍👩‍👧‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਔਰਤ, ਕੁੜੀ, ਮੁੰਡਾ // [1F468 200D 1F469 200D 1F467 200D 1F466] +👨‍👩‍👦‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਔਰਤ, ਮੁੰਡਾ, ਮੁੰਡਾ // [1F468 200D 1F469 200D 1F466 200D 1F466] +👨‍👩‍👧‍👧 ਪਰਿਵਾਰ: ਆਦਮੀ, ਔਰਤ, ਕੁੜੀ, ਕੁੜੀ // [1F468 200D 1F469 200D 1F467 200D 1F467] +👨‍👨‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਆਦਮੀ, ਮੁੰਡਾ // [1F468 200D 1F468 200D 1F466] +👨‍👨‍👧 ਪਰਿਵਾਰ: ਆਦਮੀ, ਆਦਮੀ, ਕੁੜੀ // [1F468 200D 1F468 200D 1F467] +👨‍👨‍👧‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਆਦਮੀ, ਕੁੜੀ, ਮੁੰਡਾ // [1F468 200D 1F468 200D 1F467 200D 1F466] +👨‍👨‍👦‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਆਦਮੀ, ਮੁੰਡਾ, ਮੁੰਡਾ // [1F468 200D 1F468 200D 1F466 200D 1F466] +👨‍👨‍👧‍👧 ਪਰਿਵਾਰ: ਆਦਮੀ, ਆਦਮੀ, ਕੁੜੀ, ਕੁੜੀ // [1F468 200D 1F468 200D 1F467 200D 1F467] +👩‍👩‍👦 ਪਰਿਵਾਰ: ਔਰਤ, ਔਰਤ, ਮੁੰਡਾ // [1F469 200D 1F469 200D 1F466] +👩‍👩‍👧 ਪਰਿਵਾਰ: ਔਰਤ, ਔਰਤ, ਕੁੜੀ // [1F469 200D 1F469 200D 1F467] +👩‍👩‍👧‍👦 ਪਰਿਵਾਰ: ਔਰਤ, ਔਰਤ, ਕੁੜੀ, ਮੁੰਡਾ // [1F469 200D 1F469 200D 1F467 200D 1F466] +👩‍👩‍👦‍👦 ਪਰਿਵਾਰ: ਔਰਤ, ਔਰਤ, ਮੁੰਡਾ, ਮੁੰਡਾ // [1F469 200D 1F469 200D 1F466 200D 1F466] +👩‍👩‍👧‍👧 ਪਰਿਵਾਰ: ਔਰਤ, ਔਰਤ, ਕੁੜੀ, ਕੁੜੀ // [1F469 200D 1F469 200D 1F467 200D 1F467] +👨‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਮੁੰਡਾ // [1F468 200D 1F466] +👨‍👦‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਮੁੰਡਾ, ਮੁੰਡਾ // [1F468 200D 1F466 200D 1F466] +👨‍👧 ਪਰਿਵਾਰ: ਆਦਮੀ, ਕੁੜੀ // [1F468 200D 1F467] +👨‍👧‍👦 ਪਰਿਵਾਰ: ਆਦਮੀ, ਕੁੜੀ, ਮੁੰਡਾ // [1F468 200D 1F467 200D 1F466] +👨‍👧‍👧 ਪਰਿਵਾਰ: ਆਦਮੀ, ਕੁੜੀ, ਕੁੜੀ // [1F468 200D 1F467 200D 1F467] +👩‍👦 ਪਰਿਵਾਰ: ਔਰਤ, ਮੁੰਡਾ // [1F469 200D 1F466] +👩‍👦‍👦 ਪਰਿਵਾਰ: ਔਰਤ, ਮੁੰਡਾ, ਮੁੰਡਾ // [1F469 200D 1F466 200D 1F466] +👩‍👧 ਪਰਿਵਾਰ: ਔਰਤ, ਕੁੜੀ // [1F469 200D 1F467] +👩‍👧‍👦 ਪਰਿਵਾਰ: ਔਰਤ, ਕੁੜੀ, ਮੁੰਡਾ // [1F469 200D 1F467 200D 1F466] +👩‍👧‍👧 ਪਰਿਵਾਰ: ਔਰਤ, ਕੁੜੀ, ਕੁੜੀ // [1F469 200D 1F467 200D 1F467] + +// Emoji ZWJ Sequence: Gendered Role, with object + +👨‍⚕ ਪੁਰਸ਼ ਸਿਹਤ ਵਰਕਰ // [1F468 200D 2695] +👩‍⚕ ਇਸਤਰੀ ਸਿਹਤ ਵਰਕਰ // [1F469 200D 2695] +👨‍⚖ ਜੱਜ ਸਾਹਬ // [1F468 200D 2696] +👩‍⚖ ਜੱਜ ਸਾਹਿਬਾ // [1F469 200D 2696] +👨‍✈ ਪਾਇਲਟ // [1F468 200D 2708] +👩‍✈ ਇਸਤਰੀ ਪਾਇਲਟ // [1F469 200D 2708] +👨‍🌾 ਪੁਰਸ਼ ਕਿਸਾਨ // [1F468 200D 1F33E] +👩‍🌾 ਇਸਤਰੀ ਕਿਸਾਨ // [1F469 200D 1F33E] +👨‍🍳 ਰਸੋਈਆ // [1F468 200D 1F373] +👩‍🍳 ਇਸਤਰੀ ਰਸੋਈਆ // [1F469 200D 1F373] +👨‍🎓 ਵਿਦਿਆਰਥੀ // [1F468 200D 1F393] +👩‍🎓 ਵਿਦਿਆਰਥਣ // [1F469 200D 1F393] +👨‍🎤 ਗਾਇਕ // [1F468 200D 1F3A4] +👩‍🎤 ਗਾਇਕਾ // [1F469 200D 1F3A4] +👨‍🎨 ਕਲਾਕਾਰ // [1F468 200D 1F3A8] +👩‍🎨 ਇਸਤਰੀ ਕਲਾਕਾਰ // [1F469 200D 1F3A8] +👨‍🏫 ਅਧਿਆਪਕ // [1F468 200D 1F3EB] +👩‍🏫 ਅਧਿਆਪਕਾ // [1F469 200D 1F3EB] +👨‍🏭 ਪੁਰਸ਼ ਫੈਕਟਰੀ ਵਰਕਰ // [1F468 200D 1F3ED] +👩‍🏭 ਇਸਤਰੀ ਫੈਕਟਰੀ ਵਰਕਰ // [1F469 200D 1F3ED] +👨‍💻 ਪੁਰਸ਼ ਤਕਨਾਲੋਜਿਸਟ // [1F468 200D 1F4BB] +👩‍💻 ਇਸਤਰੀ ਤਕਨਾਲੋਜਿਸਟ // [1F469 200D 1F4BB] +👨‍💼 ਪੁਰਸ਼ ਆਫਿਸ ਵਰਕਰ // [1F468 200D 1F4BC] +👩‍💼 ਇਸਤਰੀ ਆਫਿਸ ਵਰਕਰ // [1F469 200D 1F4BC] +👨‍🔧 ਮਕੈਨਿਕ // [1F468 200D 1F527] +👩‍🔧 ਇਸਤਰੀ ਮਕੈਨਿਕ // [1F469 200D 1F527] +👨‍🔬 ਪੁਰਸ਼ ਵਿਗਿਆਨੀ // [1F468 200D 1F52C] +👩‍🔬 ਇਸਤਰੀ ਵਿਗਿਆਨੀ // [1F469 200D 1F52C] +👨‍🚀 ਪੁਰਸ਼ ਪੁਲਾੜ ਯਾਤਰੀ // [1F468 200D 1F680] +👩‍🚀 ਔਰਤ ਪੁਲਾੜ ਯਾਤਰੀ // [1F469 200D 1F680] +👨‍🚒 ਪੁਰਸ਼ ਫਾਇਰਫਾਈਟਰ // [1F468 200D 1F692] +👩‍🚒 ਇਸਤਰੀ ਫਾਇਰਫਾਈਟਰ // [1F469 200D 1F692] + +// Emoji ZWJ Sequence: Gendered Role + +👮‍♀ ਇਸਤਰੀ ਪੁਲਿਸ ਅਫਸਰ // [1F46E 200D 2640] +👮‍♂ ਪੁਰਸ਼ ਪੁਲਿਸ ਅਫਸਰ // [1F46E 200D 2642] +👱‍♀ ਕੱਕੇ ਵਾਲਾਂ ਵਾਲੀ ਇਸਤਰੀ // [1F471 200D 2640] +👱‍♂ ਕੱਕੇ ਵਾਲਾਂ ਵਾਲਾ ਪੁਰਸ਼ // [1F471 200D 2642] +👳‍♀ ਪਗੜੀਧਾਰੀ ਇਸਤਰੀ // [1F473 200D 2640] +👳‍♂ ਪਗੜੀਧਾਰੀ ਪੁਰਸ਼ // [1F473 200D 2642] +👷‍♀ ਇਸਤਰੀ ਉਸਾਰੀ ਵਰਕਰ // [1F477 200D 2640] +👷‍♂ ਪੁਰਸ਼ ਉਸਾਰੀ ਵਰਕਰ // [1F477 200D 2642] +💂‍♀ ਇਸਤਰੀ ਗਾਰਡ // [1F482 200D 2640] +💂‍♂ ਪੁਰਸ਼ ਗਾਰਡ // [1F482 200D 2642] +🕵️‍♀ ਇਸਤਰੀ ਜਸੂਸ // [1F575 200D 2640] +🕵️‍♂ ਪੁਰਸ਼ ਜਸੂਸ // [1F575 200D 2642] +🧙‍♀ woman mage // [1F9D9 200D 2640] (no translation) +🧙‍♂ man mage // [1F9D9 200D 2642] (no translation) +🧚‍♀ woman fairy // [1F9DA 200D 2640] (no translation) +🧚‍♂ man fairy // [1F9DA 200D 2642] (no translation) +🧛‍♀ woman vampire // [1F9DB 200D 2640] (no translation) +🧛‍♂ man vampire // [1F9DB 200D 2642] (no translation) +🧜‍♀ mermaid // [1F9DC 200D 2640] (no translation) +🧜‍♂ merman // [1F9DC 200D 2642] (no translation) +🧝‍♀ woman elf // [1F9DD 200D 2640] (no translation) +🧝‍♂ man elf // [1F9DD 200D 2642] (no translation) +🧞‍♀ woman genie // [1F9DE 200D 2640] (no translation) +🧞‍♂ man genie // [1F9DE 200D 2642] (no translation) +🧟‍♀ woman zombie // [1F9DF 200D 2640] (no translation) +🧟‍♂ man zombie // [1F9DF 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Activity + +⛹‍♀ ਗੇਂਦ ਦੇ ਨਾਲ ਇਸਤਰੀ // [26F9 200D 2640] +⛹‍♂ ਗੇਂਦ ਦੇ ਨਾਲ ਪੁਰਸ਼ // [26F9 200D 2642] +🏃‍♀ ਦੌੜਦੀ ਇਸਤਰੀ // [1F3C3 200D 2640] +🏃‍♂ ਦੌੜਦਾ ਪੁਰਸ਼ // [1F3C3 200D 2642] +🏄‍♀ ਸਰਫਿੰਗ ਕਰਦੀ ਇਸਤਰੀ // [1F3C4 200D 2640] +🏄‍♂ ਸਰਫਿੰਗ ਕਰਦਾ ਪੁਰਸ਼ // [1F3C4 200D 2642] +🏊‍♀ ਤੈਰਦੀ ਇਸਤਰੀ // [1F3CA 200D 2640] +🏊‍♂ ਤੈਰਦਾ ਪੁਰਸ਼ // [1F3CA 200D 2642] +🏋️‍♀ ਭਾਰ ਚੁੱਕਦੀ ਇਸਤਰੀ // [1F3CB 200D 2640] +🏋️‍♂ ਭਾਰ ਚੁੱਕਦਾ ਆਦਮੀ // [1F3CB 200D 2642] +🏌️‍♀ ਗੋਲਫ ਖੇਡਦੀ ਇਸਤਰੀ // [1F3CC 200D 2640] +🏌️‍♂ ਗੋਲਫ ਖੇਡਦਾ ਪੁਰਸ਼ // [1F3CC 200D 2642] +👯‍♀ ਜਸ਼ਨ ਮਨਾਉਂਦੀਆਂ ਇਸਤਰੀਆਂ // [1F46F 200D 2640] +👯‍♂ ਜਸ਼ਨ ਮਨਾਉਂਦੇ ਪੁਰਸ਼ // [1F46F 200D 2642] +💆‍♀ ਚਿਹਰੇ ਦੀ ਮਾਲਸ਼ ਕਰਵਾਉਂਦੀ ਇਸਤਰੀ // [1F486 200D 2640] +💆‍♂ ਚਿਹਰੇ ਦੀ ਮਾਲਸ਼ ਕਰਵਾਉਂਦਾ ਪੁਰਸ਼ // [1F486 200D 2642] +💇‍♀ ਵਾਲ ਕਟਵਾਉਂਦੀ ਇਸਤਰੀ // [1F487 200D 2640] +💇‍♂ ਵਾਲ ਕਟਵਾਉਂਦਾ ਪੁਰਸ਼ // [1F487 200D 2642] +🚣‍♀ ਕਿਸ਼ਤੀ ਚਲਾਉਂਦੀ ਇਸਤਰੀ // [1F6A3 200D 2640] +🚣‍♂ ਕਿਸ਼ਤੀ ਚਲਾਉਂਦਾ ਪੁਰਸ਼ // [1F6A3 200D 2642] +🚴‍♀ ਬਾਈਕ ਚਲਾਉਂਦੀ ਇਸਤਰੀ // [1F6B4 200D 2640] +🚴‍♂ ਬਾਈਕ ਚਲਾਉਂਦਾ ਪੁਰਸ਼ // [1F6B4 200D 2642] +🚵‍♀ ਪਹਾੜਾਂ ’ਤੇ ਬਾਈਕ ਚਲਾਉਂਦੀ ਇਸਤਰੀ // [1F6B5 200D 2640] +🚵‍♂ ਪਹਾੜਾਂ ’ਤੇ ਬਾਈਕ ਚਲਾਉਂਦਾ ਪੁਰਸ਼ // [1F6B5 200D 2642] +🚶‍♀ ਪੈਦਲ ਚਲਦੀ ਇਸਤਰੀ // [1F6B6 200D 2640] +🚶‍♂ ਪੈਦਲ ਚਲਦਾ ਪੁਰਸ਼ // [1F6B6 200D 2642] +🤸‍♀ ਕਲਾਬਾਜ਼ੀਆਂ ਲਾਉਂਦੀ ਇਸਤਰੀ // [1F938 200D 2640] +🤸‍♂ ਕਲਾਬਾਜ਼ੀਆਂ ਲਾਉਂਦਾ ਪੁਰਸ਼ // [1F938 200D 2642] +🤹‍♀ ਕਰਤੱਬ ਦਿਖਾਉਂਦੀ ਇਸਤਰੀ // [1F939 200D 2640] +🤹‍♂ ਕਰਤੱਬ ਦਿਖਾਉਂਦਾ ਪੁਰਸ਼ // [1F939 200D 2642] +🤼‍♀ ਕੁਸ਼ਤੀ ਕਰਦੀਆਂ ਇਸਤਰੀਆਂ // [1F93C 200D 2640] +🤼‍♂ ਕੁਸ਼ਤੀ ਕਰਦੇ ਪੁਰਸ਼ // [1F93C 200D 2642] +🤽‍♀ ਵਾਟਰ ਪੋਲੋ ਖੇਡਦੀ ਇਸਤਰੀ // [1F93D 200D 2640] +🤽‍♂ ਵਾਟਰ ਪੋਲੋ ਖੇਡਦਾ ਪੁਰਸ਼ // [1F93D 200D 2642] +🤾‍♀ ਹੈਂਡਬਾਲ ਖੇਡਦੀ ਇਸਤਰੀ // [1F93E 200D 2640] +🤾‍♂ ਹੈਂਡਬਾਲ ਖੇਡਦਾ ਪੁਰਸ਼ // [1F93E 200D 2642] +🧖‍♀ woman in steamy room // [1F9D6 200D 2640] (no translation) +🧖‍♂ man in steamy room // [1F9D6 200D 2642] (no translation) +🧗‍♀ woman climbing // [1F9D7 200D 2640] (no translation) +🧗‍♂ man climbing // [1F9D7 200D 2642] (no translation) +🧘‍♀ woman in lotus position // [1F9D8 200D 2640] (no translation) +🧘‍♂ man in lotus position // [1F9D8 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Gestures + +💁‍♀ ਸੂਚਨਾ ਦਿੰਦੀ ਇਸਤਰੀ // [1F481 200D 2640] +💁‍♂ ਸੂਚਨਾ ਦਿੰਦਾ ਪੁਰਸ਼ // [1F481 200D 2642] +🙅‍♀ ਠੀਕ ਨਹੀਂ ਦਾ ਇਸ਼ਾਰਾ ਕਰਦੀ ਇਸਤਰੀ // [1F645 200D 2640] +🙅‍♂ ਠੀਕ ਨਹੀਂ ਦਾ ਇਸ਼ਾਰਾ ਕਰਦਾ ਪੁਰਸ਼ // [1F645 200D 2642] +🙆‍♀ ਠੀਕ ਹੈ ਦਾ ਇਸ਼ਾਰਾ ਕਰਦੀ ਇਸਤਰੀ // [1F646 200D 2640] +🙆‍♂ ਠੀਕ ਹੈ ਦਾ ਇਸ਼ਾਰਾ ਕਰਦਾ ਪੁਰਸ਼ // [1F646 200D 2642] +🙇‍♀ ਸਿਰ ਝੁਕਾਉਂਦੀ ਇਸਤਰੀ // [1F647 200D 2640] +🙇‍♂ ਸਿਰ ਝੁਕਾਉਂਦਾ ਪੁਰਸ਼ // [1F647 200D 2642] +🙋‍♀ ਹੱਥ ਉਠਾਉਂਦੀ ਇਸਤਰੀ // [1F64B 200D 2640] +🙋‍♂ ਹੱਥ ਉਠਾਉਂਦਾ ਪੁਰਸ਼ // [1F64B 200D 2642] +🙍‍♀ ਤਿਉੜੀ ਚੜ੍ਹਾਉਂਦੀ ਇਸਤਰੀ // [1F64D 200D 2640] +🙍‍♂ ਤਿਉੜੀ ਚੜ੍ਹਾਉਂਦਾ ਪੁਰਸ਼ // [1F64D 200D 2642] +🙎‍♀ ਬੁੱਲ੍ਹ ਕੱਢਦੀ ਇਸਤਰੀ // [1F64E 200D 2640] +🙎‍♂ ਬੁੱਲ੍ਹ ਕੱਢਦਾ ਪੁਰਸ਼ // [1F64E 200D 2642] +🤦‍♀ ਮੱਥੇ ’ਤੇ ਹੱਥ ਰੱਖਦੀ ਇਸਤਰੀ // [1F926 200D 2640] +🤦‍♂ ਮੱਥੇ ’ਤੇ ਹੱਥ ਰੱਖਦਾ ਪੁਰਸ਼ // [1F926 200D 2642] +🤷‍♀ ਮੋਢੇ ਉਚਕਾਉਂਦੀ ਇਸਤਰੀ // [1F937 200D 2640] +🤷‍♂ ਮੋਢੇ ਉਚਕਾਉਂਦਾ ਪੁਰਸ਼ // [1F937 200D 2642] + +// Emoji ZWJ Sequence: Other + +🏳‍🌈 ਸਤਰੰਗੀ ਪੀਂਘ ਝੰਡਾ // [1F3F3 200D 1F308] +👁‍🗨 ਸਪੀਚ ਬਬਲ ਵਿੱਚ ਅੱਖ // [1F441 200D 1F5E8] + +// References: +// [UCD] Unicode Character Database 9.0.0 [http://www.unicode.org/Public/9.0.0/ucd/] +// [Emoji] Unicode Emoji 5.0 [http://www.unicode.org/Public/emoji/5.0/] +// [CLDR] Unicode Common Locale Data Repository 31.0.1 [http://cldr.unicode.org/index/downloads/cldr-31] +// +// Sources: +// 1. emoji-test.txt (Emoji) +// 2. common/annotations/pa.xml (CLDR) +// 3. emoji-zwj-sequences.txt (Emoji) From 2642ba8ed5f419e3eaba8934bcd3ec9baae69e01 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 16 Aug 2017 19:15:42 +0100 Subject: [PATCH 037/137] ml: (emoji) -- CLDR 31.0.1 emoji translations --- CHANGELOG.md | 1 + Makefile.am | 2 +- dictsource/ml_emoji | 1678 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1680 insertions(+), 1 deletion(-) create mode 100644 dictsource/ml_emoji diff --git a/CHANGELOG.md b/CHANGELOG.md index 073eef61..370a3de2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,6 +90,7 @@ Unicode Emoji support (from the Unicode Emoji 5.0, and CLDR 31.0.1 data files): * lt (Lithuanian) * lv (Latvian) * mk (Macedonian) +* ml (Malayalam) * mr (Marathi) * ms (Malay) * nl (Dutch) diff --git a/Makefile.am b/Makefile.am index a70785b9..389785da 100644 --- a/Makefile.am +++ b/Makefile.am @@ -663,7 +663,7 @@ mk: espeak-ng-data/mk_dict espeak-ng-data/mk_dict: dictsource/mk_list dictsource/mk_rules dictsource/mk_extra dictsource/mk_emoji ml: espeak-ng-data/ml_dict -espeak-ng-data/ml_dict: dictsource/ml_list dictsource/ml_rules dictsource/ml_extra +espeak-ng-data/ml_dict: dictsource/ml_list dictsource/ml_rules dictsource/ml_extra dictsource/ml_emoji mr: espeak-ng-data/mr_dict espeak-ng-data/mr_dict: dictsource/mr_list dictsource/mr_rules dictsource/mr_extra dictsource/mr_emoji diff --git a/dictsource/ml_emoji b/dictsource/ml_emoji new file mode 100644 index 00000000..2bc93527 --- /dev/null +++ b/dictsource/ml_emoji @@ -0,0 +1,1678 @@ +// Emoji and Other Symbol pronunciations for Malayalam +// +// Entries with `text|emoji` in the comments have text and emoji forms. They +// can be followed by [FE0E] to select the text style, and [FE0F] to select +// the emoji style. +// +// NOTE: See `src/ucd-tools/data/espeak-ng/emoji-data.txt` for additional data +// in interpreting ZWJ emoji sequences. + +$textmode + +// 0080..00FF : C1 Controls and Latin-1 Supplement + +© പകർപ്പവകാശ ചിഹ്നം // [00A9] text|emoji +® രജിസ്ട്രേഷൻ ചിഹ്നം // [00AE] text|emoji + +// 2000..203C : General Punctuation + +‼ ഇരട്ട ആശ്ചര്യ ചിഹ്നം // [203C] text|emoji +⁉ ആശ്ചര്യ ചോദ്യ ചിഹ്നം // [2049] text|emoji + +// 2100..214F : Letterlike Symbols + +™ ട്രേഡ്‌മാർക്ക് // [2122] text|emoji +ℹ വിവരങ്ങൾ // [2139] text|emoji + +// 2190..21FF : Arrows + +↔ ഇടത്തോട്ടും വലത്തോട്ടുമുള്ള അമ്പടയാളം // [2194] text|emoji +↕ മുകളിലേക്കും താഴേക്കുമുള്ള അമ്പടയാളം // [2195] text|emoji +↖ മുകളിൽ ഇടത്തേക്കുള്ള അമ്പടയാളം // [2196] text|emoji +↗ മുകളിൽ വലത്തേക്കുള്ള അമ്പടയാളം // [2197] text|emoji +↘ താഴോട്ട് വലത്തേക്കുള്ള അമ്പടയാളം // [2198] text|emoji +↙ താഴോട്ട് ഇടത്തേക്കുള്ള അമ്പടയാളം // [2199] text|emoji +↩ വലത്തോട്ട് വളവുള്ള അമ്പടയാളം // [21A9] text|emoji +↪ ഇടത്തോട്ട് വളവുള്ള അമ്പടയാളം // [21AA] text|emoji + +// 2300..23FF : Miscellaneous Technical + +⌚ വാച്ച് // [231A] +⌛ ഹവർ ഗ്ലാസ്സ് // [231B] +⌨ കീബോർഡ് // [2328] text|emoji +⏏ ഇജക്‌റ്റ് ബട്ടൺ // [23CF] text|emoji +⏩ ഫാസ്‌റ്റ് ഫോർവാർഡ് ബട്ടൺ // [23E9] +⏪ ഫാസ്‌റ്റ് റിവേഴ്‌സ് ബട്ടൺ // [23EA] +⏫ വേഗത്തിൽ മുകളിലേക്കുള്ള അമ്പടയാള ബട്ടൺ // [23EB] +⏬ വേഗത്തിൽ താഴേക്കുള്ള അമ്പടയാള ബട്ടൺ // [23EC] +⏭ അടുത്ത പാട്ടിനുള്ള ബട്ടൺ // [23ED] text|emoji +⏮ അവസാനത്തെ പാട്ടിലേക്കുള്ള ബട്ടൺ // [23EE] text|emoji +⏯ പ്ലേ ചെയ്യുക/താൽക്കാലികമായി നിർത്തുക ബട്ടൺ // [23EF] text|emoji +⏰ അലാം ക്ലോക്ക് // [23F0] +⏱ സ്റ്റോപ്പ്‌വാച്ച് // [23F1] text|emoji +⏲ ടൈമർ ക്ലോക്ക് // [23F2] text|emoji +⏳ മണൽത്തരികൾ വീഴുന്ന ഹവർ ഗ്ലാസ്സ് // [23F3] +⏸ താൽക്കാലികമായി നിർത്തുക ബട്ടൺ // [23F8] text|emoji +⏹ നിർത്തുക ബട്ടൺ // [23F9] text|emoji +⏺ റെക്കോർഡ് ബട്ടൺ // [23FA] text|emoji + +// 2460..24FF : Enclosed Alphanumerics + +Ⓜ വൃത്തത്തിലുള്ള M ചിഹ്നം // [24C2] text|emoji + +// 25A0..25FF : Geometric Shapes + +▪ വളരെ ചെറിയ കറുത്ത ചതുരം // [25AA] text|emoji +▫ വളരെ ചെറിയ വെളുത്ത ചതുരം // [25AB] text|emoji +▶ പ്ലേ ബട്ടൺ // [25B6] text|emoji +◀ റിവേഴ്‌സ് ബട്ടൺ // [25C0] text|emoji +◻ വലിയ വെളുത്ത ചതുുരം // [25FB] text|emoji +◼ വലിയ കറുത്തചതുരം // [25FC] text|emoji +◽ ചെറിയ വെളുത്ത ചതുരം // [25FD] +◾ ചെറിയ കറുത്ത ചതുരം // [25FE] + +// 2600..26FF : Miscellaneous Symbols + +☀ സൂര്യൻ // [2600] text|emoji +☁ മേഘം // [2601] text|emoji +☂ കുട // [2602] text|emoji +☃ മഞ്ഞുമനുഷ്യൻ // [2603] text|emoji +☄ ഉൽക്ക // [2604] text|emoji +☎ ടെലിഫോൺ // [260E] text|emoji +☑ ചെക്ക് അടയാളമുള്ള ബാലറ്റ് പെട്ടി // [2611] text|emoji +☔ മഴത്തുള്ളികൾ വീഴുന്ന കുട // [2614] +☕ കാപ്പി // [2615] +☘ ഷാംറോക്ക് // [2618] text|emoji +☝ മുകളിലേക്ക് ചൂണ്ടുന്ന വിരൽ // [261D] text|emoji +☠ അപായം // [2620] text|emoji +☢ റേഡിയോ ആക്‌റ്റീവ് // [2622] text|emoji +☣ ബയോഹസാർഡ് // [2623] text|emoji +☦ ഓർത്തഡോക്‌സ് ക്രോസ് // [2626] text|emoji +☪ ഇസ്ലാമിക ചിഹ്നം // [262A] text|emoji +☮ സമാധാന ചിഹ്നം // [262E] text|emoji +☯ യിൻ യാങ് // [262F] text|emoji +☸ ധർമ്മ ചക്രം // [2638] text|emoji +☹ നീരസമുള്ള മുഖം // [2639] text|emoji +☺ പുഞ്ചിരിക്കുന്ന മുഖം // [263A] text|emoji +♀ സ്ത്രീ ചിഹ്നം // [2640] text|emoji +♂ പുരുഷ ചിഹ്നം // [2642] text|emoji +♈ മേടം // [2648] +♉ ഇടവം // [2649] +♊ മിഥുനം // [264A] +♋ കർക്കടകം // [264B] +♌ ചിങ്ങം // [264C] +♍ കന്നി // [264D] +♎ തുലാം // [264E] +♏ വൃശ്ചികം // [264F] +♐ ധനു // [2650] +♑ മകരം // [2651] +♒ കുംഭം // [2652] +♓ മീനം // [2653] +♠ സ്‌പെയ്‌ഡ് സ്യൂട്ട് // [2660] text|emoji +♣ ക്ലബ് സ്യൂട്ട് // [2663] text|emoji +♥ ഹാർട്ട് സ്യൂട്ട് // [2665] text|emoji +♦ ഡയമണ്ട് സ്യൂട്ട് // [2666] text|emoji +♨ ചൂടുറവകൾ // [2668] text|emoji +♻ റീസൈക്കിൾ ചിഹ്നം // [267B] text|emoji +♿ വീൽചെയർ ചിഹ്നം // [267F] +⚒ ചുറ്റികയും പിക്കും // [2692] text|emoji +⚓ നങ്കൂരം // [2693] +⚔ കുറുകെയുള്ള വാളുകൾ // [2694] text|emoji +⚕ മെഡിക്കൽ അടയാളം // [2695] text|emoji +⚖ തുലാസ് // [2696] text|emoji +⚗ അലെംബിക് // [2697] text|emoji +⚙ ഗിയർ // [2699] text|emoji +⚛ ആറ്റം ചിഹ്നം // [269B] text|emoji +⚜ ഫ്ലർ ഡേ ലിസ് // [269C] text|emoji +⚠ മുന്നറിയിപ്പ് // [26A0] text|emoji +⚡ ഉയർന്ന വോൾട്ടേജ് // [26A1] +⚪ വെളുത്ത വൃത്തം // [26AA] +⚫ കറുത്ത വൃത്തം // [26AB] +⚰ ശവപ്പെട്ടി // [26B0] text|emoji +⚱ ചിതാഭസ്‌മം // [26B1] text|emoji +⚽ ഫുട്‌ബോൾ // [26BD] +⚾ ബേസ്‌ബോൾ // [26BE] +⛄ മഞ്ഞില്ലാത്ത മഞ്ഞുമനുഷ്യൻ // [26C4] +⛅ മേഘങ്ങൾക്ക് പിന്നിലെ സൂര്യൻ // [26C5] +⛈ ഇടിമിന്നലും മഴയും // [26C8] text|emoji +⛎ സർപ്പധരൻ // [26CE] +⛏ പിക്ക് // [26CF] text|emoji +⛑ വെളുത്ത കുരിശുള്ള ഹെൽമെറ്റ് // [26D1] text|emoji +⛓ ചെയിൻ // [26D3] text|emoji +⛔ പ്രവേശനം ഇല്ല // [26D4] +⛩ ജപ്പാനിലെ പൂർവ്വിക മത ദേവാലയം // [26E9] text|emoji +⛪ പള്ളി // [26EA] +⛰ മലനിര // [26F0] text|emoji +⛱ തറയിൽ വച്ചിരിക്കുന്ന കുട // [26F1] text|emoji +⛲ ജലധാര // [26F2] +⛳ കുത്തിനിർത്തിയിരിക്കുന്ന പതാക // [26F3] +⛴ കടത്ത് വള്ളം // [26F4] text|emoji +⛵ പായ്‌ക്കപ്പൽ // [26F5] +⛷ സ്കീയർ // [26F7] text|emoji +⛸ ഐസ് സ്‌കേറ്റ് // [26F8] text|emoji +⛹ പന്തുകളിക്കുന്നയാൾ // [26F9] text|emoji +⛺ കൂടാരം // [26FA] +⛽ പെട്രോൾ പമ്പ് // [26FD] + +// 2700..27BF : Dingbats + +✂ കത്രിക // [2702] text|emoji +✅ വെളുത്ത ചെക്ക് അടയാളം // [2705] +✈ വിമാനം // [2708] text|emoji +✉ എൻവലപ്പ് // [2709] text|emoji +✊ മുഷ്‌ടി ഉയർത്തി // [270A] +✋ കൈ ഉയർത്തി // [270B] +✌ വിജയ ചിഹ്നം // [270C] text|emoji +✍ എഴുതുന്ന കൈ // [270D] text|emoji +✏ പെൻസിൽ // [270F] text|emoji +✒ കറുത്ത നിബ്ബ് // [2712] text|emoji +✔ വലിയ ചെക്ക് അടയാളം // [2714] text|emoji +✖ വലിയ ഗുണനചിഹ്നം x // [2716] text|emoji +✝ ലാറ്റിൻ ക്രോസ് // [271D] text|emoji +✡ സ്‌റ്റാർ ഓഫ് ഡേവിഡ് // [2721] text|emoji +✨ തിളങ്ങുന്നവ // [2728] +✳ എയ്‌റ്റ് സ്‌പോക്ക്ഡ് ആസ്‌റ്റെറിസ്‌ക്ക് // [2733] text|emoji +✴ എയ്‌റ്റ് പോയന്റഡ് സ്‌റ്റാർ // [2734] text|emoji +❄ മഞ്ഞുകട്ട // [2744] text|emoji +❇ സ്‌പാർക്കിൾ // [2747] text|emoji +❌ തെറ്റ് അടയാളം // [274C] +❎ തെറ്റ് അടയാള ബട്ടൺ // [274E] +❓ ചോദ്യം ചിഹ്നം // [2753] +❔ വെളുത്ത ചോദ്യം ചിഹ്നം // [2754] +❕ വെളുത്ത ആശ്ചര്യ ചിഹ്നം // [2755] +❗ ആശ്ചര്യ ചിഹ്നം // [2757] +❣ ഹൃദയാകൃതിയിലുള്ള ആശ്ചര്യ ചിഹ്നം // [2763] text|emoji +❤ ചുവന്ന ഹൃദയം // [2764] text|emoji +➕ വലിയ പ്ലസ് ചിഹ്നം // [2795] +➖ വലിയ മൈനസ് ചിഹ്നം // [2796] +➗ വലിയ ഹരണ ചിഹ്നം // [2797] +➡ വലത്തേക്കുള്ള അമ്പടയാളം // [27A1] text|emoji +➰ ഒരു ചുരുളുള്ള ലൂപ്പ് // [27B0] +➿ രണ്ട് ചുരുളുള്ള ലൂപ്പ് // [27BF] + +// 2900..297F : Supplemental Arrows-B + +⤴ മുകളിലേക്ക് വളവുള്ള അമ്പടയാളം // [2934] text|emoji +⤵ താഴേക്കുവളഞ്ഞ അമ്പടയാളം // [2935] text|emoji + +// 2B00..2BFF : Miscellaneous Symbols and Arrows + +⬅ ഇടത്തേക്കുള്ള അമ്പടയാളം // [2B05] text|emoji +⬆ മുകളിലേക്കുള്ള അമ്പടയാളം // [2B06] text|emoji +⬇ താഴേക്കുള്ള അമ്പടയാളം // [2B07] text|emoji +⬛ വലിയ കറുത്ത ചതുരം // [2B1B] +⬜ വലിയ വെളുത്ത ചതുരം // [2B1C] +⭐ വെള്ള നക്ഷത്രം // [2B50] +⭕ വലിയ വൃത്തം // [2B55] + +// 3000..303F : CJK Symbols and Punctuation + +〰 വേവി ഡാഷ് // [3030] text|emoji +〽 പാർട്ട് ആൾട്ടർനേഷൻ മാർക്ക് // [303D] text|emoji + +// 3200..32FF : Enclosed CJK Letters and Months + +㊗ സർക്കിൾഡ് കൺഗ്രാജുലേറ്റ് ഐഡിയോഗ്രാഫ് // [3297] text|emoji +㊙ സർക്കിൾഡ് സീക്രറ്റ് ഐഡിയോഗ്രാഫ് // [3299] text|emoji + +// 1F100..1F1FF : Enclosed Alphanumeric Supplement + +🅰 A രക്തഗ്രൂപ്പ് ചിഹ്നം // [1F170] text|emoji +🅱 B രക്തഗ്രൂപ്പ് ചിഹ്നം // [1F171] text|emoji +🅾 O രക്ത ഗ്രൂപ്പ് കാണിക്കുന്നതിന്റെ മുദ്ര // [1F17E] text|emoji +🅿 പാർക്ക് ചെയ്യാനുള്ള സ്ഥലം // [1F17F] text|emoji +🆎 AB രക്തഗ്രൂപ്പ് ചിഹ്നം // [1F18E] +🆑 മായ്ച്ച് കളയുക // [1F191] +🆒 തണുപ്പിനെ കാണിക്കുന്നത് // [1F192] +🆓 സൗജന്യം // [1F193] +🆔 തിരിച്ചറിയൽ ചിഹ്നം // [1F194] +🆕 പുതിയത് എന്ന് കാണിക്കുന്ന ചതുരം // [1F195] +🆖 നല്ലതല്ല എന്ന് കാണിക്കുന്ന ചതുര NG // [1F196] +🆗 ശരിയാണ് /OK എന്ന് കാണിക്കുന്ന മുദ്ര // [1F197] +🆘 SOS മുദ്ര // [1F198] +🆙 മുകൾഭാഗത്തേക്ക് /അപ്പ് മുദ്ര // [1F199] +🆚 വെഴ്സസ് കാണിക്കുന്ന മുദ്ര // [1F19A] + +// 1F200..1F2FF : Enclosed Ideographic Supplement + +🈁 ജാപ്പനീസ്സ് മുദ്ര // [1F201] +🈂 ഒരു ജാപ്പനീസ്സ് മുദ്ര // [1F202] text|emoji +🈚 സ്ക്വയേർഡ് നെഗേഷൻ ഐഡിയോഗ്രാഫ് // [1F21A] +🈯 സ്ക്വയേർഡ് ഫിംഗർ ഐഡിയോഗ്രാഫ് // [1F22F] +🈲 സ്ക്വയേർഡ് പ്രൊഹിബിറ്റ് ഐഡിയോഗ്രാഫ് // [1F232] +🈳 സ്ക്വയേർഡ് എംപ്റ്റി ഐഡിയോഗ്രാഫ് // [1F233] +🈴 സ്ക്വയേർഡ് ടുഗതർ ഐഡിയോഗ്രാഫ് // [1F234] +🈵 സ്ക്വയേർഡ് ഫുൾനസ് ഐഡിയോഗ്രാഫ് // [1F235] +🈶 സ്ക്വയേർഡ് എക്സിസ്റ്റ് ഐഡിയോഗ്രാഫ് // [1F236] +🈷 സ്ക്വയേർഡ് മൂൺ ഐഡിയോഗ്രാഫ് // [1F237] text|emoji +🈸 സ്ക്വയേർഡ് അപ്ലൈ ഐഡിയോഗ്രാഫ് // [1F238] +🈹 സ്ക്വയേർഡ് ഡിവൈഡ് ഐഡിയോഗ്രാഫ് // [1F239] +🈺 സ്ക്വയേർഡ് ഓപ്പറേറ്റിംഗ് ഐഡിയോഗ്രാഫ് // [1F23A] +🉐 സർക്കിൾഡ് അഡ്വാന്റേജ് ഐഡിയോഗ്രാഫ് // [1F250] +🉑 സർക്കിൾഡ് അക്സപ്റ്റ് ഐഡിയോഗ്രാഫ് // [1F251] + +// 1F000..1F02F : Mahjong Tiles + +🀄 മാഹ്‌ജോംഗ് റെഡ് ഡ്രാഗൺ // [1F004] + +// 1F0A0..1F0FF : Playing Cards + +🃏 ജോക്കർ // [1F0CF] + +// 1F300..1F5FF : Miscellaneous Symbols and Pictographs + +🌀 കൊടുങ്കാറ്റ് // [1F300] +🌁 മൂടികെട്ടിയ // [1F301] +🌂 അടച്ച കുട // [1F302] +🌃 നക്ഷത്രങ്ങൾ നിറഞ്ഞ രാത്രി // [1F303] +🌄 മലമുകളിലെ സൂര്യോദയം // [1F304] +🌅 സൂര്യോദയം // [1F305] +🌆 നഗരത്തിലെ സായാഹ്നം // [1F306] +🌇 സൂര്യാസ്‌തമയം // [1F307] +🌈 മഴവില്ല് // [1F308] +🌉 പാലത്തിന്റെ നിശാദൃശ്യം // [1F309] +🌊 തിരമാല // [1F30A] +🌋 അഗ്നിപർവ്വതം // [1F30B] +🌌 ആകാശഗംഗ // [1F30C] +🌍 യൂറോപ്പ്-ആഫ്രിക്ക കാണിക്കുന്ന ഭൂഗോളം // [1F30D] +🌎 അമേരിക്ക കാണിക്കുന്ന ഭൂഗോളം // [1F30E] +🌏 ഏഷ്യ-ഓസ്‌ട്രേലിയ കാണിക്കുന്ന ഭൂഗോളം // [1F30F] +🌐 ധ്രുവരേഖകളുള്ള ഭൂഗോളം // [1F310] +🌑 അമാവാസി // [1F311] +🌒 പൂർണ്ണത പ്രാപിക്കുന്ന ചന്ദ്രക്കല // [1F312] +🌓 അർദ്ധ പൗർണ്ണമി // [1F313] +🌔 മായുന്ന ചന്ദ്രൻ // [1F314] +🌕 പൂർണ്ണചന്ദ്രൻ // [1F315] +🌖 തെളിഞ്ഞുവരുന്ന ചന്ദ്രക്കല // [1F316] +🌗 അർദ്ധ അമാവാസി // [1F317] +🌘 വിളറിയ ചന്ദ്രൻ // [1F318] +🌙 ചന്ദ്രക്കല // [1F319] +🌚 അമാവാസി മുഖം // [1F31A] +🌛 അർദ്ധ പൗർണ്ണമി മുഖം // [1F31B] +🌜 അർദ്ധ അമാവാസി മുഖം // [1F31C] +🌝 പൂർണ്ണചന്ദ്രന്റെ മുഖം // [1F31D] +🌞 സൂര്യനിൽ മുഖം // [1F31E] +🌟 തിളങ്ങുന്ന നക്ഷത്രം // [1F31F] +🌠 വാൽനക്ഷത്രം // [1F320] +🌡 തെർമോമീറ്റർ // [1F321] text|emoji +🌤 ചെറുമേഘങ്ങൾക്ക് പിന്നിലെ സൂര്യൻ // [1F324] text|emoji +🌥 വലിയമേഘങ്ങൾക്ക് പിന്നിലെ സൂര്യൻ // [1F325] text|emoji +🌦 മഴമേഘങ്ങൾക്ക് പിന്നിലെ സൂര്യൻ // [1F326] text|emoji +🌧 മഴയും മേഘവും // [1F327] text|emoji +🌨 മഞ്ഞും മഴയും // [1F328] text|emoji +🌩 മിന്നലും മേഘവും // [1F329] text|emoji +🌪 ചുഴലിക്കാറ്റ് // [1F32A] text|emoji +🌫 മൂടൽമഞ്ഞ് // [1F32B] text|emoji +🌬 കാറ്റ് // [1F32C] text|emoji +🌭 ഹോട്ട് ഡോഗ് // [1F32D] +🌮 ടാകോ // [1F32E] +🌯 ബറീറ്റോ // [1F32F] +🌰 ചെസ്‌റ്റ്നട്ട് // [1F330] +🌱 തൈ // [1F331] +🌲 നിത്യഹരിതം // [1F332] +🌳 ഇലപൊഴിയും മരം // [1F333] +🌴 പന // [1F334] +🌵 കള്ളിമുൾച്ചെടി // [1F335] +🌶 ചുവന്ന മുളക് // [1F336] text|emoji +🌷 ട്യൂലിപ് // [1F337] +🌸 ചെറി പുഷ്പം // [1F338] +🌹 റോസാപ്പൂ // [1F339] +🌺 ചെമ്പരത്തി // [1F33A] +🌻 സൂര്യകാന്തി // [1F33B] +🌼 പൂവ് // [1F33C] +🌽 ചോളം // [1F33D] +🌾 നെൽക്കതിർ // [1F33E] +🌿 ഔഷധച്ചെടി // [1F33F] +🍀 നാലിതൾ ചെടി // [1F340] +🍁 മേപ്പിൾ ഇല // [1F341] +🍂 ഉണങ്ങി വീഴുന്ന ഇല // [1F342] +🍃 കാറ്റിൽ പറക്കുന്ന ഇല // [1F343] +🍄 കൂൺ // [1F344] +🍅 തക്കാളി // [1F345] +🍆 വഴുതന // [1F346] +🍇 മുന്തിരി // [1F347] +🍈 മത്തങ്ങ // [1F348] +🍉 തണ്ണിമത്തൻ // [1F349] +🍊 മധുരനാരങ്ങ // [1F34A] +🍋 ചെറുനാരങ്ങ // [1F34B] +🍌 വാഴപ്പഴം // [1F34C] +🍍 കൈതച്ചക്ക // [1F34D] +🍎 ചുവന്ന ആപ്പിൾ // [1F34E] +🍏 പച്ച ആപ്പിൾ // [1F34F] +🍐 പിയർ // [1F350] +🍑 പീച്ച് // [1F351] +🍒 ചെറി // [1F352] +🍓 സ്ട്രോബെറി // [1F353] +🍔 ഹാംബർഗർ // [1F354] +🍕 പിസ // [1F355] +🍖 മാംസം // [1F356] +🍗 കോഴിക്കാൽ // [1F357] +🍘 റൈസ് ക്രാക്കർ // [1F358] +🍙 റൈസ് ബോൾ // [1F359] +🍚 ചോറ് // [1F35A] +🍛 ചോറും കറിയും // [1F35B] +🍜 ആവി പറക്കുന്ന ബൗൾ // [1F35C] +🍝 സ്പെഗാട്ടി // [1F35D] +🍞 ബ്രെഡ് // [1F35E] +🍟 ഫ്രെഞ്ച് ഫ്രൈസ് // [1F35F] +🍠 പൊരിച്ച ഉരുളക്കിഴങ്ങ് // [1F360] +🍡 ഡാംഗോ // [1F361] +🍢 ഓഡെൻ // [1F362] +🍣 സുഷി // [1F363] +🍤 പൊരിച്ച കൊഞ്ച് // [1F364] +🍥 ഫിഷ് കേക്ക് ചുരുൾ // [1F365] +🍦 സോഫ്‌റ്റ് ഐസ്‌ക്രീം // [1F366] +🍧 ഷേവ്ഡ് ഐസ് // [1F367] +🍨 ഐസ്‌ക്രീം // [1F368] +🍩 ഡോനട്ട് // [1F369] +🍪 കുക്കി // [1F36A] +🍫 ചോക്ലേറ്റ് ബാർ // [1F36B] +🍬 കാൻഡി // [1F36C] +🍭 ലോലിപോപ്പ് // [1F36D] +🍮 കസ്റ്റാർഡ് // [1F36E] +🍯 തേൻപാത്രം // [1F36F] +🍰 മുറിച്ച കേക്ക് // [1F370] +🍱 ബെന്റോ ബോക്‌സ് // [1F371] +🍲 ഭക്ഷണ പാത്രം // [1F372] +🍳 പാചകം // [1F373] +🍴 കത്തിയും മുള്ളും // [1F374] +🍵 കൈപ്പിടി ഇല്ലാത്ത ചായക്കപ്പ് // [1F375] +🍶 സേക്ക് // [1F376] +🍷 വൈൻ ഗ്ലാസ് // [1F377] +🍸 കോക്ക്‌ടെയിൽ ഗ്ലാസ് // [1F378] +🍹 ട്രോപ്പിക്കൽ ഡ്രിങ്ക് // [1F379] +🍺 ബിയർ ബഗ് // [1F37A] +🍻 പരസ്പരം തട്ടുന്ന ബിയർ മഗുകൾ // [1F37B] +🍼 പാൽക്കുപ്പി // [1F37C] +🍽 കത്തിയും മുള്ളുമുള്ള പ്ലേറ്റ് // [1F37D] text|emoji +🍾 മദിരോത്സവം // [1F37E] +🍿 പോപ്‌കോൺ // [1F37F] +🎀 റിബൺ // [1F380] +🎁 സമ്മാനപ്പൊതി // [1F381] +🎂 പിറന്നാൾ കേക്ക് // [1F382] +🎃 ജാക്ക് ഓ ലാന്റേൺ // [1F383] +🎄 ക്രിസ്മസ് ട്രീ // [1F384] +🎅 സാന്താക്ലോസ് // [1F385] +🎆 വെടിമരുന്ന് // [1F386] +🎇 പൂൂത്തിരി // [1F387] +🎈 ബലൂൺ // [1F388] +🎉 പാർട്ടി പോപ്പർ // [1F389] +🎊 കോൺഫെറ്റി ബോൾ // [1F38A] +🎋 തനബത്ത മരം // [1F38B] +🎌 കുറുകെയുള്ള പതാകകൾ // [1F38C] +🎍 അലങ്കരിച്ച പൈൻ മരം // [1F38D] +🎎 ജപ്പാനീസ് പാവകൾ // [1F38E] +🎏 കാർപ്പ് സ്ട്രീമർ // [1F38F] +🎐 കാറ്റുമണി // [1F390] +🎑 ചന്ദ്രനെ കാണൽ ആഘോഷം // [1F391] +🎒 സ്‌കൂൾ ബാഗ് // [1F392] +🎓 ബിരുദ ക്യാപ്പ് // [1F393] +🎖 മിലിട്ടറി മെഡൽ // [1F396] text|emoji +🎗 റിമൈൻഡർ റിബൺ // [1F397] text|emoji +🎙 സ്റ്റുഡിയോ മൈക്രോഫോൺ // [1F399] text|emoji +🎚 ലെവൽ സൈഡർ // [1F39A] text|emoji +🎛 കൺട്രോൾ നോബുകൾ // [1F39B] text|emoji +🎞 ഫിലിം ഫ്രെയിമുകൾ // [1F39E] text|emoji +🎟 അഡ്‌മിഷൻ ടിക്കറ്റുകൾ // [1F39F] text|emoji +🎠 യന്ത്രക്കുതിര // [1F3A0] +🎡 ഫെരിസ് വീൽ // [1F3A1] +🎢 റോളർ കോസ്റ്റർ // [1F3A2] +🎣 ചൂണ്ടയും മീനും // [1F3A3] +🎤 മൈക്രോഫോൺ // [1F3A4] +🎥 മൂവി ക്യാമറ // [1F3A5] +🎦 സിനിമ // [1F3A6] +🎧 ഹെഡ്‌ഫോൺ // [1F3A7] +🎨 ചായപ്പലക // [1F3A8] +🎩 തൊപ്പി // [1F3A9] +🎪 സർക്കസ് കൂടാരം // [1F3AA] +🎫 ടിക്കറ്റ് // [1F3AB] +🎬 ക്ലാപ്പർ ബോർഡ് // [1F3AC] +🎭 നാട്യകല // [1F3AD] +🎮 വീഡിയോ ഗെയിം // [1F3AE] +🎯 ഡയറക്റ്റ് ഹിറ്റ് // [1F3AF] +🎰 സ്ലോട്ട് മെഷീൻ // [1F3B0] +🎱 ബില്യാർഡ്‌സ് // [1F3B1] +🎲 ഗെയിം ഡൈ // [1F3B2] +🎳 ബൗളിംഗ് // [1F3B3] +🎴 ഫ്ലവർ പ്ലേയിംഗ് കാർഡ് // [1F3B4] +🎵 മ്യൂസിക്ക് നോട്ട് // [1F3B5] +🎶 മ്യൂസിക്ക് നോട്ടുകൾ // [1F3B6] +🎷 സാക്സഫോൺ // [1F3B7] +🎸 ഗിറ്റാർ // [1F3B8] +🎹 മ്യൂസിക്കൽ കീബോർഡ് // [1F3B9] +🎺 ട്രംപറ്റ് // [1F3BA] +🎻 വയലിൻ // [1F3BB] +🎼 മ്യൂസിക് സ്കോർ // [1F3BC] +🎽 വ്യായാമ വസ്ത്രം // [1F3BD] +🎾 ടെന്നീസ് // [1F3BE] +🎿 സ്കീ // [1F3BF] +🏀 ബാസ്‌ക്കറ്റ്‌ബോൾ // [1F3C0] +🏁 ചതുരങ്ങളുള്ള പതാക // [1F3C1] +🏂 സ്നോബോർഡർ // [1F3C2] +🏃 റണ്ണർ // [1F3C3] +🏄 സർഫർ // [1F3C4] +🏅 സ്‌പോർട്‌സ് മെഡൽ // [1F3C5] +🏆 ട്രോഫി // [1F3C6] +🏇 കുതിരപ്പന്തയം // [1F3C7] +🏈 അമേരിക്കൻ ഫുട്‌ബോൾ // [1F3C8] +🏉 റഗ്ബി ഫുട്‌ബോൾ // [1F3C9] +🏊 നീന്തൽത്താരം // [1F3CA] +🏋 വെയിറ്റ് ലിഫ്റ്റർ // [1F3CB] text|emoji +🏌 ഗോൾഫർ // [1F3CC] text|emoji +🏍 മോട്ടോർസൈക്കിൾ // [1F3CD] text|emoji +🏎 റേസിംഗ് കാർ // [1F3CE] text|emoji +🏏 ക്രിക്കറ്റ് // [1F3CF] +🏐 വോളിബോൾ // [1F3D0] +🏑 ഫീൽഡ് ഹോക്കി // [1F3D1] +🏒 ഐസ് ഹോക്കി സ്റ്റിക്കും പക്കും // [1F3D2] +🏓 പിംഗ് പോംഗ് // [1F3D3] +🏔 മഞ്ഞുമൂടിയ മലനിര // [1F3D4] text|emoji +🏕 ക്യാമ്പിംഗ് // [1F3D5] text|emoji +🏖 കുടയുള്ള ബീച്ച് // [1F3D6] text|emoji +🏗 കെട്ടിട നിർമ്മാണം // [1F3D7] text|emoji +🏘 വീടുകൾ // [1F3D8] text|emoji +🏙 നഗരം // [1F3D9] text|emoji +🏚 ആൾത്താമസം ഇല്ലാത്ത വീട് // [1F3DA] text|emoji +🏛 പ്രാചീനമായ കെട്ടിടം // [1F3DB] text|emoji +🏜 മരുഭൂമി // [1F3DC] text|emoji +🏝 മരുദ്വീപ് // [1F3DD] text|emoji +🏞 ദേശീയോദ്യാനം // [1F3DE] text|emoji +🏟 സ്റ്റേഡിയം // [1F3DF] text|emoji +🏠 വീട് // [1F3E0] +🏡 പൂന്തോട്ടമുള്ള വീട് // [1F3E1] +🏢 ഓഫീസ് കെട്ടിടം // [1F3E2] +🏣 ജാപ്പനീസ് പോസ്റ്റ് ഓഫീസ് // [1F3E3] +🏤 പോസ്റ്റ് ഓഫീസ് // [1F3E4] +🏥 ആശുപത്രി // [1F3E5] +🏦 ബാങ്ക് // [1F3E6] +🏧 ATM ചിഹ്നം // [1F3E7] +🏨 ഹോട്ടൽ // [1F3E8] +🏩 ലവ് ഹോട്ടൽ // [1F3E9] +🏪 കൺവീനിയൻസ് സ്റ്റോർ // [1F3EA] +🏫 സ്‌കൂൾ // [1F3EB] +🏬 ഡിപ്പാർട്ട്‌മെന്റ് സ്റ്റോർ // [1F3EC] +🏭 ഫാക്‌ടറി // [1F3ED] +🏮 റാന്തൽ വിളക്ക് // [1F3EE] +🏯 ജപ്പാനീസ് കൊട്ടാരം // [1F3EF] +🏰 കൊട്ടാരം // [1F3F0] +🏳 പാറിപ്പറക്കുന്ന വെളുത്ത പതാക // [1F3F3] text|emoji +🏴 പാറിപ്പറക്കുന്ന കറുത്ത പതാക // [1F3F4] +🏵 റൊസെറ്റ് // [1F3F5] text|emoji +🏷 ലേബൽ // [1F3F7] text|emoji +🏸 ബാഡ്‌മിന്റൺ // [1F3F8] +🏹 അമ്പും വില്ലും // [1F3F9] +🏺 ആംഫെറ // [1F3FA] +🏻 ചർമ്മത്തിന്റെ നിറം-1-2 // [1F3FB] +🏼 ചർമ്മത്തിന്റെ നിറം-3 // [1F3FC] +🏽 ചർമ്മത്തിന്റെ നിറം-4 // [1F3FD] +🏾 ചർമ്മത്തിന്റെ നിറം-5 // [1F3FE] +🏿 ചർമ്മത്തിന്റെ നിറം-6 // [1F3FF] +🐀 എലി // [1F400] +🐁 ചുണ്ടെലി // [1F401] +🐂 കാള // [1F402] +🐃 പോത്ത് // [1F403] +🐄 പശു // [1F404] +🐅 കടുവ // [1F405] +🐆 പുള്ളിപ്പുലി // [1F406] +🐇 മുയൽ // [1F407] +🐈 പൂച്ച // [1F408] +🐉 ഡ്രാഗൺ // [1F409] +🐊 മുതല // [1F40A] +🐋 തിമിംഗലം // [1F40B] +🐌 ഒച്ച് // [1F40C] +🐍 പാമ്പ് // [1F40D] +🐎 കുതിര // [1F40E] +🐏 മുട്ടനാട് // [1F40F] +🐐 ആട് // [1F410] +🐑 ചെമ്മരിയാട് // [1F411] +🐒 കുരങ്ങ് // [1F412] +🐓 പൂവൻ കോഴി // [1F413] +🐔 കോഴി // [1F414] +🐕 നായ // [1F415] +🐖 പന്നി // [1F416] +🐗 കാട്ടുപന്നി // [1F417] +🐘 ആന // [1F418] +🐙 നീരാളി // [1F419] +🐚 ചിപ്പി // [1F41A] +🐛 പഴുതാര // [1F41B] +🐜 ഉറുമ്പ് // [1F41C] +🐝 തേനീച്ച // [1F41D] +🐞 വണ്ട് // [1F41E] +🐟 മത്സ്യം // [1F41F] +🐠 ട്രോപ്പിക്കൽ ഫിഷ് // [1F420] +🐡 ബ്ലോഫിഷ് // [1F421] +🐢 ആമ // [1F422] +🐣 വിരിഞ്ഞുവരുന്ന കോഴിക്കുഞ്ഞ് // [1F423] +🐤 കോഴിക്കുഞ്ഞ് // [1F424] +🐥 കോഴിക്കുഞ്ഞിന്റെ മുഖം // [1F425] +🐦 പക്ഷി // [1F426] +🐧 പെൻഗ്വിൻ // [1F427] +🐨 കൊയല // [1F428] +🐩 പൂഡിൽ // [1F429] +🐪 ഒട്ടകം // [1F42A] +🐫 രണ്ട് കൂനുള്ള ഒട്ടകം // [1F42B] +🐬 ഡോൾഫിൻ // [1F42C] +🐭 ചുണ്ടെലി മുഖം // [1F42D] +🐮 പശു മുഖം // [1F42E] +🐯 കടുവ മുഖം // [1F42F] +🐰 മുയൽ മുഖം // [1F430] +🐱 പൂച്ച മുഖം // [1F431] +🐲 ഡ്രാഗൺ മുഖം // [1F432] +🐳 വെള്ളം ചീറ്റുന്ന തിമിംഗലം // [1F433] +🐴 കുതിര മുഖം // [1F434] +🐵 കുരങ്ങ് മുഖം // [1F435] +🐶 നായ മുഖം // [1F436] +🐷 പന്നിയുടെ മുഖം // [1F437] +🐸 തവള മുഖം // [1F438] +🐹 ഹാംസ്റ്റർ മുഖം // [1F439] +🐺 ചെന്നായ മുഖം // [1F43A] +🐻 കരടി മുഖം // [1F43B] +🐼 പാൻഡ മുഖം // [1F43C] +🐽 പന്നി മൂക്ക് // [1F43D] +🐾 മൃഗത്തിന്റെ കാൽപ്പാടുകൾ // [1F43E] +🐿 അണ്ണാൻ // [1F43F] text|emoji +👀 കണ്ണുകൾ // [1F440] +👁 കണ്ണ് // [1F441] text|emoji +👂 ചെവി // [1F442] +👃 മൂക്ക് // [1F443] +👄 വായ // [1F444] +👅 നാവ് // [1F445] +👆 മുകളിലേക്ക് പോയന്റ് ചെയ്യുന്ന ചൂണ്ടുവിരൽ // [1F446] +👇 താഴേക്ക് പോയന്റ് ചെയ്യുന്ന ചൂണ്ടുവിരൽ // [1F447] +👈 ഇടത്തേക്ക് പോയന്റ് ചെയ്യുന്ന ചൂണ്ടുവിരൽ // [1F448] +👉 വലത്തേക്ക് പോയന്റ് ചെയ്യുന്ന ചൂണ്ടുവിരൽ // [1F449] +👊 ചുരുട്ടിയ മുഷ്‌ടി // [1F44A] +👋 കൈ വീശുന്നു // [1F44B] +👌 അസലായെന്ന് കാണിക്കുന്ന ചിഹ്നം // [1F44C] +👍 കൊള്ളാം // [1F44D] +👎 മോശം // [1F44E] +👏 കൈകൊട്ടൽ // [1F44F] +👐 തുറന്ന കൈകൾ // [1F450] +👑 കിരീടം // [1F451] +👒 സ്‌ത്രീകളുടെ തൊപ്പി // [1F452] +👓 കണ്ണട // [1F453] +👔 നെക്ക് ടൈ // [1F454] +👕 ടീഷർട്ട് // [1F455] +👖 ജീൻസ് // [1F456] +👗 ഡ്രസ്സ് // [1F457] +👘 കിമോണോ // [1F458] +👙 ബിക്കിനി // [1F459] +👚 സ്ത്രീകളുടെ വസ്ത്രം // [1F45A] +👛 പേഴ്‌സ് // [1F45B] +👜 ഹാൻഡ് ബാഗ് // [1F45C] +👝 പൗച്ച് // [1F45D] +👞 പുരുഷന്മാരുടെ ഷൂ // [1F45E] +👟 അത്‌ലറ്റിക് ഷൂ // [1F45F] +👠 ഹൈ ഹീൽ ഷൂ // [1F460] +👡 സ്‌ത്രീകളുടെ ചെരുപ്പ് // [1F461] +👢 സ്‌ത്രീകളുടെ ബൂട്ട് // [1F462] +👣 കാൽപ്പാട് // [1F463] +👤 വ്യക്തിയുടെ നിഴൽച്ചിത്രം // [1F464] +👥 വ്യക്തികളുടെ നിഴൽച്ചിത്രം // [1F465] +👦 ആൺകുട്ടി // [1F466] +👧 പെൺകുട്ടി // [1F467] +👨 പുരുഷൻ // [1F468] +👩 സ്‌ത്രീ // [1F469] +👪 കുടുംബം // [1F46A] +👫 കൈകോർത്ത് നിൽക്കുന്ന ജോടി // [1F46B] +👬 കൈകോർത്ത് നിൽക്കുന്ന രണ്ട് പുരുഷന്മാർ // [1F46C] +👭 കൈകോർത്ത് നിൽക്കുന്ന രണ്ട് സ്‌ത്രീകൾ // [1F46D] +👮 പോലീസ് ഉദ്യോഗസ്ഥൻ // [1F46E] +👯 പാർട്ടി ആഘോഷിക്കുന്ന സ്‌ത്രീകൾ // [1F46F] +👰 ശിരോവസ്‌ത്രം അണിഞ്ഞ വധു // [1F470] +👱 സ്വർണ്ണത്തലമുടിയുള്ള വ്യക്തി // [1F471] +👲 ചൈനീസ് തൊപ്പി ധരിച്ചയാൾ // [1F472] +👳 ടർബൻ ധരിച്ചയാൾ // [1F473] +👴 വയസ്സായ പുരുഷൻ // [1F474] +👵 വയസ്സായ സ്‌ത്രീ // [1F475] +👶 കുഞ്ഞ് // [1F476] +👷 നിർമ്മാണ തൊഴിലാളി // [1F477] +👸 രാജകുമാരി // [1F478] +👹 രാക്ഷസൻ // [1F479] +👺 കുട്ടിച്ചാത്തൻ // [1F47A] +👻 ഭൂതം // [1F47B] +👼 കുഞ്ഞുമാലാഖ // [1F47C] +👽 അന്യഗ്രഹജീവി // [1F47D] +👾 അന്യഗ്രഹ ഭീകരജീവി // [1F47E] +👿 കുട്ടിപ്പിശാച് // [1F47F] +💀 തലയോട്ടി // [1F480] +💁 വിവരങ്ങൾ നൽകുന്ന വ്യക്തി // [1F481] +💂 അംഗരക്ഷകൻ // [1F482] +💃 നർത്തകി // [1F483] +💄 ലിപ്‌സ്റ്റിക്ക് // [1F484] +💅 നെയിൽ പോളിഷ് // [1F485] +💆 മുഖം മസ്സാജ് ചെയ്യുക // [1F486] +💇 മുടിവെട്ടൽ // [1F487] +💈 ബാർബർ പോൾ // [1F488] +💉 സിറിഞ്ച് // [1F489] +💊 ഗുളിക // [1F48A] +💋 ചുംബന മുദ്ര // [1F48B] +💌 പ്രണയ ലേഖനം // [1F48C] +💍 മോതിരം // [1F48D] +💎 വൈരക്കല്ല് // [1F48E] +💏 ചുംബനം // [1F48F] +💐 പൂച്ചെണ്ട് // [1F490] +💑 പ്രണയ ജോടി // [1F491] +💒 ക്രൈസ്‌തവ വിവാഹം // [1F492] +💓 ഹൃദയമിടിപ്പ് // [1F493] +💔 തകർന്ന ഹൃദയം // [1F494] +💕 രണ്ട് ഹൃദയങ്ങൾ // [1F495] +💖 തിളങ്ങുന്ന ഹൃദയം // [1F496] +💗 വികസിക്കുന്ന ഹൃദയം // [1F497] +💘 അമ്പടയാളത്തോടൊപ്പമുള്ള ഹൃദയം // [1F498] +💙 നീല ഹൃദയം // [1F499] +💚 പച്ച ഹൃദയം // [1F49A] +💛 മഞ്ഞ ഹൃദയം // [1F49B] +💜 പർപ്പിൾ ഹൃദയം // [1F49C] +💝 റിബണുള്ള ഹൃദയം // [1F49D] +💞 കറങ്ങുന്ന ഹൃദയങ്ങൾ // [1F49E] +💟 ഹൃദയ അലങ്കാരം // [1F49F] +💠 ഒരു പുള്ളിയുള്ള ഡയമണ്ട് // [1F4A0] +💡 ബൾബ് // [1F4A1] +💢 ദേഷ്യ ചിഹ്നം // [1F4A2] +💣 ബോംബ് // [1F4A3] +💤 കൂർക്കംവലി // [1F4A4] +💥 കൂട്ടിയിടി // [1F4A5] +💦 വിയർപ്പ് തുള്ളികൾ // [1F4A6] +💧 തുള്ളി // [1F4A7] +💨 വേഗത // [1F4A8] +💩 ചാണക കൂമ്പാരം // [1F4A9] +💪 കൈയ്യിലെ മസിൽ // [1F4AA] +💫 മോഹാലസ്യം // [1F4AB] +💬 സംഭാഷണ ബലൂൺ // [1F4AC] +💭 ചിന്താ ബലൂൺ // [1F4AD] +💮 വെളുത്ത പൂവ് // [1F4AE] +💯 100 പോയിന്റ് // [1F4AF] +💰 പണ ബാഗ് // [1F4B0] +💱 കറൻസി വിനിമയം // [1F4B1] +💲 വലിയ ഡോളർ ചിഹ്നം // [1F4B2] +💳 ക്രെഡിറ്റ് കാർഡ് // [1F4B3] +💴 യെൻ ബാങ്ക് നോട്ട് // [1F4B4] +💵 ഡോളർ ബാങ്ക് നോട്ട് // [1F4B5] +💶 യൂറോ ബാങ്ക് നോട്ട് // [1F4B6] +💷 പൗണ്ട് ബാങ്ക് നോട്ട് // [1F4B7] +💸 ചിറകുള്ള പണം // [1F4B8] +💹 മാർക്കറ്റ് ഉയർച്ച // [1F4B9] +💺 സീറ്റ് // [1F4BA] +💻 ലാപ്‌ടോപ്പ് കമ്പ്യൂട്ടർ // [1F4BB] +💼 ബ്രീഫ്‌കേസ് // [1F4BC] +💽 മിനി ഡിസ്ക്ക് // [1F4BD] +💾 ഫ്ലോപ്പി ഡിസ്ക്ക് // [1F4BE] +💿 ഒപ്റ്റിക്കൽ ഡിസ്ക് // [1F4BF] +📀 ഡിവിഡി // [1F4C0] +📁 ഫയൽ ഫോൾഡർ // [1F4C1] +📂 തുറന്ന ഫയൽ ഫോൾഡർ // [1F4C2] +📃 ചുരുണ്ട പേജ് // [1F4C3] +📄 ഒരു കോണിൽ മടക്കുള്ള പേജ് // [1F4C4] +📅 കലണ്ടർ // [1F4C5] +📆 കീറിക്കളയാവുന്ന കലണ്ടർ // [1F4C6] +📇 കാർഡ് ഇൻഡക്‌സ് // [1F4C7] +📈 മുകളിലേക്കുള്ള ചാർട്ട് // [1F4C8] +📉 താഴേക്കുള്ള ചാർട്ട് // [1F4C9] +📊 ബാർ ചാർട്ട് // [1F4CA] +📋 ക്ലിപ്ബോർഡ് // [1F4CB] +📌 പുഷ് പിൻ // [1F4CC] +📍 റൗണ്ട് പുഷ് പിൻ // [1F4CD] +📎 പേപ്പർ ക്ലിപ്പ് // [1F4CE] +📏 സ്കെയിൽ // [1F4CF] +📐 ട്രയാംഗിൾ റൂളർ // [1F4D0] +📑 ബുക്ക്‌മാർക്ക് ടാബുകൾ // [1F4D1] +📒 ലെഡ്‌ജർ // [1F4D2] +📓 നോട്ട്ബുക്ക് // [1F4D3] +📔 ഭംഗിയുള്ള കവറുള്ള നോട്ട്ബുക്ക് // [1F4D4] +📕 അടഞ്ഞ പുസ്‌തകം // [1F4D5] +📖 തുറന്ന പുസ്‌തകം // [1F4D6] +📗 പച്ച പുസ്‌തകം // [1F4D7] +📘 നീല പുസ്‌തകം // [1F4D8] +📙 ഓറഞ്ച് പുസ്‌തകം // [1F4D9] +📚 പുസ്‌തകങ്ങൾ // [1F4DA] +📛 നെയിം ബാഡ്ജ് // [1F4DB] +📜 പേപ്പർ സ്ക്രോൾ // [1F4DC] +📝 മെമ്മോ // [1F4DD] +📞 ടെലിഫോൺ റിസീവർ // [1F4DE] +📟 പേജർ // [1F4DF] +📠 ഫാക്‌സ് മെഷീൻ // [1F4E0] +📡 സാറ്റലൈറ്റ് ആന്റിന // [1F4E1] +📢 ലൗഡ് സ്പീക്കർ // [1F4E2] +📣 മെഗാഫോൺ // [1F4E3] +📤 ഔട്ട്ബോക്‌സ് ട്രേ // [1F4E4] +📥 ഇൻബോക്‌സ് ട്രേ // [1F4E5] +📦 പാഴ്‌സൽ // [1F4E6] +📧 ഇമെയിൽ // [1F4E7] +📨 ഇൻകമിംഗ് എൻവലപ്പ് // [1F4E8] +📩 അമ്പടയാളമുള്ള എൻവലപ്പ് // [1F4E9] +📪 താഴേക്കുള്ള ഫ്ലാഗ് കാണിക്കുന്ന അടഞ്ഞ മെയിൽബോക്‌സ് // [1F4EA] +📫 മുകളിലേക്കുള്ള ഫ്ലാഗ് കാണിക്കുന്ന അടഞ്ഞ മെയിൽബോക്‌സ് // [1F4EB] +📬 മുകളിലേക്കുള്ള ഫ്ലാഗ് കാണിക്കുന്ന തുറന്ന മെയിൽബോക്‌സ് // [1F4EC] +📭 താഴേക്കുക്കുള്ള ഫ്ലാഗ് കാണിക്കുന്ന തുറന്ന മെയിൽബോക്‌സ് // [1F4ED] +📮 തപാൽ പെട്ടി // [1F4EE] +📯 പോസ്റ്റൽ ഹോൺ // [1F4EF] +📰 പത്രം // [1F4F0] +📱 മൊബൈൽ ഫോൺ // [1F4F1] +📲 അമ്പടയാളമുള്ള മൊബൈൽ // [1F4F2] +📳 വൈബ്രേഷൻ മോഡ് // [1F4F3] +📴 മൊബൈൽ ഫോൺ ഓഫ് ചെയ്യുക // [1F4F4] +📵 മൊബൈൽ പാടില്ല // [1F4F5] +📶 ആന്റിന ബാർ // [1F4F6] +📷 ക്യാമറ // [1F4F7] +📸 ഫ്ലാഷുള്ള ക്യാമറ // [1F4F8] +📹 വീഡിയോ ക്യാമറ // [1F4F9] +📺 ടെലിവിഷൻ // [1F4FA] +📻 റേഡിയോ // [1F4FB] +📼 വീഡിയോ കാസറ്റ് // [1F4FC] +📽 ഫിലിം പ്രൊജക്റ്റർ // [1F4FD] text|emoji +📿 പ്രാർത്ഥന മണികൾ // [1F4FF] +🔀 പാട്ടുകൾ കൂട്ടിക്കലർത്തുന്നതിനുള്ള ബട്ടൺ // [1F500] +🔁 റിപ്പീറ്റ് ബട്ടൺ // [1F501] +🔂 ഒരു തവണ ആവർത്തിക്കുന്നതിനുള്ള ബട്ടൺ // [1F502] +🔃 ഘടികാര ദിശയിലുള്ള അമ്പടയാളങ്ങൾ // [1F503] +🔄 വിപരീത ഘടികാര ദിശയിലുള്ള അമ്പടയാളങ്ങളുടെ ബട്ടൺ // [1F504] +🔅 കുറഞ്ഞ തെളിച്ചത്തിനുള്ള ബട്ടൺ // [1F505] +🔆 ഉയർന്ന തെളിച്ചത്തിനുള്ള ബട്ടൺ // [1F506] +🔇 സ്പീക്കർ ഓഫ് // [1F507] +🔈 സ്പീക്കർ // [1F508] +🔉 സ്പീക്കർ ഓൺ // [1F509] +🔊 സ്പീക്കർ ലൗഡ് // [1F50A] +🔋 ബാറ്ററി // [1F50B] +🔌 ഇലക്‌ട്രിക് പ്ലഗ് // [1F50C] +🔍 ഇടത്തേക്ക് പോയിന്റ് ചെയ്യുന്ന ഭൂതക്കണ്ണാടി // [1F50D] +🔎 വലത്തേക്ക് പോയിന്റ് ചെയ്യുന്ന ഭൂതക്കണ്ണാടി // [1F50E] +🔏 പൂട്ടും പേനയും // [1F50F] +🔐 പൂട്ടും താക്കോലും // [1F510] +🔑 താക്കോൽ // [1F511] +🔒 പൂട്ട് // [1F512] +🔓 തുറന്ന പൂട്ട് // [1F513] +🔔 മണി // [1F514] +🔕 മണി ശബ്ദം പാടില്ല // [1F515] +🔖 ബുക്ക്‌മാർക്ക് // [1F516] +🔗 ലിങ്ക് // [1F517] +🔘 റേഡിയോ ബട്ടൺ // [1F518] +🔙 പുറകിലേക്കുള്ള അമ്പടയാളം // [1F519] +🔚 അവസാനിപ്പിക്കുന്നതിനുള്ള അമ്പടയാളം // [1F51A] +🔛 ഓൺ ചെയ്യുന്നതിനുള്ള അമ്പടയാളം // [1F51B] +🔜 ഉടൻ തന്നെ എന്ന് അർത്ഥമാക്കുന്ന അമ്പടയാളം // [1F51C] +🔝 മുകളിലേക്കുള്ള അമ്പടയാളത്തിനൊപ്പം ടോപ്പ് // [1F51D] +🔞 18 വയസ്സിന് താഴെയുള്ളവർക്ക് പ്രവേശനമില്ല // [1F51E] +🔟 കീക്യാപ്പ് പത്ത് // [1F51F] +🔠 വലിയക്ഷരങ്ങൾ // [1F520] +🔡 ചെറിയക്ഷരങ്ങൾ // [1F521] +🔢 സംഖ്യകൾ // [1F522] +🔣 ഇൻപുട്ട് അടയാളങ്ങൾ // [1F523] +🔤 ഇംഗ്ലീഷ് അക്ഷരമാല // [1F524] +🔥 തീ // [1F525] +🔦 ടോർച്ച് // [1F526] +🔧 റെഞ്ച് // [1F527] +🔨 ചുറ്റിക // [1F528] +🔩 നട്ടും ബോൾട്ടും // [1F529] +🔪 കത്തി // [1F52A] +🔫 തോക്ക് // [1F52B] +🔬 മൈക്രോസ്‌കോപ്പ് // [1F52C] +🔭 ടെലസ്‌കോപ്പ് // [1F52D] +🔮 ക്രിസ്റ്റൽ ബോൾ // [1F52E] +🔯 ഭാവി പ്രവചനം // [1F52F] +🔰 തുടക്കക്കാർക്കുള്ള ജപ്പാനീസ് ചിഹ്നം // [1F530] +🔱 ത്രിശൂല ചിഹ്നം // [1F531] +🔲 കറുത്ത ചതുരത്തിലുള്ള വൃത്തം // [1F532] +🔳 വെളുുത്ത ചതുരത്തിലുള്ള വൃത്തം // [1F533] +🔴 ചുവന്ന വൃത്തം // [1F534] +🔵 നീല വൃത്തം // [1F535] +🔶 വലിയ ഓറഞ്ച് ഡയമണ്ട് // [1F536] +🔷 വലിയ നീല ഡയമണ്ട് // [1F537] +🔸 ചെറിയ ഓറഞ്ച് ഡയമണ്ട് // [1F538] +🔹 ചെറിയ നീല ഡയമണ്ട് // [1F539] +🔺 മുകളിലേക്ക് ചൂണ്ടുന്ന ചുവന്ന ത്രികോണം // [1F53A] +🔻 താഴേക്ക് ചൂണ്ടുന്ന ചുവന്ന ത്രികോണം // [1F53B] +🔼 മുകളിലേക്കുള്ള അമ്പടയാള ബട്ടൺ // [1F53C] +🔽 താഴേക്കുള്ള അമ്പടയാള ബട്ടൺ // [1F53D] +🕉 ഓം // [1F549] text|emoji +🕊 പ്രാവ് // [1F54A] text|emoji +🕋 കഅബ // [1F54B] +🕌 മുസ്ലീം പള്ളി // [1F54C] +🕍 ജൂതദേവാലയം // [1F54D] +🕎 മെനാറോ // [1F54E] +🕐 ഒരു മണി // [1F550] +🕑 രണ്ട് മണി // [1F551] +🕒 മൂന്ന് മണി // [1F552] +🕓 നാലുമണി // [1F553] +🕔 അഞ്ച് മണി // [1F554] +🕕 ആറ് മണി // [1F555] +🕖 ഏഴ് മണി // [1F556] +🕗 എട്ടുമണി // [1F557] +🕘 ഒമ്പത് മണി // [1F558] +🕙 പത്ത് മണി // [1F559] +🕚 പതിനൊന്ന് മണി // [1F55A] +🕛 പന്ത്രണ്ട് മണി // [1F55B] +🕜 ഒന്നുമുപ്പത് // [1F55C] +🕝 രണ്ടുമുപ്പത് // [1F55D] +🕞 മൂന്ന്-മുപ്പത് // [1F55E] +🕟 നാലുമുപ്പത് // [1F55F] +🕠 അഞ്ചുമുപ്പത് // [1F560] +🕡 ആറുമുപ്പത് // [1F561] +🕢 ഏഴുമുപ്പത് // [1F562] +🕣 എട്ടുമുപ്പത് // [1F563] +🕤 ഒമ്പതുമുപ്പത് // [1F564] +🕥 പത്തുമുപ്പത് // [1F565] +🕦 പതിനൊന്നുമുപ്പത് // [1F566] +🕧 പന്ത്രണ്ട് മുപ്പത് // [1F567] +🕯 മെഴുകുതിരി // [1F56F] text|emoji +🕰 മാന്റൽപീസ് ക്ലോക്ക് // [1F570] text|emoji +🕳 കുഴി // [1F573] text|emoji +🕴 പറക്കുന്ന പ്രൊഫഷണൽ // [1F574] text|emoji +🕵 കുറ്റാന്വേഷകൻ // [1F575] text|emoji +🕶 സൺഗ്ലാസ് // [1F576] text|emoji +🕷 ചിലന്തി // [1F577] text|emoji +🕸 ചിലന്തി വല // [1F578] text|emoji +🕹 ജോയ്‌സ്റ്റിക് // [1F579] text|emoji +🕺 നർത്തകൻ // [1F57A] +🖇 കോർത്തിരിക്കുന്ന പേപ്പർ ക്ലിപ്പുകൾ // [1F587] text|emoji +🖊 പേന // [1F58A] text|emoji +🖋 ഫൗണ്ടൻ പേന // [1F58B] text|emoji +🖌 പെയിന്റ് ബ്രഷ് // [1F58C] text|emoji +🖍 ക്രയോൺ // [1F58D] text|emoji +🖐 ഉയർത്തിയ കൈപ്പത്തി // [1F590] text|emoji +🖕 നടുവിരൽ // [1F595] +🖖 വുൾകാൻ സല്യൂട്ട് // [1F596] +🖤 ദുഷിച്ച ഹൃദയം // [1F5A4] +🖥 ഡെസ്‌ക്‌ടോപ്പ് കമ്പ്യൂട്ടർ // [1F5A5] text|emoji +🖨 പ്രിന്റർ // [1F5A8] text|emoji +🖱 കമ്പ്യൂട്ടർ മൗസ് // [1F5B1] text|emoji +🖲 ട്രാക്ക്‌ബോൾ // [1F5B2] text|emoji +🖼 ചിത്രം // [1F5BC] text|emoji +🗂 കാർഡ് ഇൻഡക്‌സ് ഡിവൈഡറുകൾ // [1F5C2] text|emoji +🗃 കാർഡ് ഫയൽ ബോക്‌സ് // [1F5C3] text|emoji +🗄 ഫയൽ കാബിനെറ്റ് // [1F5C4] text|emoji +🗑 ചവറ്റുകുട്ട // [1F5D1] text|emoji +🗒 സ്‌പൈറൽ നോട്ട്പാഡ് // [1F5D2] text|emoji +🗓 സ്‌പൈറൽ കലണ്ടർ // [1F5D3] text|emoji +🗜 കംപ്രഷൻ // [1F5DC] text|emoji +🗝 പഴയ താക്കോൽ // [1F5DD] text|emoji +🗞 ചുരുളാക്കിയ പത്രം // [1F5DE] text|emoji +🗡 വാൾ // [1F5E1] text|emoji +🗣 സംസാരിക്കുന്നയാൾ // [1F5E3] text|emoji +🗨 ഇടത്തേക്കുള്ള സംഭാഷണ ബബിൾ // [1F5E8] text|emoji +🗯 വലത്തേക്കുള്ള ദേഷ്യ ബലൂൺ // [1F5EF] text|emoji +🗳 ബാലറ്റ് പെട്ടിയും ബാലറ്റും // [1F5F3] text|emoji +🗺 ലോക മാപ്പ് // [1F5FA] text|emoji +🗻 ഫുജി പർവ്വതം // [1F5FB] +🗼 ടോക്കിയോ ടവർ // [1F5FC] +🗽 സ്വാതന്ത്ര്യ പ്രതിമ // [1F5FD] +🗾 ജപ്പാന്റെ മാപ്പ് // [1F5FE] +🗿 മോയായ് // [1F5FF] + +// 1F600..1F64F : Emoticons + +😀 കളിയാക്കി ചിരിക്കുന്ന മുഖം // [1F600] +😁 പുഞ്ചിരിക്കുന്ന കണ്ണുകളുമായി കളിയാക്കി ചിരിക്കുന്ന മുഖം // [1F601] +😂 ആനന്ദാശ്രുക്കളോടെയുള്ള മുഖം // [1F602] +😃 തുറന്ന വായയുള്ള പുഞ്ചിരിക്കുന്ന മുഖം // [1F603] +😄 തുറന്ന വായയും പുഞ്ചിരിക്കുന്ന കണ്ണുകളുമുള്ള പുഞ്ചിരിക്കുന്ന മുഖം// [1F604] +😅 തുറന്ന വായയും തണുത്ത വിയർപ്പുമുള്ള പുഞ്ചിരിക്കുന്ന മുഖം // [1F605] +😆 തുറന്ന വായയും ഇറുക്കിയടച്ച കണ്ണുകളുമുള്ള പുഞ്ചിരിക്കുന്ന മുഖം // [1F606] +😇 പ്രകാശവലയമുള്ള പുഞ്ചിരിക്കുന്ന മുഖം // [1F607] +😈 കൊമ്പുകളുള്ള പുഞ്ചിരിക്കുന്ന മുഖം // [1F608] +😉 കണ്ണടിക്കുന്ന മുഖം // [1F609] +😊 പുഞ്ചിരിക്കുന്ന കണ്ണുകളുള്ള പുഞ്ചിരിക്കുന്ന മുഖം // [1F60A] +😋 രുചിയുള്ള ഭക്ഷണം കഴിക്കുന്ന മുഖം // [1F60B] +😌 ആശ്വാസമുള്ള മുഖം // [1F60C] +😍 ഹൃദയാകൃതിയിലുള്ള കണ്ണുകളുള്ള പുഞ്ചിരിക്കുന്ന മുഖം // [1F60D] +😎 കണ്ണടയുള്ള പുഞ്ചിരിക്കുന്ന മുഖം // [1F60E] +😏 കൃതൃമിച്ചിരിയുള്ള മുഖം // [1F60F] +😐 നിഷ്‌പക്ഷമായ മുഖം // [1F610] +😑 നിർവികാരമായ മുഖം // [1F611] +😒 അസന്തുഷ്‌ടമായ മുഖം // [1F612] +😓 തണുത്ത വിയർപ്പുള്ള മുഖം // [1F613] +😔 ചിന്താകുലമായ മുഖം // [1F614] +😕 ആശയക്കുഴപ്പമുള്ള മുഖം // [1F615] +😖 മ്ലാനമായ മുഖം // [1F616] +😗 ചുംബിക്കുന്ന മുഖം // [1F617] +😘 ചുംബനം നൽകുന്ന മുഖം // [1F618] +😙 പുഞ്ചിരിക്കുന്ന കണ്ണുകളോടെ ചുംബിക്കുന്ന മുഖം // [1F619] +😚 അടഞ്ഞ കണ്ണുകളോടെ ചുംബിക്കുന്ന മുഖം // [1F61A] +😛 പുറത്തേക്ക് നാക്ക് നീട്ടുന്ന മുഖം // [1F61B] +😜 കണ്ണിറുക്കി, നാവ് പുറത്തേക്ക് നീട്ടുന്ന മുഖം // [1F61C] +😝 കണ്ണ് ഇറുക്കിയടച്ച് നാവ് പുറത്തേക്ക് നീട്ടുന്ന മുഖം // [1F61D] +😞 നിരാശാഭരിതമായ മുഖം // [1F61E] +😟 ആകുലമായ മുഖം // [1F61F] +😠 കോപാകുലമായ മുഖം // [1F620] +😡 ദേഷ്യമുള്ള മുഖം // [1F621] +😢 കരയുന്ന മുഖം // [1F622] +😣 നിസ്സഹായമായ മുഖം // [1F623] +😤 ദേഷ്യം കൊണ്ട് നിശ്വസിക്കുന്ന മുഖം // [1F624] +😥 നിരാശയുണ്ടെങ്കിലും ആശ്വാസഭാവത്തിലുള്ള മുഖം // [1F625] +😦 തുറന്നവായയുമായി നീരസ ഭാവത്തിലുള്ള മുഖം // [1F626] +😧 മനോവേദന നിറഞ്ഞ മുഖം // [1F627] +😨 ഭയചകിതമായ മുഖം // [1F628] +😩 ക്ഷീണിച്ച മുഖം // [1F629] +😪 ഉറക്കം തൂങ്ങുന്ന മുഖം // [1F62A] +😫 തളർച്ചയുള്ള മുഖം // [1F62B] +😬 ഗോഷ്‌ടി കാണിക്കുന്ന മുഖം // [1F62C] +😭 പൊട്ടിക്കരയുന്ന മുഖം // [1F62D] +😮 തുറന്ന വായയുള്ള മുഖം // [1F62E] +😯 സ്‌തബ്‌ധമായ മുഖം // [1F62F] +😰 തുറന്ന വായയും തണുത്ത വിയർപ്പുമുള്ള മുഖം // [1F630] +😱 ഭയന്ന് നിലവിളിക്കുന്ന മുഖം // [1F631] +😲 അത്ഭുതം നിറഞ്ഞ മുഖം // [1F632] +😳 സ്‌തംഭിച്ച മുഖം // [1F633] +😴 ഉറങ്ങുന്ന മുഖം // [1F634] +😵 മയക്കത്തിലാണ്ട മുഖം // [1F635] +😶 വായയില്ലാത്ത മുഖം // [1F636] +😷 മെഡിക്കൽ മാസ്‌കുള്ള മുഖം // [1F637] +😸 പുഞ്ചിരിക്കുന്ന കണ്ണുകളോടെ കളിയാക്കുന്ന പൂച്ച മുഖം // [1F638] +😹 ആനന്ദാശ്രുക്കളുള്ള പൂച്ച മുഖം // [1F639] +😺 തുറന്ന വായയുള്ള, പുഞ്ചിരിക്കുന്ന പൂച്ച മുഖം // [1F63A] +😻 ഹൃദയാകൃതിയിലുള്ള കണ്ണുകളുള്ള പുഞ്ചിരിക്കുന്ന പൂച്ച മുഖം // [1F63B] +😼 പരിഹാസച്ചിരിയുള്ള പൂച്ച മുഖം // [1F63C] +😽 അടഞ്ഞ കണ്ണുകളുമായി ചുംബിക്കുന്ന പൂച്ച മുഖം // [1F63D] +😾 ദേഷ്യപ്പെടുന്ന പൂച്ച മുഖം // [1F63E] +😿 കരയുന്ന പൂച്ച മുഖം // [1F63F] +🙀 ക്ഷീണമുള്ള പൂച്ച മുഖം // [1F640] +🙁 കുറച്ച് നീരസഭാവത്തിലുള്ള മുഖം // [1F641] +🙂 മന്ദഹസിക്കുന്ന മുഖം // [1F642] +🙃 തലകീഴായി നിൽക്കുന്ന മുഖം // [1F643] +🙄 കറങ്ങുന്ന കണ്ണുകളുള്ള മുഖം // [1F644] +🙅 സമ്മതമല്ലെന്ന് ആംഗ്യം കാണിക്കുന്നു // [1F645] +🙆 സമ്മതമെന്ന് ആംഗ്യം കാണിക്കുന്നു // [1F646] +🙇 തല കുനിയ്‌ക്കുന്ന വ്യക്തി // [1F647] +🙈 മോശമായ കാര്യങ്ങൾ കാണരുത് // [1F648] +🙉 മോശമായ കാര്യങ്ങൾ കേൾക്കരുത് // [1F649] +🙊 മോശമായ കാര്യങ്ങൾ പറയരുത് // [1F64A] +🙋 കൈ ഉയർത്തുന്ന സന്തോഷവാനായ വ്യക്തി // [1F64B] +🙌 കൈകൾ ഉയർത്തുന്ന വ്യക്തി // [1F64C] +🙍 നീരസഭാവമുള്ള വ്യക്തി // [1F64D] +🙎 ദേഷ്യപ്പെടുന്ന വ്യക്തി // [1F64E] +🙏 കൂപ്പുകൈ // [1F64F] + +// 1F680..1F6FF : Transport and Map Symbols + +🚀 റോക്കറ്റ് // [1F680] +🚁 ഹെലികോപ്റ്റർ // [1F681] +🚂 ലോക്കോമോട്ടീവ് // [1F682] +🚃 റെയിൽവേ കാർ // [1F683] +🚄 അതിവേഗ ട്രെയിൻ // [1F684] +🚅 ബുള്ളറ്റ് മൂക്കുള്ള അതിവേഗ ട്രെയിൻ // [1F685] +🚆 ട്രെയിൻ // [1F686] +🚇 മെട്രോ // [1F687] +🚈 ലൈറ്റ് റെയിൽ // [1F688] +🚉 റെയിൽവേ സ്റ്റേഷൻ // [1F689] +🚊 ട്രാം // [1F68A] +🚋 ട്രാം കാർ // [1F68B] +🚌 ബസ് // [1F68C] +🚍 വരുന്ന ബസ് // [1F68D] +🚎 ട്രോളി ബസ് // [1F68E] +🚏 ബസ് സ്റ്റോപ്പ് // [1F68F] +🚐 മിനിബസ് // [1F690] +🚑 ആംബുലൻസ് // [1F691] +🚒 ഫയർ എഞ്ചിൻ // [1F692] +🚓 പൊലീസ് കാർ // [1F693] +🚔 വരുന്ന പൊലീസ് കാർ // [1F694] +🚕 ടാക്സി // [1F695] +🚖 വരുന്ന ടാക്സി // [1F696] +🚗 ഓട്ടോമൊബൈൽ // [1F697] +🚘 വരുന്ന ഓട്ടോമൊബൈൽ // [1F698] +🚙 റീക്രിയേഷണൽ വെഹിക്കിൾ // [1F699] +🚚 ഡെലിവറി ട്രക്ക് // [1F69A] +🚛 ആർട്ടിക്കുലേറ്റഡ് ലോറി // [1F69B] +🚜 ട്രാക്‌റ്റർ // [1F69C] +🚝 മോണോറെയിൽ // [1F69D] +🚞 പർവ്വത റെയിൽവേ // [1F69E] +🚟 സസ്പെൻഷൻ റെയിൽവേ // [1F69F] +🚠 പർവ്വത കേബിൾവേ // [1F6A0] +🚡 ആകാശ ട്രാംവേ // [1F6A1] +🚢 കപ്പൽ // [1F6A2] +🚣 വഞ്ചി // [1F6A3] +🚤 സ്പീഡ് ബോട്ട് // [1F6A4] +🚥 തിരശ്ചീന ട്രാഫിക്ക് ലൈഫ് // [1F6A5] +🚦 ലംബ ട്രാഫിക്ക് ലൈഫ് // [1F6A6] +🚧 നിർമ്മാണ ചിഹ്നം // [1F6A7] +🚨 പൊലീസ് വാഹനത്തിന്റെ ലൈറ്റ് // [1F6A8] +🚩 ത്രികോണ പതാക // [1F6A9] +🚪 വാതിൽ // [1F6AA] +🚫 നിയന്ത്രിതമാണ് // [1F6AB] +🚬 പുകവലി ചിഹ്നം // [1F6AC] +🚭 പുകവലി പാടില്ല // [1F6AD] +🚮 ചവറുകൾ, ചവറ്റുകുട്ടയിൽ നിക്ഷേപിക്കുക // [1F6AE] +🚯 ഇവിടെ ചവറുകളിടരുത് // [1F6AF] +🚰 കുടിവെള്ളം // [1F6B0] +🚱 ശുദ്ധജലമല്ല // [1F6B1] +🚲 സൈക്കിൾ // [1F6B2] +🚳 സൈക്കിൾ പാടില്ല // [1F6B3] +🚴 സൈക്ലിസ്റ്റ് // [1F6B4] +🚵 മൗണ്ടെയ്‌ൻ ബൈക്കർ // [1F6B5] +🚶 കാൽനടയാത്രക്കാരൻ // [1F6B6] +🚷 കാൽനടയാത്ര പാടില്ല // [1F6B7] +🚸 കുട്ടികൾ റോഡ് മുറിച്ചുകടക്കുന്നു // [1F6B8] +🚹 പുരുഷൻമാർക്കുള്ള മുറി // [1F6B9] +🚺 സ്‌ത്രീകൾക്കുള്ള മുറി // [1F6BA] +🚻 റെസ്‌റ്റ് റൂം // [1F6BB] +🚼 ശിശു ചിഹ്നം // [1F6BC] +🚽 ടോയ്ലറ്റ് // [1F6BD] +🚾 വാട്ടർ ക്ലോസറ്റ് // [1F6BE] +🚿 ഷവർ // [1F6BF] +🛀 കുളിക്കുന്നയാൾ // [1F6C0] +🛁 ബാത്ത് ടബ് // [1F6C1] +🛂 പാസ്‌പോർട്ട് കൺട്രോൾ // [1F6C2] +🛃 കസ്റ്റംസ് // [1F6C3] +🛄 ബാഗേജ് ക്ലെയിം // [1F6C4] +🛅 ലഗേജ് // [1F6C5] +🛋 കിടക്കയും വിളക്കും // [1F6CB] text|emoji +🛌 കട്ടിലിൽ കിടക്കുന്നയാൾ // [1F6CC] +🛍 ഷോപ്പിംഗ് ബാഗുകൾ // [1F6CD] text|emoji +🛎 ബെൽഹോപ്പ് ബെൽ // [1F6CE] text|emoji +🛏 ബെഡ് // [1F6CF] text|emoji +🛐 അമ്പലം // [1F6D0] +🛑 നിർത്താനുള്ള അടയാളം // [1F6D1] +🛒 ഷോപ്പിംഗ് കാർട്ട് // [1F6D2] +🛠 ചുറ്റികയും റെഞ്ചും // [1F6E0] text|emoji +🛡 ഷീൽഡ് // [1F6E1] text|emoji +🛢 എണ്ണ പാത്രം // [1F6E2] text|emoji +🛣 മോട്ടോർവേ // [1F6E3] text|emoji +🛤 റെയിൽവേ പാളം // [1F6E4] text|emoji +🛥 മോട്ടോർ ബോട്ട് // [1F6E5] text|emoji +🛩 ചെറുവിമാനം // [1F6E9] text|emoji +🛫 വിമാനത്തിന്റെ പുറപ്പെടൽ // [1F6EB] +🛬 വിമാനം എത്തിച്ചേരൽ // [1F6EC] +🛰 ഉപഗ്രഹം // [1F6F0] text|emoji +🛳 യാത്രക്കാർക്കുള്ള കപ്പൽ // [1F6F3] text|emoji +🛴 കിക്ക് സ്കൂട്ടർ // [1F6F4] +🛵 മോട്ടോർ സ്കൂട്ടർ // [1F6F5] +🛶 വള്ളം തുഴയൽ // [1F6F6] +🛷 sled // [1F6F7] (no translation) +🛸 flying saucer // [1F6F8] (no translation) + +// 1F900..1F9FF : Supplemental Symbols and Pictographs + +🤐 വായ അടച്ചുനിൽക്കുന്ന മുഖം // [1F910] +🤑 പണക്കൊതിയുള്ള മുഖം // [1F911] +🤒 തെർമോമീറ്ററുള്ള മുഖം // [1F912] +🤓 കോമാളി മുഖം // [1F913] +🤔 ആലോചനയിൽ മുഴുകിയ മുഖം // [1F914] +🤕 തലയിൽ ബാൻഡേജുള്ള മുഖം // [1F915] +🤖 റോബോട്ടിന്റെ മുഖം // [1F916] +🤗 സ്‌നേഹം പ്രകടിപ്പിക്കുന്ന മുഖം // [1F917] +🤘 കൊമ്പുകളുടെ ചിഹ്നം // [1F918] +🤙 വിളിക്കാനുള്ള സൂചന // [1F919] +🤚 ഉയർത്തിയ പുറം കൈ // [1F91A] +🤛 ഇടത്തോട്ട് ചുരുട്ടിയ കൈ // [1F91B] +🤜 വലത്തോട്ട് ചുരുട്ടിയ കൈ // [1F91C] +🤝 ഹസ്തദാനം // [1F91D] +🤞 ഭാഗ്യസൂചന // [1F91E] +🤟 love you gesture // [1F91F] (no translation) +🤠 കൗബോയി ഹാറ്റ് ഫെയ്സ് // [1F920] +🤡 കോമാളി ഭാവം // [1F921] +🤢 ഓക്കാന ഭാവം // [1F922] +🤣 ചിരിച്ചുചിരിച്ച് മണ്ണുകപ്പുക // [1F923] +🤤 തുപ്പൽ ഒലിക്കുന്ന മുഖം // [1F924] +🤥 കള്ളലക്ഷണം // [1F925] +🤦 തലയിൽ കൈവയ്ക്കൽ // [1F926] +🤧 മൂക്കൊലിക്കുന്ന മുഖം // [1F927] +🤨 face with raised eyebrow // [1F928] (no translation) +🤩 star struck // [1F929] (no translation) +🤪 crazy face // [1F92A] (no translation) +🤫 shushing face // [1F92B] (no translation) +🤬 face with symbols over mouth // [1F92C] (no translation) +🤭 face with hand over mouth // [1F92D] (no translation) +🤮 face vomiting // [1F92E] (no translation) +🤯 exploding head // [1F92F] (no translation) +🤰 ഗർഭിണി // [1F930] +🤱 breast feeding // [1F931] (no translation) +🤲 palms up together // [1F932] (no translation) +🤳 സെൽഫി // [1F933] +🤴 രാജകുമാരൻ // [1F934] +🤵 സ്യൂട്ട് ധരിച്ചയാൾ // [1F935] +🤶 മദർ ക്രിസ്മസ് // [1F936] +🤷 തോൾ വെട്ടിക്കൽ // [1F937] +🤸 കൈകുത്തി മറിയൽ // [1F938] +🤹 അമ്മാനമാടൽ // [1F939] +🤺 വാൾപയറ്റുകാരൻ // [1F93A] +🤼 ഗുസ്തിക്കാർ // [1F93C] +🤽 വാട്ടർ പോളോ // [1F93D] +🤾 ഹാൻഡ്ബോൾ // [1F93E] +🥀 വാടിയ പുഷ്പം // [1F940] +🥁 ചെണ്ട // [1F941] +🥂 ഗ്ലാസ്സുകൾ കൂട്ടിമുട്ടിക്കൽ // [1F942] +🥃 ടംബ്ലർ ഗ്ലാസ് // [1F943] +🥄 സ്പൂൺ // [1F944] +🥅 ഗോൾ നെറ്റ് // [1F945] +🥇 ഒന്നാം സ്ഥാനമെഡൽ // [1F947] +🥈 രണ്ടാം സ്ഥാനമെഡൽ // [1F948] +🥉 മൂന്നാം സ്ഥാനമെഡൽ // [1F949] +🥊 ബോക്സിംഗ് ഗ്ലൗവ് // [1F94A] +🥋 ആയോധനകലയ്ക്കുള്ള യൂണിഫോം // [1F94B] +🥌 curling stone // [1F94C] (no translation) +🥐 ഫ്രെഞ്ച് റോൾ // [1F950] +🥑 വെണ്ണപ്പഴം // [1F951] +🥒 വെള്ളരിക്ക // [1F952] +🥓 ഉണക്കിയ പന്നിയിറച്ചി // [1F953] +🥔 ഉരുളക്കിഴങ്ങ് // [1F954] +🥕 ക്യാരറ്റ് // [1F955] +🥖 ബാഗെറ്റ് ബ്രെഡ് // [1F956] +🥗 ഗ്രീൻ സാലഡ് // [1F957] +🥘 പരന്ന പാത്രത്തിലെ ഭക്ഷണം // [1F958] +🥙 സ്റ്റഫ് ചെയ്ത ഫ്ലാറ്റ്‌ബ്രെഡ് // [1F959] +🥚 മുട്ട // [1F95A] +🥛 പാൽ ഗ്ലാസ്സ് // [1F95B] +🥜 നിലക്കടല // [1F95C] +🥝 കിവിപ്പഴം // [1F95D] +🥞 പാൻ കേക്ക് // [1F95E] +🥟 dumpling // [1F95F] (no translation) +🥠 fortune cookie // [1F960] (no translation) +🥡 takeout box // [1F961] (no translation) +🥢 chopsticks // [1F962] (no translation) +🥣 bowl with spoon // [1F963] (no translation) +🥤 cup with straw // [1F964] (no translation) +🥥 coconut // [1F965] (no translation) +🥦 broccoli // [1F966] (no translation) +🥧 pie // [1F967] (no translation) +🥨 pretzel // [1F968] (no translation) +🥩 cut of meat // [1F969] (no translation) +🥪 sandwich // [1F96A] (no translation) +🥫 canned food // [1F96B] (no translation) +🦀 ഞണ്ട് // [1F980] +🦁 സിംഹ മുഖം // [1F981] +🦂 തേൾ // [1F982] +🦃 ടർക്കി കോഴി // [1F983] +🦄 ഒറ്റക്കൊമ്പുള്ള കുതിര മുഖം // [1F984] +🦅 കഴുകൻ // [1F985] +🦆 താറാവ് // [1F986] +🦇 വവ്വാൽ // [1F987] +🦈 സ്രാവ് // [1F988] +🦉 മൂങ്ങ // [1F989] +🦊 കുറുക്കന്റെ മുഖം // [1F98A] +🦋 ചിത്രശലഭം // [1F98B] +🦌 മാൻ // [1F98C] +🦍 ഗോറില്ല // [1F98D] +🦎 പല്ലി // [1F98E] +🦏 കാണ്ടാമൃഗം // [1F98F] +🦐 ചെമ്മീൻ // [1F990] +🦑 കൂന്തൾ // [1F991] +🦒 giraffe // [1F992] (no translation) +🦓 zebra // [1F993] (no translation) +🦔 hedgehog // [1F994] (no translation) +🦕 sauropod // [1F995] (no translation) +🦖 t rex // [1F996] (no translation) +🦗 cricket // [1F997] (no translation) +🧀 പാൽക്കട്ടി // [1F9C0] +🧐 face with monocle // [1F9D0] (no translation) +🧑 adult // [1F9D1] (no translation) +🧒 child // [1F9D2] (no translation) +🧓 older adult // [1F9D3] (no translation) +🧔 bearded person // [1F9D4] (no translation) +🧕 woman with headscarf // [1F9D5] (no translation) +🧖 person in steamy room // [1F9D6] (no translation) +🧗 person climbing // [1F9D7] (no translation) +🧘 person in lotus position // [1F9D8] (no translation) +🧙 mage // [1F9D9] (no translation) +🧚 fairy // [1F9DA] (no translation) +🧛 vampire // [1F9DB] (no translation) +🧜 merperson // [1F9DC] (no translation) +🧝 elf // [1F9DD] (no translation) +🧞 genie // [1F9DE] (no translation) +🧟 zombie // [1F9DF] (no translation) +🧠 brain // [1F9E0] (no translation) +🧡 orange heart // [1F9E1] (no translation) +🧢 billed cap // [1F9E2] (no translation) +🧣 scarf // [1F9E3] (no translation) +🧤 gloves // [1F9E4] (no translation) +🧥 coat // [1F9E5] (no translation) +🧦 socks // [1F9E6] (no translation) + +// Country Flags (Regional Indicator Symbols) -- ISO 3166-1 Country Codes + +🇦🇨 അസൻഷൻ ദ്വീപ് // [1F1E6 1F1E8] AC +🇦🇩 അന്റോറ // [1F1E6 1F1E9] AD +🇦🇪 യുണൈറ്റഡ് അറബ് എമിറൈറ്റ്‌സ് // [1F1E6 1F1EA] AE +🇦🇫 അഫ്‌ഗാനിസ്ഥാൻ // [1F1E6 1F1EB] AF +🇦🇬 ആൻറിഗ്വയും ബർബുഡയും // [1F1E6 1F1EC] AG +🇦🇮 ആൻഗ്വില്ല // [1F1E6 1F1EE] AI +🇦🇱 അൽബേനിയ // [1F1E6 1F1F1] AL +🇦🇲 അർമേനിയ // [1F1E6 1F1F2] AM +🇦🇴 അംഗോള // [1F1E6 1F1F4] AO +🇦🇶 അൻറാർട്ടിക്ക // [1F1E6 1F1F6] AQ +🇦🇷 അർജൻറീന // [1F1E6 1F1F7] AR +🇦🇸 അമേരിക്കൻ സമോവ // [1F1E6 1F1F8] AS +🇦🇹 ഓസ്ട്രിയ // [1F1E6 1F1F9] AT +🇦🇺 ഓസ്‌ട്രേലിയ // [1F1E6 1F1FA] AU +🇦🇼 അറൂബ // [1F1E6 1F1FC] AW +🇦🇽 അലൻഡ് ദ്വീപുകൾ // [1F1E6 1F1FD] AX +🇦🇿 അസർബൈജാൻ // [1F1E6 1F1FF] AZ +🇧🇦 ബോസ്നിയയും ഹെർസഗോവിനയും // [1F1E7 1F1E6] BA +🇧🇧 ബാർബഡോസ് // [1F1E7 1F1E7] BB +🇧🇩 ബംഗ്ലാദേശ് // [1F1E7 1F1E9] BD +🇧🇪 ബെൽജിയം // [1F1E7 1F1EA] BE +🇧🇫 ബുർക്കിനാ ഫാസോ // [1F1E7 1F1EB] BF +🇧🇬 ബൾഗേറിയ // [1F1E7 1F1EC] BG +🇧🇭 ബഹ്റിൻ // [1F1E7 1F1ED] BH +🇧🇮 ബറുണ്ടി // [1F1E7 1F1EE] BI +🇧🇯 ബെനിൻ // [1F1E7 1F1EF] BJ +🇧🇱 സെന്റ് ബാർത്തലമി // [1F1E7 1F1F1] BL +🇧🇲 ബർമുഡ // [1F1E7 1F1F2] BM +🇧🇳 ബ്രൂണൈ // [1F1E7 1F1F3] BN +🇧🇴 ബൊളീവിയ // [1F1E7 1F1F4] BO +🇧🇶 കരീബിയൻ നെതർലാൻഡ്സ് // [1F1E7 1F1F6] BQ +🇧🇷 ബ്രസീൽ // [1F1E7 1F1F7] BR +🇧🇸 ബഹാമാസ് // [1F1E7 1F1F8] BS +🇧🇹 ഭൂട്ടാൻ // [1F1E7 1F1F9] BT +🇧🇻 ബൗവെട്ട് ദ്വീപ് // [1F1E7 1F1FB] BV +🇧🇼 ബോട്സ്വാന // [1F1E7 1F1FC] BW +🇧🇾 ബെലറൂസ് // [1F1E7 1F1FE] BY +🇧🇿 ബെലീസ് // [1F1E7 1F1FF] BZ +🇨🇦 കാനഡ // [1F1E8 1F1E6] CA +🇨🇨 കോക്കസ് (കീലിംഗ്) ദ്വീപുകൾ // [1F1E8 1F1E8] CC +🇨🇩 കോംഗോ - കിൻഷാസ // [1F1E8 1F1E9] CD +🇨🇫 സെൻട്രൽ ആഫ്രിക്കൻ റിപ്പബ്ലിക് // [1F1E8 1F1EB] CF +🇨🇬 കോംഗോ - ബ്രാസവില്ലി // [1F1E8 1F1EC] CG +🇨🇭 സ്വിറ്റ്സർലാൻഡ് // [1F1E8 1F1ED] CH +🇨🇮 കോട്ട് ഡി വാർ // [1F1E8 1F1EE] CI +🇨🇰 കുക്ക് ദ്വീപുകൾ // [1F1E8 1F1F0] CK +🇨🇱 ചിലി // [1F1E8 1F1F1] CL +🇨🇲 കാമറൂൺ // [1F1E8 1F1F2] CM +🇨🇳 ചൈന // [1F1E8 1F1F3] CN +🇨🇴 കൊളംബിയ // [1F1E8 1F1F4] CO +🇨🇵 ക്ലിപ്പെർട്ടൻ ദ്വീപ് // [1F1E8 1F1F5] CP +🇨🇷 കോസ്റ്ററിക്ക // [1F1E8 1F1F7] CR +🇨🇺 ക്യൂബ // [1F1E8 1F1FA] CU +🇨🇻 കേപ്പ് വെർദെ // [1F1E8 1F1FB] CV +🇨🇼 കുറാകാവോ // [1F1E8 1F1FC] CW +🇨🇽 ക്രിസ്മസ് ദ്വീപ് // [1F1E8 1F1FD] CX +🇨🇾 സൈപ്രസ് // [1F1E8 1F1FE] CY +🇨🇿 ചെക്കിയ // [1F1E8 1F1FF] CZ +🇩🇪 ജർമനി // [1F1E9 1F1EA] DE +🇩🇬 ഡീഗോ ഗ്രാഷ്യ // [1F1E9 1F1EC] DG +🇩🇯 ദിജിബൗട്ടി // [1F1E9 1F1EF] DJ +🇩🇰 ഡെൻമാർക്ക് // [1F1E9 1F1F0] DK +🇩🇲 ഡൊമിനിക്ക // [1F1E9 1F1F2] DM +🇩🇴 ഡൊമിനിക്കൻ റിപ്പബ്ലിക് // [1F1E9 1F1F4] DO +🇩🇿 അൾജീരിയ // [1F1E9 1F1FF] DZ +🇪🇦 സെയൂത്ത ആൻഡ് മെലിയ // [1F1EA 1F1E6] EA +🇪🇨 ഇക്വഡോർ // [1F1EA 1F1E8] EC +🇪🇪 എസ്റ്റോണിയ‍ // [1F1EA 1F1EA] EE +🇪🇬 ഈജിപ്ത് // [1F1EA 1F1EC] EG +🇪🇭 പശ്ചിമ സഹാറ // [1F1EA 1F1ED] EH +🇪🇷 എറിത്രിയ // [1F1EA 1F1F7] ER +🇪🇸 സ്‌പെയിൻ // [1F1EA 1F1F8] ES +🇪🇹 എത്യോപ്യ // [1F1EA 1F1F9] ET +🇪🇺 യൂറോപ്യൻ യൂണിയൻ // [1F1EA 1F1FA] EU +🇫🇮 ഫിൻലാൻഡ് // [1F1EB 1F1EE] FI +🇫🇯 ഫിജി // [1F1EB 1F1EF] FJ +🇫🇰 ഫാക്ക്‌ലാന്റ് ദ്വീപുകൾ // [1F1EB 1F1F0] FI +🇫🇲 മൈക്രോനേഷ്യ // [1F1EB 1F1F2] FM +🇫🇴 ഫറോ ദ്വീപുകൾ // [1F1EB 1F1F4] FO +🇫🇷 ഫ്രാൻസ് // [1F1EB 1F1F7] FR +🇬🇦 ഗാബൺ // [1F1EC 1F1E6] GA +🇬🇧 യുണൈറ്റഡ് കിംഗ്ഡം // [1F1EC 1F1E7] GB +🇬🇩 ഗ്രനേഡ // [1F1EC 1F1E9] GD +🇬🇪 ജോർജ്ജിയ // [1F1EC 1F1EA] GE +🇬🇫 ഫ്രഞ്ച് ഗയാന // [1F1EC 1F1EB] GF +🇬🇬 ഗേൺസി // [1F1EC 1F1EC] GG +🇬🇭 ഘാന // [1F1EC 1F1ED] GH +🇬🇮 ജിബ്രാൾട്ടർ // [1F1EC 1F1EE] GI +🇬🇱 ഗ്രീൻലാൻറ് // [1F1EC 1F1F1] GL +🇬🇲 ഗാംബിയ // [1F1EC 1F1F2] GM +🇬🇳 ഗിനിയ // [1F1EC 1F1F3] GN +🇬🇵 ഗ്വാഡലൂപ്പ് // [1F1EC 1F1F5] GP +🇬🇶 ഇക്വറ്റോറിയൽ ഗിനിയ // [1F1EC 1F1F6] GQ +🇬🇷 ഗ്രീസ് // [1F1EC 1F1F7] GR +🇬🇸 ദക്ഷിണ ജോർജ്ജിയയും ദക്ഷിണ സാൻഡ്‌വിച്ച് ദ്വീപുകളും // [1F1EC 1F1F8] GS +🇬🇹 ഗ്വാട്ടിമാല // [1F1EC 1F1F9] GT +🇬🇺 ഗ്വാം // [1F1EC 1F1FA] GU +🇬🇼 ഗിനിയ-ബിസൗ // [1F1EC 1F1FC] GW +🇬🇾 ഗയാന // [1F1EC 1F1FE] GY +🇭🇰 ഹോങ്കോങ്ങ് (SAR) ചൈന // [1F1ED 1F1F0] HK +🇭🇲 ഹിയേർഡും മക്‌ഡൊണാൾഡ് ദ്വീപുകളും // [1F1ED 1F1F2] HM +🇭🇳 ഹോണ്ടുറാസ് // [1F1ED 1F1F3] HN +🇭🇷 ക്രൊയേഷ്യ // [1F1ED 1F1F7] HR +🇭🇹 ഹെയ്തി // [1F1ED 1F1F9] HT +🇭🇺 ഹംഗറി // [1F1ED 1F1FA] HU +🇮🇨 കാനറി ദ്വീപുകൾ // [1F1EE 1F1E8] IC +🇮🇩 ഇന്തോനേഷ്യ // [1F1EE 1F1E9] ID +🇮🇪 അയർലൻഡ് // [1F1EE 1F1EA] IE +🇮🇱 ഇസ്രായേൽ // [1F1EE 1F1F1] IL +🇮🇲 ഐൽ ഓഫ് മാൻ // [1F1EE 1F1F2] IM +🇮🇳 ഇന്ത്യ // [1F1EE 1F1F3] IN +🇮🇴 ബ്രിട്ടീഷ് ഇന്ത്യൻ മഹാസമുദ്ര പ്രദേശം // [1F1EE 1F1F4] IO +🇮🇶 ഇറാഖ് // [1F1EE 1F1F6] IQ +🇮🇷 ഇറാൻ // [1F1EE 1F1F7] IR +🇮🇸 ഐസ്‌ലാന്റ് // [1F1EE 1F1F8] IS +🇮🇹 ഇറ്റലി // [1F1EE 1F1F9] IT +🇯🇪 ജേഴ്സി // [1F1EF 1F1EA] JE +🇯🇲 ജമൈക്ക // [1F1EF 1F1F2] JM +🇯🇴 ജോർദ്ദാൻ // [1F1EF 1F1F4] JO +🇯🇵 ജപ്പാൻ // [1F1EF 1F1F5] JP +🇰🇪 കെനിയ // [1F1F0 1F1EA] KE +🇰🇬 കിർഗിസ്ഥാൻ // [1F1F0 1F1EC] KG +🇰🇭 കംബോഡിയ // [1F1F0 1F1ED] KH +🇰🇮 കിരിബാട്ടി // [1F1F0 1F1EE] KI +🇰🇲 കോമൊറോസ് // [1F1F0 1F1F2] KM +🇰🇳 സെന്റ് കിറ്റ്‌സും നെവിസും // [1F1F0 1F1F3] KN +🇰🇵 ഉത്തരകൊറിയ // [1F1F0 1F1F5] KP +🇰🇷 ദക്ഷിണകൊറിയ // [1F1F0 1F1F7] KR +🇰🇼 കുവൈറ്റ് // [1F1F0 1F1FC] KW +🇰🇾 കേമാൻ ദ്വീപുകൾ // [1F1F0 1F1FE] KY +🇰🇿 കസാഖിസ്ഥാൻ // [1F1F0 1F1FF] KZ +🇱🇦 ലാവോസ് // [1F1F1 1F1E6] LA +🇱🇧 ലെബനൻ // [1F1F1 1F1E7] LB +🇱🇨 സെൻറ് ലൂസിയ // [1F1F1 1F1E8] LC +🇱🇮 ലിച്ചൺസ്റ്റൈൻ // [1F1F1 1F1EE] LI +🇱🇰 ശ്രീലങ്ക // [1F1F1 1F1F0] LK +🇱🇷 ലൈബീരിയ // [1F1F1 1F1F7] LR +🇱🇸 ലെസോതോ // [1F1F1 1F1F8] LS +🇱🇹 ലിത്വാനിയ // [1F1F1 1F1F9] LT +🇱🇺 ലക്സംബർഗ് // [1F1F1 1F1FA] LU +🇱🇻 ലാറ്റ്വിയ // [1F1F1 1F1FB] LV +🇱🇾 ലിബിയ // [1F1F1 1F1FE] LY +🇲🇦 മൊറോക്കൊ // [1F1F2 1F1E6] MA +🇲🇨 മൊണാക്കോ // [1F1F2 1F1E8] MC +🇲🇩 മൾഡോവ // [1F1F2 1F1E9] MD +🇲🇪 മോണ്ടെനെഗ്രോ // [1F1F2 1F1EA] ME +🇲🇫 സെൻറ് മാർട്ടിൻ // [1F1F2 1F1EB] MF +🇲🇬 മഡഗാസ്കർ // [1F1F2 1F1EC] MG +🇲🇭 മാർഷൽ‍‍ ദ്വീപുകൾ // [1F1F2 1F1ED] MH +🇲🇰 മാസിഡോണിയ // [1F1F2 1F1F0] MK +🇲🇱 മാലി // [1F1F2 1F1F1] ML +🇲🇲 മ്യാൻമാർ (ബർമ്മ) // [1F1F2 1F1F2] MM +🇲🇳 മംഗോളിയ // [1F1F2 1F1F3] MN +🇲🇴 മക്കാവു (SAR) ചൈന // [1F1F2 1F1F4] MO +🇲🇵 ഉത്തര മറിയാനാ ദ്വീപുകൾ // [1F1F2 1F1F5] MP +🇲🇶 മാർട്ടിനിക്ക് // [1F1F2 1F1F6] MQ +🇲🇷 മൗറിറ്റാനിയ // [1F1F2 1F1F7] MR +🇲🇸 മൊണ്ടെസരത്ത് // [1F1F2 1F1F8] MS +🇲🇹 മാൾട്ട // [1F1F2 1F1F9] MT +🇲🇺 മൗറീഷ്യസ് // [1F1F2 1F1FA] MU +🇲🇻 മാലിദ്വീപ് // [1F1F2 1F1FB] MV +🇲🇼 മലാവി // [1F1F2 1F1FC] MW +🇲🇽 മെക്സിക്കോ // [1F1F2 1F1FD] MX +🇲🇾 മലേഷ്യ // [1F1F2 1F1FE] MY +🇲🇿 മൊസാംബിക്ക് // [1F1F2 1F1FF] MZ +🇳🇦 നമീബിയ // [1F1F3 1F1E6] NA +🇳🇨 ന്യൂ കാലിഡോണിയ // [1F1F3 1F1E8] NC +🇳🇪 നൈജർ // [1F1F3 1F1EA] NE +🇳🇫 നോർഫോക് ദ്വീപ് // [1F1F3 1F1EB] NF +🇳🇬 നൈജീരിയ // [1F1F3 1F1EC] NG +🇳🇮 നിക്കരാഗ്വ // [1F1F3 1F1EE] NI +🇳🇱 നെതർലാൻഡ്‌സ് // [1F1F3 1F1F1] NL +🇳🇴 നോർവെ // [1F1F3 1F1F4] NO +🇳🇵 നേപ്പാൾ // [1F1F3 1F1F5] NP +🇳🇷 നൗറു // [1F1F3 1F1F7] NR +🇳🇺 ന്യൂയി // [1F1F3 1F1FA] NU +🇳🇿 ന്യൂസിലാൻറ് // [1F1F3 1F1FF] NZ +🇴🇲 ഒമാൻ // [1F1F4 1F1F2] OM +🇵🇦 പനാമ // [1F1F5 1F1E6] PA +🇵🇪 പെറു // [1F1F5 1F1EA] PE +🇵🇫 ഫ്രഞ്ച് പോളിനേഷ്യ // [1F1F5 1F1EB] PF +🇵🇬 പാപ്പുവ ന്യൂ ഗിനിയ // [1F1F5 1F1EC] PG +🇵🇭 ഫിലിപ്പീൻസ് // [1F1F5 1F1ED] PH +🇵🇰 പാക്കിസ്ഥാൻ // [1F1F5 1F1F0] PK +🇵🇱 പോളണ്ട് // [1F1F5 1F1F1] PL +🇵🇲 സെന്റ് പിയറിയും മിക്കലണും // [1F1F5 1F1F2] PM +🇵🇳 പിറ്റ്‌കെയ്‌ൻ ദ്വീപുകൾ // [1F1F5 1F1F3] PN +🇵🇷 പ്യൂർട്ടോ റിക്കോ // [1F1F5 1F1F7] PR +🇵🇸 പാലസ്‌തീൻ പ്രദേശങ്ങൾ // [1F1F5 1F1F8] PS +🇵🇹 പോർച്ചുഗൽ // [1F1F5 1F1F9] PT +🇵🇼 പലാവു // [1F1F5 1F1FC] PW +🇵🇾 പരാഗ്വേ // [1F1F5 1F1FE] PY +🇶🇦 ഖത്തർ // [1F1F6 1F1E6] QA +🇷🇪 റീയൂണിയൻ // [1F1F7 1F1EA] RE +🇷🇴 റൊമാനിയ // [1F1F7 1F1F4] RO +🇷🇸 സെർബിയ // [1F1F7 1F1F8] RS +🇷🇺 റഷ്യ // [1F1F7 1F1FA] RU +🇷🇼 റുവാണ്ട // [1F1F7 1F1FC] RW +🇸🇦 സൗദി അറേബ്യ // [1F1F8 1F1E6] SA +🇸🇧 സോളമൻ‍ ദ്വീപുകൾ // [1F1F8 1F1E7] SB +🇸🇨 സീഷെൽസ് // [1F1F8 1F1E8] SC +🇸🇩 സുഡാൻ // [1F1F8 1F1E9] SD +🇸🇪 സ്വീഡൻ // [1F1F8 1F1EA] SE +🇸🇬 സിംഗപ്പുർ // [1F1F8 1F1EC] SG +🇸🇭 സെൻറ് ഹെലീന // [1F1F8 1F1ED] SH +🇸🇮 സ്ലോവേനിയ // [1F1F8 1F1EE] SI +🇸🇯 സ്വാൽബാഡും ജാൻ മായേനും // [1F1F8 1F1EF] SJ +🇸🇰 സ്ലോവാക്യ // [1F1F8 1F1F0] SK +🇸🇱 സിയെറ ലിയോൺ // [1F1F8 1F1F1] SL +🇸🇲 സാൻ മറിനോ // [1F1F8 1F1F2] SM +🇸🇳 സെനഗൽ // [1F1F8 1F1F3] SN +🇸🇴 സോമാലിയ // [1F1F8 1F1F4] SO +🇸🇷 സുരിനാം // [1F1F8 1F1F7] SR +🇸🇸 ദക്ഷിണ സുഡാൻ // [1F1F8 1F1F8] SS +🇸🇹 സാവോ ടോമും പ്രിൻസിപെയും // [1F1F8 1F1F9] ST +🇸🇻 എൽ സാൽവദോർ // [1F1F8 1F1FB] SV +🇸🇽 സിന്റ് മാർട്ടെൻ // [1F1F8 1F1FD] SX +🇸🇾 സിറിയ // [1F1F8 1F1FE] SY +🇸🇿 സ്വാസിലാൻറ് // [1F1F8 1F1FF] SZ +🇹🇦 ട്രസ്റ്റൻ ഡ കൂന // [1F1F9 1F1E6] TA +🇹🇨 ടർക്ക്‌സും കെയ്‌ക്കോ ദ്വീപുകളും // [1F1F9 1F1E8] TC +🇹🇩 ഛാഡ് // [1F1F9 1F1E9] TD +🇹🇫 ഫ്രഞ്ച് ദക്ഷിണ ഭൂപ്രദേശം // [1F1F9 1F1EB] TF +🇹🇬 ടോഗോ // [1F1F9 1F1EC] TG +🇹🇭 തായ്‌ലാൻഡ് // [1F1F9 1F1ED] TH +🇹🇯 താജിക്കിസ്ഥാൻ // [1F1F9 1F1EF] TJ +🇹🇰 ടോക്കെലൂ // [1F1F9 1F1F0] TK +🇹🇱 തിമോർ-ലെസ്റ്റെ // [1F1F9 1F1F1] TL +🇹🇲 തുർക്ക്മെനിസ്ഥാൻ // [1F1F9 1F1F2] TM +🇹🇳 ടുണീഷ്യ // [1F1F9 1F1F3] TN +🇹🇴 ടോംഗ // [1F1F9 1F1F4] TO +🇹🇷 തുർക്കി // [1F1F9 1F1F7] TR +🇹🇹 ട്രിനിഡാഡും ടുബാഗോയും // [1F1F9 1F1F9] TT +🇹🇻 ടുവാലു // [1F1F9 1F1FB] TV +🇹🇼 തായ്‌വാൻ // [1F1F9 1F1FC] TW +🇹🇿 ടാൻസാനിയ // [1F1F9 1F1FF] TZ +🇺🇦 ഉക്രെയ്‌ൻ // [1F1FA 1F1E6] UA +🇺🇬 ഉഗാണ്ട // [1F1FA 1F1EC] UG +🇺🇲 യു.എസ്. ദ്വീപസമൂഹങ്ങൾ // [1F1FA 1F1F2] UM +🇺🇳 ഐക്യരാഷ്ട്രസഭ // [1F1FA 1F1F3] UN +🇺🇸 അമേരിക്കൻ ഐക്യനാടുകൾ // [1F1FA 1F1F8] US +🇺🇾 ഉറുഗ്വേ // [1F1FA 1F1FE] UY +🇺🇿 ഉസ്‌ബെക്കിസ്ഥാൻ // [1F1FA 1F1FF] UZ +🇻🇦 വത്തിക്കാൻ // [1F1FB 1F1E6] VA +🇻🇨 സെന്റ് വിൻസെന്റും ഗ്രനെഡൈൻസും // [1F1FB 1F1E8] VC +🇻🇪 വെനിസ്വേല // [1F1FB 1F1EA] VE +🇻🇬 ബ്രിട്ടീഷ് വെർജിൻ ദ്വീപുകൾ // [1F1FB 1F1EC] VG +🇻🇮 യു.എസ്. വെർജിൻ ദ്വീപുകൾ // [1F1FB 1F1EE] VI +🇻🇳 വിയറ്റ്നാം // [1F1FB 1F1F3] VN +🇻🇺 വന്വാതു // [1F1FB 1F1FA] VU +🇼🇫 വാലിസ് ആന്റ് ഫ്യൂച്യുന // [1F1FC 1F1EB] WF +🇼🇸 സമോവ // [1F1FC 1F1F8] WS +🇽🇰 കൊസോവൊ // [1F1FD 1F1F0] XK +🇾🇪 യെമൻ // [1F1FE 1F1EA] YE +🇾🇹 മയോട്ടി // [1F1FE 1F1F9] YT +🇿🇦 ദക്ഷിണാഫ്രിക്ക // [1F1FF 1F1E6] ZA +🇿🇲 സാംബിയ // [1F1FF 1F1F2] ZM +🇿🇼 സിംബാബ്‌വേ // [1F1FF 1F1FC] ZW + +// Subdivision Flags -- ISO 3166-2 Subdivision Codes + +🏴󠁧󠁢󠁥󠁮󠁧󠁿 ഇംഗ്ലണ്ട് // [1F3F4 E0067 E0062 E0065 E006E E0067 E007F] +🏴󠁧󠁢󠁳󠁣󠁴󠁿 സ്‌കോട്ട്‌ലന്റ് // [1F3F4 E0067 E0062 E0073 E0063 E0074 E007F] +🏴󠁧󠁢󠁷󠁬󠁳󠁿 വെയിൽസ് // [1F3F4 E0067 E0062 E0077 E006C E0073 E007F] + +// Keycaps (NOTE: keycap 10 is a single Unicode codepoint) + +#️⃣ കീക്യാപ്പ് നമ്പർ // [0023 FE0F 20E3] +*️⃣ കീക്യാപ്പ് ആസ്‌റ്റർറിസ്‌ക്ക് // [002A FE0F 20E3] +0️⃣ കീക്യാപ്പ് അക്കം പൂജ്യം // [0030 FE0F 20E3] +1️⃣ കീക്യാപ്പ് അക്കം ഒന്ന് // [0031 FE0F 20E3] +2️⃣ കീക്യാപ്പ് അക്കം രണ്ട് // [0032 FE0F 20E3] +3️⃣ കീക്യാപ്പ് അക്കം മൂന്ന് // [0033 FE0F 20E3] +4️⃣ കീക്യാപ്പ് അക്കം നാല് // [0034 FE0F 20E3] +5️⃣ കീക്യാപ്പ് അക്കം അഞ്ച് // [0035 FE0F 20E3] +6️⃣ കീക്യാപ്പ് അക്കം ആറ് // [0036 FE0F 20E3] +7️⃣ കീക്യാപ്പ് അക്കം ഏഴ് // [0037 FE0F 20E3] +8️⃣ കീക്യാപ്പ് അക്കം എട്ട് // [0038 FE0F 20E3] +9️⃣ കീക്യാപ്പ് അക്കം ഒൻപത് // [0039 FE0F 20E3] + +// Emoji ZWJ Sequence: Family + +👩‍❤‍💋‍👨 ചുംബനം: സ്‌ത്രീ കൂടാതെ പുരുഷൻ // [1F469 200D 2764 200D 1F48B 200D 1F468] +👨‍❤‍💋‍👨 ചുംബനം: പുരുഷൻ കൂടാതെ പുരുഷൻ // [1F468 200D 2764 200D 1F48B 200D 1F468] +👩‍❤‍💋‍👩 ചുംബനം: സ്‌ത്രീ കൂടാതെ സ്‌ത്രീ // [1F469 200D 2764 200D 1F48B 200D 1F469] +👩‍❤‍👨 പ്രണയ ജോടി: സ്‌ത്രീ കൂടാതെ പുരുഷൻ // [1F469 200D 2764 200D 1F468] +👨‍❤‍👨 പ്രണയ ജോടി: പുരുഷൻ കൂടാതെ പുരുഷൻ // [1F468 200D 2764 200D 1F468] +👩‍❤‍👩 പ്രണയ ജോടി: സ്‌ത്രീ കൂടാതെ സ്‌ത്രീ // [1F469 200D 2764 200D 1F469] +👨‍👩‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ സ്‌ത്രീ കൂടാതെ ആൺകുട്ടി // [1F468 200D 1F469 200D 1F466] +👨‍👩‍👧 കുടുംബം: പുരുഷൻ കൂടാതെ സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി // [1F468 200D 1F469 200D 1F467] +👨‍👩‍👧‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F468 200D 1F469 200D 1F467 200D 1F466] +👨‍👩‍👦‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ സ്‌ത്രീ കൂടാതെ ആൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F468 200D 1F469 200D 1F466 200D 1F466] +👨‍👩‍👧‍👧 കുടുംബം: പുരുഷൻ കൂടാതെ സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി കൂടാതെ പെൺകുട്ടി// [1F468 200D 1F469 200D 1F467 200D 1F467] +👨‍👨‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ പുരുഷൻ കൂടാതെ ആൺകുട്ടി // [1F468 200D 1F468 200D 1F466] +👨‍👨‍👧 കുടുംബം: പുരുഷൻ കൂടാതെ പുരുഷൻ കൂടാതെ പെൺകുട്ടി // [1F468 200D 1F468 200D 1F467] +👨‍👨‍👧‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ പുരുഷൻ കൂടാതെ പെൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F468 200D 1F468 200D 1F467 200D 1F466] +👨‍👨‍👦‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ പുരുഷൻ കൂടാതെ ആൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F468 200D 1F468 200D 1F466 200D 1F466] +👨‍👨‍👧‍👧 കുടുംബം: പുരുഷൻ കൂടാതെ പുരുഷൻ കൂടാതെ പെൺകുട്ടി കൂടാതെ പെൺകുട്ടി// [1F468 200D 1F468 200D 1F467 200D 1F467] +👩‍👩‍👦 കുടുംബം: സ്‌ത്രീ കൂടാതെ സ്‌ത്രീ കൂടാതെ ആൺകുട്ടി // [1F469 200D 1F469 200D 1F466] +👩‍👩‍👧 കുടുംബം: സ്‌ത്രീ കൂടാതെ സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി// [1F469 200D 1F469 200D 1F467] +👩‍👩‍👧‍👦 കുടുംബം: സ്‌ത്രീ കൂടാതെ സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F469 200D 1F469 200D 1F467 200D 1F466] +👩‍👩‍👦‍👦 കുടുംബം: സ്‌ത്രീ കൂടാതെ സ്‌ത്രീ കൂടാതെ ആൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F469 200D 1F469 200D 1F466 200D 1F466] +👩‍👩‍👧‍👧 കുടുംബം: സ്‌ത്രീ കൂടാതെ സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി കൂടാതെ പെൺകുട്ടി// [1F469 200D 1F469 200D 1F467 200D 1F467] +👨‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ ആൺകുട്ടി // [1F468 200D 1F466] +👨‍👦‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ ആൺകുട്ടി കൂടാതെ ആൺകുട്ടി // [1F468 200D 1F466 200D 1F466] +👨‍👧 കുടുംബം: പുരുഷൻ കൂടാതെ പെൺകുട്ടി // [1F468 200D 1F467] +👨‍👧‍👦 കുടുംബം: പുരുഷൻ കൂടാതെ പെൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F468 200D 1F467 200D 1F466] +👨‍👧‍👧 കുടുംബം: പുരുഷൻ കൂടാതെ പെൺകുട്ടി കൂടാതെ പെൺകുട്ടി// [1F468 200D 1F467 200D 1F467] +👩‍👦 കുടുംബം: സ്‌ത്രീ കൂടാതെ ആൺകുട്ടി // [1F469 200D 1F466] +👩‍👦‍👦 കുടുംബം: സ്‌ത്രീ കൂടാതെ ആൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F469 200D 1F466 200D 1F466] +👩‍👧 കുടുംബം: സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി // [1F469 200D 1F467] +👩‍👧‍👦 കുടുംബം: സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി കൂടാതെ ആൺകുട്ടി// [1F469 200D 1F467 200D 1F466] +👩‍👧‍👧 കുടുംബം: സ്‌ത്രീ കൂടാതെ പെൺകുട്ടി കൂടാതെ പെൺകുട്ടി// [1F469 200D 1F467 200D 1F467] + +// Emoji ZWJ Sequence: Gendered Role, with object + +👨‍⚕ ആരോഗ്യ പ്രവർത്തകൻ // [1F468 200D 2695] +👩‍⚕ ആരോഗ്യ പ്രവർത്തക // [1F469 200D 2695] +👨‍⚖ ജഡ്ജി // [1F468 200D 2696] +👩‍⚖ വനിതാ ജഡ്ജി // [1F469 200D 2696] +👨‍✈ പൈലറ്റ് // [1F468 200D 2708] +👩‍✈ വനിതാ പൈലറ്റ് // [1F469 200D 2708] +👨‍🌾 കർഷകൻ // [1F468 200D 1F33E] +👩‍🌾 കർഷക // [1F469 200D 1F33E] +👨‍🍳 പാചകക്കാരൻ // [1F468 200D 1F373] +👩‍🍳 പാചകക്കാരി // [1F469 200D 1F373] +👨‍🎓 വിദ്യാർഥി // [1F468 200D 1F393] +👩‍🎓 വിദ്യാർഥിനി // [1F469 200D 1F393] +👨‍🎤 ഗായകൻ // [1F468 200D 1F3A4] +👩‍🎤 ഗായിക // [1F469 200D 1F3A4] +👨‍🎨 കലാകാരൻ // [1F468 200D 1F3A8] +👩‍🎨 കലാകാരി // [1F469 200D 1F3A8] +👨‍🏫 അധ്യാപകൻ // [1F468 200D 1F3EB] +👩‍🏫 അധ്യാപിക // [1F469 200D 1F3EB] +👨‍🏭 ഫാക്ടറി ജീവനക്കാരൻ // [1F468 200D 1F3ED] +👩‍🏭 ഫാക്ടറി ജീവനക്കാരി // [1F469 200D 1F3ED] +👨‍💻 സാങ്കേതിക വിദഗ്ധൻ // [1F468 200D 1F4BB] +👩‍💻 സാങ്കേതിക വിദഗ്ധ // [1F469 200D 1F4BB] +👨‍💼 ഓഫീസ് ജീവനക്കാരൻ // [1F468 200D 1F4BC] +👩‍💼 ഓഫീസ് ജീവനക്കാരി // [1F469 200D 1F4BC] +👨‍🔧 മെക്കാനിക് // [1F468 200D 1F527] +👩‍🔧 വനിതാ മെക്കാനിക് // [1F469 200D 1F527] +👨‍🔬 ശാസ്ത്രജ്ഞൻ // [1F468 200D 1F52C] +👩‍🔬 ശാസ്ത്രജ്ഞ // [1F469 200D 1F52C] +👨‍🚀 ബഹിരാകാശയാത്രികൻ // [1F468 200D 1F680] +👩‍🚀 ബഹിരാകാശയാത്രിക // [1F469 200D 1F680] +👨‍🚒 പുരുഷ അഗ്നിശമനസേനാംഗം // [1F468 200D 1F692] +👩‍🚒 വനിത അഗ്നിശമനസേനാംഗം // [1F469 200D 1F692] + +// Emoji ZWJ Sequence: Gendered Role + +👮‍♀ പോലീസ് ഉദ്യോഗസ്ഥ // [1F46E 200D 2640] +👮‍♂ പുരുഷ പോലീസ് ഉദ്യോഗസ്ഥൻ // [1F46E 200D 2642] +👱‍♀ സ്വർണ്ണത്തലമുടിയുള്ള സ്ത്രീ // [1F471 200D 2640] +👱‍♂ സ്വർണ്ണത്തലമുടിയുള്ളയാൾ // [1F471 200D 2642] +👳‍♀ തലപ്പാവ് ധരിച്ച വനിത // [1F473 200D 2640] +👳‍♂ തലപ്പാവ് ധരിച്ചയാൾ // [1F473 200D 2642] +👷‍♀ നിർമ്മാണ ജോലിക്കാരി // [1F477 200D 2640] +👷‍♂ നിർമ്മാണ ജോലിക്കാരൻ // [1F477 200D 2642] +💂‍♀ കാവൽക്കാരി // [1F482 200D 2640] +💂‍♂ കാവൽക്കാരൻ // [1F482 200D 2642] +🕵️‍♀ കുറ്റാന്വേഷക // [1F575 200D 2640] +🕵️‍♂ പുരുഷ കുറ്റാന്വേഷകൻ // [1F575 200D 2642] +🧙‍♀ woman mage // [1F9D9 200D 2640] (no translation) +🧙‍♂ man mage // [1F9D9 200D 2642] (no translation) +🧚‍♀ woman fairy // [1F9DA 200D 2640] (no translation) +🧚‍♂ man fairy // [1F9DA 200D 2642] (no translation) +🧛‍♀ woman vampire // [1F9DB 200D 2640] (no translation) +🧛‍♂ man vampire // [1F9DB 200D 2642] (no translation) +🧜‍♀ mermaid // [1F9DC 200D 2640] (no translation) +🧜‍♂ merman // [1F9DC 200D 2642] (no translation) +🧝‍♀ woman elf // [1F9DD 200D 2640] (no translation) +🧝‍♂ man elf // [1F9DD 200D 2642] (no translation) +🧞‍♀ woman genie // [1F9DE 200D 2640] (no translation) +🧞‍♂ man genie // [1F9DE 200D 2642] (no translation) +🧟‍♀ woman zombie // [1F9DF 200D 2640] (no translation) +🧟‍♂ man zombie // [1F9DF 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Activity + +⛹‍♀ പന്തുകളിക്കാരി // [26F9 200D 2640] +⛹‍♂ പന്തുകളിക്കാരൻ // [26F9 200D 2642] +🏃‍♀ ഓടുന്ന സ്ത്രീ // [1F3C3 200D 2640] +🏃‍♂ ഓടുന്നയാൾ // [1F3C3 200D 2642] +🏄‍♀ സർഫുചെയ്യുന്ന സ്ത്രീ // [1F3C4 200D 2640] +🏄‍♂ സർഫുചെയ്യുന്നയാൾ // [1F3C4 200D 2642] +🏊‍♀ നീന്തൽക്കാരി // [1F3CA 200D 2640] +🏊‍♂ നീന്തൽക്കാരൻ // [1F3CA 200D 2642] +🏋️‍♀ ഭാരോദ്വഹനം നടത്തുന്ന സ്ത്രീ // [1F3CB 200D 2640] +🏋️‍♂ ഭാരോദ്വഹനം നടത്തുന്നയാൾ // [1F3CB 200D 2642] +🏌️‍♀ ഗോൾഫുകളിക്കുന്ന സ്ത്രീ // [1F3CC 200D 2640] +🏌️‍♂ ഗോൾഫുകളിക്കുന്നയാൾ // [1F3CC 200D 2642] +👯‍♀ പാർട്ടിയാഘോഷിക്കുന്ന സ്ത്രീകൾ // [1F46F 200D 2640] +👯‍♂ പാർട്ടിയാഘോഷിക്കുന്ന പുരുഷന്മാർ // [1F46F 200D 2642] +💆‍♀ മുഖം മസ്സാജുചെയ്യിക്കുന്ന സ്ത്രീ // [1F486 200D 2640] +💆‍♂ മുഖം മസ്സാജുചെയ്യിക്കുന്നയാൾ // [1F486 200D 2642] +💇‍♀ മുടിവെട്ടിക്കുന്ന സ്ത്രീ // [1F487 200D 2640] +💇‍♂ മുടിവെട്ടിക്കുന്നയാൾ // [1F487 200D 2642] +🚣‍♀ വഞ്ചി തുഴയുന്ന സ്ത്രീ // [1F6A3 200D 2640] +🚣‍♂ വഞ്ചി തുഴയുന്നയാൾ // [1F6A3 200D 2642] +🚴‍♀ സൈക്കിളോടിക്കുന്ന സ്ത്രീ // [1F6B4 200D 2640] +🚴‍♂ സൈക്കിളോടിക്കുന്നയാൾ // [1F6B4 200D 2642] +🚵‍♀ സൈക്കിളിൽ മലകയറുന്ന സ്ത്രീ // [1F6B5 200D 2640] +🚵‍♂ സൈക്കിളിൽ മലകയറുന്നയാൾ // [1F6B5 200D 2642] +🚶‍♀ നടക്കുന്ന സ്ത്രീ // [1F6B6 200D 2640] +🚶‍♂ നടക്കുന്നയാൾ // [1F6B6 200D 2642] +🤸‍♀ കൈകുത്തിമറിയുന്ന സ്ത്രീ // [1F938 200D 2640] +🤸‍♂ കൈകുത്തിമറിയുന്നയാൾ // [1F938 200D 2642] +🤹‍♀ അമ്മാനമാട്ടക്കാരി // [1F939 200D 2640] +🤹‍♂ അമ്മാനമാട്ടക്കാരൻ // [1F939 200D 2642] +🤼‍♀ വനിതാ ഗുസ്തിക്കാർ // [1F93C 200D 2640] +🤼‍♂ പുരുഷ ഗുസ്തിക്കാർ // [1F93C 200D 2642] +🤽‍♀ വാട്ടർ പോളോ കളിക്കുന്ന സ്ത്രീ // [1F93D 200D 2640] +🤽‍♂ വാട്ടർ പോളോ കളിക്കുന്നയാൾ // [1F93D 200D 2642] +🤾‍♀ ഹാൻഡ്‌ബോൾ കളിക്കുന്ന സ്ത്രീ // [1F93E 200D 2640] +🤾‍♂ ഹാൻഡ്‌ബോൾ കളിക്കുന്നയാൾ // [1F93E 200D 2642] +🧖‍♀ woman in steamy room // [1F9D6 200D 2640] (no translation) +🧖‍♂ man in steamy room // [1F9D6 200D 2642] (no translation) +🧗‍♀ woman climbing // [1F9D7 200D 2640] (no translation) +🧗‍♂ man climbing // [1F9D7 200D 2642] (no translation) +🧘‍♀ woman in lotus position // [1F9D8 200D 2640] (no translation) +🧘‍♂ man in lotus position // [1F9D8 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Gestures + +💁‍♀ വിവരം നൽകുന്ന സ്ത്രീ // [1F481 200D 2640] +💁‍♂ വിവരം നൽകുന്നയാൾ // [1F481 200D 2642] +🙅‍♀ വിലക്കുന്ന ആംഗ്യം കാണിക്കുന്ന സ്ത്രീ // [1F645 200D 2640] +🙅‍♂ വിലക്കുന്ന ആംഗ്യം കാണിക്കുന്നയാൾ // [1F645 200D 2642] +🙆‍♀ സമ്മതമെന്ന് ആംഗ്യം കാണിക്കുന്ന സ്ത്രീ // [1F646 200D 2640] +🙆‍♂ സമ്മതമെന്ന് ആംഗ്യം കാണിക്കുന്നയാൾ // [1F646 200D 2642] +🙇‍♀ തലകുനിയ്ക്കുന്ന സ്ത്രീ // [1F647 200D 2640] +🙇‍♂ തലകുനിയ്ക്കുന്നയാൾ // [1F647 200D 2642] +🙋‍♀ കൈ ഉയർത്തുന്ന സ്ത്രീ // [1F64B 200D 2640] +🙋‍♂ കൈ ഉയർത്തുന്നയാൾ // [1F64B 200D 2642] +🙍‍♀ നെറ്റി ചുളിക്കുന്ന സ്ത്രീ // [1F64D 200D 2640] +🙍‍♂ നെറ്റി ചുളിക്കുന്നയാൾ // [1F64D 200D 2642] +🙎‍♀ ചുണ്ടുകൂർപ്പിക്കുന്ന സ്ത്രീ // [1F64E 200D 2640] +🙎‍♂ ചുണ്ടുകൂർപ്പിക്കുന്നയാൾ // [1F64E 200D 2642] +🤦‍♀ തലയിൽ കൈവയ്ക്കുന്ന സ്ത്രീ // [1F926 200D 2640] +🤦‍♂ തലയിൽ കൈവയ്ക്കുന്നയാൾ // [1F926 200D 2642] +🤷‍♀ തോൾവെട്ടിക്കുന്ന സ്ത്രീ // [1F937 200D 2640] +🤷‍♂ തോൾവെട്ടിക്കുന്നയാൾ // [1F937 200D 2642] + +// Emoji ZWJ Sequence: Other + +🏳‍🌈 മഴവിൽ പതാക // [1F3F3 200D 1F308] +👁‍🗨 സ്പീച്ച് ബബിളിലെ കണ്ണ് // [1F441 200D 1F5E8] + +// References: +// [UCD] Unicode Character Database 9.0.0 [http://www.unicode.org/Public/9.0.0/ucd/] +// [Emoji] Unicode Emoji 5.0 [http://www.unicode.org/Public/emoji/5.0/] +// [CLDR] Unicode Common Locale Data Repository 31.0.1 [http://cldr.unicode.org/index/downloads/cldr-31] +// +// Sources: +// 1. emoji-test.txt (Emoji) +// 2. common/annotations/ml.xml (CLDR) +// 3. emoji-zwj-sequences.txt (Emoji) From 3bc6da0d072537ec3aff2fd1400f76398e2bf9d7 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 16 Aug 2017 19:18:14 +0100 Subject: [PATCH 038/137] my: (emoji) -- CLDR 31.0.1 emoji translations --- CHANGELOG.md | 1 + Makefile.am | 2 +- dictsource/my_emoji | 1678 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1680 insertions(+), 1 deletion(-) create mode 100644 dictsource/my_emoji diff --git a/CHANGELOG.md b/CHANGELOG.md index 370a3de2..73ebfbca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -93,6 +93,7 @@ Unicode Emoji support (from the Unicode Emoji 5.0, and CLDR 31.0.1 data files): * ml (Malayalam) * mr (Marathi) * ms (Malay) +* my (Myanmar/Burmese) * nl (Dutch) * or (Oriya) * pa (Punjabi) diff --git a/Makefile.am b/Makefile.am index 389785da..3a3b981c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -675,7 +675,7 @@ mt: espeak-ng-data/mt_dict espeak-ng-data/mt_dict: dictsource/mt_list dictsource/mt_rules dictsource/mt_extra my: espeak-ng-data/my_dict -espeak-ng-data/my_dict: dictsource/my_list dictsource/my_rules dictsource/my_extra +espeak-ng-data/my_dict: dictsource/my_list dictsource/my_rules dictsource/my_extra dictsource/my_emoji nci: espeak-ng-data/nci_dict espeak-ng-data/nci_dict: dictsource/nci_list dictsource/nci_rules dictsource/nci_extra diff --git a/dictsource/my_emoji b/dictsource/my_emoji new file mode 100644 index 00000000..9845c030 --- /dev/null +++ b/dictsource/my_emoji @@ -0,0 +1,1678 @@ +// Emoji and Other Symbol pronunciations for Burmese +// +// Entries with `text|emoji` in the comments have text and emoji forms. They +// can be followed by [FE0E] to select the text style, and [FE0F] to select +// the emoji style. +// +// NOTE: See `src/ucd-tools/data/espeak-ng/emoji-data.txt` for additional data +// in interpreting ZWJ emoji sequences. + +$textmode + +// 0080..00FF : C1 Controls and Latin-1 Supplement + +© မူပိုင်ခွင့် // [00A9] text|emoji +® မှတ်ပုံတင်ထားသော // [00AE] text|emoji + +// 2000..203C : General Punctuation + +‼ အာမေဍိတ် သင်​္ကေတ နှစ်ထပ်ကွမ်း // [203C] text|emoji +⁉ အာမေဍိတ် မေးခွန်း သင်​္ကေတ // [2049] text|emoji + +// 2100..214F : Letterlike Symbols + +™ ကုန် အမှတ်တံဆိပ် // [2122] text|emoji +ℹ အချက်အလက်များ ရင်းမြစ် // [2139] text|emoji + +// 2190..21FF : Arrows + +↔ ဘယ်−ညာ မြား // [2194] text|emoji +↕ အပေါ်−အ​ောက် မြား // [2195] text|emoji +↖ ဘယ်အပေါ် မြား // [2196] text|emoji +↗ ညာဖက်အပေါ် မြား // [2197] text|emoji +↘ ညာဖက်အောက် မြား // [2198] text|emoji +↙ ဘယ်ဖက်အောက် မြား // [2199] text|emoji +↩ ဘယ်ကွေ့ ညာဖက် မြား // [21A9] text|emoji +↪ ညာကွေ့ ဘယ်ဖက် မြား // [21AA] text|emoji + +// 2300..23FF : Miscellaneous Technical + +⌚ လက်ပတ်နာရီ // [231A] +⌛ သဲနာရီ // [231B] +⌨ ကီးဘုတ် // [2328] text|emoji +⏏ ထုတ်ယူရန်ခလုတ် // [23CF] text|emoji +⏩ ရှေ့သို့အမြန် ခလုတ် // [23E9] +⏪ နောက်သို့အမြန် ခလုတ် // [23EA] +⏫ အပေါ်သို့အမြန် ခလုတ် // [23EB] +⏬ အောက်သို့အမြန် ခလုတ် // [23EC] +⏭ နောက် တေးသွား ခလုတ် // [23ED] text|emoji +⏮ နောက်ဆုံး တေးသွား ခလုတ် // [23EE] text|emoji +⏯ ဖွင့် သို့မဟုတ် ဆိုင်းငံ့ ခလုတ် // [23EF] text|emoji +⏰ နှိုးစက်နာရီ // [23F0] +⏱ အချိန်ဖမ်းနာရီ // [23F1] text|emoji +⏲ အချိန်မှတ်နာရီ // [23F2] text|emoji +⏳ သဲစီးကျနေသည့် သဲနာရီ // [23F3] +⏸ ဆိုင်းငံ့ရန် ခလုတ် // [23F8] text|emoji +⏹ ရပ်တန့် ခလုတ် // [23F9] text|emoji +⏺ ဖမ်းယူရန် ခလုတ် // [23FA] text|emoji + +// 2460..24FF : Enclosed Alphanumerics + +Ⓜ ဝိုင်းထားသည့် စာလုံး m // [24C2] text|emoji + +// 25A0..25FF : Geometric Shapes + +▪ အနက်ရောင် လေးထောင့်ကွက် အသေး // [25AA] text|emoji +▫ အဖြူရောင် လေးထောင့်ကွက် အသေး // [25AB] text|emoji +▶ ဖွင့်ရန် ခလုတ် // [25B6] text|emoji +◀ နောက်ပြန် ခလုတ် // [25C0] text|emoji +◻ အဖြူရောင် လေးထောင့်ကွက် အလတ်စား // [25FB] text|emoji +◼ အနက်ရောင် လေးထောင့်ကွက် အလတ်စား // [25FC] text|emoji +◽ အဖြူရောင် လေးထောင့်ကွက် အလတ်စားအသေး // [25FD] +◾ အနက်ရောင် လေးထောင့်ကွက် အလတ်စားအသေး // [25FE] + +// 2600..26FF : Miscellaneous Symbols + +☀ နေ // [2600] text|emoji +☁ တိမ် // [2601] text|emoji +☂ ထီး // [2602] text|emoji +☃ ဆီးနှင်းလူ // [2603] text|emoji +☄ ကြယ်တံခွန် // [2604] text|emoji +☎ တယ်လီဖုန်း // [260E] text|emoji +☑ ခြစ်မှတ်ပါသည့် မဲပုံး // [2611] text|emoji +☔ မိုးစက်များနှင့် ထီး // [2614] +☕ သောက်စရာ အပူ // [2615] +☘ ပဲမျိုးရင်း အပင်ငယ် // [2618] text|emoji +☝ အပေါ်သို့ ညွှန်ပြနေသည့် အညွှန်း // [261D] text|emoji +☠ ဦးခွံနှင့် ကြက်ခြေခတ်အရိုးများ // [2620] text|emoji +☢ ရေဒီယိုသတ္တိကြွ // [2622] text|emoji +☣ လူသားအတွက် အန္တရာယ်ရှိသော // [2623] text|emoji +☦ အောတိုဒိုစ် ကားတိုင် // [2626] text|emoji +☪ ကြယ်နှင့် လခြမ်း // [262A] text|emoji +☮ ငြိမ်းချမ်းရေး သင်​္ကေတ // [262E] text|emoji +☯ ယင်ယန်း // [262F] text|emoji +☸ ဓမ္မစကြာ // [2638] text|emoji +☹ ဝမ်းနည်းကြေကွဲသည့် မျက်နှာ // [2639] text|emoji +☺ ပြုံးနေသေည့် မျက်နှာ // [263A] text|emoji +♀ အမသင်္ကေတ // [2640] text|emoji +♂ အဖိုသင်္ကေတ // [2642] text|emoji +♈ မိဿာ // [2648] +♉ ပြိဿာ // [2649] +♊ မေထုန် // [264A] +♋ ကရကဍ် // [264B] +♌ သိဟ် // [264C] +♍ ကန် // [264D] +♎ တူ ရာသီ // [264E] +♏ ဗြိစ္ဆာ // [264F] +♐ ဓနု // [2650] +♑ မကရ // [2651] +♒ ကုံ // [2652] +♓ မိန် // [2653] +♠ ဖူးဖဲသုံးချပ် // [2660] text|emoji +♣ ညှင်းဖဲသုံးချပ် // [2663] text|emoji +♥ ဖူးနီဖဲသုံးချပ် // [2665] text|emoji +♦ ချွန်းဖဲသုံးချပ် // [2666] text|emoji +♨ ရေပူစမ်းများ // [2668] text|emoji +♻ ထပ်တလဲလဲသုံးမှု သင်​္ကေတ // [267B] text|emoji +♿ ဘီးတပ်ကုလားထိုင် // [267F] +⚒ တူနှင့် ပေါက်ချွန်း // [2692] text|emoji +⚓ ကျောက်ဆူး // [2693] +⚔ ဓားနှစ်လက် ကြက်ခြေခတ် // [2694] text|emoji +⚕ ဆေးဘက်ဆိုင်ရာ သင်္ကေတ // [2695] text|emoji +⚖ ချိန်ခွင် // [2696] text|emoji +⚗ အငွေ့ပြန်ဘူး // [2697] text|emoji +⚙ ဂီယာ // [2699] text|emoji +⚛ အဏုမြူ သင်​္ကေတ // [269B] text|emoji +⚜ နှင်းပန်းပုံစံ // [269C] text|emoji +⚠ သတိပေးချက် // [26A0] text|emoji +⚡ ဗို့အားမြင့် // [26A1] +⚪ အဖြူရောင် စက်ဝိုင်း // [26AA] +⚫ အနက်ရောင် စက်ဝိုင်း // [26AB] +⚰ အခေါင်းတလား // [26B0] text|emoji +⚱ အရိုးအိုး // [26B1] text|emoji +⚽ ဘောလုံး // [26BD] +⚾ ဘေ့စ်ဘော // [26BE] +⛄ နှင်းမပါသည့် ဆီးနှင်းလူ // [26C4] +⛅ တိမ်နောက်ရှိ နေ // [26C5] +⛈ လျှပ်စီးလက်ပြီး မိုးရွာနေသည့် တိမ် // [26C8] text|emoji +⛎ ophiuchus // [26CE] +⛏ ပေါက်ချွန်း // [26CF] text|emoji +⛑ ကြက်ခြေခတ်ဖြူနှင့် ခမောက် // [26D1] text|emoji +⛓ ချိန်းကြိုး // [26D3] text|emoji +⛔ မဝင်ရ // [26D4] +⛩ ရှင်တို ဘုရားကျောင်း // [26E9] text|emoji +⛪ ခရစ်ယန် ဘုရားကျောင်း // [26EA] +⛰ တောင် // [26F0] text|emoji +⛱ မြေပေါ်ရှိ ထီး // [26F1] text|emoji +⛲ အလှပြ ရေပန်း // [26F2] +⛳ ကျင်းထဲက အလံ // [26F3] +⛴ ကူးတို့ // [26F4] text|emoji +⛵ ရွက်လှေ // [26F5] +⛷ စကီးစီးသူ // [26F7] text|emoji +⛸ ရေခဲစကိတ် // [26F8] text|emoji +⛹ ဘောလုံးနှင့်လူ // [26F9] text|emoji +⛺ ရွက်တဲ // [26FA] +⛽ ဆီဖြည့်တိုင် // [26FD] + +// 2700..27BF : Dingbats + +✂ ကတ်ကြေး // [2702] text|emoji +✅ လေးလံသည့် ခြစ်မှတ်ဖြူ // [2705] +✈ လေယာဉ် // [2708] text|emoji +✉ စာအိတ် // [2709] text|emoji +✊ မြှောက်ပြထားသည့် လက်သီး // [270A] +✋ မြှောက်ပြထားသည့် လက် // [270B] +✌ အောင်မြင်မှုပြ လက်ဟန် // [270C] text|emoji +✍ စာရေးနေသည့် လက် // [270D] text|emoji +✏ ခဲတံ // [270F] text|emoji +✒ အနက်ရောင် ကလ​ောင်သွား // [2712] text|emoji +✔ လေးလံသည့် ခြစ်မှတ် // [2714] text|emoji +✖ လေးလံသည့် အမြှောက် x // [2716] text|emoji +✝ လက်တင် ကားတိုင် // [271D] text|emoji +✡ ဒေးဗစ်ကြယ် // [2721] text|emoji +✨ မီးပွင့်များ // [2728] +✳ ရှစ်ချွန်း ခရစ်ပွင့် // [2733] text|emoji +✴ ရှစ်ထောင့် ကြယ် // [2734] text|emoji +❄ နှင်းပွင့် // [2744] text|emoji +❇ အရောင်လက်နေခြင်း // [2747] text|emoji +❌ ကြက်ခြေခတ် အမှတ် // [274C] +❎ ကြက်ခြေခတ် အမှတ် ခလုတ် // [274E] +❓ မေးခွန်း သင်​္ကေတ // [2753] +❔ မေးခွန်း သင်​္ကေတဖြူ // [2754] +❕ အာမေဍိတ် သင်​္ကေတဖြူ // [2755] +❗ အာမေဍိတ် သင်​္ကေတ // [2757] +❣ လေးလံသည့် နှလုံးပုံစံ အာမေဍိတ်အတွဲ // [2763] text|emoji +❤ အနီရောင် နှလုံး // [2764] text|emoji +➕ လေးလံသည့် အပေါင်း လက္ခဏာ // [2795] +➖ လေးလံသည့် အနှုတ် လက္ခဏာ // [2796] +➗ လေးလံသည့် အစား လက္ခဏာ // [2797] +➡ ညာ မြား // [27A1] text|emoji +➰ လိမ်နေသည့် အကွင်း // [27B0] +➿ လိမ်နေသည့် အကွင်း နှစ်ထပ်ကွမ်း // [27BF] + +// 2900..297F : Supplemental Arrows-B + +⤴ အပေါ်ကွေ့ ညာ မြား // [2934] text|emoji +⤵ အောက်ကွေ့ ညာ မြား // [2935] text|emoji + +// 2B00..2BFF : Miscellaneous Symbols and Arrows + +⬅ ဘယ် မြား // [2B05] text|emoji +⬆ အပေါ် မြား // [2B06] text|emoji +⬇ အောက် မြား // [2B07] text|emoji +⬛ အနက်ရောင် လေးထောင့်ကွက် အကြီး // [2B1B] +⬜ အဖြူရောင် လေးထောင့်ကွက် အကြီး // [2B1C] +⭐ အဖြူရောင် အလတ်စား ကြယ် // [2B50] +⭕ လေးလံသည့် စက်၀န်းကြီး // [2B55] + +// 3000..303F : CJK Symbols and Punctuation + +〰 လှိုင်းထနေသည့် မျဉ်းရှည် // [3030] text|emoji +〽 ပစ္စည်း လဲထားသည့် အမှတ် // [303D] text|emoji + +// 3200..32FF : Enclosed CJK Letters and Months + +㊗ ဝိုင်းထားသည့် ဂုဏ်ပြုမှု အရုပ်စာ // [3297] text|emoji +㊙ ဝိုင်းထားသည့် လျှို့ဝှက်မှု အရုပ်စာ // [3299] text|emoji + +// 1F100..1F1FF : Enclosed Alphanumeric Supplement + +🅰 a ခလုတ် // [1F170] text|emoji +🅱 b ခလုတ် // [1F171] text|emoji +🅾 o ခလုတ် // [1F17E] text|emoji +🅿 p ခလုတ် // [1F17F] text|emoji +🆎 ab ခလုတ် // [1F18E] +🆑 လေးထောင့်ကွက် cl // [1F191] +🆒 လေးထောင့်ကွက် cool // [1F192] +🆓 လေးထောင့်ကွက် free // [1F193] +🆔 လေးထောင့်ကွက် id // [1F194] +🆕 လေးထောင့်ကွက် အသစ် // [1F195] +🆖 လေးထောင့်ကွက် ng // [1F196] +🆗 လေးထောင့်ကွက် ok // [1F197] +🆘 လေးထောင့်ကွက် sos // [1F198] +🆙 အပေါ်သို့ ခလုတ် // [1F199] +🆚 လေးထောင့်ကွက် vs // [1F19A] + +// 1F200..1F2FF : Enclosed Ideographic Supplement + +🈁 လေးထောင့်ကွက် ကတကန ကိုကို // [1F201] +🈂 လေးထောင့်ကွက် ကတကန စာ // [1F202] text|emoji +🈚 လေးထောင့်ကွက် ငြင်းဆိုချက် အရုပ်စာ // [1F21A] +🈯 လေးထောင့်ကွက် လက်ချောင်း အရုပ်စာ // [1F22F] +🈲 လေးထောင့်ကွက် တားမြစ်ချက် အရုပ်စာ // [1F232] +🈳 လေးထောင့်ကွက် ဗလာ အရုပ်စာ // [1F233] +🈴 လေးထောင့်ကွက် အတူတကွ အရုပ်စာ // [1F234] +🈵 လေးထောင့်ကွက် ပြည့်စုံမှု အရုပ်စာ // [1F235] +🈶 လေးထောင့်ကွက် တည်ရှိမှု အရုပ်စာ // [1F236] +🈷 လေးထောင့်ကွက် လ အရုပ်စာ // [1F237] text|emoji +🈸 လေးထောင့်ကွက် ကျင့်သုံးမှု အရုပ်စာ // [1F238] +🈹 လေးထောင့်ကွက် ခွဲခြမ်းမှု အရုပ်စာ // [1F239] +🈺 လေးထောင့်ကွက် လုပ်ဆောင်မှု အရုပ်စာ // [1F23A] +🉐 ဝိုင်းထားသည့် သာလွန်မှု အရုပ်စာ // [1F250] +🉑 ဝိုင်းထားသည့် လက်ခံမှု အရုပ်စာ // [1F251] + +// 1F000..1F02F : Mahjong Tiles + +🀄 မာဂျောက် နဂါးနီ // [1F004] + +// 1F0A0..1F0FF : Playing Cards + +🃏 ဂျိုကာဖဲချပ် // [1F0CF] + +// 1F300..1F5FF : Miscellaneous Symbols and Pictographs + +🌀 ဆိုင်ကလုန်း // [1F300] +🌁 မြူအုံ့ဆိုင်းသော // [1F301] +🌂 ပိတ်ထားသည့် ထီး // [1F302] +🌃 ကြယ်များလင်းသည့် ည // [1F303] +🌄 တောင်ကြောပ​ေါ်မှာ နေထွက်ခြင်း // [1F304] +🌅 နေထွက်ခြင်း // [1F305] +🌆 နေဝင်ဆည်းဆာချိန် မြို့ပြရှုခင်း // [1F306] +🌇 နေဝင်ချိန် // [1F307] +🌈 သက်တံ // [1F308] +🌉 ညအချိန်မှာ တံတား // [1F309] +🌊 ရေလှိုင်း // [1F30A] +🌋 မီးတောင် // [1F30B] +🌌 နဂါးငွေ့တန်း // [1F30C] +🌍 ဥရောပနှင့် အာဖရိကကို ပြသထားသည့် ကမ္ဘာလုံး // [1F30D] +🌎 အမေရိကတိုက်များကို ပြသထားသည့် ကမ္ဘာလုံး // [1F30E] +🌏 အာရှ−ဩစတြေးလျကို ပြသထားသည့် ကမ္ဘာလုံး // [1F30F] +🌐 လောင်ဂျီတွဒ်များပါသည့် ကမ္ဘာလုံး // [1F310] +🌑 လကွယ် // [1F311] +🌒 လဆန်းရက် // [1F312] +🌓 လ၏ ပထမအပတ် // [1F313] +🌔 လပြည့်မတိုင်မီ အပတ် // [1F314] +🌕 လပြည့် // [1F315] +🌖 လဆုပ်ရက် // [1F316] +🌗 လ၏ နောက်ဆုံးအပတ် // [1F317] +🌘 လကွယ်မတိုင်မီ အပတ် // [1F318] +🌙 လခြမ်း // [1F319] +🌚 လကွယ် မျက်နှာ // [1F31A] +🌛 လဆန်းစ မျက်နှာ // [1F31B] +🌜 လဆုပ်လု မျက်နှာ // [1F31C] +🌝 လပြည့် မျက်နှာ // [1F31D] +🌞 နေ၏ မျက်နှာ // [1F31E] +🌟 တောက်ပသည့် ကြယ် // [1F31F] +🌠 ကြယ်ကြွေခြင်း // [1F320] +🌡 သာမိုမီတာ // [1F321] text|emoji +🌤 တိမ်ငယ် နောက်က နေ // [1F324] text|emoji +🌥 တိမ်တိုက်ကြီး နောက်က နေ // [1F325] text|emoji +🌦 မိုးနှင့်တိမ်နောက်က နေ // [1F326] text|emoji +🌧 မိုးနှင့် တိမ် // [1F327] text|emoji +🌨 ဆီးနှင်းနှင့် တိမ် // [1F328] text|emoji +🌩 လျှပ်စီးနှင့်တိမ် // [1F329] text|emoji +🌪 လေဆင်နှာမောင်း // [1F32A] text|emoji +🌫 မြူ // [1F32B] text|emoji +🌬 လေတိုက် မျက်နှာ // [1F32C] text|emoji +🌭 ဟော့ဒေါ့ // [1F32D] +🌮 တာကို // [1F32E] +🌯 ဘူရီတို // [1F32F] +🌰 သစ်အယ်သီး // [1F330] +🌱 ပျိုးပင် // [1F331] +🌲 အမြဲစိမ်း // [1F332] +🌳 ရွက်ပြတ်ပင် // [1F333] +🌴 ထန်းမျိုးအပင် // [1F334] +🌵 ရှားစောင်းပင် // [1F335] +🌶 ငရုတ်သီး // [1F336] text|emoji +🌷 ကျူးလစ်ပန်း // [1F337] +🌸 ချယ်ရီပန်း // [1F338] +🌹 နှင်းဆီပန်း // [1F339] +🌺 ခေါင်ရန်းပန်း // [1F33A] +🌻 နေကြာပန်း // [1F33B] +🌼 ပန်းပွင့် // [1F33C] +🌽 ပြောင်းနှံ // [1F33D] +🌾 ကောက်နှံပင် // [1F33E] +🌿 ဆေးဖက်ဝင်အပင် // [1F33F] +🍀 လေးရွက်ဆိုင် ပဲရိုင်းပင် // [1F340] +🍁 မေပယ်ရွက် // [1F341] +🍂 ရွက်ကြွေ // [1F342] +🍃 ပျံဝဲနေသည့် အရွက် // [1F343] +🍄 မှို // [1F344] +🍅 ခရမ်းချဉ်သီး // [1F345] +🍆 ခရမ်းသီး // [1F346] +🍇 စပျစ်သီး // [1F347] +🍈 သခွားမွှေး // [1F348] +🍉 ဖရဲသီး // [1F349] +🍊 အခွံပွလိမ္မော်သီး // [1F34A] +🍋 ရှောက်သီး // [1F34B] +🍌 ငှက်ပျောသီး // [1F34C] +🍍 နာနတ်သီး // [1F34D] +🍎 ပန်းသီးအနီ // [1F34E] +🍏 ပန်းသီးစိမ်း // [1F34F] +🍐 သစ်တော်သီး // [1F350] +🍑 မက်မွန်သီး // [1F351] +🍒 ချယ်ရီသီးများ // [1F352] +🍓 စတော်ဘယ်ရီ // [1F353] +🍔 ဟမ်ဘာဂါ // [1F354] +🍕 ပီဇာ // [1F355] +🍖 အရိုးပါ အသား // [1F356] +🍗 ကြက်ပေါင် // [1F357] +🍘 ထမင်းခြောက်မုန့် // [1F358] +🍙 ထမင်းလုံး // [1F359] +🍚 ထမင်း // [1F35A] +🍛 ထမင်းဟင်း // [1F35B] +🍜 ခေါက်ဆွဲပြုပ် ပန်းကန်လုံး // [1F35C] +🍝 အီတလီခေါက်ဆွဲ // [1F35D] +🍞 ပေါင်မုန့် // [1F35E] +🍟 အာလူးချောင်းကြော် // [1F35F] +🍠 ကင်ထားသည့် ကန်စွန်းဥ // [1F360] +🍡 ဒန်ဂို // [1F361] +🍢 အိုဒင် // [1F362] +🍣 ဆူရှီ // [1F363] +🍤 ပုစွန်ကျော် // [1F364] +🍥 ငါးဆုပ် အလိပ် // [1F365] +🍦 ရေခဲမုန့် အပျော့ // [1F366] +🍧 ရေခဲခြစ်မုန့် // [1F367] +🍨 ရေခဲမုန့် // [1F368] +🍩 ဒိုးနတ် // [1F369] +🍪 ကွတ်ကီး // [1F36A] +🍫 ချောကလက် အချောင်း // [1F36B] +🍬 သကြားလုံး // [1F36C] +🍭 ချိုချဉ်ပလုတ်တုတ် // [1F36D] +🍮 ပူတင်း // [1F36E] +🍯 ပျားရည်အိုး // [1F36F] +🍰 အသီးနှင့်မလိုင်အုပ် ကိတ်မုန့် // [1F370] +🍱 ဘင်တို ဘူး // [1F371] +🍲 အစားအစာ အိုး // [1F372] +🍳 ချက်ပြုတ်ခြင်း // [1F373] +🍴 ခက်ရင်းနှင့် ဓား // [1F374] +🍵 လက်ဖက်ရည် ပန်းကန်လုံး // [1F375] +🍶 ဆာကေ // [1F376] +🍷 ဝိုင်ခွက် // [1F377] +🍸 အရက်စုံယမကာခွက် // [1F378] +🍹 အပူပိုင်း ယမကာ // [1F379] +🍺 ဘီယာ မတ်ခွက် // [1F37A] +🍻 ဘီယာမတ်ခွက်များဖြင့် အသံမြည်အောင် ထိပေးခြင်း // [1F37B] +🍼 ကလေးနို့ဗူး // [1F37C] +🍽 ဇွန်း၊ ခက်ရင်းနှင့် ပန်းကန် // [1F37D] text|emoji +🍾 ဖော့ဆို့ လွှင့်ထွက်လာနေသည့် ပုလင်း // [1F37E] +🍿 ပြောင်းဖူးပေါက်ပေါက် // [1F37F] +🎀 ဖဲကြိုး // [1F380] +🎁 ထုပ်ပိုးထားသည့် လက်ဆောင် // [1F381] +🎂 မွေးနေ့ ကိတ်မုန့် // [1F382] +🎃 ဖရုံသီး မီးအိမ် // [1F383] +🎄 ခရစ္စမတ် အပင် // [1F384] +🎅 ဆန်တာ ကလောစ် // [1F385] +🎆 မီးရှူးမီးပန်းများ // [1F386] +🎇 မီးပန်း // [1F387] +🎈 လေပူဖောင်း // [1F388] +🎉 ဗျောက်အိုး // [1F389] +🎊 ရောင်စုံစက္ကူ ဗျောက်အိုး // [1F38A] +🎋 တာနာဘာတာ အပင် // [1F38B] +🎌 ကြက်ခြေခတ် အလံများ // [1F38C] +🎍 အလှ ထင်းရှူးပင် // [1F38D] +🎎 ဂျပန် အရုပ်များ // [1F38E] +🎏 ငါးကြင်း တံခွန် // [1F38F] +🎐 လေတိုက် ခေါင်းလောင်းများ // [1F390] +🎑 လ အခမ်းအနား // [1F391] +🎒 ကျောင်းသား ကျောပိုးအိတ် // [1F392] +🎓 ဘွဲ့ယူ ကက်ဦးထုပ် // [1F393] +🎖 စစ်တပ် တံဆိပ် // [1F396] text|emoji +🎗 သတိပေး​ရေး ဖဲကြိုး // [1F397] text|emoji +🎙 စတူဒီယို မိုက်ခရိုဖုန်း // [1F399] text|emoji +🎚 အသံ ညှိတံ // [1F39A] text|emoji +🎛 ထိန်းချုပ်မှု ခလုတ်များ // [1F39B] text|emoji +🎞 ဖလင်ကွက်များ // [1F39E] text|emoji +🎟 ဝင်ခွင့် လက်မှတ်များ // [1F39F] text|emoji +🎠 ချားရဟတ် မြင်း // [1F3A0] +🎡 ချားရဟတ် // [1F3A1] +🎢 သည်းဖိုရထား // [1F3A2] +🎣 ငါးမျှားတံ // [1F3A3] +🎤 မိုက်ခရိုဖုန်း // [1F3A4] +🎥 ရုပ်ရှင် ကင်မရာ // [1F3A5] +🎦 ရုပ်ရှင် // [1F3A6] +🎧 ဖုန်းနားကြပ် // [1F3A7] +🎨 ဆေးစပ်ရာ အပြား // [1F3A8] +🎩 ဦးထုပ်မြင့် // [1F3A9] +🎪 ဆပ်ကပ်တဲ // [1F3AA] +🎫 လက်မှတ် // [1F3AB] +🎬 ရုပ်ရှင် ကလက်ဘုတ် // [1F3AC] +🎭 ဖြေဖျော်ရေး အနုပညာများ // [1F3AD] +🎮 ဗီဒီယို ဂိမ်း // [1F3AE] +🎯 ဗဟိုချက်ထိမှန်ခြင်း // [1F3AF] +🎰 လောင်းကစားစက် // [1F3B0] +🎱 ဘီလိယက် // [1F3B1] +🎲 အံစာတုံး // [1F3B2] +🎳 ဘိုးလင်း // [1F3B3] +🎴 ပန်း ဖဲချပ်များ // [1F3B4] +🎵 ဂီတ သင်​္ကေတ // [1F3B5] +🎶 ဂီတ သင်​္ကေတများ // [1F3B6] +🎷 ဆက်ဆိုဖုန်း // [1F3B7] +🎸 ဂီတာ // [1F3B8] +🎹 ဂီတ ကီးဘုတ် // [1F3B9] +🎺 ခရာ // [1F3BA] +🎻 တယော // [1F3BB] +🎼 ဂီတ ရမှတ်များ // [1F3BC] +🎽 အပြေးသမား ရှပ်အင်္ကျီ // [1F3BD] +🎾 တင်းနစ် // [1F3BE] +🎿 စကီးများ // [1F3BF] +🏀 ဘတ်စကက်ဘော // [1F3C0] +🏁 အကွက်ဆင် အလံ // [1F3C1] +🏂 စနိုးဘုတ်စီးသူ // [1F3C2] +🏃 ပြေးသူ // [1F3C3] +🏄 ရေလွှာလှိုင်းစီးသူ // [1F3C4] +🏅 အားကစား ဆုတံဆိပ် // [1F3C5] +🏆 ဖလားဆု // [1F3C6] +🏇 မြင်းစီးခြင်း // [1F3C7] +🏈 အမေရိကန် ဘောလုံး // [1F3C8] +🏉 ရာဂ်ဘီ ဘောလုံး // [1F3C9] +🏊 ရေကူးသူ // [1F3CA] +🏋 အလေးမသမား // [1F3CB] text|emoji +🏌 ဂေါက်သီးရိုက်သူ // [1F3CC] text|emoji +🏍 မော်တော်ဆိုင်ကယ် // [1F3CD] text|emoji +🏎 ပြိုင်ကား // [1F3CE] text|emoji +🏏 ခရစ်ကက် // [1F3CF] +🏐 ဘော်လီဘော // [1F3D0] +🏑 ကွင်းပြင် ဟော်ကီ // [1F3D1] +🏒 ရေခဲပြင် ဟော်ကီရိုက်တံနှင့် ရော်ဘာဒိုးပြား // [1F3D2] +🏓 စားပွဲတင် တင်းနစ် // [1F3D3] +🏔 ဆီးနှင်းဖုံးနေသည့် တောင် // [1F3D4] text|emoji +🏕 စခန်းချနေခြင်း // [1F3D5] text|emoji +🏖 ကမ်းခြေနှင့် ထီး // [1F3D6] text|emoji +🏗 အဆောက်အအုံများ ဆောက်လုပ်ခြင်း // [1F3D7] text|emoji +🏘 အိမ်ရာ အဆောက်အအုံများ // [1F3D8] text|emoji +🏙 မြို့ပြရှုခင်း // [1F3D9] text|emoji +🏚 ပိုင်ရှင်စွန့်နေရာများတွင် အိမ်ရာဆောက်လုပ်ခြင်း // [1F3DA] text|emoji +🏛 ရှေးရိုး အဆောက်အအုံ // [1F3DB] text|emoji +🏜 သဲကန္တာရ // [1F3DC] text|emoji +🏝 လူသူမဲ့ကျွန်း // [1F3DD] text|emoji +🏞 အမျိုးသား ဥယျာဉ် // [1F3DE] text|emoji +🏟 ဘောလုံးကွင်း // [1F3DF] text|emoji +🏠 အိမ်ရာ ဆောက်လုပ်ခြင်း // [1F3E0] +🏡 ပန်းခြံနှင့် အိမ် // [1F3E1] +🏢 ရုံး အဆောက်အအုံ // [1F3E2] +🏣 ဂျပန် စာတိုက် // [1F3E3] +🏤 စာတိုက် // [1F3E4] +🏥 ဆေးရုံ // [1F3E5] +🏦 ဘဏ် // [1F3E6] +🏧 ATM သင်​္ကေတ // [1F3E7] +🏨 ဟိုတယ် // [1F3E8] +🏩 ချစ်သူ ဟိုတယ် // [1F3E9] +🏪 ကုန်စုံဆိုင် // [1F3EA] +🏫 ကျောင်း // [1F3EB] +🏬 စတိုးဆိုင်ကြီး // [1F3EC] +🏭 စက်ရုံ // [1F3ED] +🏮 စက္ကူမီးအိမ် အနီ // [1F3EE] +🏯 ဂျပန် ရဲတိုက် // [1F3EF] +🏰 ရဲတိုက် // [1F3F0] +🏳 ဝှေ့ယမ်းနေသည့် အလံဖြူ // [1F3F3] text|emoji +🏴 ဝှေ့ယမ်းနေသည့် အလံမည်း // [1F3F4] +🏵 နှင်းဆီပွင့်ပုံစံ // [1F3F5] text|emoji +🏷 တံဆိပ် // [1F3F7] text|emoji +🏸 ကြက်တောင်ရိုက်ခြင်း // [1F3F8] +🏹 လေးနှင့် မြား // [1F3F9] +🏺 စဥ့်အိုး // [1F3FA] +🏻 အရေပြား အမျိုးအစား−၁−၂ // [1F3FB] +🏼 အရေပြား အမျိုးအစား−၃ // [1F3FC] +🏽 အရေပြား အမျိုးအစား−၄ // [1F3FD] +🏾 အရေပြား အမျိုးအစား−၅ // [1F3FE] +🏿 အရေပြား အမျိုးအစား−၆ // [1F3FF] +🐀 ကြွက် // [1F400] +🐁 ကြွက်ငယ် // [1F401] +🐂 နွားထီး // [1F402] +🐃 ကျွဲ // [1F403] +🐄 နွားမ // [1F404] +🐅 ကျား // [1F405] +🐆 ကျားသစ် // [1F406] +🐇 ယုန် // [1F407] +🐈 ကြောင် // [1F408] +🐉 နဂါး // [1F409] +🐊 မိကျောင်း // [1F40A] +🐋 ဝေလငါး // [1F40B] +🐌 ခရု // [1F40C] +🐍 မြွေ // [1F40D] +🐎 မြင်း // [1F40E] +🐏 သိုးထီး // [1F40F] +🐐 ဆိတ် // [1F410] +🐑 သိုး // [1F411] +🐒 မျောက် // [1F412] +🐓 ကြက်ဖ // [1F413] +🐔 ကြက် // [1F414] +🐕 ခွေး // [1F415] +🐖 ဝက် // [1F416] +🐗 တောဝက် // [1F417] +🐘 ဆင် // [1F418] +🐙 ဘဝဲ // [1F419] +🐚 ခရုခွံ // [1F41A] +🐛 ပိုးကောင်ကလေး // [1F41B] +🐜 ပုရွက်ဆိတ် // [1F41C] +🐝 ပျား // [1F41D] +🐞 ပိုးတောင်မာ // [1F41E] +🐟 ငါး // [1F41F] +🐠 အပူပိုင်း ငါး // [1F420] +🐡 ငါးပူဖောင်း // [1F421] +🐢 လိပ် // [1F422] +🐣 ပေါက်ခါစ ကြက်ကလေး // [1F423] +🐤 ကြက်ပေါက်စကလေး // [1F424] +🐥 ရှေ့သို့မျက်နှာမူထားသည့် ကြက်ပေါက်စ // [1F425] +🐦 ငှက် // [1F426] +🐧 ပင်ဂွင်းငှက် // [1F427] +🐨 ကိုအာလာ // [1F428] +🐩 အမွှေးထူခွေး // [1F429] +🐪 ကုလားအုတ် // [1F42A] +🐫 ဘို့နှစ်ဘို့ရှိ ကုလားအုတ် // [1F42B] +🐬 လင်းပိုင် // [1F42C] +🐭 ကြွက် မျက်နှာ // [1F42D] +🐮 နွားမ မျက်နှာ // [1F42E] +🐯 ကျား မျက်နှာ // [1F42F] +🐰 ယုန် မျက်နှာ // [1F430] +🐱 ကြောင် မျက်နှာ // [1F431] +🐲 နဂါး မျက်နှာ // [1F432] +🐳 ရေမှုတ်ထုတ်နေသည့် ဝေလငါး // [1F433] +🐴 မြင်း မျက်နှာ // [1F434] +🐵 မျောက်မျက်နှာ // [1F435] +🐶 ခွေး မျက်နှာ // [1F436] +🐷 ဝက် မျက်နှာ // [1F437] +🐸 ဖား မျက်နှာ // [1F438] +🐹 မြီးတိုပါးတွဲကြွက် // [1F439] +🐺 ဝံပုလွေ မျက်နှာ // [1F43A] +🐻 ဝက်ဝံ မျက်နှာ // [1F43B] +🐼 ပန်ဒါ မျက်နှာ // [1F43C] +🐽 ဝက်နှာခေါင်း // [1F43D] +🐾 တိရိစ္ဆာန်ဖဝါး အရာများ // [1F43E] +🐿 ကျောရိုးတွင် အဖြူအနက်စင်းပါ ရှဥ့်ငယ်တမျိုး // [1F43F] text|emoji +👀 မျက်လုံးများ // [1F440] +👁 မျက်လုံး // [1F441] text|emoji +👂 နားရွက် // [1F442] +👃 နာခေါင်း // [1F443] +👄 ပါးစပ် // [1F444] +👅 လျှာ // [1F445] +👆 အပေါ်သို့ ညွှန်ပြနေသည့် လက်ပြန် အညွှန်း // [1F446] +👇 အောက်သို့ ညွှန်ပြနေသည့် လက်ပြန် အညွှန်း // [1F447] +👈 ဘယ်သို့ ညွှန်ပြနေသည့် လက်ပြန် အညွှန်း // [1F448] +👉 ညာသို့ ညွှန်ပြနေသည့် လက်ပြန် အညွှန်း // [1F449] +👊 ရင်ဆိုင်ရတော့မည့် လက်သီး // [1F44A] +👋 ဝှေ့ယမ်းနေသည့် လက် // [1F44B] +👌 အိုကေ လက် // [1F44C] +👍 ထောင်ပြထားသည့် လက်မ // [1F44D] +👎 အောက်သို့ပြနေသည့် လက်မ // [1F44E] +👏 လက်ခုပ်တီးနေသည့် လက်များ // [1F44F] +👐 ဖွင့်ထားသည့် လက်များ // [1F450] +👑 သရဖူ // [1F451] +👒 အမျိုးသမီး ဦးထုပ် // [1F452] +👓 မျက်မှန် // [1F453] +👔 နက်ကတိုင် // [1F454] +👕 တီရှပ် // [1F455] +👖 ဂျင်းဘောင်းဘီ // [1F456] +👗 ဝတ်စုံ // [1F457] +👘 ကီမိုနို // [1F458] +👙 ဘီကီနီ // [1F459] +👚 အမျိုးသမီး အဝတ်အစားများ // [1F45A] +👛 ပိုက်ဆံအိတ် // [1F45B] +👜 လက်ဆွဲအိတ် // [1F45C] +👝 လက်ကိုင်အိတ် // [1F45D] +👞 အမျိုးသား ဖိနပ် // [1F45E] +👟 အပြေး ဖိနပ် // [1F45F] +👠 ဒေါက်မြင့် ဖိနပ် // [1F460] +👡 အမျိုးသမီး ညှပ်ဖိနပ် // [1F461] +👢 အမျိုးသမီး ဘွတ်ဖိနပ် // [1F462] +👣 ခြေရာများ // [1F463] +👤 ကိုယ်တစ်ပိုင်း အရိပ်ပုံ // [1F464] +👥 ကိုယ်တစ်ပိုင်းများ၏ အရိပ်ပုံ // [1F465] +👦 ယောက်ျားကလေး // [1F466] +👧 မိန်းကလေး // [1F467] +👨 အမျိုးသား // [1F468] +👩 အမျိုးသမီး // [1F469] +👪 မိသားစု // [1F46A] +👫 လက်တွဲထားသော အမျိုးသားနှင့် အမျိုးသမီး // [1F46B] +👬 လက်တွဲထားသော အမျိုးသား နှစ်ယောက် // [1F46C] +👭 လက်တွဲထားသော အမျိုးသမီး နှစ်ယောက် // [1F46D] +👮 ပုလိပ် အရာရှိ // [1F46E] +👯 ပါတီတက်နေသော အမျိုးသမီးများ // [1F46F] +👰 မျက်နှာလွှာဇာနှင့် သတို့သမီး // [1F470] +👱 ရွှေရောင်ဆံကေသာရှိသူ // [1F471] +👲 တရုတ်ဦးထုပ်နှင့်လူ // [1F472] +👳 ဗောင်းထုပ်နှင့်သူ // [1F473] +👴 သက်ကြီး အမျိုးသား // [1F474] +👵 သက်ကြီး အမျိုးသမီး // [1F475] +👶 ကလေး // [1F476] +👷 ဆောက်လုပ်ရေး လုပ်သား // [1F477] +👸 မင်းသမီး // [1F478] +👹 ဘီလူး // [1F479] +👺 နတ်ဆိုးကလေး // [1F47A] +👻 တစ္ဆေ // [1F47B] +👼 နတ်သမီးကလေး // [1F47C] +👽 ဂြိုဟ်သား // [1F47D] +👾 မကောင်းဆိုးဝါး ဂြိုဟ်သား // [1F47E] +👿 ဆိုးပေ // [1F47F] +💀 ဦးခွံ // [1F480] +💁 စုံစမ်းရေး စားပွဲမှာထိုင်နေသူ // [1F481] +💂 သက်တော်စောင့် // [1F482] +💃 ကချေသည် // [1F483] +💄 နှုတ်ခမ်းနီ // [1F484] +💅 လက်သည်း ဆိုးဆေး // [1F485] +💆 မျက်နှာကို နှိပ်နယ်ပေးခြင်း // [1F486] +💇 ဆံပင်ညှပ်ခြင်း // [1F487] +💈 ဆံပင်ညှပ်ဆိုင် တိုင် // [1F488] +💉 ဆေးထိုးအပ် // [1F489] +💊 ဆေးလုံး // [1F48A] +💋 အနမ်း တံဆိပ် // [1F48B] +💌 ရည်းစား စာ // [1F48C] +💍 လက်စွပ် // [1F48D] +💎 ကျောက်မျက် ရတနာ // [1F48E] +💏 အနမ်း // [1F48F] +💐 ပန်းစည်း // [1F490] +💑 နှလုံးသားနှင့် စုံတွဲ // [1F491] +💒 မင်္ဂလာဆောင် // [1F492] +💓 ခုန်နေသည့် နှလုံး // [1F493] +💔 အက်ကွဲနေသည့် နှလုံး // [1F494] +💕 နှလုံးနှစ်ခု // [1F495] +💖 အရောင်လက်နေသည့် နှလုံး // [1F496] +💗 ကြီးထွားလာနေသည့် နှလုံး // [1F497] +💘 မြားနှင့် နှလုံး // [1F498] +💙 အပြာရောင် နှလုံး // [1F499] +💚 အစိမ်းရောင် နှလုံး // [1F49A] +💛 အဝါရောင် နှလုံး // [1F49B] +💜 ခရမ်းရောင် နှလုံး // [1F49C] +💝 ဖဲကြိုးနှင့် နှလုံး // [1F49D] +💞 လည်နေသည့် နှလုံးများ // [1F49E] +💟 နှလုံးဖြင့် အလှပြင်ဆင်ခြင်း // [1F49F] +💠 အစက်ပါ စိန် // [1F4A0] +💡 မီးလုံး // [1F4A1] +💢 ဒ​ေါသ // [1F4A2] +💣 ဗုံး // [1F4A3] +💤 ခေါ ခေါ ခေါ // [1F4A4] +💥 တိုက်မိခြင်း // [1F4A5] +💦 ချွေးစက်များ // [1F4A6] +💧 အစက်ကလေး // [1F4A7] +💨 တဟုန်ထိုးပြေးခြင်း // [1F4A8] +💩 ချေးပုံ // [1F4A9] +💪 ကွေးထားသည့် လက်ရုံးကြွက်သား // [1F4AA] +💫 မူးဝေခြင်း // [1F4AB] +💬 စကားပြော အကွက် // [1F4AC] +💭 အတွေး ပူဖောင်းအကွက် // [1F4AD] +💮 ပန်းဖြူ // [1F4AE] +💯 အမှတ် တစ်ရာ // [1F4AF] +💰 ငွေအိတ် // [1F4B0] +💱 နိုင်ငံခြားငွေ လဲလှယ်ခြင်း // [1F4B1] +💲 ဒေါ်လာ သင်​္ကေတ စာလုံးမည်း // [1F4B2] +💳 ခရက်တစ်ကတ် // [1F4B3] +💴 ယန်း ငွေစက္ကူ // [1F4B4] +💵 ဒေါ်လာ ငွေစက္ကူ // [1F4B5] +💶 ယူရို ငွေစက္ကူ // [1F4B6] +💷 ပေါင် ငွေစက္ကူ // [1F4B7] +💸 အတောင်အပံပါ ငွေ // [1F4B8] +💹 ယန်းတန်ဖိုး မြင့်တက်နေသည့် ဇယားပုံ // [1F4B9] +💺 ထိုင်ခုံ // [1F4BA] +💻 ခရီးဆောင် ကွန်ပျူတာ // [1F4BB] +💼 ရုံးသုံးလက်ဆွဲအိတ် // [1F4BC] +💽 မီနီဒစ် // [1F4BD] +💾 ဖလော်ပီဒစ် // [1F4BE] +💿 အလင်းသုံးဒစ် // [1F4BF] +📀 ဒီဗီဒီ // [1F4C0] +📁 ဖိုင်တွဲ // [1F4C1] +📂 ဖွင့်ထားသည့် ဖိုင်တွဲ // [1F4C2] +📃 တွန့်လိပ်နေသော စာရွက် // [1F4C3] +📄 မြင်နေရသည့် စာမျက်နှာ // [1F4C4] +📅 ပြက္ခဒိန် // [1F4C5] +📆 ဆုတ်ဖြဲယူရသည့် ပြက္ခဒိန် // [1F4C6] +📇 ကဒ် အညွှန်း // [1F4C7] +📈 မြင့်တက်နေသည့် ဇယားပုံ // [1F4C8] +📉 နိမ့်ဆင်းနေသည့် ဇယားပုံ // [1F4C9] +📊 ဘား ဇယားပုံ // [1F4CA] +📋 ကလစ်ဖြင့်ညှပ်သည့် ဘုတ်ပြား // [1F4CB] +📌 ဖိထိုးရသည့် ပင်အပ် // [1F4CC] +📍 ထိုးအပ် အဝိုင်း // [1F4CD] +📎 စာရွက်ညှပ် // [1F4CE] +📏 ပေတံ // [1F4CF] +📐 ထောင့်မှန် ပေတံ // [1F4D0] +📑 စာညှပ် တဘ်များ // [1F4D1] +📒 လယ်ဂျာစာအုပ် // [1F4D2] +📓 မှတ်စုစာအုပ် // [1F4D3] +📔 အလှမျက်နှာဖုံးနှင့် မှတ်စုစာအုပ် // [1F4D4] +📕 ပိတ်ထားသည့် စာအုပ် // [1F4D5] +📖 ဖွင့်ထားသည့် စာအုပ် // [1F4D6] +📗 အစိမ်းရောင် စာအုပ် // [1F4D7] +📘 အပြာရောင် စာအုပ် // [1F4D8] +📙 လိမ္မော်ရောင် စာအုပ် // [1F4D9] +📚 စာအုပ်များ // [1F4DA] +📛 အမည် တံဆိပ် // [1F4DB] +📜 လှိမ့်ပါ // [1F4DC] +📝 မှတ်စု // [1F4DD] +📞 တယ်လီဖုန်း အသံဖမ်းခွက် // [1F4DE] +📟 ပေဂျာ // [1F4DF] +📠 ဖက်စ် စာပို့စက် // [1F4E0] +📡 ဂြိုဟ်တု စလောင်း // [1F4E1] +📢 အသံချဲ့စက် // [1F4E2] +📣 အော်လန် // [1F4E3] +📤 စာထွက်ဗန်း // [1F4E4] +📥 စာဝင်ဗန်း // [1F4E5] +📦 အထုပ် // [1F4E6] +📧 အီးမေးလ် // [1F4E7] +📨 အဝင် စာအိတ် // [1F4E8] +📩 မြားပါ စာအိတ် // [1F4E9] +📪 အလံချထားသည့် စာတိုက်ပုံးအပိတ် // [1F4EA] +📫 အလံတင်ထားသည့် စာတိုက်ပုံးအပိတ် // [1F4EB] +📬 အလံတင်ထားသည့် စာတိုက်ပုံးအပွင့် // [1F4EC] +📭 အလံချထားသည့် စာတိုက်ပုံးအပွင့် // [1F4ED] +📮 စာတိုက်ပုံး // [1F4EE] +📯 စာတိုက်ခရာ // [1F4EF] +📰 သတင်းစာ // [1F4F0] +📱 မိုဘိုင်း ဖုန်း // [1F4F1] +📲 မြားနှင့် မိုဘိုင်း ဖုန်း // [1F4F2] +📳 တုန်ခါမှု မုဒ် // [1F4F3] +📴 မိုဘိုင်းဖုန်း ပိတ်ထားသည် // [1F4F4] +📵 မိုဘိုင်းဖုန်း မသုံးရ // [1F4F5] +📶 ဧရီယာတိုင် ဘားများ // [1F4F6] +📷 ကင်မရာ // [1F4F7] +📸 မီးပါသည့် ကင်မရာ // [1F4F8] +📹 ဗီဒီယို ကင်မရာ // [1F4F9] +📺 ရုပ်မြင်သံကြား // [1F4FA] +📻 ရေဒီယို // [1F4FB] +📼 ဗီဒီယို ကက်ဆက် // [1F4FC] +📽 ရုပ်ရှင်ပြစက် // [1F4FD] text|emoji +📿 တရားကျင့် ပုတီး // [1F4FF] +🔀 တေးသွား ရောမွှေရန် ခလုတ် // [1F500] +🔁 ပြန်ဖွင့်ရန် ခလုတ် // [1F501] +🔂 တစ်ပုဒ်ကို ပြန်ဖွင့်ရန် ခလုတ် // [1F502] +🔃 ညာရစ် ​ဒ​ေါင်လိုက် မြားများ // [1F503] +🔄 လက်ဝဲရစ် မြားများ ခလုတ် // [1F504] +🔅 မှိန်စေရန် ခလုတ် // [1F505] +🔆 လင်းစေရန် ခလုတ် // [1F506] +🔇 စပီကာ ပိတ် // [1F507] +🔈 စပီကာ // [1F508] +🔉 စပီကာ ဖွင့် // [1F509] +🔊 စပီကာ အသံကျယ် // [1F50A] +🔋 ဘက်ထရီ // [1F50B] +🔌 လျှပ်စစ် ပလပ် // [1F50C] +🔍 ဘယ်သို့ ညွှန်ပြနေသည့် မှန်ဘီလူး // [1F50D] +🔎 ညာသို့ ညွှန်ပြနေသည့် မှန်ဘီလူး // [1F50E] +🔏 မင်တံနှင့် သော့ခလောက် // [1F50F] +🔐 ပိတ်ထားသည့် သော့ခလောက်နှင့် သော့ // [1F510] +🔑 သော့ // [1F511] +🔒 ပိတ်နေသော သော့ခလောက် // [1F512] +🔓 ပွင့်နေသော သော့ခလောက် // [1F513] +🔔 ခေါင်းလောင်း // [1F514] +🔕 မျဉ်းစောင်းနှင့် ခေါင်းလောင်း // [1F515] +🔖 စာညှပ် // [1F516] +🔗 ချိတ် // [1F517] +🔘 ရေဒီယို ခလုတ် // [1F518] +🔙 နောက်သို့ မြား // [1F519] +🔚 အဆုံးသတ်ပြ မြှား // [1F51A] +🔛 ဖွင့်ထားပြီ။ မြား // [1F51B] +🔜 မကြာမီ မြား // [1F51C] +🔝 ထိပ်သို့ မြား // [1F51D] +🔞 ဆယ့်ရှစ်နှစ်အောက် ခွင့်မပြု // [1F51E] +🔟 ၁၀ ဂဏန်း ခလုတ် // [1F51F] +🔠 လက်တင် စာလုံးကြီး ထည့်ရန် // [1F520] +🔡 လက်တင် စာလုံးသေး ထည့်ရန် // [1F521] +🔢 ဂဏန်းများ ထည့်ရန် // [1F522] +🔣 သင်​္ကေတများ ထည့်ရန် // [1F523] +🔤 လက်တင် စာလုံးများ ထည့်ရန် // [1F524] +🔥 မီး // [1F525] +🔦 ဓာတ်မီး // [1F526] +🔧 ခွ // [1F527] +🔨 တူ // [1F528] +🔩 မူလီနှင့် မူလီခေါင်း // [1F529] +🔪 မီးဖိုသုံး ဓား // [1F52A] +🔫 ပစ္စတို // [1F52B] +🔬 အဏုကြည့်မှန်ပြောင်း // [1F52C] +🔭 အဝေးကြည့်မှန်ပြောင်း // [1F52D] +🔮 ကသိုဏ်းဖန်လုံး // [1F52E] +🔯 အစက်ချထားသည့် ခြောက်ထောင့်ကြယ် // [1F52F] +🔰 စသင်သူအတွက် ဂျပန် သင်​္ကေတ // [1F530] +🔱 တြိဒဏ္ဍ တံဆိပ် // [1F531] +🔲 အနက်ရောင် လေးထောင့်ခလုတ် // [1F532] +🔳 အဖြူရောင် လေးထောင့်ခလုတ် // [1F533] +🔴 အနီရောင် စက်ဝိုင်း // [1F534] +🔵 အပြာရောင်စက်ဝိုင်း // [1F535] +🔶 လိမ္မော်ရောင် စိန်ကြီး // [1F536] +🔷 အပြာရောင် စိန်ကြီး // [1F537] +🔸 လိမ္မော်ရောင် စိန်အသေး // [1F538] +🔹 အပြာရောင် စိန်အသေး // [1F539] +🔺 အပေါ်သို့ ညွှန်ပြနေသည့် အနီရောင် တြိဂံ // [1F53A] +🔻 အောက်သို့ ညွှန်ပြနေသည့် အနီရောင် တြိဂံ // [1F53B] +🔼 အပ​ေါ်သို့ ခလုတ် // [1F53C] +🔽 အောက်သို့ ခလုတ် // [1F53D] +🕉 ဉုံ // [1F549] text|emoji +🕊 ချိုးငှက် // [1F54A] text|emoji +🕋 kaaba // [1F54B] +🕌 ဗလီကျောင်း // [1F54C] +🕍 ဂျူးဘုရားရှိခိုးကျောင်း // [1F54D] +🕎 ဖယောင်းတိုင်စင် // [1F54E] +🕐 တစ်နာရီ // [1F550] +🕑 နှစ်နာရီ // [1F551] +🕒 သုံးနာရီ // [1F552] +🕓 လေးနာရီ // [1F553] +🕔 ငါးနာရီ // [1F554] +🕕 ခြောက်နာရီ // [1F555] +🕖 ခုနစ်နာရီ // [1F556] +🕗 ရှစ်နာရီ // [1F557] +🕘 ကိုးနာရီ // [1F558] +🕙 ဆယ်နာရီ // [1F559] +🕚 ဆယ့်တစ်နာရီ // [1F55A] +🕛 ဆယ့်နှစ်နာရီ // [1F55B] +🕜 တစ်နာရီခွဲ // [1F55C] +🕝 နှစ်နာရီခွဲ // [1F55D] +🕞 သုံးနာရီခွဲ // [1F55E] +🕟 လေးနာရီခွဲ // [1F55F] +🕠 ငါးနာရီခွဲ // [1F560] +🕡 ခြောက်နာရီခွဲ // [1F561] +🕢 ခုနစ်နာရီခွဲ // [1F562] +🕣 ရှစ်နာရီခွဲ // [1F563] +🕤 ကိုးနာရီခွဲ // [1F564] +🕥 ဆယ်နာရီခွဲ // [1F565] +🕦 ဆယ့်တစ်နာရီခွဲ // [1F566] +🕧 ဆယ့်နှစ်နာရီခွဲ // [1F567] +🕯 ဖယောင်းတိုင် // [1F56F] text|emoji +🕰 မီးလင်းဖိုစင် နာရီ // [1F570] text|emoji +🕳 အပေါက် // [1F573] text|emoji +🕴 ဈာန်ပျံနေသော ရုံးဝတ်စုံနှင့်သူ // [1F574] text|emoji +🕵 စုံထောက် // [1F575] text|emoji +🕶 နေကာ မျက်မှန် // [1F576] text|emoji +🕷 ပင့်ကူ // [1F577] text|emoji +🕸 ပင့်ကူမျှင် // [1F578] text|emoji +🕹 ပဲ့ထိန်းမဏ္ဍိုင် // [1F579] text|emoji +🕺 ကခုန်နေသူ // [1F57A] +🖇 ချိတ်ထားသည့် စက္ကူညှပ်များ // [1F587] text|emoji +🖊 မင်တံ // [1F58A] text|emoji +🖋 ဖောင်တိန် // [1F58B] text|emoji +🖌 စုတ်တံ // [1F58C] text|emoji +🖍 ရောင်စုံဖယောင်းခဲတံ // [1F58D] text|emoji +🖐 လက်ချောင်းများ ဖြန့်ပြီး မြှောက်ထားသည့် လက် // [1F590] text|emoji +🖕 လက်ခလယ် // [1F595] +🖖 ညာသို့ ညွှန်ပြနေသည့် လက်ဖမိုး // [1F596] +🖤 အနက်ရောင်နှလုံးသား // [1F5A4] +🖥 စားပွဲတင် ကွန်ပျူတာ // [1F5A5] text|emoji +🖨 ပုံနှိပ်စက် // [1F5A8] text|emoji +🖱 ကွန်ပျူတာမောက်စ် // [1F5B1] text|emoji +🖲 မောက်စ် // [1F5B2] text|emoji +🖼 ဘောင်ပါသည့် ပုံ // [1F5BC] text|emoji +🗂 အညွှန်းကဒ် ခွဲသည့်အရာ // [1F5C2] text|emoji +🗃 ကဒ်ဖိုင် သေတ္တာ // [1F5C3] text|emoji +🗄 ဖိုင် အံဆွဲ // [1F5C4] text|emoji +🗑 အမှိုက်ခြင်း // [1F5D1] text|emoji +🗒 လှည့်နိုင်သည့် မှတ်စုစာအုပ် // [1F5D2] text|emoji +🗓 လှည့်နိုင်သည့် ပြက္ခဒိန် // [1F5D3] text|emoji +🗜 ဖိညှပ်စက် // [1F5DC] text|emoji +🗝 သော့ဟောင်း // [1F5DD] text|emoji +🗞 လိပ်ထားသည့် သတင်းစာ // [1F5DE] text|emoji +🗡 ဓားမြှောင် // [1F5E1] text|emoji +🗣 စကားပြောနေသည့် ဦးခေါင်း // [1F5E3] text|emoji +🗨 ဘယ်ဘက် စကားပြော အကွက် // [1F5E8] text|emoji +🗯 ညာဘက် ဒေါသ အကွက် // [1F5EF] text|emoji +🗳 မဲပါသည့် မဲပုံး // [1F5F3] text|emoji +🗺 ကမ္ဘာ့မြေပုံ // [1F5FA] text|emoji +🗻 ဖူဂျီတောင် // [1F5FB] +🗼 တိုကျို မျှော်စင် // [1F5FC] +🗽 လွတ်မြောက်ခြင်း ရုပ်ထု // [1F5FD] +🗾 ဂျပန်နိုင်ငံမြေပုံ // [1F5FE] +🗿 moai // [1F5FF] + +// 1F600..1F64F : Emoticons + +😀 ပြုံးဖြဲဖြဲ မျက်နှာ // [1F600] +😁 မျက်လုံးများ ပြုံးနေသည့် ပြုံးဖြဲဖြဲ မျက်နှာ // [1F601] +😂 ပျော်ရွှင်မှု မျက်ရည်များဖြင့် မျက်နှာ // [1F602] +😃 ပါးစပ်ဟနေသည့် အပြုံးမျက်နှာ // [1F603] +😄 ပါးစပ်ဟနေကာ မျက်လုံးများ ပြုံးနေသည့် အပြုံးမျက်နှာ // [1F604] +😅 ပါးစပ်ဟနေကာ ဇောချွေးပြန်နေသည့် အပြုံးမျက်နှာ // [1F605] +😆 ပါးစပ်ဟနေကာ မျက်စိကို ကြိတ်မှိတ်ထားသည့် အပြုံးမျက်နှာ // [1F606] +😇 ရောက်လျှံစက်၀န်းနှင့် မျက်နှာ // [1F607] +😈 ဦးချိုနှင့် ပြုံးနေသော မျက်နှာ // [1F608] +😉 မျက်စိမှိတ်ပြနေသည့် မျက်နှာ // [1F609] +😊 မျက်လုံးများ ပြုံးနေသည့် အပြုံးမျက်နှာ // [1F60A] +😋 အရသာခံနေသည့် မျက်နှာ // [1F60B] +😌 စိတ်သက်သာရာရသည့် မျက်နှာ // [1F60C] +😍 နှလုံးပုံစံ မျက်လုံးများနှင့် အပြုံးမျက်နှာ // [1F60D] +😎 နေကာမျက်မှန်ဖြင့် အပြုံးမျက်နှာ // [1F60E] +😏 လှောင်ပြုံးမျက်နှာ // [1F60F] +😐 မျက်နှာသေ // [1F610] +😑 ခံစားမှုမဲ့ မျက်နှာ // [1F611] +😒 စိတ်အလိုမကျသည့် မျက်နှာ // [1F612] +😓 ချွေးစေးပြန်သည့်မျက်နှာ // [1F613] +😔 စဉ်းစားငိုင်တွေသည့် မျက်နှာ // [1F614] +😕 ဇဝေဇဝါဖြစ်သည့် မျက်နှာ // [1F615] +😖 မွှန်ထူသွားသည့် မျက်နှာ // [1F616] +😗 နမ်းနေသည့် မျက်နှာ // [1F617] +😘 အနမ်းကို ပို့ပေးနေသည့် မျက်နှာ // [1F618] +😙 ပြုံးနေသည့် မျက်လုံးများနှင့် နမ်းနေသည့် မျက်နှာ // [1F619] +😚 မျက်စိမှိတ်ထားကာ နမ်းနေသည့် မျက်နှာ // [1F61A] +😛 လျှာထုတ်ထားသည့် မျက်နှာ // [1F61B] +😜 လျှာထုတ်ထားပြီး မျက်လုံးတစ်ဖက် မှိတ်ပြသည့် မျက်နှာ // [1F61C] +😝 မျက်လုံးများပိတ်ပြီး လျှာထုတ်ပြသည့် မျက်နှာ // [1F61D] +😞 စိတ်ပျက်နေသော မျက်နှာ // [1F61E] +😟 စိတ်ပူနေသော မျက်နှာ // [1F61F] +😠 ဒေါသထွက်နေသော မျက်နှာ // [1F620] +😡 စူတူတူ မျက်နှာ // [1F621] +😢 ငိုနေသော မျက်နှာ // [1F622] +😣 အကူအညီမဲ့သည့် မျက်နှာ // [1F623] +😤 နှာခေါင်းမှ အငွေ့ထွက်နေသော မျက်နှာ // [1F624] +😥 ဝမ်းနည်းသော်လည်း စိတ်သက်သာရာရသည့် မျက်နှာ // [1F625] +😦 မျက်မှောင်ကြုတ်နေကာ ပါးစပ်ဟထားသည့် မျက်နှာ // [1F626] +😧 မချိတင်ကဲ မျက်နှာ // [1F627] +😨 စိုးရိမ်နေသော မျက်နှာ // [1F628] +😩 ငြီးငွေ့နေသော မျက်နှာ // [1F629] +😪 အိပ်ငိုက်သည့်မျက်နှာ // [1F62A] +😫 ပင်ပန်းသည့်မျက်နှာ // [1F62B] +😬 ရှုံ့မဲ့နေသော မျက်နှာ // [1F62C] +😭 ကျယ်လောင်စွာ ငိုနေသော မျက်နှာ // [1F62D] +😮 ပါးစပ်အဟောင်းသားနှင့် မျက်နှာ // [1F62E] +😯 အံ့ဩသည့်မျက်နှာ // [1F62F] +😰 ပါးစပ်ဟနေကာ ဇောချွေးပြန်နေသော မျက်နှာ // [1F630] +😱 ကြောက်လန့်စွာ အော်နေသော မျက်နှာ // [1F631] +😲 အံ့အားသင့်နေသော မျက်နှာ // [1F632] +😳 အားမန်ပြည့်နေသော မျက်နှာ // [1F633] +😴 အိပ်နေသည့်မျက်နှာ // [1F634] +😵 မူးဝေနေသော မျက်နှာ // [1F635] +😶 ပါးစပ်မပါသော မျက်နှာ // [1F636] +😷 ကျန်းမာရေး မျက်နှာဖုံးနှင့် မျက်နှာ // [1F637] +😸 ပြုံးနေသော မျက်လုံးများနှင့် ပြုံးဖြဲဖြဲ ကြောင် မျက်နှာ // [1F638] +😹 ပျော်ရွှင်မှု မျက်ရည်များဖြင့် ကြောင် မျက်နှာ // [1F639] +😺 ပါးစပ်ဟနေကာ ပြုံးနေသော ကြောင် မျက်နှာ // [1F63A] +😻 နှလုံးပုံစံ မျက်လုံးများနှင့် ပြုံးနေသည့် ကြောင်၏ မျက်နှာ // [1F63B] +😼 ခနဲ့တဲ့တဲ့ ပြုံးနေသော ကြောင် မျက်နှာ // [1F63C] +😽 မျက်စိမှိတ်ထားကာ နမ်းနေသည့် ကြောင် မျက်နှာ // [1F63D] +😾 စိတ်တိုနေသည့် ကြောင်မျက်နှာ // [1F63E] +😿 ငိုနေသော ကြောင် မျက်နှာ // [1F63F] +🙀 ငြီးငွေ့နေသော ကြောင် မျက်နှာ // [1F640] +🙁 အနည်းငယ်ဝမ်းနည်းသည့် မျက်နှာ // [1F641] +🙂 မသိမသာ ပြုံးနေသေည့် မျက်နှာ // [1F642] +🙃 ဇောက်ထိုး မျက်နှာ // [1F643] +🙄 ပျင်းစရာကောင်းသောအကြောင်းအရာကြောင့် ဖြစ်ပေါ်လာသောမျက်နှာ // [1F644] +🙅 မလို လက်ဟန် // [1F645] +🙆 အိုကေ လက်ဟန် // [1F646] +🙇 ဦးညွတ်နေသူ // [1F647] +🙈 မကောင်းတာကို မမြင်လို // [1F648] +🙉 မကောင်းတာကို မကြားလို // [1F649] +🙊 မကောင်းတာကို မပြောလို // [1F64A] +🙋 လက်မြှောက်ပြနေသော ပျော်ရွှင်နေသူ // [1F64B] +🙌 လက်မြှောက်ပြနေသူ // [1F64C] +🙍 မျက်မှောင်ကြုတ်နေသူ // [1F64D] +🙎 စူတူတူ လူ // [1F64E] +🙏 ယှက်ထားသည့် လက်များ // [1F64F] + +// 1F680..1F6FF : Transport and Map Symbols + +🚀 ဒုံးယာဉ် // [1F680] +🚁 ရဟတ်ယာဉ် // [1F681] +🚂 မီးရထားစက်ခေါင်း // [1F682] +🚃 ရထားတွဲ // [1F683] +🚄 အမြန်ရထား // [1F684] +🚅 ကျည်ထိပ်ဖူးခေါင်းတွဲဖြင့် အမြန်ရထား // [1F685] +🚆 ရထား // [1F686] +🚇 မြေအောက်ရထား // [1F687] +🚈 အပေါ့စား ရထား // [1F688] +🚉 ဘူတာရုံ // [1F689] +🚊 ဓာတ်ရထား // [1F68A] +🚋 ဓာတ်ရထားတွဲ // [1F68B] +🚌 ဘတ်စ်ကား // [1F68C] +🚍 လာနေသည့် ဘတ်စ်ကား // [1F68D] +🚎 ထရော်လီဘတ်စ်ကား // [1F68E] +🚏 ဘတ်စ်ကား မှတ်တိုင် // [1F68F] +🚐 မီနီဘတ်စ်ကား // [1F690] +🚑 လူနာတင်ကား // [1F691] +🚒 မီးသတ်ကား // [1F692] +🚓 ရဲကား // [1F693] +🚔 လာနေသည့် ရဲကား // [1F694] +🚕 တက္ကစီ // [1F695] +🚖 လာနေသည့် တက္ကစီ // [1F696] +🚗 မော်တော်ကား // [1F697] +🚘 လာနေသည့် မော်တော်ကား // [1F698] +🚙 လူစီးယာဉ် // [1F699] +🚚 ပစ္စည်းပို့သည့် ထရပ်ကား // [1F69A] +🚛 ချိတ်တွဲထားသည့် လော်ရီကား // [1F69B] +🚜 လယ်ထွန်စက် // [1F69C] +🚝 မိုနိုရထား // [1F69D] +🚞 တောင်ပ​ေါ် ရထားလမ်း // [1F69E] +🚟 ဓာတ်ကြိုးတပ် ရထား // [1F69F] +🚠 တောင်တက် ဓာတ်ကြိုးရထားလမ်း // [1F6A0] +🚡 ဝေဟင် ဓာတ်ရထားလမ်း // [1F6A1] +🚢 သင်္ဘော // [1F6A2] +🚣 ရိုးရိုးလှေ // [1F6A3] +🚤 အမြန်စက်လှေ // [1F6A4] +🚥 ဘေးတိုက် အချက်ပြမီး // [1F6A5] +🚦 ​ဒေါင်လိုက် အချက်ပြမီး // [1F6A6] +🚧 အဆောက်အအုံ // [1F6A7] +🚨 ရဲကား အချက်ပြမီး // [1F6A8] +🚩 တြိဂံပုံ အလံ // [1F6A9] +🚪 တံခါး // [1F6AA] +🚫 တားမြစ်နေရာ // [1F6AB] +🚬 ဆေးလိပ်သောက်ခြင်း // [1F6AC] +🚭 ဆေးလိပ် မသောက်ရ // [1F6AD] +🚮 အမှိုက်ထည့်ရန် ဆိုင်းဘုတ် // [1F6AE] +🚯 အမှိုက် မပစ်ရ // [1F6AF] +🚰 သောက်ရေ // [1F6B0] +🚱 သောက်ရေ မဟုတ် // [1F6B1] +🚲 စက်ဘီး // [1F6B2] +🚳 စက်ဘီးမစီးရ // [1F6B3] +🚴 စက်ဘီးစီးသူ // [1F6B4] +🚵 တောင်ပေါ် စက်ဘီးစီးသူ // [1F6B5] +🚶 ခြေကျင် လျှောက်သူ // [1F6B6] +🚷 ခြေကျင်မလျှောက်ရ // [1F6B7] +🚸 ကလေးများ လမ်းကူးသည့်နေရာ // [1F6B8] +🚹 အမျိုးသား အခန်း // [1F6B9] +🚺 အမျိုးသမီး အခန်း // [1F6BA] +🚻 အများသုံး ရေအိမ် // [1F6BB] +🚼 ကလေး သင်​္ကေတ // [1F6BC] +🚽 အိမ်သာ // [1F6BD] +🚾 ရေအိမ် // [1F6BE] +🚿 ရေပန်း // [1F6BF] +🛀 ရေချိုးကန်တွင် ရေချိုးနေသူ // [1F6C0] +🛁 ရေချိုးကန် // [1F6C1] +🛂 နိုင်ငံကူးလက်မှတ် စစ်ဆေးရေးဌာန // [1F6C2] +🛃 အကောက်ခွန် // [1F6C3] +🛄 ပစ္စည်းရွေးရန် // [1F6C4] +🛅 ပစ္စည်းအပ်ရန် // [1F6C5] +🛋 ဆိုဖာနှင့် မီးတိုင် // [1F6CB] text|emoji +🛌 ခုတင်ပေါ်က လူ // [1F6CC] +🛍 ဈေးဝယ် အိတ်များ // [1F6CD] text|emoji +🛎 နှိပ်ခေါင်းလောင်း // [1F6CE] text|emoji +🛏 ခုတင် // [1F6CF] text|emoji +🛐 ဝတ်ပြုရာနေရာ // [1F6D0] +🛑 ရပ်ရန် ဆိုင်းဘုတ် // [1F6D1] +🛒 စျေးဝယ်တွန်းလှည်း // [1F6D2] +🛠 တူနှင့် ခွ // [1F6E0] text|emoji +🛡 ဒိုင်း // [1F6E1] text|emoji +🛢 ဆီ စည်ပိုင်း // [1F6E2] text|emoji +🛣 ကားလမ်း // [1F6E3] text|emoji +🛤 သံလမ်း // [1F6E4] text|emoji +🛥 စက်တပ် လှေ // [1F6E5] text|emoji +🛩 လေယာဉ်ငယ် // [1F6E9] text|emoji +🛫 လေယာဉ် ထွက်ခွာခြင်း // [1F6EB] +🛬 လေယာဉ် ဆိုက်ရောက်ခြင်း // [1F6EC] +🛰 ဂြိုဟ်တု // [1F6F0] text|emoji +🛳 ခရီးသည်တင် သင်္ဘော // [1F6F3] text|emoji +🛴 စကူတာ // [1F6F4] +🛵 မော်တာစက်တပ် စကူတာ // [1F6F5] +🛶 ကနူး // [1F6F6] +🛷 sled // [1F6F7] (no translation) +🛸 flying saucer // [1F6F8] (no translation) + +// 1F900..1F9FF : Supplemental Symbols and Pictographs + +🤐 စကားမပြောဘဲ ပါးစပ်ပိတ်ထားသည့် မျက်နှာ // [1F910] +🤑 ​ငွေပါးစပ် မျက်နှာ // [1F911] +🤒 သာမိုမီတာနှင့် မျက်နှာ // [1F912] +🤓 တစ်စုံတစ်ရာကို ရူးသွပ်သူ၏ မျက်နှာ // [1F913] +🤔 စဥ်းစားနေပုံ မျက်နှာ // [1F914] +🤕 ပတ်တီးနှင့် မျက်နှာ // [1F915] +🤖 စက်ရုပ် မျက်နှာ // [1F916] +🤗 ပွေ့ဖက်နေသည့် မျက်နှာ // [1F917] +🤘 ဦးချိုများ၏ သင်္ကေတ // [1F918] +🤙 ဖုန်းခေါ်ပါပြ လက်ဟန် // [1F919] +🤚 လက်ပြန်ထောင်ပြဟန် // [1F91A] +🤛 ဘယ်ပြ ညာလက်သီး // [1F91B] +🤜 ညာပြ ဘယ်လက်သီး // [1F91C] +🤝 လက်ဆွဲနှုတ်ဆက် // [1F91D] +🤞 ကံကောင်းပါစေပြ လက်ဟန် // [1F91E] +🤟 love you gesture // [1F91F] (no translation) +🤠 နွားကျောင်းသား ဦးထုပ် ဆောင်းထားသည့်ရုပ် // [1F920] +🤡 လူပြက်ရုပ် // [1F921] +🤢 အော်ဂလီဆန်သည့်ရုပ် // [1F922] +🤣 ကြမ်းပေါ်လှိမ့်၍ ရယ်နေပါသည် // [1F923] +🤤 သွားရည်ကျနေသည့်ရုပ် // [1F924] +🤥 လူလိမ်ရုပ် // [1F925] +🤦 မျက်နှာလက်ဝါးဖြင့်အုပ်ထားသောရုပ် // [1F926] +🤧 နှာချေသည့်ရုပ် // [1F927] +🤨 face with raised eyebrow // [1F928] (no translation) +🤩 star struck // [1F929] (no translation) +🤪 crazy face // [1F92A] (no translation) +🤫 shushing face // [1F92B] (no translation) +🤬 face with symbols over mouth // [1F92C] (no translation) +🤭 face with hand over mouth // [1F92D] (no translation) +🤮 face vomiting // [1F92E] (no translation) +🤯 exploding head // [1F92F] (no translation) +🤰 ကိုယ်ဝန်ဆောင်အမျိုးသမီး // [1F930] +🤱 breast feeding // [1F931] (no translation) +🤲 palms up together // [1F932] (no translation) +🤳 ဆဲလ်ဖီ // [1F933] +🤴 အိမ်ရှေ့မင်းသား // [1F934] +🤵 tuxedo ဝတ်ထားသူ // [1F935] +🤶 မစ္စစ် စန်တာကလော့စ် // [1F936] +🤷 ပခုံးတွန့်သည် // [1F937] +🤸 ဘေးတိုက်ကျွမ်းထိုးခြင်း // [1F938] +🤹 ရွဲကစားလက်လှည့်အစွမ်းပြ // [1F939] +🤺 ဓားရေးပြိုင်သူ // [1F93A] +🤼 နပန်းသမား // [1F93C] +🤽 ဝါတာပိုလို // [1F93D] +🤾 လက်ပစ်ဘော // [1F93E] +🥀 ပန်းညှိုးတစ်ပွင့် // [1F940] +🥁 ဗုံ // [1F941] +🥂 ဖန်ခွက်ခြင်းထိသည် // [1F942] +🥃 အောက်ခြေပြား ဖန်ခွက် // [1F943] +🥄 ဇွန်း // [1F944] +🥅 ဂိုးပေါက် // [1F945] +🥇 ပထမ ဆုတံဆိပ် // [1F947] +🥈 ဒုတိယ ဆုတံဆိပ် // [1F948] +🥉 တတိယ ဆုတံဆိပ် // [1F949] +🥊 လက်ဝှေ့အိတ် // [1F94A] +🥋 သိုင်းသမားဝတ်စုံ // [1F94B] +🥌 curling stone // [1F94C] (no translation) +🥐 လခြမ်းကွေးပေါင်မုန့် // [1F950] +🥑 ထောပတ်သီး // [1F951] +🥒 သခွားသီး // [1F952] +🥓 ဝက်ပေါင်ခြောက် // [1F953] +🥔 အာလူး // [1F954] +🥕 မုန်လာဥ // [1F955] +🥖 ပြင်သစ်ပေါင်မုန့် // [1F956] +🥗 အရွက်သုပ် // [1F957] +🥘 ဒယ်အိုးပါးနှင့်စားစရာ // [1F958] +🥙 နံပြားအစာသွတ် // [1F959] +🥚 ဥ // [1F95A] +🥛 နွားနို့တစ်ခွက် // [1F95B] +🥜 မြေပဲ // [1F95C] +🥝 ကီဝီသီး // [1F95D] +🥞 မုန့်အိုးကင်းကြော် // [1F95E] +🥟 dumpling // [1F95F] (no translation) +🥠 fortune cookie // [1F960] (no translation) +🥡 takeout box // [1F961] (no translation) +🥢 chopsticks // [1F962] (no translation) +🥣 bowl with spoon // [1F963] (no translation) +🥤 cup with straw // [1F964] (no translation) +🥥 coconut // [1F965] (no translation) +🥦 broccoli // [1F966] (no translation) +🥧 pie // [1F967] (no translation) +🥨 pretzel // [1F968] (no translation) +🥩 cut of meat // [1F969] (no translation) +🥪 sandwich // [1F96A] (no translation) +🥫 canned food // [1F96B] (no translation) +🦀 ကဏန်း // [1F980] +🦁 ခြင်္သေ့ မျက်နှာ // [1F981] +🦂 ကင်း // [1F982] +🦃 ကြက်ဆင် // [1F983] +🦄 ချိုတစ်ချောင်းမြင်း မျက်နှာ // [1F984] +🦅 လင်းယုန် // [1F985] +🦆 ဘဲ // [1F986] +🦇 လင်းနို့ // [1F987] +🦈 ငါးမန်း // [1F988] +🦉 ဇီးကွက် // [1F989] +🦊 မြေခွေးရုပ် // [1F98A] +🦋 လိပ်ပြာ // [1F98B] +🦌 သမင် // [1F98C] +🦍 လူဝံ // [1F98D] +🦎 အိမ်မြှောင် // [1F98E] +🦏 ကြံ့ // [1F98F] +🦐 ပုစွန် // [1F990] +🦑 ပြည်ကြီးငါး // [1F991] +🦒 giraffe // [1F992] (no translation) +🦓 zebra // [1F993] (no translation) +🦔 hedgehog // [1F994] (no translation) +🦕 sauropod // [1F995] (no translation) +🦖 t rex // [1F996] (no translation) +🦗 cricket // [1F997] (no translation) +🧀 ဒိန်ခဲ အတုံး // [1F9C0] +🧐 face with monocle // [1F9D0] (no translation) +🧑 adult // [1F9D1] (no translation) +🧒 child // [1F9D2] (no translation) +🧓 older adult // [1F9D3] (no translation) +🧔 bearded person // [1F9D4] (no translation) +🧕 woman with headscarf // [1F9D5] (no translation) +🧖 person in steamy room // [1F9D6] (no translation) +🧗 person climbing // [1F9D7] (no translation) +🧘 person in lotus position // [1F9D8] (no translation) +🧙 mage // [1F9D9] (no translation) +🧚 fairy // [1F9DA] (no translation) +🧛 vampire // [1F9DB] (no translation) +🧜 merperson // [1F9DC] (no translation) +🧝 elf // [1F9DD] (no translation) +🧞 genie // [1F9DE] (no translation) +🧟 zombie // [1F9DF] (no translation) +🧠 brain // [1F9E0] (no translation) +🧡 orange heart // [1F9E1] (no translation) +🧢 billed cap // [1F9E2] (no translation) +🧣 scarf // [1F9E3] (no translation) +🧤 gloves // [1F9E4] (no translation) +🧥 coat // [1F9E5] (no translation) +🧦 socks // [1F9E6] (no translation) + +// Country Flags (Regional Indicator Symbols) -- ISO 3166-1 Country Codes + +🇦🇨 တက်တော်မူကျွန်း // [1F1E6 1F1E8] AC +🇦🇩 အင်ဒိုရာ // [1F1E6 1F1E9] AD +🇦🇪 ယူအေအီး // [1F1E6 1F1EA] AE +🇦🇫 အာဖဂန်နစ္စတန် // [1F1E6 1F1EB] AF +🇦🇬 အင်တီဂွါနှင့် ဘာဘူဒါ // [1F1E6 1F1EC] AG +🇦🇮 အန်ဂီလာ // [1F1E6 1F1EE] AI +🇦🇱 အယ်လ်ဘေးနီးယား // [1F1E6 1F1F1] AL +🇦🇲 အာမေးနီးယား // [1F1E6 1F1F2] AM +🇦🇴 အင်ဂိုလာ // [1F1E6 1F1F4] AO +🇦🇶 အန္တာတိက // [1F1E6 1F1F6] AQ +🇦🇷 အာဂျင်တီးနား // [1F1E6 1F1F7] AR +🇦🇸 အမေရိကန် ဆမိုးအား // [1F1E6 1F1F8] AS +🇦🇹 ဩစတြီးယား // [1F1E6 1F1F9] AT +🇦🇺 ဩစတြေးလျ // [1F1E6 1F1FA] AU +🇦🇼 အာရူးဗား // [1F1E6 1F1FC] AW +🇦🇽 အာလန်ကျွန်း // [1F1E6 1F1FD] AX +🇦🇿 အဇာဘိုင်ဂျန် // [1F1E6 1F1FF] AZ +🇧🇦 ဘော့စနီးယားနှင့် ဟာဇီဂိုဗီနား // [1F1E7 1F1E6] BA +🇧🇧 ဘာဘေးဒိုးစ် // [1F1E7 1F1E7] BB +🇧🇩 ဘင်္ဂလားဒေ့ရှ် // [1F1E7 1F1E9] BD +🇧🇪 ဘယ်လ်ဂျီယမ် // [1F1E7 1F1EA] BE +🇧🇫 ဘာကီးနား ဖားဆို // [1F1E7 1F1EB] BF +🇧🇬 ဘူလ်ဂေးရီးယား // [1F1E7 1F1EC] BG +🇧🇭 ဘာရိန်း // [1F1E7 1F1ED] BH +🇧🇮 ဘူရွန်ဒီ // [1F1E7 1F1EE] BI +🇧🇯 ဘီနင် // [1F1E7 1F1EF] BJ +🇧🇱 စိန့်ဘာသယ်လ်မီ // [1F1E7 1F1F1] BL +🇧🇲 ဘာမြူဒါ // [1F1E7 1F1F2] BM +🇧🇳 ဘရူနိုင်း // [1F1E7 1F1F3] BN +🇧🇴 ဘိုလီးဗီးယား // [1F1E7 1F1F4] BO +🇧🇶 ကာရစ်ဘီယံ နယ်သာလန် // [1F1E7 1F1F6] BQ +🇧🇷 ဘရာဇီး // [1F1E7 1F1F7] BR +🇧🇸 ဘဟားမား // [1F1E7 1F1F8] BS +🇧🇹 ဘူတန် // [1F1E7 1F1F9] BT +🇧🇻 ဘူဗက်ကျွန်း // [1F1E7 1F1FB] BV +🇧🇼 ဘော့ဆွာနာ // [1F1E7 1F1FC] BW +🇧🇾 ဘီလာရုဇ် // [1F1E7 1F1FE] BY +🇧🇿 ဘလိဇ် // [1F1E7 1F1FF] BZ +🇨🇦 ကနေဒါ // [1F1E8 1F1E6] CA +🇨🇨 ကိုကိုးကျွန်း // [1F1E8 1F1E8] CC +🇨🇩 ကွန်ဂို // [1F1E8 1F1E9] CD +🇨🇫 ဗဟို အာဖရိက ပြည်ထောင်စု // [1F1E8 1F1EB] CF +🇨🇬 ကွန်ဂို-ဘရာဇာဗီးလ် // [1F1E8 1F1EC] CG +🇨🇭 ဆွစ်ဇာလန် // [1F1E8 1F1ED] CH +🇨🇮 ကို့တ် ဒီဗွာ // [1F1E8 1F1EE] CI +🇨🇰 ကွတ် ကျွန်းစု // [1F1E8 1F1F0] CK +🇨🇱 ချီလီ // [1F1E8 1F1F1] CL +🇨🇲 ကင်မရွန်း // [1F1E8 1F1F2] CM +🇨🇳 တရုတ် // [1F1E8 1F1F3] CN +🇨🇴 ကိုလံဘီယာ // [1F1E8 1F1F4] CO +🇨🇵 ကလစ်ပါတန်ကျွန်း // [1F1E8 1F1F5] CP +🇨🇷 ကို့စ်တာရီကာ // [1F1E8 1F1F7] CR +🇨🇺 ကျူးဘား // [1F1E8 1F1FA] CU +🇨🇻 ကိတ်ဗာဒီ // [1F1E8 1F1FB] CV +🇨🇼 ကျူရေးကိုးစ် // [1F1E8 1F1FC] CW +🇨🇽 ခရစ်စမတ် ကျွန်း // [1F1E8 1F1FD] CX +🇨🇾 ဆိုက်ပရပ်စ် // [1F1E8 1F1FE] CY +🇨🇿 ချက်ကီယား // [1F1E8 1F1FF] CZ +🇩🇪 ဂျာမဏီ // [1F1E9 1F1EA] DE +🇩🇬 ဒီအဲဂိုဂါစီရာ // [1F1E9 1F1EC] DG +🇩🇯 ဂျီဘူတီ // [1F1E9 1F1EF] DJ +🇩🇰 ဒိန်းမတ် // [1F1E9 1F1F0] DK +🇩🇲 ဒိုမီနီကာ // [1F1E9 1F1F2] DM +🇩🇴 ဒိုမီနီကန် // [1F1E9 1F1F4] DO +🇩🇿 အယ်လ်ဂျီးရီးယား // [1F1E9 1F1FF] DZ +🇪🇦 ဆယ်ဥတာနှင့်မယ်လီလ်လာ // [1F1EA 1F1E6] EA +🇪🇨 အီကွေဒေါ // [1F1EA 1F1E8] EC +🇪🇪 အက်စတိုးနီးယား // [1F1EA 1F1EA] EE +🇪🇬 အီဂျစ် // [1F1EA 1F1EC] EG +🇪🇭 အနောက် ဆာဟာရ // [1F1EA 1F1ED] EH +🇪🇷 အီရီထရီးယား // [1F1EA 1F1F7] ER +🇪🇸 စပိန် // [1F1EA 1F1F8] ES +🇪🇹 အီသီယိုးပီးယား // [1F1EA 1F1F9] ET +🇪🇺 ဥရောပသမဂ္ဂ // [1F1EA 1F1FA] EU +🇫🇮 ဖင်လန် // [1F1EB 1F1EE] FI +🇫🇯 ဖီဂျီ // [1F1EB 1F1EF] FJ +🇫🇰 ဖော့ကလန် ကျွန်းစု // [1F1EB 1F1F0] FI +🇫🇲 မိုင်ခရိုနီရှား // [1F1EB 1F1F2] FM +🇫🇴 ဖာရိုး ကျွန်းစုများ // [1F1EB 1F1F4] FO +🇫🇷 ပြင်သစ် // [1F1EB 1F1F7] FR +🇬🇦 ဂါဘွန် // [1F1EC 1F1E6] GA +🇬🇧 ယူနိုက်တက်ကင်းဒမ်း // [1F1EC 1F1E7] GB +🇬🇩 ဂရီနေဒါ // [1F1EC 1F1E9] GD +🇬🇪 ဂျော်ဂျီယာ // [1F1EC 1F1EA] GE +🇬🇫 ပြင်သစ် ဂိုင်ယာနာ // [1F1EC 1F1EB] GF +🇬🇬 ဂွန်းဇီ // [1F1EC 1F1EC] GG +🇬🇭 ဂါနာ // [1F1EC 1F1ED] GH +🇬🇮 ဂျီဘရော်လ်တာ // [1F1EC 1F1EE] GI +🇬🇱 ဂရင်းလန်း // [1F1EC 1F1F1] GL +🇬🇲 ဂမ်ဘီရာ // [1F1EC 1F1F2] GM +🇬🇳 ဂီနီ // [1F1EC 1F1F3] GN +🇬🇵 ဂွါဒီလု // [1F1EC 1F1F5] GP +🇬🇶 အီကွေတာ ဂီနီ // [1F1EC 1F1F6] GQ +🇬🇷 ဂရိ // [1F1EC 1F1F7] GR +🇬🇸 တောင် ဂျော်ဂျီယာ နှင့် တောင် ဆင်းဒဝစ်ဂျ် ကျွန်းစုများ // [1F1EC 1F1F8] GS +🇬🇹 ဂွါတီမာလာ // [1F1EC 1F1F9] GT +🇬🇺 ဂူအမ် // [1F1EC 1F1FA] GU +🇬🇼 ဂီနီ-ဘီစော // [1F1EC 1F1FC] GW +🇬🇾 ဂိုင်ယာနာ // [1F1EC 1F1FE] GY +🇭🇰 ဟောင်ကောင် (တရုတ်ပြည်) // [1F1ED 1F1F0] HK +🇭🇲 ဟတ်ကျွန်းနှင့်မက်ဒေါနယ်ကျွန်းစု // [1F1ED 1F1F2] HM +🇭🇳 ဟွန်ဒူးရပ်စ် // [1F1ED 1F1F3] HN +🇭🇷 ခရိုအေးရှား // [1F1ED 1F1F7] HR +🇭🇹 ဟေတီ // [1F1ED 1F1F9] HT +🇭🇺 ဟန်ဂေရီ // [1F1ED 1F1FA] HU +🇮🇨 ကနေရီ ကျွန်းစု // [1F1EE 1F1E8] IC +🇮🇩 အင်ဒိုနီးရှား // [1F1EE 1F1E9] ID +🇮🇪 အိုင်ယာလန် // [1F1EE 1F1EA] IE +🇮🇱 အစ္စရေး // [1F1EE 1F1F1] IL +🇮🇲 မန်ကျွန်း // [1F1EE 1F1F2] IM +🇮🇳 အိန္ဒိယ // [1F1EE 1F1F3] IN +🇮🇴 ဗြိတိသျှပိုင် အိန္ဒိယသမုဒ္ဒရာကျွန်းများ // [1F1EE 1F1F4] IO +🇮🇶 အီရတ် // [1F1EE 1F1F6] IQ +🇮🇷 အီရန် // [1F1EE 1F1F7] IR +🇮🇸 အိုက်စလန် // [1F1EE 1F1F8] IS +🇮🇹 အီတလီ // [1F1EE 1F1F9] IT +🇯🇪 ဂျာစီ // [1F1EF 1F1EA] JE +🇯🇲 ဂျမေကာ // [1F1EF 1F1F2] JM +🇯🇴 ဂျော်ဒန် // [1F1EF 1F1F4] JO +🇯🇵 ဂျပန် // [1F1EF 1F1F5] JP +🇰🇪 ကင်ညာ // [1F1F0 1F1EA] KE +🇰🇬 ကာဂျစ္စတန် // [1F1F0 1F1EC] KG +🇰🇭 ကမ္ဘောဒီးယား // [1F1F0 1F1ED] KH +🇰🇮 ခီရီဘာတီ // [1F1F0 1F1EE] KI +🇰🇲 ကိုမိုရိုစ် // [1F1F0 1F1F2] KM +🇰🇳 စိန့်ကစ်နှင့်နီဗီစ် // [1F1F0 1F1F3] KN +🇰🇵 မြောက်ကိုရီးယား // [1F1F0 1F1F5] KP +🇰🇷 တောင်ကိုရီးယား // [1F1F0 1F1F7] KR +🇰🇼 ကူဝိတ် // [1F1F0 1F1FC] KW +🇰🇾 ကေမန် ကျွန်းစု // [1F1F0 1F1FE] KY +🇰🇿 ကာဇက်စတန် // [1F1F0 1F1FF] KZ +🇱🇦 လာအို // [1F1F1 1F1E6] LA +🇱🇧 လက်ဘနွန် // [1F1F1 1F1E7] LB +🇱🇨 စိန့်လူစီယာ // [1F1F1 1F1E8] LC +🇱🇮 လစ်တန်စတိန်း // [1F1F1 1F1EE] LI +🇱🇰 သီရိလင်္ကာ // [1F1F1 1F1F0] LK +🇱🇷 လိုက်ဘေးရီးယား // [1F1F1 1F1F7] LR +🇱🇸 လီဆိုသို // [1F1F1 1F1F8] LS +🇱🇹 လစ်သူယေးနီးယား // [1F1F1 1F1F9] LT +🇱🇺 လူဇင်ဘတ် // [1F1F1 1F1FA] LU +🇱🇻 လတ်ဗီးယား // [1F1F1 1F1FB] LV +🇱🇾 လစ်ဗျား // [1F1F1 1F1FE] LY +🇲🇦 မော်ရိုကို // [1F1F2 1F1E6] MA +🇲🇨 မိုနာကို // [1F1F2 1F1E8] MC +🇲🇩 မောလ်ဒိုဗာ // [1F1F2 1F1E9] MD +🇲🇪 မွန်တီနိဂရိုး // [1F1F2 1F1EA] ME +🇲🇫 စိန့်မာတင် // [1F1F2 1F1EB] MF +🇲🇬 မဒါဂတ်စကား // [1F1F2 1F1EC] MG +🇲🇭 မာရှယ် ကျွန်းစု // [1F1F2 1F1ED] MH +🇲🇰 မက်စီဒိုးနီးယား // [1F1F2 1F1F0] MK +🇲🇱 မာလီ // [1F1F2 1F1F1] ML +🇲🇲 မြန်မာ // [1F1F2 1F1F2] MM +🇲🇳 မွန်ဂိုးလီးယား // [1F1F2 1F1F3] MN +🇲🇴 မကာအို (တရုတ်ပြည်) // [1F1F2 1F1F4] MO +🇲🇵 တောင်ပိုင်းမာရီအာနာကျွန်းစု // [1F1F2 1F1F5] MP +🇲🇶 မာတီနိခ် // [1F1F2 1F1F6] MQ +🇲🇷 မော်ရီတေးနီးယား // [1F1F2 1F1F7] MR +🇲🇸 မောင့်စဲရက် // [1F1F2 1F1F8] MS +🇲🇹 မောလ်တာ // [1F1F2 1F1F9] MT +🇲🇺 မောရစ်ရှ // [1F1F2 1F1FA] MU +🇲🇻 မော်လ်ဒိုက် // [1F1F2 1F1FB] MV +🇲🇼 မာလာဝီ // [1F1F2 1F1FC] MW +🇲🇽 မက္ကဆီကို // [1F1F2 1F1FD] MX +🇲🇾 မလေးရှား // [1F1F2 1F1FE] MY +🇲🇿 မိုဇမ်ဘစ် // [1F1F2 1F1FF] MZ +🇳🇦 နမီးဘီးယား // [1F1F3 1F1E6] NA +🇳🇨 နယူး ကယ်လီဒိုနီးယား // [1F1F3 1F1E8] NC +🇳🇪 နိုင်ဂျာ // [1F1F3 1F1EA] NE +🇳🇫 နောဖုတ်ကျွန်း // [1F1F3 1F1EB] NF +🇳🇬 နိုင်ဂျီးရီးယား // [1F1F3 1F1EC] NG +🇳🇮 နီကာရာဂွါ // [1F1F3 1F1EE] NI +🇳🇱 နယ်သာလန် // [1F1F3 1F1F1] NL +🇳🇴 နော်ဝေ // [1F1F3 1F1F4] NO +🇳🇵 နီပေါ // [1F1F3 1F1F5] NP +🇳🇷 နော်ရူး // [1F1F3 1F1F7] NR +🇳🇺 နီဥူအေ // [1F1F3 1F1FA] NU +🇳🇿 နယူးဇီလန် // [1F1F3 1F1FF] NZ +🇴🇲 အိုမန် // [1F1F4 1F1F2] OM +🇵🇦 ပနားမား // [1F1F5 1F1E6] PA +🇵🇪 ပီရူး // [1F1F5 1F1EA] PE +🇵🇫 ပြင်သစ် ပေါ်လီနီးရှား // [1F1F5 1F1EB] PF +🇵🇬 ပါပူအာ နယူးဂီနီ // [1F1F5 1F1EC] PG +🇵🇭 ဖိလစ်ပိုင် // [1F1F5 1F1ED] PH +🇵🇰 ပါကစ္စတန် // [1F1F5 1F1F0] PK +🇵🇱 ပိုလန် // [1F1F5 1F1F1] PL +🇵🇲 စိန့်ပီအဲရ်နှင့် မီကွီလွန် // [1F1F5 1F1F2] PM +🇵🇳 ပစ်တ်ကိန်းကျွန်းစု // [1F1F5 1F1F3] PN +🇵🇷 ပေါ်တိုရီကို // [1F1F5 1F1F7] PR +🇵🇸 ပါလက်စတိုင်း ပိုင်နက် // [1F1F5 1F1F8] PS +🇵🇹 ပေါ်တူဂီ // [1F1F5 1F1F9] PT +🇵🇼 ပလာအို // [1F1F5 1F1FC] PW +🇵🇾 ပါရာဂွေး // [1F1F5 1F1FE] PY +🇶🇦 ကာတာ // [1F1F6 1F1E6] QA +🇷🇪 ဟေညွန် // [1F1F7 1F1EA] RE +🇷🇴 ရိုမေးနီးယား // [1F1F7 1F1F4] RO +🇷🇸 ဆားဘီးယား // [1F1F7 1F1F8] RS +🇷🇺 ရုရှ // [1F1F7 1F1FA] RU +🇷🇼 ရဝန်ဒါ // [1F1F7 1F1FC] RW +🇸🇦 ဆော်ဒီအာရေးဘီးယား // [1F1F8 1F1E6] SA +🇸🇧 ဆော်လမွန်ကျွန်းစု // [1F1F8 1F1E7] SB +🇸🇨 ဆေးရှဲ // [1F1F8 1F1E8] SC +🇸🇩 ဆူဒန် // [1F1F8 1F1E9] SD +🇸🇪 ဆွီဒင် // [1F1F8 1F1EA] SE +🇸🇬 စင်္ကာပူ // [1F1F8 1F1EC] SG +🇸🇭 စိန့်ဟယ်လယ်နာ // [1F1F8 1F1ED] SH +🇸🇮 စလိုဗေးနီးယား // [1F1F8 1F1EE] SI +🇸🇯 စဗိုလ်ဘတ်နှင့်ဂျန်မေရန် // [1F1F8 1F1EF] SJ +🇸🇰 ဆလိုဗက်ကီးယား // [1F1F8 1F1F0] SK +🇸🇱 ဆီယာရာ လီယွန်း // [1F1F8 1F1F1] SL +🇸🇲 ဆန်မာရီနို // [1F1F8 1F1F2] SM +🇸🇳 ဆီနီဂေါ // [1F1F8 1F1F3] SN +🇸🇴 ဆိုမာလီယာ // [1F1F8 1F1F4] SO +🇸🇷 ဆူရာနမ် // [1F1F8 1F1F7] SR +🇸🇸 တောင် ဆူဒန် // [1F1F8 1F1F8] SS +🇸🇹 ဆောင်တူမေးနှင့် ပရင်စီပီ // [1F1F8 1F1F9] ST +🇸🇻 အယ်လ်ဆာဗေးဒိုး // [1F1F8 1F1FB] SV +🇸🇽 စင့်မာတင် // [1F1F8 1F1FD] SX +🇸🇾 ဆီးရီးယား // [1F1F8 1F1FE] SY +🇸🇿 ဆွာဇီလန် // [1F1F8 1F1FF] SZ +🇹🇦 ထရစ္စတန် ဒါ ကွန်ဟာ // [1F1F9 1F1E6] TA +🇹🇨 တခ်စ်နှင့်ကာအီကိုစ်ကျွန်းစု // [1F1F9 1F1E8] TC +🇹🇩 ချဒ် // [1F1F9 1F1E9] TD +🇹🇫 ပြင်သစ် တောင်ပိုင်း ပိုင်နက်များ // [1F1F9 1F1EB] TF +🇹🇬 တိုဂို // [1F1F9 1F1EC] TG +🇹🇭 ထိုင်း // [1F1F9 1F1ED] TH +🇹🇯 တာဂျီကစ္စတန် // [1F1F9 1F1EF] TJ +🇹🇰 တိုကလောင် // [1F1F9 1F1F0] TK +🇹🇱 အရှေ့တီမော // [1F1F9 1F1F1] TL +🇹🇲 တာ့ခ်မင်နစ္စတန် // [1F1F9 1F1F2] TM +🇹🇳 တူနီးရှား // [1F1F9 1F1F3] TN +🇹🇴 တွန်ဂါ // [1F1F9 1F1F4] TO +🇹🇷 တူရကီ // [1F1F9 1F1F7] TR +🇹🇹 ထရီနီဒတ်နှင့် တိုဘက်ဂို // [1F1F9 1F1F9] TT +🇹🇻 တူဗားလူ // [1F1F9 1F1FB] TV +🇹🇼 ထိုင်ဝမ် // [1F1F9 1F1FC] TW +🇹🇿 တန်ဇန်းနီးယား // [1F1F9 1F1FF] TZ +🇺🇦 ယူကရိန်း // [1F1FA 1F1E6] UA +🇺🇬 ယူဂန်းဒါး // [1F1FA 1F1EC] UG +🇺🇲 ယူနိုက်တက်စတိတ် ကျွန်းနိုင်ငံများ // [1F1FA 1F1F2] UM +🇺🇳 ကုလသမဂ္ဂ // [1F1FA 1F1F3] UN +🇺🇸 ယူနိုက်တက်စတိတ် // [1F1FA 1F1F8] US +🇺🇾 ဥရုဂွေး // [1F1FA 1F1FE] UY +🇺🇿 ဉဇဘက်ကစ္စတန် // [1F1FA 1F1FF] UZ +🇻🇦 ဗာတီကန်စီတီး // [1F1FB 1F1E6] VA +🇻🇨 စိန့်ဗင်းဆင့်နှင့် ဂရိနေဒိုင် // [1F1FB 1F1E8] VC +🇻🇪 ဗင်နီဇွဲလား // [1F1FB 1F1EA] VE +🇻🇬 ဗြိတိသျှ ဗာဂျင်း ကျွန်းစု // [1F1FB 1F1EC] VG +🇻🇮 ယူအက်စ် ဗာဂျင်း ကျွန်းစု // [1F1FB 1F1EE] VI +🇻🇳 ဗီယက်နမ် // [1F1FB 1F1F3] VN +🇻🇺 ဗနွားတူ // [1F1FB 1F1FA] VU +🇼🇫 ဝေါလစ်နှင့် ဖူကျူးနား // [1F1FC 1F1EB] WF +🇼🇸 ဆမိုးအား // [1F1FC 1F1F8] WS +🇽🇰 ကိုဆိုဗို // [1F1FD 1F1F0] XK +🇾🇪 ယီမင် // [1F1FE 1F1EA] YE +🇾🇹 မာယိုတေး // [1F1FE 1F1F9] YT +🇿🇦 တောင်အာဖရိက // [1F1FF 1F1E6] ZA +🇿🇲 ဇမ်ဘီယာ // [1F1FF 1F1F2] ZM +🇿🇼 ဇင်ဘာဘွေ // [1F1FF 1F1FC] ZW + +// Subdivision Flags -- ISO 3166-2 Subdivision Codes + +🏴󠁧󠁢󠁥󠁮󠁧󠁿 england // [1F3F4 E0067 E0062 E0065 E006E E0067 E007F] (no translation) +🏴󠁧󠁢󠁳󠁣󠁴󠁿 scotland // [1F3F4 E0067 E0062 E0073 E0063 E0074 E007F] (no translation) +🏴󠁧󠁢󠁷󠁬󠁳󠁿 wales // [1F3F4 E0067 E0062 E0077 E006C E0073 E007F] (no translation) + +// Keycaps (NOTE: keycap 10 is a single Unicode codepoint) + +#️⃣ နံပါတ် ခလုတ် // [0023 FE0F 20E3] +*️⃣ ခရေပွင့် ခလုတ် // [002A FE0F 20E3] +0️⃣ သုည ဂဏန်း ခလုတ် // [0030 FE0F 20E3] +1️⃣ ၁ ဂဏန်း ခလုတ် // [0031 FE0F 20E3] +2️⃣ ၂ ဂဏန်း ခလုတ် // [0032 FE0F 20E3] +3️⃣ ၃ ဂဏန်း ခလုတ် // [0033 FE0F 20E3] +4️⃣ ၄ ဂဏန်း ခလုတ် // [0034 FE0F 20E3] +5️⃣ ၅ ဂဏန်း ခလုတ် // [0035 FE0F 20E3] +6️⃣ ၆ ဂဏန်း ခလုတ် // [0036 FE0F 20E3] +7️⃣ ၇ ဂဏနျး ခလုတျ // [0037 FE0F 20E3] +8️⃣ ၈ ဂဏန်း ခလုတ် // [0038 FE0F 20E3] +9️⃣ ၉ ဂဏန်း ခလုတ် // [0039 FE0F 20E3] + +// Emoji ZWJ Sequence: Family + +👩‍❤‍💋‍👨 အနမ်း၊ ယောက်ျား ၊ မိန်းမ // [1F469 200D 2764 200D 1F48B 200D 1F468] +👨‍❤‍💋‍👨 အနမ်း၊ ယောက်ျား၊ ယောက်ျား // [1F468 200D 2764 200D 1F48B 200D 1F468] +👩‍❤‍💋‍👩 အနမ်း၊ မိန်းမ၊ မိန်းမ // [1F469 200D 2764 200D 1F48B 200D 1F469] +👩‍❤‍👨 အသည်းနှလုံးဖြင့် အတွဲ၊ မိန်းမ၊ ယောက်ျား // [1F469 200D 2764 200D 1F468] +👨‍❤‍👨 အသည်းနှလုံးဖြင့် အတွဲ၊ ယောက်ျား ၊ ယောက်ျား // [1F468 200D 2764 200D 1F468] +👩‍❤‍👩 အသည်းနှလုံးဖြင့် အတွဲ၊ မိန်းမ၊ မိန်းမ // [1F469 200D 2764 200D 1F469] +👨‍👩‍👦 မိသားစု၊ ယောက်ျား ၊ မိန်းမ၊ ယောက်ျားကလေး // [1F468 200D 1F469 200D 1F466] +👨‍👩‍👧 မိသားစု၊ ယောက်ျား ၊ မိန်းမ၊ မိန်းကလေး // [1F468 200D 1F469 200D 1F467] +👨‍👩‍👧‍👦 မိသားစု၊ ယောက်ျား ၊ မိန်းမ၊ ယောက်ျားကလေး၊ မိန်းကလေး// [1F468 200D 1F469 200D 1F467 200D 1F466] +👨‍👩‍👦‍👦 မိသားစု၊ ယောက်ျား၊ မိန်းမ၊ ယောက်ျားကလေး၊ ယောက်ျားကလေး// [1F468 200D 1F469 200D 1F466 200D 1F466] +👨‍👩‍👧‍👧 မိသားစု၊ ယောက်ျား၊ မိန်းမ၊ မိန်းကလေး၊ မိန်းကလေး// [1F468 200D 1F469 200D 1F467 200D 1F467] +👨‍👨‍👦 မိသားစု၊ ယောက်ျား၊ ယောက်ျား၊ ယောက်ျားကလေး // [1F468 200D 1F468 200D 1F466] +👨‍👨‍👧 မိသားစု၊ ယောက်ျား၊ ယောက်ျား၊ မိန်းကလေး // [1F468 200D 1F468 200D 1F467] +👨‍👨‍👧‍👦 မိသားစု၊ ယောက်ျား ၊ ယောက်ျား၊ မိန်းကလေး၊ မိန်းကလေး// [1F468 200D 1F468 200D 1F467 200D 1F466] +👨‍👨‍👦‍👦 မိသားစု၊ ယောကျာ်း၊ ယောကျာ်း၊ ကောင်လေး၊ ကောင်လေး// [1F468 200D 1F468 200D 1F466 200D 1F466] +👨‍👨‍👧‍👧 မိသားစု၊ ယောကျာ်း၊ ယောကျာ်း၊ ကောင်မလေး၊ ကောင်မလေး// [1F468 200D 1F468 200D 1F467 200D 1F467] +👩‍👩‍👦 မိသားစု၊ မိန်းမ၊ မိန်းမ၊ ယောက်ျားလေး // [1F469 200D 1F469 200D 1F466] +👩‍👩‍👧 မိသားစု၊ မိန်းမ၊ မိန်းမ၊ မိန်းကလေး // [1F469 200D 1F469 200D 1F467] +👩‍👩‍👧‍👦 မိသားစု၊ မိန်းမ၊ မိန်းမ၊ မိန်းကလေး၊ ယောက်ျားလေး// [1F469 200D 1F469 200D 1F467 200D 1F466] +👩‍👩‍👦‍👦 မိသားစု၊ မိန်းမ၊ မိန်းမ၊ ယောက်ျားလေး၊ မိန်းကလေး// [1F469 200D 1F469 200D 1F466 200D 1F466] +👩‍👩‍👧‍👧 မိသားစု၊ မိန်းမ၊ မိန်းမ၊ မိန်းကလေး၊ မိန်းကလေး// [1F469 200D 1F469 200D 1F467 200D 1F467] +👨‍👦 မိသားစု၊ ယောကျာ်း၊ ယောက်ျားလေး // [1F468 200D 1F466] +👨‍👦‍👦 မိသားစု၊ ယောက်ျား၊ ယောက်ျားကလေး၊ မိန်းကလေး // [1F468 200D 1F466 200D 1F466] +👨‍👧 မိသားစု၊ ယောက်ျား၊ မိန်းကလေး // [1F468 200D 1F467] +👨‍👧‍👦 မိသားစု၊ ယောက်ျား၊ မိန်းကလေး ၊ ယောက်ျားကလေး // [1F468 200D 1F467 200D 1F466] +👨‍👧‍👧 မိသားစု၊ ယောက်ျား ၊ မိန်းကလေး ၊ မိန်းကလေး // [1F468 200D 1F467 200D 1F467] +👩‍👦 မိသားစု၊ မိန်းမ၊ ယောက်ျားကလေး // [1F469 200D 1F466] +👩‍👦‍👦 မိသားစု၊ မိန်းမ၊ ယောက်ျားကလေး၊ ယောက်ျားလေး // [1F469 200D 1F466 200D 1F466] +👩‍👧 မိသားစု၊ မိန်းမ၊ မိန်းကလေး // [1F469 200D 1F467] +👩‍👧‍👦 မိသားစု၊ မိန်းမ၊ မိန်းကလေး၊ ယောက်ျားကလေး // [1F469 200D 1F467 200D 1F466] +👩‍👧‍👧 မိသားစု၊ မိန်းမ၊ မိန်းကလေး၊ မိန်းကလေး // [1F469 200D 1F467 200D 1F467] + +// Emoji ZWJ Sequence: Gendered Role, with object + +👨‍⚕ အမျိုးသား ကျန်းမာရေးလုပ်သား // [1F468 200D 2695] +👩‍⚕ အမျိုးသမီး ကျန်းမာရေးလုပ်သား // [1F469 200D 2695] +👨‍⚖ အမျိုးသား တရားသူကြီး // [1F468 200D 2696] +👩‍⚖ အမျိုးသမီး တရားသူကြီး // [1F469 200D 2696] +👨‍✈ အမျိုးသား လေယာဉ်မှူး // [1F468 200D 2708] +👩‍✈ အမျိုးသမီး လေယာဉ်မှူး // [1F469 200D 2708] +👨‍🌾 လယ်သမား // [1F468 200D 1F33E] +👩‍🌾 ကောက်စိုက်သမ // [1F469 200D 1F33E] +👨‍🍳 အမျိုးသား စားဖိုမှူး // [1F468 200D 1F373] +👩‍🍳 အမျိုးသမီး စားဖိုမှူး // [1F469 200D 1F373] +👨‍🎓 ကျောင်းသား // [1F468 200D 1F393] +👩‍🎓 ကျောင်းသူ // [1F469 200D 1F393] +👨‍🎤 အမျိုးသား အဆိုတော် // [1F468 200D 1F3A4] +👩‍🎤 အမျိုးသမီး အဆိုတော် // [1F469 200D 1F3A4] +👨‍🎨 ပန်းချီဆရာ // [1F468 200D 1F3A8] +👩‍🎨 ပန်းချီဆရာမ // [1F469 200D 1F3A8] +👨‍🏫 ဆရာ // [1F468 200D 1F3EB] +👩‍🏫 ဆရာမ // [1F469 200D 1F3EB] +👨‍🏭 စက်ရုံလုပ်သား // [1F468 200D 1F3ED] +👩‍🏭 စက်ရုံအလုပ်သမ // [1F469 200D 1F3ED] +👨‍💻 အမျိုးသား နည်းပညာရှင် // [1F468 200D 1F4BB] +👩‍💻 အမျိုးသမီး နည်းပညာရှင် // [1F469 200D 1F4BB] +👨‍💼 အမျိုးသား ရုံးဝန်ထမ်း // [1F468 200D 1F4BC] +👩‍💼 အမျိုးသမီး ရုံးဝန်ထမ်း // [1F469 200D 1F4BC] +👨‍🔧 အမျိုးသား စက်ပြင်သူ // [1F468 200D 1F527] +👩‍🔧 အမျိုးသမီး စက်ပြင်သူ // [1F469 200D 1F527] +👨‍🔬 အမျိုးသား သိပ္ပံပညာရှင် // [1F468 200D 1F52C] +👩‍🔬 အမျိုးသမီး သိပ္ပံပညာရှင် // [1F469 200D 1F52C] +👨‍🚀 အမျိုးသား အာကာသလေယာဉ်မှူး // [1F468 200D 1F680] +👩‍🚀 အမျိုးသမီး အာကာသလေယာဉ်မှူး // [1F469 200D 1F680] +👨‍🚒 မီးသတ်သမား // [1F468 200D 1F692] +👩‍🚒 မီးသတ်သမ // [1F469 200D 1F692] + +// Emoji ZWJ Sequence: Gendered Role + +👮‍♀ အမျိုးသမီး ရဲအရာရှိ // [1F46E 200D 2640] +👮‍♂ အမျိုးသား ရဲအရာရှိ // [1F46E 200D 2642] +👱‍♀ ရွှေရောင်ဆံကေသာရှိသူ အမျိုးသမီး // [1F471 200D 2640] +👱‍♂ ရွှေရောင်ဆံကေသာရှိသူ အမျိုးသား // [1F471 200D 2642] +👳‍♀ ခေါင်းပေါင်းနှင့် အမျိုးသမီး // [1F473 200D 2640] +👳‍♂ ခေါင်းပေါင်းနှင့် အမျိုးသား // [1F473 200D 2642] +👷‍♀ ဆောက်လုပ်ရေးအလုပ်သမ // [1F477 200D 2640] +👷‍♂ ဆောက်လုပ်ရေးအလုပ်သမား // [1F477 200D 2642] +💂‍♀ အမျိုးသမီး အစောင့် // [1F482 200D 2640] +💂‍♂ အမျိုးသား အစောင့် // [1F482 200D 2642] +🕵️‍♀ အမျိုးသမီး စုံထောက် // [1F575 200D 2640] +🕵️‍♂ အမျိုးသား စုံထောက် // [1F575 200D 2642] +🧙‍♀ woman mage // [1F9D9 200D 2640] (no translation) +🧙‍♂ man mage // [1F9D9 200D 2642] (no translation) +🧚‍♀ woman fairy // [1F9DA 200D 2640] (no translation) +🧚‍♂ man fairy // [1F9DA 200D 2642] (no translation) +🧛‍♀ woman vampire // [1F9DB 200D 2640] (no translation) +🧛‍♂ man vampire // [1F9DB 200D 2642] (no translation) +🧜‍♀ mermaid // [1F9DC 200D 2640] (no translation) +🧜‍♂ merman // [1F9DC 200D 2642] (no translation) +🧝‍♀ woman elf // [1F9DD 200D 2640] (no translation) +🧝‍♂ man elf // [1F9DD 200D 2642] (no translation) +🧞‍♀ woman genie // [1F9DE 200D 2640] (no translation) +🧞‍♂ man genie // [1F9DE 200D 2642] (no translation) +🧟‍♀ woman zombie // [1F9DF 200D 2640] (no translation) +🧟‍♂ man zombie // [1F9DF 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Activity + +⛹‍♀ ဘောလုံးကန်နေသည့် အမျိုးသမီး // [26F9 200D 2640] +⛹‍♂ ဘောလုံးကန်နေသည့် အမျိုးသား // [26F9 200D 2642] +🏃‍♀ ပြေးနေသူ အမျိုးသမီး // [1F3C3 200D 2640] +🏃‍♂ ပြေးနေသူ အမျိုးသား // [1F3C3 200D 2642] +🏄‍♀ ရေလွှာလျှောစီးနေသည့် အမျိုးသမီး // [1F3C4 200D 2640] +🏄‍♂ ရေလွှာလျှောစီးနေသည့် အမျိုးသား // [1F3C4 200D 2642] +🏊‍♀ ရေကူးနေသူ အမျိုးသမီး // [1F3CA 200D 2640] +🏊‍♂ ရေကူးနေသူ အမျိုးသား // [1F3CA 200D 2642] +🏋️‍♀ အလေးမနေသည့် အမျိုးသမီး // [1F3CB 200D 2640] +🏋️‍♂ အလေးမနေသည့် အမျိုးသား // [1F3CB 200D 2642] +🏌️‍♀ ဂေါက်ရိုက်နေသူ အမျိုးသမီး // [1F3CC 200D 2640] +🏌️‍♂ ဂေါက်ရိုက်နေသူ အမျိုးသား // [1F3CC 200D 2642] +👯‍♀ ပျော်ပွဲရွှင်ပွဲလုပ်နေသူ အမျိုးသမီးများ // [1F46F 200D 2640] +👯‍♂ ပျော်ပွဲရွှင်ပွဲလုပ်နေသူ အမျိုးသားများ // [1F46F 200D 2642] +💆‍♀ မျက်နှာအနှိပ်ခံနေသူ အမျိုးသမီး // [1F486 200D 2640] +💆‍♂ မျက်နှာအနှိပ်ခံနေသူ အမျိုးသား // [1F486 200D 2642] +💇‍♀ ဆံပင်ညှပ်နေသူ အမျိုးသမီး // [1F487 200D 2640] +💇‍♂ ဆံပင်ညှပ်နေသူ အမျိုးသား // [1F487 200D 2642] +🚣‍♀ လှေလှော်နေသည့် အမျိုးသမီး // [1F6A3 200D 2640] +🚣‍♂ လှေလှော်နေသည့် အမျိုးသား // [1F6A3 200D 2642] +🚴‍♀ စက်ဘီးစီးနေသည့် အမျိုးသမီး // [1F6B4 200D 2640] +🚴‍♂ စက်ဘီးစီးနေသည့် အမျိုးသား // [1F6B4 200D 2642] +🚵‍♀ တောင်တက်စက်ဘီးစီးသူ အမျိုးသမီး // [1F6B5 200D 2640] +🚵‍♂ တောင်တက်စက်ဘီးစီးသူ အမျိုးသား // [1F6B5 200D 2642] +🚶‍♀ လမ်းလျှောက်နေသူ အမျိုးသမီး // [1F6B6 200D 2640] +🚶‍♂ လမ်းလျှောက်နေသူ အမျိုးသား // [1F6B6 200D 2642] +🤸‍♀ ကျွမ်းဘားထိုးနေသည့် အမျိုးသမီး // [1F938 200D 2640] +🤸‍♂ ကျွမ်းဘားထိုးနေသည့် အမျိုးသား // [1F938 200D 2642] +🤹‍♀ ရွဲကစားပြသူ အမျိုးသမီး // [1F939 200D 2640] +🤹‍♂ ရွဲကစားပြသူ အမျိုးသား // [1F939 200D 2642] +🤼‍♀ လက်ဝှေ့ထိုးနေသည့် အမျိုးသမီးများ // [1F93C 200D 2640] +🤼‍♂ လက်ဝှေ့ထိုးနေသည့် အမျိုးသားများ // [1F93C 200D 2642] +🤽‍♀ ဝါတာပိုလိုကစားနေသည့် အမျိုးသမီး // [1F93D 200D 2640] +🤽‍♂ ဝါတာပိုလိုကစားနေသည့် အမျိုးသား // [1F93D 200D 2642] +🤾‍♀ လက်ပစ်ဘောကစားနေသည့် အမျိုးသမီး // [1F93E 200D 2640] +🤾‍♂ လက်ပစ်ဘောကစားနေသည့် အမျိုးသား // [1F93E 200D 2642] +🧖‍♀ woman in steamy room // [1F9D6 200D 2640] (no translation) +🧖‍♂ man in steamy room // [1F9D6 200D 2642] (no translation) +🧗‍♀ woman climbing // [1F9D7 200D 2640] (no translation) +🧗‍♂ man climbing // [1F9D7 200D 2642] (no translation) +🧘‍♀ woman in lotus position // [1F9D8 200D 2640] (no translation) +🧘‍♂ man in lotus position // [1F9D8 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Gestures + +💁‍♀ လက်ဖြန့်ထားသော ဝန်ဆောင်မှုပေးသူ အမျိုးသမီး // [1F481 200D 2640] +💁‍♂ လက်ဖြန့်ထားသော ဝန်ဆောင်မှုပေးသူ အမျိုးသား // [1F481 200D 2642] +🙅‍♀ တားမြစ်ကြောင်း လက်ဟန်ပြသူ အမျိုးသမီး // [1F645 200D 2640] +🙅‍♂ တားမြစ်ကြောင်း လက်ဟန်ပြသူ အမျိုးသား // [1F645 200D 2642] +🙆‍♀ အဆင်ပြေကြောင်း လက်ဟန်ပြသူ အမျိုးသမီး // [1F646 200D 2640] +🙆‍♂ အဆင်ပြေကြောင်း လက်ဟန်ပြသူ အမျိုးသား // [1F646 200D 2642] +🙇‍♀ ရိုရိုကျိုးကျိုး ဦးညွှတ်နေသူ အမျိုးသမီး // [1F647 200D 2640] +🙇‍♂ ရိုရိုကျိုးကျိုး ဦးညွှတ်နေသူ အမျိုးသား // [1F647 200D 2642] +🙋‍♀ လက်မြှောက်ထားသည့် အမျိုးသမီး // [1F64B 200D 2640] +🙋‍♂ လက်မြှောက်ထားသည့် အမျိုးသား // [1F64B 200D 2642] +🙍‍♀ ဝမ်းနည်းကြေကွဲနေသည့် အမျိုးသမီး // [1F64D 200D 2640] +🙍‍♂ ဝမ်းနည်းကြေကွဲနေသည့် အမျိုးသား // [1F64D 200D 2642] +🙎‍♀ စိတ်တိုနေသည့် အမျိုးသမီး // [1F64E 200D 2640] +🙎‍♂ စိတ်တိုနေသည့် အမျိုးသား // [1F64E 200D 2642] +🤦‍♀ မိမိမျက်နှာကို လက်ဝါးဖြင့်အုပ်ထားသော အမျိုးသမီး // [1F926 200D 2640] +🤦‍♂ မိမိမျက်နှာကို လက်ဝါးဖြင့်အုပ်ထားသော အမျိုးသား // [1F926 200D 2642] +🤷‍♀ ပုခုန်းတွန့်နေသူ အမျိုးသမီး // [1F937 200D 2640] +🤷‍♂ ပုခုန်းတွန့်နေသူ အမျိုးသား // [1F937 200D 2642] + +// Emoji ZWJ Sequence: Other + +🏳‍🌈 သက်တန့်ရောင်အလံ // [1F3F3 200D 1F308] +👁‍🗨 မျက်နှာလုံးပုံစံ စကားပြောအကွက် // [1F441 200D 1F5E8] + +// References: +// [UCD] Unicode Character Database 9.0.0 [http://www.unicode.org/Public/9.0.0/ucd/] +// [Emoji] Unicode Emoji 5.0 [http://www.unicode.org/Public/emoji/5.0/] +// [CLDR] Unicode Common Locale Data Repository 31.0.1 [http://cldr.unicode.org/index/downloads/cldr-31] +// +// Sources: +// 1. emoji-test.txt (Emoji) +// 2. common/annotations/my.xml (CLDR) +// 3. emoji-zwj-sequences.txt (Emoji) From bc7d806505cab9198a6f614616b2f9750e371730 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 16 Aug 2017 19:19:55 +0100 Subject: [PATCH 039/137] ne: (emoji) -- CLDR 31.0.1 emoji translations --- CHANGELOG.md | 1 + Makefile.am | 2 +- dictsource/ne_emoji | 1678 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1680 insertions(+), 1 deletion(-) create mode 100644 dictsource/ne_emoji diff --git a/CHANGELOG.md b/CHANGELOG.md index 73ebfbca..3d2a1983 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,7 @@ Unicode Emoji support (from the Unicode Emoji 5.0, and CLDR 31.0.1 data files): * mr (Marathi) * ms (Malay) * my (Myanmar/Burmese) +* ne (Nepali) * nl (Dutch) * or (Oriya) * pa (Punjabi) diff --git a/Makefile.am b/Makefile.am index 3a3b981c..c1e50634 100644 --- a/Makefile.am +++ b/Makefile.am @@ -681,7 +681,7 @@ nci: espeak-ng-data/nci_dict espeak-ng-data/nci_dict: dictsource/nci_list dictsource/nci_rules dictsource/nci_extra ne: espeak-ng-data/ne_dict -espeak-ng-data/ne_dict: dictsource/ne_list dictsource/ne_rules dictsource/ne_extra +espeak-ng-data/ne_dict: dictsource/ne_list dictsource/ne_rules dictsource/ne_extra dictsource/ne_emoji nl: espeak-ng-data/nl_dict espeak-ng-data/nl_dict: dictsource/nl_list dictsource/nl_rules dictsource/nl_extra dictsource/nl_emoji diff --git a/dictsource/ne_emoji b/dictsource/ne_emoji new file mode 100644 index 00000000..40549ea2 --- /dev/null +++ b/dictsource/ne_emoji @@ -0,0 +1,1678 @@ +// Emoji and Other Symbol pronunciations for Nepali +// +// Entries with `text|emoji` in the comments have text and emoji forms. They +// can be followed by [FE0E] to select the text style, and [FE0F] to select +// the emoji style. +// +// NOTE: See `src/ucd-tools/data/espeak-ng/emoji-data.txt` for additional data +// in interpreting ZWJ emoji sequences. + +$textmode + +// 0080..00FF : C1 Controls and Latin-1 Supplement + +© प्रतिलिपि अधिकार // [00A9] text|emoji +® दर्ता गरिएको // [00AE] text|emoji + +// 2000..203C : General Punctuation + +‼ दोहोरो विस्मयाधिबोधक चिन्ह // [203C] text|emoji +⁉ विस्मयाधिबोधक प्रश्न चिन्ह // [2049] text|emoji + +// 2100..214F : Letterlike Symbols + +™ व्यापार चिन्ह // [2122] text|emoji +ℹ जानकारीको श्रोत // [2139] text|emoji + +// 2190..21FF : Arrows + +↔ बायाँ-दायाँ वाण // [2194] text|emoji +↕ माथि-तल वाण // [2195] text|emoji +↖ माथि बायातर्फको तीर // [2196] text|emoji +↗ माथि-दायाँ वाण // [2197] text|emoji +↘ तल दायाँ तर्फको तीर // [2198] text|emoji +↙ तल बायाँ तर्फको तीर // [2199] text|emoji +↩ बायाँ मोडेको दायाँ वाण // [21A9] text|emoji +↪ दायाँ मोडेको बायाँ वाण // [21AA] text|emoji + +// 2300..23FF : Miscellaneous Technical + +⌚ घडी // [231A] +⌛ रेतको घडी // [231B] +⌨ किबोर्ड // [2328] text|emoji +⏏ बाहिर निस्कने बटन // [23CF] text|emoji +⏩ छिटो-फर्वाड गर्ने बटन // [23E9] +⏪ छिटो उल्ट्याउने बटन // [23EA] +⏫ छिटो माथि जाने बटन // [23EB] +⏬ छिटो तल जाने बटन // [23EC] +⏭ अर्को ट्रयाक गर्ने बटन // [23ED] text|emoji +⏮ अन्तिम ट्रयाक बटन // [23EE] text|emoji +⏯ बजाउने वा रोक्ने बटन // [23EF] text|emoji +⏰ अर्लाम घडी // [23F0] +⏱ स्टपवाच // [23F1] text|emoji +⏲ टाइमर घडी // [23F2] text|emoji +⏳ बालुवाको प्रवाह सहित रेतको घडी // [23F3] +⏸ पज बटन // [23F8] text|emoji +⏹ रोक्ने बटन // [23F9] text|emoji +⏺ रेकर्ड गर्न बटन // [23FA] text|emoji + +// 2460..24FF : Enclosed Alphanumerics + +Ⓜ एम अक्षरको गोलोको अक्षर // [24C2] text|emoji + +// 25A0..25FF : Geometric Shapes + +▪ कालो सानो वर्ग // [25AA] text|emoji +▫ सेतो सानो वर्ग // [25AB] text|emoji +▶ बजाउने बटन // [25B6] text|emoji +◀ उल्ट्याउने बटन // [25C0] text|emoji +◻ सेतो मध्यम वर्ग // [25FB] text|emoji +◼ कालो मध्यम वर्ग // [25FC] text|emoji +◽ सेतो मध्यम-सानो वर्ग // [25FD] +◾ कालो मध्यम-सानो वर्ग // [25FE] + +// 2600..26FF : Miscellaneous Symbols + +☀ सूर्य // [2600] text|emoji +☁ बादल // [2601] text|emoji +☂ छाता // [2602] text|emoji +☃ हिममानव // [2603] text|emoji +☄ धूम्रकेतु // [2604] text|emoji +☎ टेलिफोन // [260E] text|emoji +☑ चेकको साथ मतदान बक्स // [2611] text|emoji +☔ पानीको थोपा सहितको छाता // [2614] +☕ तातो पेय पदार्थ // [2615] +☘ सामरक // [2618] text|emoji +☝ माथि तिर देखाइरहेको चोर औंला // [261D] text|emoji +☠ खोपडी र खतराको चिन्ह // [2620] text|emoji +☢ रेडियोएक्टिभ // [2622] text|emoji +☣ बायोहाजार्ड // [2623] text|emoji +☦ अर्थडक्स क्रस // [2626] text|emoji +☪ तारा र अर्धचन्द्र // [262A] text|emoji +☮ शान्तिको प्रतिक // [262E] text|emoji +☯ यिन याङ्ग // [262F] text|emoji +☸ धर्मको पाङ्ग्रा // [2638] text|emoji +☹ कुडिएको अनुहार // [2639] text|emoji +☺ हँसिलो अनुहार // [263A] text|emoji +♀ महिला चिन्ह // [2640] text|emoji +♂ पुरूष चिन्ह // [2642] text|emoji +♈ मेष // [2648] +♉ वृष // [2649] +♊ मिथुन // [264A] +♋ कर्कट // [264B] +♌ सिंह // [264C] +♍ कन्या // [264D] +♎ तुला // [264E] +♏ वृश्चिक // [264F] +♐ धनु // [2650] +♑ मकर // [2651] +♒ कुम्भ // [2652] +♓ मिन // [2653] +♠ कुदाल सूट // [2660] text|emoji +♣ क्लब सूट // [2663] text|emoji +♥ हर्ट सूट // [2665] text|emoji +♦ डायमन्ड सूट // [2666] text|emoji +♨ तातो स्प्रिङ् // [2668] text|emoji +♻ रिसाइकलिङ्को प्रतिक // [267B] text|emoji +♿ ह्वीलचेयर // [267F] +⚒ घन र उठाउने // [2692] text|emoji +⚓ एङ्कर // [2693] +⚔ क्रस तरवार // [2694] text|emoji +⚕ चिकित्सीय चिन्ह // [2695] text|emoji +⚖ सन्तुलन स्केल // [2696] text|emoji +⚗ ऐलेम्बिक // [2697] text|emoji +⚙ गियर // [2699] text|emoji +⚛ परमाणुको संकेत // [269B] text|emoji +⚜ फ्लिउर-डे-लिस // [269C] text|emoji +⚠ चेतावनी // [26A0] text|emoji +⚡ उच्च्च भोल्टेज // [26A1] +⚪ सेतो घेरा // [26AA] +⚫ कालो घेरा // [26AB] +⚰ कफिन // [26B0] text|emoji +⚱ मलाम अर्न // [26B1] text|emoji +⚽ सकर बल // [26BD] +⚾ बेसबल // [26BE] +⛄ हिउँ सहितको हिममानव // [26C4] +⛅ बादल पछाडिको सूर्य // [26C5] +⛈ बिजुली चम्किरहेको र वर्षा सहितको बादल // [26C8] text|emoji +⛎ अफिकुअस // [26CE] +⛏ उठाउने // [26CF] text|emoji +⛑ सेतो क्रस भएको हेलमेट // [26D1] text|emoji +⛓ चेन // [26D3] text|emoji +⛔ प्रवेश छैन // [26D4] +⛩ शिन्तो धर्मको तीर्थ // [26E9] text|emoji +⛪ गिर्जाघर // [26EA] +⛰ हिमाल // [26F0] text|emoji +⛱ भुईँमा गाडिएको छाता // [26F1] text|emoji +⛲ झरणा // [26F2] +⛳ झण्डामा प्वाल // [26F3] +⛴ फेरी // [26F4] text|emoji +⛵ सेलबोट // [26F5] +⛷ स्की खेलाडी // [26F7] text|emoji +⛸ आईस स्केट // [26F8] text|emoji +⛹ बल खेल्दै गरेको व्यक्ति // [26F9] text|emoji +⛺ टेन्ट // [26FA] +⛽ इन्धनको पम्प // [26FD] + +// 2700..27BF : Dingbats + +✂ कैँची // [2702] text|emoji +✅ सेतो भारी ठूलो चिन्ह // [2705] +✈ बिमान // [2708] text|emoji +✉ खाम // [2709] text|emoji +✊ उठाइएको मुठ्ठी // [270A] +✋ उठाइएको हात // [270B] +✌ जितको जनाउने औंला // [270C] text|emoji +✍ लेखिरहेको हात // [270D] text|emoji +✏ शिशा कलम // [270F] text|emoji +✒ कालो निब // [2712] text|emoji +✔ भारी चेक चिन्ह // [2714] text|emoji +✖ भारी गुणन एक्स // [2716] text|emoji +✝ ल्याटिन क्रस // [271D] text|emoji +✡ डेभिडको तारा // [2721] text|emoji +✨ चमक // [2728] +✳ आठवटा-बोलेको तारांकन चिन्ह // [2733] text|emoji +✴ आठवटा-विन्दू भएको तारा // [2734] text|emoji +❄ स्नोफ्लेक // [2744] text|emoji +❇ चम्किने // [2747] text|emoji +❌ क्रस चिन्ह // [274C] +❎ क्रम चिन्ह बटन // [274E] +❓ प्रश्न चिन्ह // [2753] +❔ सेतो प्रश्न चिन्ह // [2754] +❕ सेतो विस्मयाधिबोधक चिन्ह // [2755] +❗ विस्मयाधिबोधक चिन्ह // [2757] +❣ गाढा मुटुको विस्मयाधिबोधक चिन्हको सजावट // [2763] text|emoji +❤ रातो मुटु // [2764] text|emoji +➕ भारी जोड चिन्ह // [2795] +➖ भारी घटाउ चिन्ह // [2796] +➗ भारी भाग चिन्ह // [2797] +➡ दायाँ तर्फको तीर // [27A1] text|emoji +➰ कर्ली लुप // [27B0] +➿ दोहोरो कर्ली लुप // [27BF] + +// 2900..297F : Supplemental Arrows-B + +⤴ माथि मोडेको दायाँ वाण // [2934] text|emoji +⤵ तल मोडेको दायाँ वाण // [2935] text|emoji + +// 2B00..2BFF : Miscellaneous Symbols and Arrows + +⬅ बायाँ तर्फको तीर // [2B05] text|emoji +⬆ माथि वाण // [2B06] text|emoji +⬇ तल तर्फको तीर // [2B07] text|emoji +⬛ कालो ठूलो वर्ग // [2B1B] +⬜ सेतो ठूलो वर्ग // [2B1C] +⭐ सेतो मध्यम तारा // [2B50] +⭕ भारी ठूलो वृत्त // [2B55] + +// 3000..303F : CJK Symbols and Punctuation + +〰 झुन्डिएको ड्याश // [3030] text|emoji +〽 भाग प्रत्यावर्तन चिन्ह // [303D] text|emoji + +// 3200..32FF : Enclosed CJK Letters and Months + +㊗ गोलो बधाई आइडियोग्राफ // [3297] text|emoji +㊙ गोलो गोप्य आइडियोग्राफ // [3299] text|emoji + +// 1F100..1F1FF : Enclosed Alphanumeric Supplement + +🅰 ए बटन // [1F170] text|emoji +🅱 बि बटन // [1F171] text|emoji +🅾 0 बटन // [1F17E] text|emoji +🅿 पि बटन // [1F17F] text|emoji +🆎 एबी बटन // [1F18E] +🆑 स्क्वायर्ड सीएल // [1F191] +🆒 स्क्वायर्ड्ड कुल // [1F192] +🆓 स्कावायर्ड फ्री // [1F193] +🆔 स्क्वायर्ड आइडी // [1F194] +🆕 स्क्वायर्ड नयाँ // [1F195] +🆖 स्क्वायर्ड एनजी // [1F196] +🆗 स्क्वार्ड ओके // [1F197] +🆘 स्क्वायर्ड एसओएस // [1F198] +🆙 माथि! बटन // [1F199] +🆚 स्क्वायर्ड भर्सेज // [1F19A] + +// 1F200..1F2FF : Enclosed Ideographic Supplement + +🈁 स्क्वायर्ड कतकाना कोको // [1F201] +🈂 स्क्वायर्ड कतकाना एसए // [1F202] text|emoji +🈚 स्क्वायर्ड नेभिगेसन आइडियोग्राफ // [1F21A] +🈯 स्क्वायर्ड औंलाको आइडियोग्राफ // [1F22F] +🈲 स्क्वायर्ड निषेधित आइडियोग्राफ // [1F232] +🈳 स्क्वायर्ड खाली आइडियोग्राफ // [1F233] +🈴 सँगै स्क्वायर्ड आइडियोग्राफ // [1F234] +🈵 स्क्वायर्ड पूर्ण आइडियोग्राफ // [1F235] +🈶 स्क्वायर्ड भएको आइडियोग्राफ // [1F236] +🈷 स्क्वायर्ड चन्द्रमा आइडियोग्राफ // [1F237] text|emoji +🈸 स्क्वायर्ड लागू गर्ने आइडियोग्राफ // [1F238] +🈹 स्क्वायर्ड भाग लगाएको आइडियोग्राफ // [1F239] +🈺 स्क्वायर्ड सञ्चालन आइडियोग्राफ // [1F23A] +🉐 गोलो फाइदा आइडियोग्राफ // [1F250] +🉑 गोलो स्वीकारेको आइडियोग्राफ // [1F251] + +// 1F000..1F02F : Mahjong Tiles + +🀄 महजङ्ग रातो ड्रागन // [1F004] + +// 1F0A0..1F0FF : Playing Cards + +🃏 जोकर // [1F0CF] + +// 1F300..1F5FF : Miscellaneous Symbols and Pictographs + +🌀 हुण्डरी // [1F300] +🌁 हुस्सु लागेको // [1F301] +🌂 बन्द गरेको छाता // [1F302] +🌃 ताराहरू चम्केको रात // [1F303] +🌄 पर्वतहरूमा सूर्योदय // [1F304] +🌅 सूर्योदय // [1F305] +🌆 गोधूली समयको सिटिस्केप // [1F306] +🌇 सूर्यास्त // [1F307] +🌈 इन्द्रेणी // [1F308] +🌉 रातको समयमा पूल // [1F309] +🌊 पानीको तरंग // [1F30A] +🌋 ज्वालामुखी // [1F30B] +🌌 आकाशगंगा // [1F30C] +🌍 यूरोप-अफ्रीका देखाइएको विश्वको मानचित्र // [1F30D] +🌎 अमेरिका देखाउने विश्वको मानचित्र // [1F30E] +🌏 एसिया-अस्ट्रेलिया देखाउने विश्वको मानचित्र // [1F30F] +🌐 भूमध्य रेखा सहितको विश्व // [1F310] +🌑 औंसी // [1F311] +🌒 बढ्दो चन्द्रमा // [1F312] +🌓 पहिलो पक्षीय चन्द्रमा // [1F313] +🌔 बढ्दो गिबस चन्द्रमा // [1F314] +🌕 पूर्णिमा // [1F315] +🌖 घट्दो गिबस चन्द्रमा // [1F316] +🌗 अन्तिम पक्षीय चन्द्रमा // [1F317] +🌘 घट्दो क्रेसेन्ट चन्द्रमा // [1F318] +🌙 क्रेसेन्ट चन्द्रमा // [1F319] +🌚 औंसीको चन्द्रमाको स्वरूप // [1F31A] +🌛 अनुहारको आकृति भएको पहिलो पक्षीय चन्द्रमा // [1F31B] +🌜 अनुहारको आकृृति भएको अन्तिम पक्षीय चन्द्रमा // [1F31C] +🌝 स्वरूप सहितको पूर्णिमा // [1F31D] +🌞 स्वरूप सहितको सूर्य // [1F31E] +🌟 चम्किरहेको तारा // [1F31F] +🌠 पुच्छ्रे तारा // [1F320] +🌡 थर्मोमिटर // [1F321] text|emoji +🌤 सानो बादल पछाडिको सूर्य // [1F324] text|emoji +🌥 ठूलो बादल पछाडिको सूर्य // [1F325] text|emoji +🌦 बादल पानीको साथमा घाम // [1F326] text|emoji +🌧 बादल सहितको वर्षा // [1F327] text|emoji +🌨 हिउँ सहितको बादल // [1F328] text|emoji +🌩 बिजुली चम्किँदाको बादल // [1F329] text|emoji +🌪 भवन्डर // [1F32A] text|emoji +🌫 कुहिरोले ढाकेको // [1F32B] text|emoji +🌬 सुस्ताइरहेको अनुहार // [1F32C] text|emoji +🌭 हड डग // [1F32D] +🌮 टाको // [1F32E] +🌯 बर्रिटो // [1F32F] +🌰 ओखर // [1F330] +🌱 अंकुर // [1F331] +🌲 सदाबहार // [1F332] +🌳 पतझढ रूख // [1F333] +🌴 खजुरको रूख // [1F334] +🌵 सिउँडी // [1F335] +🌶 पिरो खुर्सानी // [1F336] text|emoji +🌷 टुलिप // [1F337] +🌸 चेरी फुल्ने // [1F338] +🌹 गुलाफ // [1F339] +🌺 हाइबिस्कस // [1F33A] +🌻 सूर्यमुखी // [1F33B] +🌼 फुल्ने // [1F33C] +🌽 मकैको पात // [1F33D] +🌾 चामलको सिफ // [1F33E] +🌿 जडीबुटी // [1F33F] +🍀 क्लोभरको चारवटा पात // [1F340] +🍁 मेपलको पात // [1F341] +🍂 झरेको पात // [1F342] +🍃 हावामा फरफराइहरेको पात // [1F343] +🍄 च्याउ // [1F344] +🍅 गोलभेंडा // [1F345] +🍆 भ्यान्टा // [1F346] +🍇 अङ्गुर // [1F347] +🍈 तरबूज // [1F348] +🍉 खरबुजा // [1F349] +🍊 ट्यान्जरिन // [1F34A] +🍋 कागती // [1F34B] +🍌 केरा // [1F34C] +🍍 कटर // [1F34D] +🍎 रातो स्याउ // [1F34E] +🍏 हरियो स्याउ // [1F34F] +🍐 नासपाती // [1F350] +🍑 बखडा // [1F351] +🍒 चेरी // [1F352] +🍓 स्ट्रबेरी // [1F353] +🍔 ह्यामबर्गर // [1F354] +🍕 पिज्जा // [1F355] +🍖 हड्डिको मासु // [1F356] +🍗 कुखुराको फिला // [1F357] +🍘 राइस क्र्याकर // [1F358] +🍙 राइस बल // [1F359] +🍚 पकाएको खाना // [1F35A] +🍛 भात र तरकारी // [1F35B] +🍜 तातो खानाको कचौरा // [1F35C] +🍝 स्पाघेट्टी // [1F35D] +🍞 रोटी // [1F35E] +🍟 फ्रेन्च फ्राइज // [1F35F] +🍠 रोस्ट गरिएको सखरखण्ड // [1F360] +🍡 ड्याङ्गो // [1F361] +🍢 ओडेन // [1F362] +🍣 सुशी // [1F363] +🍤 फ्राइ गरेको स्रिम्प // [1F364] +🍥 स्र्विल सहितको फिस केस // [1F365] +🍦 सफ्ट आइसक्रिम // [1F366] +🍧 तयार पारिएको आइस क्रिम // [1F367] +🍨 आइस क्रिम // [1F368] +🍩 डोनट // [1F369] +🍪 कुकी // [1F36A] +🍫 चकलेट बार // [1F36B] +🍬 क्याण्डी // [1F36C] +🍭 लालिपप // [1F36D] +🍮 कस्टर्ड // [1F36E] +🍯 महको भाँडो // [1F36F] +🍰 कचौडी // [1F370] +🍱 बेन्टो बक्स // [1F371] +🍲 खाना राखिएको भाँडो // [1F372] +🍳 खाना बनाउँदै // [1F373] +🍴 चक्कु र काँटा // [1F374] +🍵 नसम्हालिने चियाको कप // [1F375] +🍶 सेक // [1F376] +🍷 वाइन गिलास // [1F377] +🍸 ककटेल गिलास // [1F378] +🍹 उष्णप्रदेशीय पेय पद्दार्थ // [1F379] +🍺 बियरको मग // [1F37A] +🍻 बज्ने बियरको मगहरू // [1F37B] +🍼 बच्चाको बोतल // [1F37C] +🍽 थालसँग चक्कु र काँटा // [1F37D] text|emoji +🍾 पपिङ् कर्कको साथ बोतल // [1F37E] +🍿 पपकर्न // [1F37F] +🎀 रिबन // [1F380] +🎁 उपस्थित समेटिएको // [1F381] +🎂 जन्म दिनको केक // [1F382] +🎃 ज्याक-ओ-लालटिन // [1F383] +🎄 क्रिसमस रूख // [1F384] +🎅 सान्ता क्लस // [1F385] +🎆 आतिशबाजी // [1F386] +🎇 हीरा // [1F387] +🎈 बेलुन // [1F388] +🎉 पार्टी पपर // [1F389] +🎊 कनफेटी बल // [1F38A] +🎋 तनाबटा रूख // [1F38B] +🎌 क्रस गरिएको झण्डाहरू // [1F38C] +🎍 पाइन सजावट // [1F38D] +🎎 जापानिज पुतली // [1F38E] +🎏 कार्प प्रकाशको किरण // [1F38F] +🎐 विन्ड चाइम // [1F390] +🎑 चन्द्रमाको समारोह // [1F391] +🎒 स्कूले ब्याकप्याक // [1F392] +🎓 दीक्षान्त टोपी // [1F393] +🎖 सैन्य पदक // [1F396] text|emoji +🎗 रिमाइन्डर रिबन // [1F397] text|emoji +🎙 स्टुडियो माइक्रोफोन // [1F399] text|emoji +🎚 स्तर स्लाइडर // [1F39A] text|emoji +🎛 नियन्त्रण नबहरू // [1F39B] text|emoji +🎞 फिल्मको फ्रेमहरू // [1F39E] text|emoji +🎟 भर्ना टिकेटहरू // [1F39F] text|emoji +🎠 काराउजेल घोडा // [1F3A0] +🎡 फेर्रिस चक्र // [1F3A1] +🎢 रोलर कोस्टर // [1F3A2] +🎣 माछाको बल्छीको पोल // [1F3A3] +🎤 माइक्रोफोन // [1F3A4] +🎥 मुभी क्यामेरा // [1F3A5] +🎦 सिनेमा // [1F3A6] +🎧 हेडफोन // [1F3A7] +🎨 कलाकारको प्यालेट // [1F3A8] +🎩 अग्लो टोपी // [1F3A9] +🎪 सर्कसको पाल // [1F3AA] +🎫 टिकेट // [1F3AB] +🎬 क्ल्याप्पर बोर्ड // [1F3AC] +🎭 कला प्रदर्शन गर्दै // [1F3AD] +🎮 भिडियो गेम // [1F3AE] +🎯 डाइरेक्ट हिट // [1F3AF] +🎰 स्ल्ट यन्त्र // [1F3B0] +🎱 बिलियर्ड्स // [1F3B1] +🎲 गेम डाइ // [1F3B2] +🎳 बलिङ्ग // [1F3B3] +🎴 फ्लावर प्लेयिङ कार्ड // [1F3B4] +🎵 सांगीतिक नोट // [1F3B5] +🎶 संगीतको नोट // [1F3B6] +🎷 सेक्सोफोन // [1F3B7] +🎸 गितार // [1F3B8] +🎹 सांगीतिक किबोर्ड // [1F3B9] +🎺 ट्रमपेट // [1F3BA] +🎻 भायोलिन // [1F3BB] +🎼 सांगीतिक स्कोर // [1F3BC] +🎽 रनिङ सर्ट // [1F3BD] +🎾 टेनिस // [1F3BE] +🎿 स्की // [1F3BF] +🏀 बास्केटबल // [1F3C0] +🏁 चेकरवाला झण्डा // [1F3C1] +🏂 स्नोबोर्डर // [1F3C2] +🏃 धावक // [1F3C3] +🏄 सर्फर // [1F3C4] +🏅 खेलकुद पदक // [1F3C5] +🏆 ट्रफी // [1F3C6] +🏇 घोडा दौड // [1F3C7] +🏈 अमेरिकन फुटबल // [1F3C8] +🏉 रग्बी फुबल // [1F3C9] +🏊 पोंडिवाज // [1F3CA] +🏋 भार तौंल खेलाडी // [1F3CB] text|emoji +🏌 गोल्फर // [1F3CC] text|emoji +🏍 मोटरसाइकल // [1F3CD] text|emoji +🏎 दौंडवाला कार // [1F3CE] text|emoji +🏏 क्रिकेट // [1F3CF] +🏐 भलिबल // [1F3D0] +🏑 फिल्ड हकी // [1F3D1] +🏒 आईस हकी स्टिक र पक // [1F3D2] +🏓 पिङ्ग पङ्ग // [1F3D3] +🏔 हिउँले-ढाकेको पर्वत // [1F3D4] text|emoji +🏕 क्याम्पिङ // [1F3D5] text|emoji +🏖 छाता राखिएको समुद्री किनारा // [1F3D6] text|emoji +🏗 निर्माण संरचना // [1F3D7] text|emoji +🏘 घर निर्माणहरू // [1F3D8] text|emoji +🏙 सिटिस्केप // [1F3D9] text|emoji +🏚 डेरिलिक्ट घर निर्माण // [1F3DA] text|emoji +🏛 शास्त्रीय भवन // [1F3DB] text|emoji +🏜 मरूभूमि // [1F3DC] text|emoji +🏝 मरूभूमि टापू // [1F3DD] text|emoji +🏞 राष्ट्रिय निकुञ्ज // [1F3DE] text|emoji +🏟 रङ्गशाला // [1F3DF] text|emoji +🏠 घर निर्माण // [1F3E0] +🏡 बगैँचा सहितको घर // [1F3E1] +🏢 कार्यालय भवन // [1F3E2] +🏣 जापानिज हुलाक // [1F3E3] +🏤 हुलाक // [1F3E4] +🏥 हस्पिटल // [1F3E5] +🏦 बैङ्क // [1F3E6] +🏧 एटिएमको संकेत // [1F3E7] +🏨 होटेल // [1F3E8] +🏩 लभ होटेल // [1F3E9] +🏪 सुविधाजनक स्टोर // [1F3EA] +🏫 स्कूल // [1F3EB] +🏬 डिपार्टमेन्टल स्टोर // [1F3EC] +🏭 फ्याक्ट्री // [1F3ED] +🏮 रातो पानाको लालटिन // [1F3EE] +🏯 जापानी क्यास्टल // [1F3EF] +🏰 क्यास्टल // [1F3F0] +🏳 हल्लिरहेको सेतो झण्डा // [1F3F3] text|emoji +🏴 हल्लिरहेको कालो झण्डा // [1F3F4] +🏵 थाली // [1F3F5] text|emoji +🏷 लेबल // [1F3F7] text|emoji +🏸 ब्याडमिन्टन // [1F3F8] +🏹 धनुष बाण // [1F3F9] +🏺 आम्फोरा // [1F3FA] +🏻 छालाको प्रकार-१-२ // [1F3FB] +🏼 छालाको प्रकार-३ // [1F3FC] +🏽 छालाको प्रकार-४ // [1F3FD] +🏾 छालाको प्रकार-५ // [1F3FE] +🏿 छालाको प्रकार-६ // [1F3FF] +🐀 मुसा // [1F400] +🐁 छुचुन्द्रा // [1F401] +🐂 गोरू // [1F402] +🐃 अर्ना // [1F403] +🐄 गाई // [1F404] +🐅 बाघ // [1F405] +🐆 चितुवा // [1F406] +🐇 खरायो // [1F407] +🐈 बिरालो // [1F408] +🐉 ड्रयागन // [1F409] +🐊 गोही // [1F40A] +🐋 ह्वेल // [1F40B] +🐌 चिप्लेकीरा // [1F40C] +🐍 साँप // [1F40D] +🐎 घोडा // [1F40E] +🐏 भेडा // [1F40F] +🐐 बाख्रा // [1F410] +🐑 भेडाा // [1F411] +🐒 बाँदर // [1F412] +🐓 भाले // [1F413] +🐔 कुखुरा // [1F414] +🐕 कुकुर // [1F415] +🐖 सुँगुुर // [1F416] +🐗 बँदेल // [1F417] +🐘 हात्ती // [1F418] +🐙 अक्टोपस // [1F419] +🐚 स्पाइरल सेल // [1F41A] +🐛 उडुस // [1F41B] +🐜 कमिला // [1F41C] +🐝 माहुरी // [1F41D] +🐞 लेडी बिटल // [1F41E] +🐟 माछा // [1F41F] +🐠 उष्णप्रदेशीय माछा // [1F420] +🐡 ब्लो माछा // [1F421] +🐢 कछुवा // [1F422] +🐣 कोरलिदै गरेको चल्ला // [1F423] +🐤 कुखुराको चल्ला // [1F424] +🐥 अगाडि-अनुहार देखिएको कुखुराको चल्ला // [1F425] +🐦 पंक्षी // [1F426] +🐧 पेन्गुइन // [1F427] +🐨 कोवला // [1F428] +🐩 पूडल // [1F429] +🐪 ऊँट // [1F42A] +🐫 दुई जुरो भएको ऊँट // [1F42B] +🐬 डल्फिन // [1F42C] +🐭 मुसाको अनुहार // [1F42D] +🐮 गाईको अनुहार // [1F42E] +🐯 बाघको अनुहार // [1F42F] +🐰 खरायोको अनुहार // [1F430] +🐱 बिरालोको अनुहार // [1F431] +🐲 ड्रयागनको अनुहार // [1F432] +🐳 स्पाउटिङ् ह्वेल // [1F433] +🐴 घोडाको अनुहार // [1F434] +🐵 बाँदरको अनुहार // [1F435] +🐶 कुकुरको अनुहार // [1F436] +🐷 सुँगुरको अनुहार // [1F437] +🐸 भ्यागुतोको अनुहार // [1F438] +🐹 ह्याम्स्टर अनुहार // [1F439] +🐺 व्वाँसोको अनुहार // [1F43A] +🐻 भालुको अनुहार // [1F43B] +🐼 पाण्डाको अनुहार // [1F43C] +🐽 सुँगुरको नाक // [1F43D] +🐾 खुट्टाका डोबहरू // [1F43E] +🐿 चीपमंक // [1F43F] text|emoji +👀 आँखाहरू // [1F440] +👁 आँखा // [1F441] text|emoji +👂 कान // [1F442] +👃 नाक // [1F443] +👄 मुख // [1F444] +👅 जिब्रो // [1F445] +👆 माथि तिर देखाइरहेको उल्टो हातको चोर औंला // [1F446] +👇 तल तिर देखाइरहेको उल्टो हातको चोर औंला // [1F447] +👈 बायाँ तिर देखाइरहेको उल्टो हातको चोर औंला // [1F448] +👉 दायाँ तिर देखाइरहेको उल्टो हातको छोर औंला // [1F449] +👊 बन्ने मुठ्ठी // [1F44A] +👋 हल्लाइरहेको हात // [1F44B] +👌 ठीक छ जनाउने औंला // [1F44C] +👍 गजब // [1F44D] +👎 गाली // [1F44E] +👏 ताली बजिरहेका हातहरू // [1F44F] +👐 खुला हातहरू // [1F450] +👑 क्राउन // [1F451] +👒 महिलाको टोपी // [1F452] +👓 चश्मा // [1F453] +👔 टाई // [1F454] +👕 टि-सर्ट // [1F455] +👖 जिन्स // [1F456] +👗 लुगा // [1F457] +👘 किमोनो // [1F458] +👙 बिकिनी // [1F459] +👚 महिलाको कपडा // [1F45A] +👛 पर्स // [1F45B] +👜 हातेब्याग // [1F45C] +👝 थैली // [1F45D] +👞 पुरुषको जुत्ता // [1F45E] +👟 दौडदा लगाउने जुत्ता // [1F45F] +👠 अग्लो हिल भएको जुत्ता // [1F460] +👡 छोरी मान्छेको चप्पल // [1F461] +👢 छोरी मान्छेको बुट जुत्ता // [1F462] +👣 खुट्टाको डोब // [1F463] +👤 छायाचित्रमा बस्ट // [1F464] +👥 छायाचित्रमा बस्टहरू // [1F465] +👦 केटा // [1F466] +👧 केटी // [1F467] +👨 छोरा मान्छे // [1F468] +👩 छोरी मान्छे // [1F469] +👪 परिवार // [1F46A] +👫 हात समातिरहेका पुरुष र महिला // [1F46B] +👬 हात समातिरहेका दुई पुरुष // [1F46C] +👭 हात समातिरहेका दुई महिला // [1F46D] +👮 प्रहरी अधिकृत // [1F46E] +👯 पार्टीमा रमिरहेका महिला // [1F46F] +👰 घुम्तो सहित बेहुली // [1F470] +👱 कैलो कपाल भएको मान्छे // [1F471] +👲 चिनियाँ टोपी लगाएको मान्छे // [1F472] +👳 फेटा लगाएको मान्छे // [1F473] +👴 बूढो छोरामान्छे // [1F474] +👵 बूढी आइमाई // [1F475] +👶 बच्चा // [1F476] +👷 निर्माण कर्मचारी // [1F477] +👸 राजकुमारी // [1F478] +👹 राक्षस // [1F479] +👺 पिशाच // [1F47A] +👻 भूत // [1F47B] +👼 बच्चा परी // [1F47C] +👽 परदेशी // [1F47D] +👾 परदेशी राक्षस // [1F47E] +👿 सानो भूत // [1F47F] +💀 खोपडी // [1F480] +💁 सूचना डेस्कको व्यक्ति // [1F481] +💂 पहरेदार // [1F482] +💃 नाचिरहेकी छोरी मान्छे // [1F483] +💄 लिपस्टिक // [1F484] +💅 नङ पालिस // [1F485] +💆 अनुहारको मसाज // [1F486] +💇 कपाल काट्ने // [1F487] +💈 हजामको खम्बा // [1F488] +💉 सूई // [1F489] +💊 औषधिको गोली // [1F48A] +💋 चुम्बनको चिन्ह // [1F48B] +💌 प्रेम पत्र // [1F48C] +💍 औंठी // [1F48D] +💎 पथ्थर // [1F48E] +💏 चुम्बन // [1F48F] +💐 बुके // [1F490] +💑 मुटु सहितको जोडी // [1F491] +💒 विवाह // [1F492] +💓 धड्किरहेको मुटु // [1F493] +💔 टुक्रिएको मुटु // [1F494] +💕 दुईवटा मुटुहरू // [1F495] +💖 चमकदार मुटु // [1F496] +💗 बढिरहेको मुटु // [1F497] +💘 वाण सहितको मुटु // [1F498] +💙 नीलो मुटु // [1F499] +💚 हरियो मुटु // [1F49A] +💛 पहेँलो मुटु // [1F49B] +💜 प्याजी मुटु // [1F49C] +💝 रिबन सहितको मुटु // [1F49D] +💞 घुमिरहेको मुटुहरू // [1F49E] +💟 मुटुको सजावट // [1F49F] +💠 डट सहितको हिरा // [1F4A0] +💡 बत्तिको चिम // [1F4A1] +💢 रिसको संकेत // [1F4A2] +💣 बम // [1F4A3] +💤 अल्छी लागेको // [1F4A4] +💥 टक्कर // [1F4A5] +💦 पसिनाको थोपा // [1F4A6] +💧 थोपा // [1F4A7] +💨 जोडले // [1F4A8] +💩 पुको थुप्रो // [1F4A9] +💪 फुलाएको बाइसेप्स // [1F4AA] +💫 चक्कर // [1F4AB] +💬 वाक्य बेलुन // [1F4AC] +💭 सोच बेलुन // [1F4AD] +💮 सेतो फुल // [1F4AE] +💯 सयवटा अंकहरू // [1F4AF] +💰 पैसाको झोला // [1F4B0] +💱 मुद्रा बिनिमय // [1F4B1] +💲 भारी डलरको चिन्ह // [1F4B2] +💳 क्रेडिट कार्ड // [1F4B3] +💴 येन बैङ्कनोट // [1F4B4] +💵 डलर बैङ्कनोट // [1F4B5] +💶 यूरो बैङ्कनोट // [1F4B6] +💷 पाउण्ड बैङ्कनोट // [1F4B7] +💸 पखेटा सहितको पैसा // [1F4B8] +💹 येनसँगै बढिरहेको चार्ट // [1F4B9] +💺 बस्ने सिट // [1F4BA] +💻 ल्यापटप कम्प्युटर // [1F4BB] +💼 ब्रिफकेस // [1F4BC] +💽 सानोडिस्क // [1F4BD] +💾 फ्लपि डिस्क // [1F4BE] +💿 अप्टिकल डिस्क // [1F4BF] +📀 डिभिडि // [1F4C0] +📁 फाइल फोल्डर // [1F4C1] +📂 खुला फाइलको फोल्डर // [1F4C2] +📃 कर्ल सहितको पृष्ठ // [1F4C3] +📄 माथि फर्केको पाना // [1F4C4] +📅 पात्रो // [1F4C5] +📆 टियर-अफ-पात्रो // [1F4C6] +📇 कार्ड सूचक // [1F4C7] +📈 बढ्दो चार्ट // [1F4C8] +📉 घट्दो चार्ट // [1F4C9] +📊 बार चार्ट // [1F4CA] +📋 क्लिपबोर्ड // [1F4CB] +📌 पुसपिन // [1F4CC] +📍 घुमाउरो पुसपिन // [1F4CD] +📎 पेपरक्लिप // [1F4CE] +📏 सिधा स्केल // [1F4CF] +📐 त्रिकोणिय स्केल // [1F4D0] +📑 बुकमार्क ट्याबहरू // [1F4D1] +📒 लेजर // [1F4D2] +📓 नोटबुक // [1F4D3] +📔 सजिएको कभर सहितको नोटबुक // [1F4D4] +📕 बन्द गरेको पुस्तक // [1F4D5] +📖 खुला पुस्तक // [1F4D6] +📗 हरियो पुस्तक // [1F4D7] +📘 नीलो पुस्तक // [1F4D8] +📙 सुन्तला पुस्तक // [1F4D9] +📚 पुस्तकहरू // [1F4DA] +📛 नामको ब्याड्ज // [1F4DB] +📜 स्क्रोल // [1F4DC] +📝 मेमो // [1F4DD] +📞 टेलिफोन रिसिभर // [1F4DE] +📟 पेजर // [1F4DF] +📠 फ्याक्स मेसिन // [1F4E0] +📡 स्याटलाइट एन्टेना // [1F4E1] +📢 लाउडस्पिकर // [1F4E2] +📣 मेगाफोन // [1F4E3] +📤 गएका ट्रे // [1F4E4] +📥 इनबक्स ट्रे // [1F4E5] +📦 प्याकेज // [1F4E6] +📧 इ-मेल // [1F4E7] +📨 आउने खाम // [1F4E8] +📩 वाण सहितको खाम // [1F4E9] +📪 तलको झन्डा सहितको बन्द भएको मेलबक्स // [1F4EA] +📫 उठेको झन्डा सहितको बन्द भएको मेलबक्स // [1F4EB] +📬 उठेको झन्डा सहितको खुला मेलबक्स // [1F4EC] +📭 तलको झन्डा सहितको खुला मेलबक्स // [1F4ED] +📮 पोस्टबक्स // [1F4EE] +📯 पोस्टल सिङ // [1F4EF] +📰 समाचारपत्र // [1F4F0] +📱 मोबाइल फोन // [1F4F1] +📲 वाण सहितको मोबाइल फोन // [1F4F2] +📳 भाइब्रेसन मोड // [1F4F3] +📴 मोबाइल फोन बन्द // [1F4F4] +📵 मोबाइल फोनलाई अनुमति छैन // [1F4F5] +📶 एन्टेन्ना बार // [1F4F6] +📷 क्यामेरा // [1F4F7] +📸 फ्ल्याश सहितको क्यामेरा // [1F4F8] +📹 भिडियो क्यामेरा // [1F4F9] +📺 टेलिभिजन // [1F4FA] +📻 रेडियो // [1F4FB] +📼 भिडियो क्यासेट // [1F4FC] +📽 फिल्म प्रोजेक्टर // [1F4FD] text|emoji +📿 माला // [1F4FF] +🔀 ट्रयाकहरूको बटन बदल्न // [1F500] +🔁 दोहोर्याउने बटन // [1F501] +🔂 एकैलाई दोहोर्याउने बटन // [1F502] +🔃 घडीको दिशा तिर ठाडो वाणहरू // [1F503] +🔄 घडीको दिशा विपरीत तिर वाणहरूको बटन // [1F504] +🔅 मधुरो बटन // [1F505] +🔆 चम्किलो बटन // [1F506] +🔇 बन्द स्पिकर // [1F507] +🔈 स्पिकर // [1F508] +🔉 स्पिकर खुला // [1F509] +🔊 ठूलो आवाजमा स्पिकर // [1F50A] +🔋 ब्याट्री // [1F50B] +🔌 बिधुतीय प्लग // [1F50C] +🔍 बायाँ-देखाउने म्याग्निफाइङ ग्लास // [1F50D] +🔎 दायाँ-देखाउने म्याग्निफाइङ ग्लास // [1F50E] +🔏 कलम सहितको लक // [1F50F] +🔐 बन्द ताला र चाबी // [1F510] +🔑 साँचो // [1F511] +🔒 लक // [1F512] +🔓 खुला लक // [1F513] +🔔 घन्टी // [1F514] +🔕 स्ल्यास सहितको घण्टी // [1F515] +🔖 बुकमार्क // [1F516] +🔗 लिंक // [1F517] +🔘 रेडियो बटन // [1F518] +🔙 पछाडि संकेत गर्ने वाण // [1F519] +🔚 सकिएको संकेत गर्ने वाण // [1F51A] +🔛 चलिरहेको! संकेत गर्ने वाण // [1F51B] +🔜 छिट्टै आउने संकेत गर्ने वाण // [1F51C] +🔝 माथिको संकेत गर्ने वाण // [1F51D] +🔞 कोही पनि अठार भन्दा कम हुनु हुँदैन // [1F51E] +🔟 किक्याप अंक दश // [1F51F] +🔠 ल्याटिन ठूलो अक्षर राख्न // [1F520] +🔡 ल्याटिन सानो अक्षर राख्न // [1F521] +🔢 अंकहरू राख्न // [1F522] +🔣 संकेतहरू राख्न // [1F523] +🔤 ल्याटिन अक्षर राख्न // [1F524] +🔥 आगो // [1F525] +🔦 फ्ल्याश लाइट // [1F526] +🔧 रिन्च // [1F527] +🔨 घन // [1F528] +🔩 नट र बोल्ट // [1F529] +🔪 भान्से चक्कु // [1F52A] +🔫 पिस्तोल // [1F52B] +🔬 सुक्ष्मदर्शक यन्त्र // [1F52C] +🔭 टेलिस्कोप // [1F52D] +🔮 क्रिस्टल बल // [1F52E] +🔯 डट गरेको-छ-विन्दू तारा // [1F52F] +🔰 सुरुवातकर्ताको लागि जापानिज प्रतिक // [1F530] +🔱 ट्रिडेन्ट राजचिन्ह // [1F531] +🔲 कालो वर्गीय बटन // [1F532] +🔳 सेतो वर्गीय बटन // [1F533] +🔴 रातो घेरा // [1F534] +🔵 नीलो घेरा // [1F535] +🔶 ठूलो सुन्तला हिरा // [1F536] +🔷 ठूलो नीलो हिरा // [1F537] +🔸 सानो सुन्तला हिरा // [1F538] +🔹 सानो नीलो हिरा // [1F539] +🔺 माथि संकेत गरिएको रातो त्रिकोण // [1F53A] +🔻 तल संकेत गरिएको रातो त्रिकोण // [1F53B] +🔼 माथिको बटन // [1F53C] +🔽 तलको बटन // [1F53D] +🕉 ओम // [1F549] text|emoji +🕊 ढुक्कुर // [1F54A] text|emoji +🕋 काबा // [1F54B] +🕌 मस्जिद // [1F54C] +🕍 आराधनालय // [1F54D] +🕎 मनोराह // [1F54E] +🕐 एक बजे // [1F550] +🕑 दुई बजे // [1F551] +🕒 तीन बजे // [1F552] +🕓 चार बजे // [1F553] +🕔 पाँच बजे // [1F554] +🕕 छ बजे // [1F555] +🕖 सात बजे // [1F556] +🕗 आठ बजे // [1F557] +🕘 नौ बजे // [1F558] +🕙 दश बजे // [1F559] +🕚 एघार बजे // [1F55A] +🕛 बाह्र बजे // [1F55B] +🕜 एक-तीस // [1F55C] +🕝 दुई-तीस // [1F55D] +🕞 तीन-तीस // [1F55E] +🕟 चार-तीस // [1F55F] +🕠 पाँच-तीस // [1F560] +🕡 छ-तीस // [1F561] +🕢 सात-तीस // [1F562] +🕣 आठ-तीस // [1F563] +🕤 नौ-तीस // [1F564] +🕥 दश-तीस // [1F565] +🕦 एधार-तीस // [1F566] +🕧 बाह्र-तीस // [1F567] +🕯 मैन बत्ती // [1F56F] text|emoji +🕰 म्यानटेलपिसको घडी // [1F570] text|emoji +🕳 प्वाल // [1F573] text|emoji +🕴 व्यवसायिक सुटमा पुरुष // [1F574] text|emoji +🕵 गुप्तचर // [1F575] text|emoji +🕶 घाममा लगाउने चश्मा // [1F576] text|emoji +🕷 माकुरा // [1F577] text|emoji +🕸 माकुराको जालो // [1F578] text|emoji +🕹 जोस्टिक // [1F579] text|emoji +🕺 नाचिरहेको मान्छे // [1F57A] +🖇 लिङ्क गरिएको पेपरक्लिपहरू // [1F587] text|emoji +🖊 कलम // [1F58A] text|emoji +🖋 फाउन्टेन कलम // [1F58B] text|emoji +🖌 पेन्टब्रस // [1F58C] text|emoji +🖍 क्रेयोन // [1F58D] text|emoji +🖐 फैलाएको औंलाहरू सहित उठाइएका हात // [1F590] text|emoji +🖕 बीचको औंला // [1F595] +🖖 बल्कन सलामी // [1F596] +🖤 अरूको भलो नचिताउने // [1F5A4] +🖥 डेस्कटप कम्प्युटर // [1F5A5] text|emoji +🖨 प्रिन्टर // [1F5A8] text|emoji +🖱 कम्प्युटर माउस // [1F5B1] text|emoji +🖲 ट्रयाकबल // [1F5B2] text|emoji +🖼 फ्रेमका साथ चित्र // [1F5BC] text|emoji +🗂 कार्ड सूचक ड्राइभरहरू // [1F5C2] text|emoji +🗃 कार्ड फाइल बाकस // [1F5C3] text|emoji +🗄 फाइल क्याबिनेट // [1F5C4] text|emoji +🗑 फोहोर फाल्ने डालो // [1F5D1] text|emoji +🗒 स्पाइरल नोटप्याड // [1F5D2] text|emoji +🗓 स्पाइरल पात्रो // [1F5D3] text|emoji +🗜 संकुचन // [1F5DC] text|emoji +🗝 पुरानो साँचो // [1F5DD] text|emoji +🗞 माथि-रोल भएको समाचारपत्र // [1F5DE] text|emoji +🗡 ड्यागर // [1F5E1] text|emoji +🗣 बोलिरहेको व्यक्ति // [1F5E3] text|emoji +🗨 बायाँ वाक्य बबल // [1F5E8] text|emoji +🗯 दायाँ रिसको बबल // [1F5EF] text|emoji +🗳 मतदानको साथ मतदान बाकस // [1F5F3] text|emoji +🗺 विश्वको नक्सा // [1F5FA] text|emoji +🗻 फुजी हिमाल // [1F5FB] +🗼 टोकियोको टावर // [1F5FC] +🗽 स्वतन्त्रताको प्रतिमा // [1F5FD] +🗾 जापानको नक्सा // [1F5FE] +🗿 मोवई // [1F5FF] + +// 1F600..1F64F : Emoticons + +😀 रमाएको अनुहार // [1F600] +😁 रमाएका आँखासहित मन्दमुस्कानयुक्त अनुहार // [1F601] +😂 खुसीको आँसु देखिएको अनुहार // [1F602] +😃 खुला मुख सहितको हँसिलो अनुहार // [1F603] +😄 खुला मुख र चम्किला आँखा सहितको हँसिलो अनुहार // [1F604] +😅 खुला मुख र चिसो पसिना सहितको हँसिलो अनुहार // [1F605] +😆 खुला मुख र आँखा चिम्म भएको हँसिलो अनुहार // [1F606] +😇 ह्यालो सहितको हँसिलो अनुहार // [1F607] +😈 सिङ सहितको हँसिलो अनुहार // [1F608] +😉 आँखा झिम्काइएको अनुहार // [1F609] +😊 चम्किला आँखा र हँसिलो अनुहार // [1F60A] +😋 स्वादिष्ट खानामा रमाएको अनुहार // [1F60B] +😌 चिन्ता मुक्त अनुहार // [1F60C] +😍 मुटुको-आकारको आँखा सहितको हँसिलो अनुहार // [1F60D] +😎 चस्मा लगाएको हँसिलो अनुहार // [1F60E] +😏 बनावटी अनुहार // [1F60F] +😐 तटस्थ अनुहार // [1F610] +😑 अभिव्यक्ति बिनाको अनुहार // [1F611] +😒 अप्रसन्न अनुहार // [1F612] +😓 चिसो पसिना सहितको अनुहार // [1F613] +😔 चिन्ताग्रस्त अनुहार // [1F614] +😕 दोधारयुक्त अनुहार // [1F615] +😖 दुविधायुक्त अनुहार // [1F616] +😗 चुम्बन गरिरहेको अनुहार // [1F617] +😘 चुम्बन फ्याँकिरहेको अनुहार // [1F618] +😙 हँसिलो आँखा सहित चुम्बन गरिरहेको अनुहार // [1F619] +😚 बन्द आँखा सहित चुम्बन गरिरहेको अनुहार // [1F61A] +😛 जिब्रो बाहिर निस्केको अनुहार // [1F61B] +😜 जिब्रो बाहिर निस्केको र आँखा झिम्काएको अनुहार // [1F61C] +😝 जिब्रो बाहिर निस्केको र आँखा चिम्म गरिएको अनुहार // [1F61D] +😞 निराश अनुहार // [1F61E] +😟 चिन्तित अनुहार // [1F61F] +😠 रिसाएको अनुहार // [1F620] +😡 मुख फुलाएको अनुहार // [1F621] +😢 रोएको अनुहार // [1F622] +😣 दृढ अनुहार // [1F623] +😤 नाकबाट वाफ सहितको अनुहार // [1F624] +😥 निराश तर चिन्ता मुक्त अनुहार // [1F625] +😦 खुला मुख सहितको रिसाएको अनुहार // [1F626] +😧 दुखी अनुहार // [1F627] +😨 डराएको अनुहार // [1F628] +😩 विचलित अनुहार // [1F629] +😪 निद्रालु अनुहार // [1F62A] +😫 थाकेको अनुहार // [1F62B] +😬 मुख बनाएको अनुहार // [1F62C] +😭 जोडले रोएको अनुहार // [1F62D] +😮 खुला मुख सहितको अनुहार // [1F62E] +😯 शान्त अनुहार // [1F62F] +😰 खुला मुख र चिसो पसिना सहितको अनुहार // [1F630] +😱 डरले चिच्चाएको अनुहार // [1F631] +😲 चकित अनुहार // [1F632] +😳 रातो भएको अनुहार // [1F633] +😴 निदाइरहेको अनुहार // [1F634] +😵 रिंगटा लागेको अनुहार // [1F635] +😶 मुख बिनाको अनुहार // [1F636] +😷 चिकित्सा मास्क सहितको अनुहार // [1F637] +😸 चम्किला आँखा सहितको हँसिलो बिरालोको अनुहार // [1F638] +😹 खुसीको आँशु सहितको बिरालोको अनुहार // [1F639] +😺 खुला मुख सहितको हँसिलो बिरालोको अनुहार // [1F63A] +😻 मुटुको-आकारको आँखा भएको हँसिलो बिरालोको अनुहार // [1F63B] +😼 व्यंग्यपूर्ण हाँसो सहितको बिरालोको अनुहार // [1F63C] +😽 बन्द आँखा सहितको चुम्बन गरिरहेको बिरालोको अनुहार // [1F63D] +😾 मुख फुलाइरहेको बिरालोको अनुहार // [1F63E] +😿 रोइरहेको बिरालोको अनुहार // [1F63F] +🙀 थाकेको बिरालोको अनुहार // [1F640] +🙁 हल्का रिसाएको अनुहार // [1F641] +🙂 हलका हँसिलो अनुहार // [1F642] +🙃 माथि-तल भएको अनुहार // [1F643] +🙄 घुमिरहेको आँखा सहितको अनुहार // [1F644] +🙅 ठीक नभएको संकेत दिने व्यक्ति // [1F645] +🙆 भाव प्रदर्शन ठीक छ // [1F646] +🙇 निहुरिरहेको व्यक्ति // [1F647] +🙈 कुनै-नचाहिने कुरा-देख्दैन // [1F648] +🙉 कुनै-नचाहिने कुरा-सुन्दैन // [1F649] +🙊 कुनै-नचाहिने कुरा-बोल्दैन // [1F64A] +🙋 हात उठाइहेको खुशी व्यक्ति // [1F64B] +🙌 हात उठाइरहेको व्यक्ति // [1F64C] +🙍 रिसाएको व्यक्ति // [1F64D] +🙎 मुख फुलाइरहेको व्यक्ति // [1F64E] +🙏 जोडेको हातहरू // [1F64F] + +// 1F680..1F6FF : Transport and Map Symbols + +🚀 रकेट // [1F680] +🚁 हेलिकप्टर // [1F681] +🚂 लोकोमोटिभ // [1F682] +🚃 रेलवे कार // [1F683] +🚄 उच्च-गतिको रेल // [1F684] +🚅 चुच्चो अग्रभाग भएको उच्च-गतिको रेल // [1F685] +🚆 रेल // [1F686] +🚇 मेट्रो // [1F687] +🚈 हल्का रेल // [1F688] +🚉 स्टेशन // [1F689] +🚊 ट्राम // [1F68A] +🚋 ट्राम कार // [1F68B] +🚌 बस // [1F68C] +🚍 आउँदै गरेको बस // [1F68D] +🚎 ट्रलिबस // [1F68E] +🚏 बस बिसौंनी // [1F68F] +🚐 मिनिबस // [1F690] +🚑 एम्बुलेन्स // [1F691] +🚒 फायर इन्जिन // [1F692] +🚓 पुलिस कार // [1F693] +🚔 आउँदै गरेको पुलिस कार // [1F694] +🚕 ट्याक्सी // [1F695] +🚖 आउँदै गरेको ट्याक्सी // [1F696] +🚗 अटोमोबाइल // [1F697] +🚘 आउँदै गरेको अटोमोबाइल // [1F698] +🚙 घुमफिरको लागि सवारी // [1F699] +🚚 ढुवानीका लागि ट्रक // [1F69A] +🚛 लरी // [1F69B] +🚜 ट्रयाक्टर // [1F69C] +🚝 मोनोरेल // [1F69D] +🚞 पर्वतीय रेलवे // [1F69E] +🚟 सस्पेन्सन रेलवे // [1F69F] +🚠 पर्वतीय केबलवे // [1F6A0] +🚡 एरियल ट्रामवे // [1F6A1] +🚢 पानी जहाज // [1F6A2] +🚣 रोबोट // [1F6A3] +🚤 स्पिडबोट // [1F6A4] +🚥 तेर्सो ट्राफिक लाइट // [1F6A5] +🚦 ठाडो ट्राफिक लाइट // [1F6A6] +🚧 निर्माण // [1F6A7] +🚨 प्रहरीको गाडीको बत्ती // [1F6A8] +🚩 तीनकुने झण्डा // [1F6A9] +🚪 ढोका // [1F6AA] +🚫 निषेधित // [1F6AB] +🚬 धुम्रपान // [1F6AC] +🚭 धुम्रपान गर्न पाइँदैन // [1F6AD] +🚮 बिन संकेतमा फोहोर राख्ने भाँडो // [1F6AE] +🚯 फोहोर फाल्न पाइँदैन // [1F6AF] +🚰 पिउन योग्य पानी // [1F6B0] +🚱 पिउन-अयोग्य पानी // [1F6B1] +🚲 साइकल // [1F6B2] +🚳 साइकल चलाउन पाइँदैन // [1F6B3] +🚴 साइकल चलाउने व्यक्ति // [1F6B4] +🚵 माउन्टेन बाइकर // [1F6B5] +🚶 पदयात्री // [1F6B6] +🚷 पदयात्रीहरूको लागि होइन // [1F6B7] +🚸 बच्चाले बाटो काट्दै // [1F6B8] +🚹 पुरुषको कोठा // [1F6B9] +🚺 महिलाको कोठा // [1F6BA] +🚻 शौंचालय // [1F6BB] +🚼 बच्चाको संकेत // [1F6BC] +🚽 चर्पी // [1F6BD] +🚾 पानीको कुवा // [1F6BE] +🚿 नुहाउने // [1F6BF] +🛀 नुहाउने व्यक्ति // [1F6C0] +🛁 बाथटब // [1F6C1] +🛂 पासपोर्ट चेकजाँच // [1F6C2] +🛃 भन्सार // [1F6C3] +🛄 ब्यागेज क्लेम // [1F6C4] +🛅 छाडिएको सामान // [1F6C5] +🛋 कउच र बत्ती // [1F6CB] text|emoji +🛌 खाटमा भएको व्यक्ति // [1F6CC] +🛍 किनमेल गर्ने झोला // [1F6CD] text|emoji +🛎 बेलहप घन्टी // [1F6CE] text|emoji +🛏 खाट // [1F6CF] text|emoji +🛐 पूजा गर्ने ठाउँ // [1F6D0] +🛑 रोक्ने संकेत // [1F6D1] +🛒 किनमेल गर्ने कार्ट // [1F6D2] +🛠 घन र रिन्च // [1F6E0] text|emoji +🛡 ढाल // [1F6E1] text|emoji +🛢 तेलको ड्रम // [1F6E2] text|emoji +🛣 मोटरको बाटो // [1F6E3] text|emoji +🛤 रेलवे ट्रयाक // [1F6E4] text|emoji +🛥 मोटर डुङ्गा // [1F6E5] text|emoji +🛩 सानो बिमान // [1F6E9] text|emoji +🛫 हवाइजहाजको प्रस्थान // [1F6EB] +🛬 हवाइजहाजको आगमन // [1F6EC] +🛰 स्याटेलाइट // [1F6F0] text|emoji +🛳 यात्री जहाज // [1F6F3] text|emoji +🛴 किक स्कुटर // [1F6F4] +🛵 मोटर स्कुटर // [1F6F5] +🛶 क्यानो // [1F6F6] +🛷 sled // [1F6F7] (no translation) +🛸 flying saucer // [1F6F8] (no translation) + +// 1F900..1F9FF : Supplemental Symbols and Pictographs + +🤐 मुख टालिएको अनुहार // [1F910] +🤑 पैसाको-मुख भएको अनुहार // [1F911] +🤒 थर्मोमिटर सहितको अनुहार // [1F912] +🤓 पढन्दास अनुहार // [1F913] +🤔 सोचमग्न अनुहार // [1F914] +🤕 टाउकोको-पट्टि सहितको अनुहार // [1F915] +🤖 रोबोट अनुहार // [1F916] +🤗 अंगालो मारेको अनुहार // [1F917] +🤘 सिंङको चिन्ह // [1F918] +🤙 मलाई फोन गर्नु भन्ने सङ्केत // [1F919] +🤚 पछाडिबाट उठेको हात // [1F91A] +🤛 बायाँ फर्केको मुड्की // [1F91B] +🤜 दायाँ फर्केको मुड्की // [1F91C] +🤝 हस्तमिलन // [1F91D] +🤞 प्रार्थना गरिरहेको मुद्रा // [1F91E] +🤟 love you gesture // [1F91F] (no translation) +🤠 काउव्वाइ ह्याट अनुहार // [1F920] +🤡 हसाउँने मान्छेको अनुहार // [1F921] +🤢 बान्ता गरेको अनुहार // [1F922] +🤣 अत्यन्तै हाँस उठ्दो // [1F923] +🤤 र्याले अनुहार // [1F924] +🤥 झुट बोलेको झल्किने अनुहार // [1F925] +🤦 चिन्तित // [1F926] +🤧 हाच्छिउँ गरेको अनुहार // [1F927] +🤨 face with raised eyebrow // [1F928] (no translation) +🤩 star struck // [1F929] (no translation) +🤪 crazy face // [1F92A] (no translation) +🤫 shushing face // [1F92B] (no translation) +🤬 face with symbols over mouth // [1F92C] (no translation) +🤭 face with hand over mouth // [1F92D] (no translation) +🤮 face vomiting // [1F92E] (no translation) +🤯 exploding head // [1F92F] (no translation) +🤰 गर्भवती आइमाई // [1F930] +🤱 breast feeding // [1F931] (no translation) +🤲 palms up together // [1F932] (no translation) +🤳 सेल्फी // [1F933] +🤴 राजकुमार // [1F934] +🤵 सुट पहिरनमा मान्छे // [1F935] +🤶 क्रिस्मसको आमा // [1F936] +🤷 वेवास्ता जनाउने // [1F937] +🤸 कार्टह्विल // [1F938] +🤹 जग्लिङ // [1F939] +🤺 फेन्सर // [1F93A] +🤼 कुस्तिवाज // [1F93C] +🤽 वाटर पोलो // [1F93D] +🤾 ह्यान्डबल // [1F93E] +🥀 ओइलिएको फूल // [1F940] +🥁 ड्रम // [1F941] +🥂 क्लिङ्क भएका गिलासहरू // [1F942] +🥃 टम्बलर गिलास // [1F943] +🥄 चम्चा // [1F944] +🥅 गोल जाली // [1F945] +🥇 स्वर्ण पदक // [1F947] +🥈 रजत पदक // [1F948] +🥉 कास्य पदक // [1F949] +🥊 बक्सिङ ग्लोभ // [1F94A] +🥋 मार्सल आर्ट युनिफर्म // [1F94B] +🥌 curling stone // [1F94C] (no translation) +🥐 क्रोइस्सन्ट // [1F950] +🥑 अभोकाडो // [1F951] +🥒 काक्रो // [1F952] +🥓 बेकन // [1F953] +🥔 आलु // [1F954] +🥕 गाजर // [1F955] +🥖 ब्यागेट रोटी // [1F956] +🥗 हरियो सलाद // [1F957] +🥘 होचो कराईको खाना // [1F958] +🥙 स्टफ्ड फ्ल्याटब्रेड // [1F959] +🥚 अण्डा // [1F95A] +🥛 दूधको गिलास // [1F95B] +🥜 बदाम // [1F95C] +🥝 किवी फल // [1F95D] +🥞 प्यानकेक // [1F95E] +🥟 dumpling // [1F95F] (no translation) +🥠 fortune cookie // [1F960] (no translation) +🥡 takeout box // [1F961] (no translation) +🥢 chopsticks // [1F962] (no translation) +🥣 bowl with spoon // [1F963] (no translation) +🥤 cup with straw // [1F964] (no translation) +🥥 coconut // [1F965] (no translation) +🥦 broccoli // [1F966] (no translation) +🥧 pie // [1F967] (no translation) +🥨 pretzel // [1F968] (no translation) +🥩 cut of meat // [1F969] (no translation) +🥪 sandwich // [1F96A] (no translation) +🥫 canned food // [1F96B] (no translation) +🦀 गंगटा // [1F980] +🦁 सिंहको अनुहार // [1F981] +🦂 बिच्छी // [1F982] +🦃 टर्की // [1F983] +🦄 गैँडाको अनुहार // [1F984] +🦅 चिल // [1F985] +🦆 हाँस // [1F986] +🦇 चमेरो // [1F987] +🦈 शार्क माछा // [1F988] +🦉 उल्लु // [1F989] +🦊 धूर्त अनुहार // [1F98A] +🦋 पुतली // [1F98B] +🦌 मृग // [1F98C] +🦍 गोरिल्ला // [1F98D] +🦎 छेपारो // [1F98E] +🦏 गैंडा // [1F98F] +🦐 श्रिम्प // [1F990] +🦑 स्क्विड // [1F991] +🦒 giraffe // [1F992] (no translation) +🦓 zebra // [1F993] (no translation) +🦔 hedgehog // [1F994] (no translation) +🦕 sauropod // [1F995] (no translation) +🦖 t rex // [1F996] (no translation) +🦗 cricket // [1F997] (no translation) +🧀 पनिर पिस्ने // [1F9C0] +🧐 face with monocle // [1F9D0] (no translation) +🧑 adult // [1F9D1] (no translation) +🧒 child // [1F9D2] (no translation) +🧓 older adult // [1F9D3] (no translation) +🧔 bearded person // [1F9D4] (no translation) +🧕 woman with headscarf // [1F9D5] (no translation) +🧖 person in steamy room // [1F9D6] (no translation) +🧗 person climbing // [1F9D7] (no translation) +🧘 person in lotus position // [1F9D8] (no translation) +🧙 mage // [1F9D9] (no translation) +🧚 fairy // [1F9DA] (no translation) +🧛 vampire // [1F9DB] (no translation) +🧜 merperson // [1F9DC] (no translation) +🧝 elf // [1F9DD] (no translation) +🧞 genie // [1F9DE] (no translation) +🧟 zombie // [1F9DF] (no translation) +🧠 brain // [1F9E0] (no translation) +🧡 orange heart // [1F9E1] (no translation) +🧢 billed cap // [1F9E2] (no translation) +🧣 scarf // [1F9E3] (no translation) +🧤 gloves // [1F9E4] (no translation) +🧥 coat // [1F9E5] (no translation) +🧦 socks // [1F9E6] (no translation) + +// Country Flags (Regional Indicator Symbols) -- ISO 3166-1 Country Codes + +🇦🇨 एस्केन्सन टापु // [1F1E6 1F1E8] AC +🇦🇩 अन्डोर्रा // [1F1E6 1F1E9] AD +🇦🇪 संयुक्त अरब इमिराट्स // [1F1E6 1F1EA] AE +🇦🇫 अफगानिस्तान // [1F1E6 1F1EB] AF +🇦🇬 एन्टिगुआ र बारबुडा // [1F1E6 1F1EC] AG +🇦🇮 आङ्गुइला // [1F1E6 1F1EE] AI +🇦🇱 अल्बानिया // [1F1E6 1F1F1] AL +🇦🇲 आर्मेनिया // [1F1E6 1F1F2] AM +🇦🇴 अङ्गोला // [1F1E6 1F1F4] AO +🇦🇶 अन्टारटिका // [1F1E6 1F1F6] AQ +🇦🇷 अर्जेन्टिना // [1F1E6 1F1F7] AR +🇦🇸 अमेरिकी समोआ // [1F1E6 1F1F8] AS +🇦🇹 अष्ट्रिया // [1F1E6 1F1F9] AT +🇦🇺 अष्ट्रेलिया // [1F1E6 1F1FA] AU +🇦🇼 आरूबा // [1F1E6 1F1FC] AW +🇦🇽 अलान्ड टापुहरु // [1F1E6 1F1FD] AX +🇦🇿 अजरबैजान // [1F1E6 1F1FF] AZ +🇧🇦 बोस्निया एण्ड हर्जगोभिनिया // [1F1E7 1F1E6] BA +🇧🇧 बार्बाडोस // [1F1E7 1F1E7] BB +🇧🇩 बङ्गलादेश // [1F1E7 1F1E9] BD +🇧🇪 बेल्जियम // [1F1E7 1F1EA] BE +🇧🇫 बर्किना फासो // [1F1E7 1F1EB] BF +🇧🇬 बुल्गेरिया // [1F1E7 1F1EC] BG +🇧🇭 बहराइन // [1F1E7 1F1ED] BH +🇧🇮 बुरूण्डी // [1F1E7 1F1EE] BI +🇧🇯 बेनिन // [1F1E7 1F1EF] BJ +🇧🇱 सेन्ट बार्थालेमी // [1F1E7 1F1F1] BL +🇧🇲 बर्मुडा // [1F1E7 1F1F2] BM +🇧🇳 ब्रुनाइ // [1F1E7 1F1F3] BN +🇧🇴 बोलिभिया // [1F1E7 1F1F4] BO +🇧🇶 क्यारिवियन नेदरल्याण्ड्स // [1F1E7 1F1F6] BQ +🇧🇷 ब्राजिल // [1F1E7 1F1F7] BR +🇧🇸 बहामास // [1F1E7 1F1F8] BS +🇧🇹 भुटान // [1F1E7 1F1F9] BT +🇧🇻 बुभेट टापु // [1F1E7 1F1FB] BV +🇧🇼 बोट्स्वाना // [1F1E7 1F1FC] BW +🇧🇾 बेलारूस // [1F1E7 1F1FE] BY +🇧🇿 बेलिज // [1F1E7 1F1FF] BZ +🇨🇦 क्यानाडा // [1F1E8 1F1E6] CA +🇨🇨 कोकोस (किलिंग) टापुहरु // [1F1E8 1F1E8] CC +🇨🇩 कोङ्गो-किन्शासा // [1F1E8 1F1E9] CD +🇨🇫 केन्द्रीय अफ्रिकी गणतन्त्र // [1F1E8 1F1EB] CF +🇨🇬 कोङ्गो - ब्राज्जाभिल्ले // [1F1E8 1F1EC] CG +🇨🇭 स्विजरल्याण्ड // [1F1E8 1F1ED] CH +🇨🇮 आइभोरी कोस्ट // [1F1E8 1F1EE] CI +🇨🇰 कुक टापुहरु // [1F1E8 1F1F0] CK +🇨🇱 चिली // [1F1E8 1F1F1] CL +🇨🇲 क्यामरून // [1F1E8 1F1F2] CM +🇨🇳 चीन // [1F1E8 1F1F3] CN +🇨🇴 कोलोम्बिया // [1F1E8 1F1F4] CO +🇨🇵 क्लिप्पेर्टन टापु // [1F1E8 1F1F5] CP +🇨🇷 कोष्टारिका // [1F1E8 1F1F7] CR +🇨🇺 क्युबा // [1F1E8 1F1FA] CU +🇨🇻 केप भर्डे // [1F1E8 1F1FB] CV +🇨🇼 कुराकाओ // [1F1E8 1F1FC] CW +🇨🇽 क्रिष्टमस टापु // [1F1E8 1F1FD] CX +🇨🇾 साइप्रस // [1F1E8 1F1FE] CY +🇨🇿 चेचिया // [1F1E8 1F1FF] CZ +🇩🇪 जर्मनी // [1F1E9 1F1EA] DE +🇩🇬 डियगो गार्सिया // [1F1E9 1F1EC] DG +🇩🇯 डिजिबुटी // [1F1E9 1F1EF] DJ +🇩🇰 डेनमार्क // [1F1E9 1F1F0] DK +🇩🇲 डोमिनिका // [1F1E9 1F1F2] DM +🇩🇴 डोमिनिकन गणतन्त्र // [1F1E9 1F1F4] DO +🇩🇿 अल्जेरिया // [1F1E9 1F1FF] DZ +🇪🇦 सिउटा र मेलिला // [1F1EA 1F1E6] EA +🇪🇨 इक्वडेर // [1F1EA 1F1E8] EC +🇪🇪 इस्टोनिया // [1F1EA 1F1EA] EE +🇪🇬 इजिप्ट // [1F1EA 1F1EC] EG +🇪🇭 पश्चिमी साहारा // [1F1EA 1F1ED] EH +🇪🇷 एरित्रिया // [1F1EA 1F1F7] ER +🇪🇸 स्पेन // [1F1EA 1F1F8] ES +🇪🇹 इथियोपिया // [1F1EA 1F1F9] ET +🇪🇺 युरोपियन युनियन // [1F1EA 1F1FA] EU +🇫🇮 फिन्ल्याण्ड // [1F1EB 1F1EE] FI +🇫🇯 फिजी // [1F1EB 1F1EF] FJ +🇫🇰 फकल्याण्ड टापुहरु // [1F1EB 1F1F0] FI +🇫🇲 माइक्रोनेसिया // [1F1EB 1F1F2] FM +🇫🇴 फारो टापुहरू // [1F1EB 1F1F4] FO +🇫🇷 फ्रान्स // [1F1EB 1F1F7] FR +🇬🇦 गावोन // [1F1EC 1F1E6] GA +🇬🇧 बेलायत // [1F1EC 1F1E7] GB +🇬🇩 ग्रेनाडा // [1F1EC 1F1E9] GD +🇬🇪 जर्जिया // [1F1EC 1F1EA] GE +🇬🇫 फ्रान्सेली गायना // [1F1EC 1F1EB] GF +🇬🇬 गुएर्नसे // [1F1EC 1F1EC] GG +🇬🇭 घाना // [1F1EC 1F1ED] GH +🇬🇮 जिब्राल्टार // [1F1EC 1F1EE] GI +🇬🇱 ग्रिनल्याण्ड // [1F1EC 1F1F1] GL +🇬🇲 गाम्विया // [1F1EC 1F1F2] GM +🇬🇳 गिनी // [1F1EC 1F1F3] GN +🇬🇵 ग्वाडेलुप // [1F1EC 1F1F5] GP +🇬🇶 भू-मध्यीय गिनी // [1F1EC 1F1F6] GQ +🇬🇷 ग्रिस // [1F1EC 1F1F7] GR +🇬🇸 दक्षिण जर्जिया र दक्षिण स्यान्डवीच टापुहरू // [1F1EC 1F1F8] GS +🇬🇹 ग्वाटेमाला // [1F1EC 1F1F9] GT +🇬🇺 गुवाम // [1F1EC 1F1FA] GU +🇬🇼 गिनी-बिसाउ // [1F1EC 1F1FC] GW +🇬🇾 गुयाना // [1F1EC 1F1FE] GY +🇭🇰 हङकङ चिनिया समाजवादी स्वायत्त क्षेत्र // [1F1ED 1F1F0] HK +🇭🇲 हर्ड टापु र म्याकडोनाल्ड टापुहरु // [1F1ED 1F1F2] HM +🇭🇳 हन्डुरास // [1F1ED 1F1F3] HN +🇭🇷 क्रोएशिया // [1F1ED 1F1F7] HR +🇭🇹 हैटी // [1F1ED 1F1F9] HT +🇭🇺 हङ्गेरी // [1F1ED 1F1FA] HU +🇮🇨 क्यानारी टापुहरू // [1F1EE 1F1E8] IC +🇮🇩 इन्डोनेशिया // [1F1EE 1F1E9] ID +🇮🇪 आयरल्याण्ड // [1F1EE 1F1EA] IE +🇮🇱 इजरायल // [1F1EE 1F1F1] IL +🇮🇲 आइज्ले अफ् म्यान // [1F1EE 1F1F2] IM +🇮🇳 भारत // [1F1EE 1F1F3] IN +🇮🇴 बेलायती हिन्द महासागर क्षेत्र // [1F1EE 1F1F4] IO +🇮🇶 इराक // [1F1EE 1F1F6] IQ +🇮🇷 इरान // [1F1EE 1F1F7] IR +🇮🇸 आइस्ल्याण्ड // [1F1EE 1F1F8] IS +🇮🇹 इटाली // [1F1EE 1F1F9] IT +🇯🇪 जर्सी // [1F1EF 1F1EA] JE +🇯🇲 जमाइका // [1F1EF 1F1F2] JM +🇯🇴 जोर्डन // [1F1EF 1F1F4] JO +🇯🇵 जापान // [1F1EF 1F1F5] JP +🇰🇪 केन्या // [1F1F0 1F1EA] KE +🇰🇬 किर्गिस्थान // [1F1F0 1F1EC] KG +🇰🇭 कम्बोडिया // [1F1F0 1F1ED] KH +🇰🇮 किरिबाटी // [1F1F0 1F1EE] KI +🇰🇲 कोमोरोस // [1F1F0 1F1F2] KM +🇰🇳 सेन्ट किट्स र नेभिस // [1F1F0 1F1F3] KN +🇰🇵 उत्तर कोरिया // [1F1F0 1F1F5] KP +🇰🇷 दक्षिण कोरिया // [1F1F0 1F1F7] KR +🇰🇼 कुवेत // [1F1F0 1F1FC] KW +🇰🇾 केयमान टापु // [1F1F0 1F1FE] KY +🇰🇿 काजाकस्तान // [1F1F0 1F1FF] KZ +🇱🇦 लाओस // [1F1F1 1F1E6] LA +🇱🇧 लेबनन // [1F1F1 1F1E7] LB +🇱🇨 सेन्ट लुसिया // [1F1F1 1F1E8] LC +🇱🇮 लिएखटेन्स्टाइन // [1F1F1 1F1EE] LI +🇱🇰 श्रीलङ्का // [1F1F1 1F1F0] LK +🇱🇷 लाइबेरिया // [1F1F1 1F1F7] LR +🇱🇸 लेसोथो // [1F1F1 1F1F8] LS +🇱🇹 लिथुअनिया // [1F1F1 1F1F9] LT +🇱🇺 लक्जेमबर्ग // [1F1F1 1F1FA] LU +🇱🇻 लाट्भिया // [1F1F1 1F1FB] LV +🇱🇾 लिबिया // [1F1F1 1F1FE] LY +🇲🇦 मोरोक्को // [1F1F2 1F1E6] MA +🇲🇨 मोनाको // [1F1F2 1F1E8] MC +🇲🇩 माल्डोभा // [1F1F2 1F1E9] MD +🇲🇪 मोन्टेनेग्रो // [1F1F2 1F1EA] ME +🇲🇫 सेन्ट मार्टिन // [1F1F2 1F1EB] MF +🇲🇬 मडागास्कर // [1F1F2 1F1EC] MG +🇲🇭 मार्शल टापुहरु // [1F1F2 1F1ED] MH +🇲🇰 म्याकेडोनिया // [1F1F2 1F1F0] MK +🇲🇱 माली // [1F1F2 1F1F1] ML +🇲🇲 म्यान्मार (बर्मा) // [1F1F2 1F1F2] MM +🇲🇳 मङ्गोलिया // [1F1F2 1F1F3] MN +🇲🇴 मकावो चिनिँया स्वशासित क्षेत्र // [1F1F2 1F1F4] MO +🇲🇵 उत्तरी मारिआना टापु // [1F1F2 1F1F5] MP +🇲🇶 मार्टिनिक // [1F1F2 1F1F6] MQ +🇲🇷 माउरिटानिया // [1F1F2 1F1F7] MR +🇲🇸 मोन्टसेर्राट // [1F1F2 1F1F8] MS +🇲🇹 माल्टा // [1F1F2 1F1F9] MT +🇲🇺 माउरिटस // [1F1F2 1F1FA] MU +🇲🇻 माल्दिभ्स // [1F1F2 1F1FB] MV +🇲🇼 मालावी // [1F1F2 1F1FC] MW +🇲🇽 मेक्सिको // [1F1F2 1F1FD] MX +🇲🇾 मलेसिया // [1F1F2 1F1FE] MY +🇲🇿 मोजाम्बिक // [1F1F2 1F1FF] MZ +🇳🇦 नामिबिया // [1F1F3 1F1E6] NA +🇳🇨 नयाँ कालेडोनिया // [1F1F3 1F1E8] NC +🇳🇪 नाइजर // [1F1F3 1F1EA] NE +🇳🇫 नोरफोल्क टापु // [1F1F3 1F1EB] NF +🇳🇬 नाइजेरिया // [1F1F3 1F1EC] NG +🇳🇮 निकारागुवा // [1F1F3 1F1EE] NI +🇳🇱 नेदरल्याण्ड्स // [1F1F3 1F1F1] NL +🇳🇴 नर्वे // [1F1F3 1F1F4] NO +🇳🇵 नेपाल // [1F1F3 1F1F5] NP +🇳🇷 नाउरू // [1F1F3 1F1F7] NR +🇳🇺 नियुइ // [1F1F3 1F1FA] NU +🇳🇿 न्युजिल्याण्ड // [1F1F3 1F1FF] NZ +🇴🇲 ओमन // [1F1F4 1F1F2] OM +🇵🇦 पनामा // [1F1F5 1F1E6] PA +🇵🇪 पेरू // [1F1F5 1F1EA] PE +🇵🇫 फ्रान्सेली पोलिनेसिया // [1F1F5 1F1EB] PF +🇵🇬 पपुआ न्यू गाइनिया // [1F1F5 1F1EC] PG +🇵🇭 फिलिपिन्स // [1F1F5 1F1ED] PH +🇵🇰 पाकिस्तान // [1F1F5 1F1F0] PK +🇵🇱 पोल्याण्ड // [1F1F5 1F1F1] PL +🇵🇲 सेन्ट पिर्रे र मिक्केलोन // [1F1F5 1F1F2] PM +🇵🇳 पिटकाइर्न टापुहरु // [1F1F5 1F1F3] PN +🇵🇷 पुएर्टो रिको // [1F1F5 1F1F7] PR +🇵🇸 प्यालेस्टनी भू-भागहरु // [1F1F5 1F1F8] PS +🇵🇹 पोर्चुगल // [1F1F5 1F1F9] PT +🇵🇼 पलाउ // [1F1F5 1F1FC] PW +🇵🇾 प्याराग्वे // [1F1F5 1F1FE] PY +🇶🇦 कतार // [1F1F6 1F1E6] QA +🇷🇪 रियुनियन // [1F1F7 1F1EA] RE +🇷🇴 रोमानिया // [1F1F7 1F1F4] RO +🇷🇸 सर्बिया // [1F1F7 1F1F8] RS +🇷🇺 रूस // [1F1F7 1F1FA] RU +🇷🇼 रवाण्डा // [1F1F7 1F1FC] RW +🇸🇦 साउदी अरब // [1F1F8 1F1E6] SA +🇸🇧 सोलोमोन टापुहरु // [1F1F8 1F1E7] SB +🇸🇨 सेचेलेस // [1F1F8 1F1E8] SC +🇸🇩 सुडान // [1F1F8 1F1E9] SD +🇸🇪 स्विडेन // [1F1F8 1F1EA] SE +🇸🇬 सिङ्गापुर // [1F1F8 1F1EC] SG +🇸🇭 सेन्ट हेलेना // [1F1F8 1F1ED] SH +🇸🇮 स्लोभेनिया // [1F1F8 1F1EE] SI +🇸🇯 सभाल्बार्ड र जान मायेन // [1F1F8 1F1EF] SJ +🇸🇰 स्लोभाकिया // [1F1F8 1F1F0] SK +🇸🇱 सिएर्रा लिओन // [1F1F8 1F1F1] SL +🇸🇲 सान् मारिनो // [1F1F8 1F1F2] SM +🇸🇳 सेनेगाल // [1F1F8 1F1F3] SN +🇸🇴 सोमालिया // [1F1F8 1F1F4] SO +🇸🇷 सुरिनेम // [1F1F8 1F1F7] SR +🇸🇸 दक्षिणी सुडान // [1F1F8 1F1F8] SS +🇸🇹 साओ टोमे र प्रिन्सिप // [1F1F8 1F1F9] ST +🇸🇻 एल् साल्भाडोर // [1F1F8 1F1FB] SV +🇸🇽 सिन्ट मार्टेन // [1F1F8 1F1FD] SX +🇸🇾 सिरिया // [1F1F8 1F1FE] SY +🇸🇿 स्वाजिल्याण्ड // [1F1F8 1F1FF] SZ +🇹🇦 ट्रिस्टान डा कुन्हा // [1F1F9 1F1E6] TA +🇹🇨 तुर्क र काइकोस टापु // [1F1F9 1F1E8] TC +🇹🇩 चाड // [1F1F9 1F1E9] TD +🇹🇫 फ्रान्सेली दक्षिणी क्षेत्रहरु // [1F1F9 1F1EB] TF +🇹🇬 टोगो // [1F1F9 1F1EC] TG +🇹🇭 थाइल्याण्ड // [1F1F9 1F1ED] TH +🇹🇯 ताजिकिस्तान // [1F1F9 1F1EF] TJ +🇹🇰 तोकेलाउ // [1F1F9 1F1F0] TK +🇹🇱 टिमोर-लेस्टे // [1F1F9 1F1F1] TL +🇹🇲 तुर्कमेनिस्तान // [1F1F9 1F1F2] TM +🇹🇳 ट्युनिसिया // [1F1F9 1F1F3] TN +🇹🇴 टोंगा // [1F1F9 1F1F4] TO +🇹🇷 टर्की // [1F1F9 1F1F7] TR +🇹🇹 त्रिनिडाड एण्ड टोबागो // [1F1F9 1F1F9] TT +🇹🇻 तुभालु // [1F1F9 1F1FB] TV +🇹🇼 ताइवान // [1F1F9 1F1FC] TW +🇹🇿 तान्जानिया // [1F1F9 1F1FF] TZ +🇺🇦 युक्रेन // [1F1FA 1F1E6] UA +🇺🇬 युगाण्डा // [1F1FA 1F1EC] UG +🇺🇲 संयुक्त राज्यका बाह्य टापुहरु // [1F1FA 1F1F2] UM +🇺🇳 संयुक्त राष्ट्र संघ // [1F1FA 1F1F3] UN +🇺🇸 संयुक्त राज्य // [1F1FA 1F1F8] US +🇺🇾 उरूग्वे // [1F1FA 1F1FE] UY +🇺🇿 उज्बेकिस्तान // [1F1FA 1F1FF] UZ +🇻🇦 भेटिकन सिटी // [1F1FB 1F1E6] VA +🇻🇨 सेन्ट भिन्सेन्ट र ग्रेनाडिन्स // [1F1FB 1F1E8] VC +🇻🇪 भेनेजुएला // [1F1FB 1F1EA] VE +🇻🇬 बेलायती भर्जिन टापुहरु // [1F1FB 1F1EC] VG +🇻🇮 संयुक्त राज्य भर्जिन टापुहरु // [1F1FB 1F1EE] VI +🇻🇳 भिएतनाम // [1F1FB 1F1F3] VN +🇻🇺 भानुआतु // [1F1FB 1F1FA] VU +🇼🇫 वालिस र फुटुना // [1F1FC 1F1EB] WF +🇼🇸 सामोआ // [1F1FC 1F1F8] WS +🇽🇰 कोसोवो // [1F1FD 1F1F0] XK +🇾🇪 येमेन // [1F1FE 1F1EA] YE +🇾🇹 मायोट्ट // [1F1FE 1F1F9] YT +🇿🇦 दक्षिण अफ्रिका // [1F1FF 1F1E6] ZA +🇿🇲 जाम्बिया // [1F1FF 1F1F2] ZM +🇿🇼 जिम्बाबे // [1F1FF 1F1FC] ZW + +// Subdivision Flags -- ISO 3166-2 Subdivision Codes + +🏴󠁧󠁢󠁥󠁮󠁧󠁿 इंग्ल्याण्ड // [1F3F4 E0067 E0062 E0065 E006E E0067 E007F] +🏴󠁧󠁢󠁳󠁣󠁴󠁿 स्कटल्याण्ड // [1F3F4 E0067 E0062 E0073 E0063 E0074 E007F] +🏴󠁧󠁢󠁷󠁬󠁳󠁿 वेल्स // [1F3F4 E0067 E0062 E0077 E006C E0073 E007F] + +// Keycaps (NOTE: keycap 10 is a single Unicode codepoint) + +#️⃣ किक्याप संख्या // [0023 FE0F 20E3] +*️⃣ किक्याप अयास्ट्रिक // [002A FE0F 20E3] +0️⃣ किक्याप अंक शुन्य // [0030 FE0F 20E3] +1️⃣ किक्याप अंक एक // [0031 FE0F 20E3] +2️⃣ किक्याप अंक दुई // [0032 FE0F 20E3] +3️⃣ किक्याप अंक तीन // [0033 FE0F 20E3] +4️⃣ किक्याप अंक चार // [0034 FE0F 20E3] +5️⃣ किक्याप अंक पाँच // [0035 FE0F 20E3] +6️⃣ किक्याप अंक छ // [0036 FE0F 20E3] +7️⃣ किक्याप अंक सात // [0037 FE0F 20E3] +8️⃣ किक्याप अंक आठ // [0038 FE0F 20E3] +9️⃣ किक्याप अंक नौ // [0039 FE0F 20E3] + +// Emoji ZWJ Sequence: Family + +👩‍❤‍💋‍👨 चुम्बन, छोरी मान्छे, छोरा मान्छे // [1F469 200D 2764 200D 1F48B 200D 1F468] +👨‍❤‍💋‍👨 चुम्बन, छोरा मान्छे, छोरा मान्छे // [1F468 200D 2764 200D 1F48B 200D 1F468] +👩‍❤‍💋‍👩 चुम्बन, छोरी मान्छे, छोरी मान्छे // [1F469 200D 2764 200D 1F48B 200D 1F469] +👩‍❤‍👨 प्रेममा परेको जोडी, छोरी मान्छे, छोरा मान्छे // [1F469 200D 2764 200D 1F468] +👨‍❤‍👨 प्रेममा परेेको जोडी, छोरा मान्छे, छोरा मान्छे // [1F468 200D 2764 200D 1F468] +👩‍❤‍👩 प्रेममा परेको जोडी, छोरी मान्छे, छोरी मान्छे // [1F469 200D 2764 200D 1F469] +👨‍👩‍👦 परिवार, छोरा मान्छे, छोरी मान्छे, केटा // [1F468 200D 1F469 200D 1F466] +👨‍👩‍👧 परिवार, छोरा मान्छे, छोरी मान्छे, केटी // [1F468 200D 1F469 200D 1F467] +👨‍👩‍👧‍👦 परिवार, छोरा मान्छे, छोरी मान्छे, केटी, केटा// [1F468 200D 1F469 200D 1F467 200D 1F466] +👨‍👩‍👦‍👦 परिवार, छोरा मान्छे, छोरी मान्छे, केटा, केटा// [1F468 200D 1F469 200D 1F466 200D 1F466] +👨‍👩‍👧‍👧 परिवार, छोरा मान्छे, छोरी मान्छे, केटी, केेटी// [1F468 200D 1F469 200D 1F467 200D 1F467] +👨‍👨‍👦 परिवार, छोरा मान्छे, छोरा मान्छे, केटा // [1F468 200D 1F468 200D 1F466] +👨‍👨‍👧 परिवार, छोरा मान्छे, छोरा मान्छे, केेटी // [1F468 200D 1F468 200D 1F467] +👨‍👨‍👧‍👦 परिवार, छोरा मान्छे, छोरा मान्छे, केटी, केटा// [1F468 200D 1F468 200D 1F467 200D 1F466] +👨‍👨‍👦‍👦 परिवार, छोरा मान्छे, छोरा मान्छे, केटा, केटा// [1F468 200D 1F468 200D 1F466 200D 1F466] +👨‍👨‍👧‍👧 परिवार, छोरा मान्छे, छोरा मान्छे, केटी, केेटी// [1F468 200D 1F468 200D 1F467 200D 1F467] +👩‍👩‍👦 परिवार, छोरी मान्छे, छोरी मान्छे, केटा // [1F469 200D 1F469 200D 1F466] +👩‍👩‍👧 परिवार, छोरी मान्छे, छोरी मान्छे, केटी // [1F469 200D 1F469 200D 1F467] +👩‍👩‍👧‍👦 परिवार, छोरी मान्छे, छोरी मान्छे, केटी, केटा// [1F469 200D 1F469 200D 1F467 200D 1F466] +👩‍👩‍👦‍👦 परिवार, छोरी मान्छे, छोरी मान्छे, केटा, केटा// [1F469 200D 1F469 200D 1F466 200D 1F466] +👩‍👩‍👧‍👧 परिवार, छोरी मान्छे, छोरी मान्छे, केटी, केेटी// [1F469 200D 1F469 200D 1F467 200D 1F467] +👨‍👦 परिवार, छोरा मान्छे, केटा // [1F468 200D 1F466] +👨‍👦‍👦 परिवार, छोरा मान्छे, केेटा, केटा // [1F468 200D 1F466 200D 1F466] +👨‍👧 परिवार, छोरा मान्छे, केटी // [1F468 200D 1F467] +👨‍👧‍👦 परिवार, छोरा मान्छे, केटी, केटा // [1F468 200D 1F467 200D 1F466] +👨‍👧‍👧 परिवार, छोरा मान्छे, केटी,केटी // [1F468 200D 1F467 200D 1F467] +👩‍👦 परिवार, छोरी मान्छे, केटा // [1F469 200D 1F466] +👩‍👦‍👦 परिवार, छोरी मान्छे, केेटा, केटा // [1F469 200D 1F466 200D 1F466] +👩‍👧 परिवार, छोरी मान्छे, केटी // [1F469 200D 1F467] +👩‍👧‍👦 परिवार, छोरी मान्छे, केटी, केटा // [1F469 200D 1F467 200D 1F466] +👩‍👧‍👧 परिवार, छोरी मान्छे, केटी, केेटी // [1F469 200D 1F467 200D 1F467] + +// Emoji ZWJ Sequence: Gendered Role, with object + +👨‍⚕ पुरूष स्वास्थ्यकर्मी // [1F468 200D 2695] +👩‍⚕ महिला स्वास्थ्यकर्मी // [1F469 200D 2695] +👨‍⚖ पुरूष न्यायधिश // [1F468 200D 2696] +👩‍⚖ महिला न्यायधिश // [1F469 200D 2696] +👨‍✈ पुरूष पाइलट // [1F468 200D 2708] +👩‍✈ महिला पाइलट // [1F469 200D 2708] +👨‍🌾 पुरूष कृषक // [1F468 200D 1F33E] +👩‍🌾 महिका कृषक // [1F469 200D 1F33E] +👨‍🍳 पुरूष भान्से // [1F468 200D 1F373] +👩‍🍳 महिला भान्से // [1F469 200D 1F373] +👨‍🎓 पुुरूष विद्यार्थी // [1F468 200D 1F393] +👩‍🎓 महिला विद्यार्थी // [1F469 200D 1F393] +👨‍🎤 पुरूष गायक // [1F468 200D 1F3A4] +👩‍🎤 महिला गायिका // [1F469 200D 1F3A4] +👨‍🎨 पुरूष कलाकार // [1F468 200D 1F3A8] +👩‍🎨 महिला कलाकार // [1F469 200D 1F3A8] +👨‍🏫 पुरूष शिक्षक // [1F468 200D 1F3EB] +👩‍🏫 महिला शिक्षिका // [1F469 200D 1F3EB] +👨‍🏭 कारखानाको पुरूष मजदुर // [1F468 200D 1F3ED] +👩‍🏭 कारखानाको महिला मजदुर // [1F469 200D 1F3ED] +👨‍💻 पुरूष टेक्नोलोजिस्ट // [1F468 200D 1F4BB] +👩‍💻 महिला टेक्नोलोजिस्ट // [1F469 200D 1F4BB] +👨‍💼 कार्यालयको पुरूषकर्मी // [1F468 200D 1F4BC] +👩‍💼 कार्यालयको महिलाकर्मी // [1F469 200D 1F4BC] +👨‍🔧 पुरूष मिस्त्री // [1F468 200D 1F527] +👩‍🔧 महिला मिस्त्री // [1F469 200D 1F527] +👨‍🔬 पुरूष वैज्ञानिक // [1F468 200D 1F52C] +👩‍🔬 महिला वैज्ञानिक // [1F469 200D 1F52C] +👨‍🚀 पुरूष अन्तरिक्ष-यात्री // [1F468 200D 1F680] +👩‍🚀 महिला अन्तरिक्ष-यात्री // [1F469 200D 1F680] +👨‍🚒 पुरूष आगो नियन्त्रक // [1F468 200D 1F692] +👩‍🚒 महिला आगो नियन्त्रक // [1F469 200D 1F692] + +// Emoji ZWJ Sequence: Gendered Role + +👮‍♀ महिला पुरूष अधिकृत // [1F46E 200D 2640] +👮‍♂ पुरूष प्रहरी अधिकृत // [1F46E 200D 2642] +👱‍♀ कैलो कपाल भएकी छोरी मान्छे // [1F471 200D 2640] +👱‍♂ कैलो कपाल भएको छोरा मान्छे // [1F471 200D 2642] +👳‍♀ फेेटा लगाएकी छोरी मान्छे // [1F473 200D 2640] +👳‍♂ फेटा लगाएको छोरा मान्छे // [1F473 200D 2642] +👷‍♀ निर्माणको महिला कामदार // [1F477 200D 2640] +👷‍♂ निर्माणको पुरूष कामदार // [1F477 200D 2642] +💂‍♀ महिला गार्ड // [1F482 200D 2640] +💂‍♂ पुरूष गार्ड // [1F482 200D 2642] +🕵️‍♀ महिला अनुसन्धानकर्ता // [1F575 200D 2640] +🕵️‍♂ पुरूष अनुसन्धानकर्ता // [1F575 200D 2642] +🧙‍♀ woman mage // [1F9D9 200D 2640] (no translation) +🧙‍♂ man mage // [1F9D9 200D 2642] (no translation) +🧚‍♀ woman fairy // [1F9DA 200D 2640] (no translation) +🧚‍♂ man fairy // [1F9DA 200D 2642] (no translation) +🧛‍♀ woman vampire // [1F9DB 200D 2640] (no translation) +🧛‍♂ man vampire // [1F9DB 200D 2642] (no translation) +🧜‍♀ mermaid // [1F9DC 200D 2640] (no translation) +🧜‍♂ merman // [1F9DC 200D 2642] (no translation) +🧝‍♀ woman elf // [1F9DD 200D 2640] (no translation) +🧝‍♂ man elf // [1F9DD 200D 2642] (no translation) +🧞‍♀ woman genie // [1F9DE 200D 2640] (no translation) +🧞‍♂ man genie // [1F9DE 200D 2642] (no translation) +🧟‍♀ woman zombie // [1F9DF 200D 2640] (no translation) +🧟‍♂ man zombie // [1F9DF 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Activity + +⛹‍♀ बल खेेल्दै गरेकी छोरी मान्छे // [26F9 200D 2640] +⛹‍♂ बल खेल्दै गरेको छोरा मान्छे // [26F9 200D 2642] +🏃‍♀ दौंडिरहेेकी छोरी मान्छे // [1F3C3 200D 2640] +🏃‍♂ दौंडिरहेको छोरा मान्छे // [1F3C3 200D 2642] +🏄‍♀ सर्फ गरिरहेेकी छोरी मान्छे // [1F3C4 200D 2640] +🏄‍♂ सर्फ गरिरहेको छोरा मान्छे // [1F3C4 200D 2642] +🏊‍♀ पौंंडी खेलिरहेकी छोरी मान्छे // [1F3CA 200D 2640] +🏊‍♂ पौंडी खेलिरहेको छोरा मान्छे // [1F3CA 200D 2642] +🏋️‍♀ भार तौलमा संलग्न छोरी मान्छे // [1F3CB 200D 2640] +🏋️‍♂ भार तौलमा संलग्न छोरा मान्छे // [1F3CB 200D 2642] +🏌️‍♀ गोल्फ खेेल्दै गरेकी छोरी मान्छे // [1F3CC 200D 2640] +🏌️‍♂ गोल्फ खेल्दै गरेको छोरा मान्छे // [1F3CC 200D 2642] +👯‍♀ पार्टीमा रमिरहेेकी छोरी मान्छे // [1F46F 200D 2640] +👯‍♂ पार्टीमा रमिरहेका छोरा मान्छे // [1F46F 200D 2642] +💆‍♀ अनुहारको मसाज लिइरहेकी छोरी मान्छे // [1F486 200D 2640] +💆‍♂ अनुहारको मसाज लिइरहेको छोरा मान्छे // [1F486 200D 2642] +💇‍♀ कपाल कटाइरहेेकी छोरी मान्छे // [1F487 200D 2640] +💇‍♂ कपाल कटाइरहेको छोरा मान्छे // [1F487 200D 2642] +🚣‍♀ डुङ्गा चलाइरहेेकी छोरी मान्छे // [1F6A3 200D 2640] +🚣‍♂ डुङ्गा चलाइरहेको छोरा मान्छे // [1F6A3 200D 2642] +🚴‍♀ साइकल चलाइरहेेकी छोरी मान्छे // [1F6B4 200D 2640] +🚴‍♂ साइकल चलाइरहेको छोरा मान्छे // [1F6B4 200D 2642] +🚵‍♀ माउन्टेन बाइक चलाइरहेेकी छोरी मान्छे // [1F6B5 200D 2640] +🚵‍♂ माउन्टेन बाइक चलाइरहेको छोरा मान्छे // [1F6B5 200D 2642] +🚶‍♀ पैदल हिडिरहेेकी छोरी मान्छे // [1F6B6 200D 2640] +🚶‍♂ पैदल हिडिरहेको छोरा मान्छे // [1F6B6 200D 2642] +🤸‍♀ कार्टह्विल गरिरहेको छोरी मान्छे // [1F938 200D 2640] +🤸‍♂ कार्टह्विल गरिरहेको छोरा मान्छे // [1F938 200D 2642] +🤹‍♀ जग्लिङ गरिरहेको छोरी मान्छे // [1F939 200D 2640] +🤹‍♂ जग्लिङ गरिरहेको छोरा मान्छे // [1F939 200D 2642] +🤼‍♀ कुस्ती खेेलिरहेका छोरी मान्छेहरू // [1F93C 200D 2640] +🤼‍♂ कुस्ती खेलिरहेका छोरा मान्छेहरू // [1F93C 200D 2642] +🤽‍♀ वाटर पोलो खेेलिरहेको छोरी मान्छे // [1F93D 200D 2640] +🤽‍♂ वाटर पोलो खेलिरहेको छोरा मान्छे // [1F93D 200D 2642] +🤾‍♀ ह्यन्डबल खेेलिरहेकी छोरी मान्छे // [1F93E 200D 2640] +🤾‍♂ ह्यन्डबल खेलिरहेको छोरा मान्छे // [1F93E 200D 2642] +🧖‍♀ woman in steamy room // [1F9D6 200D 2640] (no translation) +🧖‍♂ man in steamy room // [1F9D6 200D 2642] (no translation) +🧗‍♀ woman climbing // [1F9D7 200D 2640] (no translation) +🧗‍♂ man climbing // [1F9D7 200D 2642] (no translation) +🧘‍♀ woman in lotus position // [1F9D8 200D 2640] (no translation) +🧘‍♂ man in lotus position // [1F9D8 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Gestures + +💁‍♀ सूूचना दिने छोरी मान्छे // [1F481 200D 2640] +💁‍♂ सूचना दिने छोरा मान्छे // [1F481 200D 2642] +🙅‍♀ ठीक नभएको संकेेत दिने छोरी मान्छे // [1F645 200D 2640] +🙅‍♂ ठीक नभएको संंकेत दिने छोरा मान्छे // [1F645 200D 2642] +🙆‍♀ ठीक भएको संंकेत दिने छोरी मान्छे // [1F646 200D 2640] +🙆‍♂ ठीक भएको संकेत दिने छोरा मान्छे // [1F646 200D 2642] +🙇‍♀ आदरभावलेे निहुरिरहेकी छोरी मान्छे // [1F647 200D 2640] +🙇‍♂ आदरभावले निहुरिरहेको छोरा मान्छे // [1F647 200D 2642] +🙋‍♀ हात उठाइरहेको छोरी मान्छे // [1F64B 200D 2640] +🙋‍♂ हात उठाइरहेको छोरा मान्छे // [1F64B 200D 2642] +🙍‍♀ आँँखा तरिरहेकी मान्छे // [1F64D 200D 2640] +🙍‍♂ आँखा तरिरहेको मान्छे // [1F64D 200D 2642] +🙎‍♀ थुतुुनो तेर्साइरहेकी छोरी मान्छे // [1F64E 200D 2640] +🙎‍♂ थुतुनो तेर्साइरहेको छोरो मान्छे // [1F64E 200D 2642] +🤦‍♀ चिन्तित छोरी मान्छे // [1F926 200D 2640] +🤦‍♂ चिन्तित छोरा मान्छे // [1F926 200D 2642] +🤷‍♀ वेेवास्ता जनाउने छोरी मान्छे // [1F937 200D 2640] +🤷‍♂ वेवास्ता जनाउने छोरा मान्छे // [1F937 200D 2642] + +// Emoji ZWJ Sequence: Other + +🏳‍🌈 इन्द्रेणी झण्डा // [1F3F3 200D 1F308] +👁‍🗨 आँखामा वाक्य बबल // [1F441 200D 1F5E8] + +// References: +// [UCD] Unicode Character Database 9.0.0 [http://www.unicode.org/Public/9.0.0/ucd/] +// [Emoji] Unicode Emoji 5.0 [http://www.unicode.org/Public/emoji/5.0/] +// [CLDR] Unicode Common Locale Data Repository 31.0.1 [http://cldr.unicode.org/index/downloads/cldr-31] +// +// Sources: +// 1. emoji-test.txt (Emoji) +// 2. common/annotations/ne.xml (CLDR) +// 3. emoji-zwj-sequences.txt (Emoji) From 8d07d2eacd177cacdbc32a0dff103bacaeb60818 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 16 Aug 2017 19:23:07 +0100 Subject: [PATCH 040/137] ta: (emoji) -- CLDR 31.0.1 emoji translations --- CHANGELOG.md | 1 + Makefile.am | 2 +- dictsource/ta_emoji | 1678 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1680 insertions(+), 1 deletion(-) create mode 100644 dictsource/ta_emoji diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d2a1983..574dcf4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -109,6 +109,7 @@ Unicode Emoji support (from the Unicode Emoji 5.0, and CLDR 31.0.1 data files): * sr (Serbian) * sv (Swedish) * sw (Swahili) +* ta (Tamil) * te (Telugu) * tr (Turkish) * ur (Urdu) diff --git a/Makefile.am b/Makefile.am index c1e50634..698b669b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -752,7 +752,7 @@ sw: espeak-ng-data/sw_dict espeak-ng-data/sw_dict: dictsource/sw_list dictsource/sw_rules dictsource/sw_extra dictsource/sw_emoji ta: espeak-ng-data/ta_dict -espeak-ng-data/ta_dict: dictsource/ta_list dictsource/ta_rules dictsource/ta_extra +espeak-ng-data/ta_dict: dictsource/ta_list dictsource/ta_rules dictsource/ta_extra dictsource/ta_emoji te: espeak-ng-data/te_dict espeak-ng-data/te_dict: dictsource/te_list dictsource/te_rules dictsource/te_extra dictsource/te_emoji diff --git a/dictsource/ta_emoji b/dictsource/ta_emoji new file mode 100644 index 00000000..63dc0258 --- /dev/null +++ b/dictsource/ta_emoji @@ -0,0 +1,1678 @@ +// Emoji and Other Symbol pronunciations for Tamil +// +// Entries with `text|emoji` in the comments have text and emoji forms. They +// can be followed by [FE0E] to select the text style, and [FE0F] to select +// the emoji style. +// +// NOTE: See `src/ucd-tools/data/espeak-ng/emoji-data.txt` for additional data +// in interpreting ZWJ emoji sequences. + +$textmode + +// 0080..00FF : C1 Controls and Latin-1 Supplement + +© பதிப்புரிமைச் சின்னம் // [00A9] text|emoji +® பதிவுசெய்யப்பட்டது // [00AE] text|emoji + +// 2000..203C : General Punctuation + +‼ இரட்டை ஆச்சர்யக் குறி // [203C] text|emoji +⁉ ஆச்சர்யக் குறியும் கேள்விக்குறியும் // [2049] text|emoji + +// 2100..214F : Letterlike Symbols + +™ வர்த்தக முத்திரை // [2122] text|emoji +ℹ தகவல் // [2139] text|emoji + +// 2190..21FF : Arrows + +↔ இடது-வலது நோக்கிய அம்புக்குறி // [2194] text|emoji +↕ மேல்-கீழ் நோக்கிய அம்புக்குறி // [2195] text|emoji +↖ மேல்-இடது நோக்கிய அம்புக்குறி // [2196] text|emoji +↗ மேல்-வலது நோக்கிய அம்புக்குறி // [2197] text|emoji +↘ கீழ்-வலது நோக்கிய அம்புக்குறி // [2198] text|emoji +↙ கீழ்-இடது நோக்கிய அம்புக்குறி // [2199] text|emoji +↩ இடப்பக்கம் வளைந்திருக்கும் வலது அம்புக்குறி // [21A9] text|emoji +↪ வலப்பக்கம் வளைந்திருக்கும் இடது அம்புக்குறி // [21AA] text|emoji + +// 2300..23FF : Miscellaneous Technical + +⌚ வாட்ச் // [231A] +⌛ மணற்கடிகாரம் // [231B] +⌨ விசைப்பலகை // [2328] text|emoji +⏏ வெளியேற்று பட்டன் // [23CF] text|emoji +⏩ ஃபாஸ்ட் ஃபார்வர்டு பட்டன் // [23E9] +⏪ இடப்பக்கத்தைச் சுட்டிக்காட்டும் இரட்டை முக்கோணம் // [23EA] +⏫ மேல்நோக்கிய இரட்டை முக்கோணம் // [23EB] +⏬ கீழே சுட்டிக்காட்டும் இரட்டை முக்கோணம் // [23EC] +⏭ அடுத்த டிராக் பட்டன் // [23ED] text|emoji +⏮ கடைசி டிராக் பட்டன் // [23EE] text|emoji +⏯ இயக்கு அல்லது நிறுத்து பட்டன் // [23EF] text|emoji +⏰ அலாரம் // [23F0] +⏱ ஸ்டாப்வாட்ச் // [23F1] text|emoji +⏲ டைமர் கடிகாரம் // [23F2] text|emoji +⏳ சரியும் மணலுடன் மணற்கடிகாரம் // [23F3] +⏸ இடை நிறுத்து பட்டன் // [23F8] text|emoji +⏹ நிறுத்து பட்டன் // [23F9] text|emoji +⏺ பதிவுசெய்வதற்கான பட்டன் // [23FA] text|emoji + +// 2460..24FF : Enclosed Alphanumerics + +Ⓜ எம் // [24C2] text|emoji + +// 25A0..25FF : Geometric Shapes + +▪ சிறிய கருப்பு சதுரம் // [25AA] text|emoji +▫ சிறிய வெள்ளை சதுரம் // [25AB] text|emoji +▶ இயக்கு பட்டன் // [25B6] text|emoji +◀ ரிவர்ஸ் பட்டன் // [25C0] text|emoji +◻ நடுத்தர வெள்ளை சதுரம் // [25FB] text|emoji +◼ நடுத்தர கருப்பு சதுரம் // [25FC] text|emoji +◽ நடுத்தரம்-சிறிய வெள்ளை சதுரம் // [25FD] +◾ நடுத்தரம்-சிறிய கருப்பு சதுரம் // [25FE] + +// 2600..26FF : Miscellaneous Symbols + +☀ சூரியன் // [2600] text|emoji +☁ மேகம் // [2601] text|emoji +☂ குடை // [2602] text|emoji +☃ ஸ்னோமேன் // [2603] text|emoji +☄ வால் நட்சத்திரம் // [2604] text|emoji +☎ தொலைபேசி // [260E] text|emoji +☑ டிக் செய்த வாக்குப் பெட்டி // [2611] text|emoji +☔ மழைத் துளிகளுடன் குடை // [2614] +☕ சூடான பானம் // [2615] +☘ முச்சிற்றிலை // [2618] text|emoji +☝ மேல் நோக்கி காட்டும் விரல் // [261D] text|emoji +☠ மண்டை ஓடும் குறுக்காக வைக்கப்பட்ட எலும்புத்துண்டுகளும் // [2620] text|emoji +☢ கதிரியக்கம் // [2622] text|emoji +☣ உயிரியல் ஆராய்ச்சியினால் ஏற்படும் தீமை // [2623] text|emoji +☦ ஆர்த்தோடாக்ஸ் சிலுவை // [2626] text|emoji +☪ இஸ்லாம் சின்னம் // [262A] text|emoji +☮ அமைதி சின்னம் // [262E] text|emoji +☯ யின் யாங் // [262F] text|emoji +☸ தர்மச் சக்கரம் // [2638] text|emoji +☹ வருத்தமாக இருக்கும் முகம் // [2639] text|emoji +☺ சிரித்த முகம் // [263A] text|emoji +♀ பெண்களைக் குறிக்கும் சின்னம் // [2640] text|emoji +♂ ஆண்களைக் குறிக்கும் சின்னம் // [2642] text|emoji +♈ மேஷம் // [2648] +♉ ரிஷபம் // [2649] +♊ மிதுனம் // [264A] +♋ கடகம் // [264B] +♌ சிம்மம் // [264C] +♍ கன்னி // [264D] +♎ துலாம் // [264E] +♏ விருச்சிகம் // [264F] +♐ தனுசு // [2650] +♑ மகரம் // [2651] +♒ கும்ப ராசி // [2652] +♓ மீனம் // [2653] +♠ ஸ்பேட் கார்டு // [2660] text|emoji +♣ கிளப் கார்டு // [2663] text|emoji +♥ ஹார்ட் கார்டு // [2665] text|emoji +♦ டைமன்ட் கார்டு // [2666] text|emoji +♨ ஹாட் ஸ்பிரிங்க்ஸ் // [2668] text|emoji +♻ மறுசுழற்சி // [267B] text|emoji +♿ சக்கர நாற்காலி // [267F] +⚒ சுத்தியும் களைஎடுத்தலும் // [2692] text|emoji +⚓ நங்கூரம் // [2693] +⚔ குறுக்காக வைக்கப்பட்ட வாள்கள் // [2694] text|emoji +⚕ மருத்துவச் சின்னம் // [2695] text|emoji +⚖ தராசு // [2696] text|emoji +⚗ அலெம்பிக் // [2697] text|emoji +⚙ கியர் // [2699] text|emoji +⚛ கோலம் // [269B] text|emoji +⚜ பூ // [269C] text|emoji +⚠ எச்சரிக்கை // [26A0] text|emoji +⚡ உயர் மின்னழுத்தம் // [26A1] +⚪ வெள்ளை வட்டம் // [26AA] +⚫ கருப்பு வட்டம் // [26AB] +⚰ பிணப்பெட்டி // [26B0] text|emoji +⚱ இறுதிச்சடங்கு ஜாடி // [26B1] text|emoji +⚽ கால்பந்து // [26BD] +⚾ பேஸ்பால் // [26BE] +⛄ பனிப்பொழிவு இல்லாத ஸ்னோமேன் // [26C4] +⛅ சூரியனை மேகம் மூடியிருக்கும் காட்சி // [26C5] +⛈ இடி மின்னலுடன் மழை // [26C8] text|emoji +⛎ ஓஃபியாகெஸ் // [26CE] +⛏ கோடரி // [26CF] text|emoji +⛑ வெள்ளை நிற கிராஸ் வரையப்பட்ட ஹெல்மெட் // [26D1] text|emoji +⛓ சங்கிலிகள் // [26D3] text|emoji +⛔ அனுமதி இல்லை // [26D4] +⛩ ஷிண்டோ ஸ்ரைன் // [26E9] text|emoji +⛪ தேவாலயம் // [26EA] +⛰ மலை // [26F0] text|emoji +⛱ தரையில் ஊன்றிய குடை // [26F1] text|emoji +⛲ நீருற்று // [26F2] +⛳ கோல்ஃப் கொடி // [26F3] +⛴ ஃபெர்ரி // [26F4] text|emoji +⛵ உலாப் படகு // [26F5] +⛷ பனிச்சறுக்கு வீரர் // [26F7] text|emoji +⛸ ஐஸ் ஸ்கேட் // [26F8] text|emoji +⛹ பந்தை தட்டும் விளையாட்டு வீரர் // [26F9] text|emoji +⛺ கூடாரம் // [26FA] +⛽ எரிவாயு நிலையம் // [26FD] + +// 2700..27BF : Dingbats + +✂ கத்திரிக்கோல் // [2702] text|emoji +✅ அடர்வெள்ளை நிற டிக் சின்னம் // [2705] +✈ விமானம் // [2708] text|emoji +✉ கடித உறை // [2709] text|emoji +✊ கைவிரலை மடக்குதல் // [270A] +✋ கையை உயர்த்தி காட்டுதல் // [270B] +✌ வெற்றிச் சின்னம் // [270C] text|emoji +✍ எழுதுதல் // [270D] text|emoji +✏ பென்சில் // [270F] text|emoji +✒ கருப்புநிறப் பேனா முனை // [2712] text|emoji +✔ கருப்பு நிற டிக் சின்னம் // [2714] text|emoji +✖ கருப்பு நிற பெருக்கல் சின்னம் // [2716] text|emoji +✝ லத்தீன் சிலுவை // [271D] text|emoji +✡ நட்சத்திரம் // [2721] text|emoji +✨ ஒளிரும் நட்சத்திரம் // [2728] +✳ எட்டு முனை உடுக்குறி // [2733] text|emoji +✴ எட்டு முனை நட்சத்திரம் // [2734] text|emoji +❄ உறைபனிச் சீவல் // [2744] text|emoji +❇ ஸ்பார்கில் // [2747] text|emoji +❌ பெருக்கல் குறி // [274C] +❎ சதுரத்திற்குள் பெருக்கல் குறி // [274E] +❓ கேள்விக் குறி, அடர் நிறக் கேள்விக் குறி // [2753] +❔ வெள்ளை நிறக் கேள்விக்குறி // [2754] +❕ வெள்ளை நிறக் ஆச்சரியக்குறி // [2755] +❗ ஆச்சர்யக் குறி // [2757] +❣ அளவுக்கதிகமான காதல் // [2763] text|emoji +❤ சிவப்புநிற இதயம் // [2764] text|emoji +➕ கருப்பு நிற கூட்டல் // [2795] +➖ கருப்பு நிற கழித்தல் // [2796] +➗ கருப்பு நிற வகுத்தல் // [2797] +➡ வலது நோக்கிய அம்புக்குறி // [27A1] text|emoji +➰ சுருள் வளைவு // [27B0] +➿ இரட்டை சுருள் வளைவு // [27BF] + +// 2900..297F : Supplemental Arrows-B + +⤴ மேல் நோக்கி வளைந்திருக்கும் வலது அம்புக்குறி // [2934] text|emoji +⤵ கீழ்நோக்கி வளைந்திருக்கும் வலது அம்புக்குறி // [2935] text|emoji + +// 2B00..2BFF : Miscellaneous Symbols and Arrows + +⬅ இடது நோக்கிய அம்புக்குறி // [2B05] text|emoji +⬆ மேல்நோக்கிய அம்புக்குறி // [2B06] text|emoji +⬇ கீழ் நோக்கிய அம்புக்குறி // [2B07] text|emoji +⬛ பெரிய கருப்பு சதுரம் // [2B1B] +⬜ பெரிய வெள்ளை சதுரம் // [2B1C] +⭐ வெள்ளை நிற நட்சத்திரம் // [2B50] +⭕ சிவப்பு நிற பெரிய வட்டம் // [2B55] + +// 3000..303F : CJK Symbols and Punctuation + +〰 அலை // [3030] text|emoji +〽 பகுதியளவு மாறும் சின்னம் // [303D] text|emoji + +// 3200..32FF : Enclosed CJK Letters and Months + +㊗ ஜப்பான் மொழியில் "வாழ்த்துகள்" என்று கூறும் பொத்தான் // [3297] text|emoji +㊙ ஜப்பான் மொழியில் "ரகசியம்" என்று கூறும் பொத்தான் // [3299] text|emoji + +// 1F100..1F1FF : Enclosed Alphanumeric Supplement + +🅰 இரத்த வகை A // [1F170] text|emoji +🅱 இரத்த வகை B // [1F171] text|emoji +🅾 இரத்த வகை O // [1F17E] text|emoji +🅿 பார்கிங் // [1F17F] text|emoji +🆎 இரத்த வகை AB // [1F18E] +🆑 சிஎல் // [1F191] +🆒 கூல் // [1F192] +🆓 இலவசம் // [1F193] +🆔 ஐடி // [1F194] +🆕 நியு // [1F195] +🆖 என்ஜி // [1F196] +🆗 ஓகே // [1F197] +🆘 எஸ்ஓஎஸ் // [1F198] +🆙 அப் // [1F199] +🆚 வெர்ஸஸ் // [1F19A] + +// 1F200..1F2FF : Enclosed Ideographic Supplement + +🈁 ஜப்பான் மொழியில் "இங்கே" என்று கூறும் பொத்தான் // [1F201] +🈂 ஜப்பான் மொழியில் "சேவைக் கட்டணம்" என்று கூறும் பொத்தான் // [1F202] text|emoji +🈚 ஜப்பான் மொழியில் "கட்டணமில்லா சேவை" என்று கூறும் பொத்தான் // [1F21A] +🈯 ஜப்பான் மொழியில் "முன்பதிவு செய்யப்பட்டது" என்று கூறும் பொத்தான்// [1F22F] +🈲 ஜப்பான் மொழியில் "தடை செய்யப்பட்டது" என்று கூறும் பொத்தான் // [1F232] +🈳 ஜப்பான் மொழியில் "ஆட்கள் தேவை" என்று கூறும் பொத்தான் // [1F233] +🈴 ஜப்பான் மொழியில் "தேர்ச்சிக்கான மதிப்பெண்" என்று கூறும் பொத்தான்// [1F234] +🈵 ஜப்பான் மொழியில் "காலியிடம் இல்லை" என்று கூறும் பொத்தான் // [1F235] +🈶 ஜப்பான் மொழியில் "கட்டணம் விதிக்கப்படும்" என்று கூறும் பொத்தான் // [1F236] +🈷 ஜப்பான் மொழியில் "மாதாந்திரத் தொகை" என்று கூறும் பொத்தான் // [1F237] text|emoji +🈸 ஜப்பான் மொழியில் "விண்ணப்பம்" என்று கூறும் பொத்தான் // [1F238] +🈹 ஜப்பான் மொழியில் "தள்ளுபடி" என்று கூறும் பொத்தான் // [1F239] +🈺 ஜப்பான் மொழியில் "வணிகம் செய்யலாம்" என்று கூறும் பொத்தான் // [1F23A] +🉐 ஜப்பான் மொழியில் "பேரம்" என்று கூறும் பொத்தான் // [1F250] +🉑 ஜப்பான் மொழியில் "ஏற்றுத்தக்கது" என்று கூறும் பொத்தான் // [1F251] + +// 1F000..1F02F : Mahjong Tiles + +🀄 மஹ்ஜோங் டைலில் ரெட் டிராகன் // [1F004] + +// 1F0A0..1F0FF : Playing Cards + +🃏 ஜோக்கர் // [1F0CF] + +// 1F300..1F5FF : Miscellaneous Symbols and Pictographs + +🌀 புயல் // [1F300] +🌁 பனிமூட்டம் // [1F301] +🌂 மூடிய குடை // [1F302] +🌃 நட்சத்திரங்கள் மிளிரும் இரவு நேர வானம் // [1F303] +🌄 உதயசூரியன் // [1F304] +🌅 சூரியோதயம் // [1F305] +🌆 சூரிய அஸ்தமனத்தின் போது நகரம் // [1F306] +🌇 சூரிய அஸ்தமனம் // [1F307] +🌈 வானவில் // [1F308] +🌉 இரவில் பாலம் // [1F309] +🌊 கடலலை // [1F30A] +🌋 எரிமலை // [1F30B] +🌌 பிரபஞ்சம் // [1F30C] +🌍 ஐரோப்பா-ஆப்பிரிக்கா // [1F30D] +🌎 அமெரிக்கா // [1F30E] +🌏 ஆசியா-ஆஸ்திரேலியா // [1F30F] +🌐 தீர்க்கரேகைகளுடன் உலக உருண்டை // [1F310] +🌑 அமாவசை // [1F311] +🌒 வளர்பிறை // [1F312] +🌓 அரைபாதி வளர்பிறை // [1F313] +🌔 முக்கால்பகுதி வளர்பிறை // [1F314] +🌕 பௌர்ணமி // [1F315] +🌖 கால்பகுதி தேய்பிறை // [1F316] +🌗 அரைபாதி தேய்பிறை // [1F317] +🌘 முக்கால்பகுதி தேய்பிறை // [1F318] +🌙 பிறைநிலவு // [1F319] +🌚 அமாவாசை முகம் // [1F31A] +🌛 அரைபாதி வளர்பிறை முகம் // [1F31B] +🌜 அரைபாதி தேய்பிறை முகம் // [1F31C] +🌝 முழுநிலா முகம் // [1F31D] +🌞 சூரிய முகம் // [1F31E] +🌟 ஒளி வீசும் நட்சத்திரம் // [1F31F] +🌠 எரிநட்சத்திரம் // [1F320] +🌡 வெப்பநிலைமானி // [1F321] text|emoji +🌤 சிறிய மேகத்திற்கு பின்னால் சூரியன் // [1F324] text|emoji +🌥 பெரிய மேகத்திற்கு பின்னால் சூரியன் // [1F325] text|emoji +🌦 மழை பெய்யும் மேகத்திற்கு பின்னால் சூரியன் // [1F326] text|emoji +🌧 மழைப்பொழியும் மேகம் // [1F327] text|emoji +🌨 பனிபொழிவுடன் மேகம் // [1F328] text|emoji +🌩 மின்னலுடன் மேகம் // [1F329] text|emoji +🌪 சூறாவளி // [1F32A] text|emoji +🌫 மூடுபனி // [1F32B] text|emoji +🌬 காற்று வீசும் காட்சி // [1F32C] text|emoji +🌭 ஹாட் டாக் // [1F32D] +🌮 டாகோ // [1F32E] +🌯 புரிட்டோ // [1F32F] +🌰 செஸ்ட்நட் // [1F330] +🌱 முளைக்கும் செடி // [1F331] +🌲 பசுமை மரம் // [1F332] +🌳 இலையுதிர் மரம் // [1F333] +🌴 ஈச்ச மரம் // [1F334] +🌵 கற்றாழை // [1F335] +🌶 மிளகாய் பெப்பர் // [1F336] text|emoji +🌷 பூவரசு // [1F337] +🌸 செர்ரி பிலாஸம் // [1F338] +🌹 ரோஜா // [1F339] +🌺 செம்பருத்தி // [1F33A] +🌻 சூரியகாந்தி // [1F33B] +🌼 மஞ்சள் மலர் // [1F33C] +🌽 சோளக்கதிர் // [1F33D] +🌾 நெற்கதிர் // [1F33E] +🌿 மூலிகை // [1F33F] +🍀 நான்கு இலை க்ளோவர் // [1F340] +🍁 மேப்பிள் இலை // [1F341] +🍂 உதிரும் இலைகள் // [1F342] +🍃 காற்றில் ஆடும் இலைகள் // [1F343] +🍄 காளான் // [1F344] +🍅 தக்காளி // [1F345] +🍆 கத்தரிக்காய் // [1F346] +🍇 திராட்சை // [1F347] +🍈 மெலன் // [1F348] +🍉 தர்பூசணி // [1F349] +🍊 ஆரஞ்சு // [1F34A] +🍋 எலுமிச்சை // [1F34B] +🍌 வாழைப்பழம் // [1F34C] +🍍 அன்னாசிப்பழம் // [1F34D] +🍎 ஆப்பிள் // [1F34E] +🍏 பச்சை ஆப்பிள் // [1F34F] +🍐 பேரிக்காய் // [1F350] +🍑 பீச் பழம் // [1F351] +🍒 செர்ரி பழம் // [1F352] +🍓 ஸ்ட்ராபெர்ரி // [1F353] +🍔 பர்கர் // [1F354] +🍕 பீட்சா // [1F355] +🍖 எலும்பு // [1F356] +🍗 சிக்கன் 65 // [1F357] +🍘 ரைஸ் கிராக்கர் // [1F358] +🍙 அரிசி பந்து // [1F359] +🍚 சோறு // [1F35A] +🍛 சோறும் குழம்பும் // [1F35B] +🍜 ஆவி பறக்கும் உணவு // [1F35C] +🍝 ஸ்பாகெட்டி // [1F35D] +🍞 பிரெட் // [1F35E] +🍟 ஃபிரென்ச் ஃப்ரைஸ் // [1F35F] +🍠 வறுத்த உருளைக்கிழங்கு // [1F360] +🍡 டேங்கோ // [1F361] +🍢 ஓடேன் // [1F362] +🍣 சுஷி // [1F363] +🍤 வறுத்த இறால் // [1F364] +🍥 சுருள் வடிவ ஃபிஷ் கேக் // [1F365] +🍦 கோன் ஐஸ் // [1F366] +🍧 சிரப் ஊற்றிய ஐஸ்கிரீம் // [1F367] +🍨 ஐஸ்கிரீம் // [1F368] +🍩 டோனட் // [1F369] +🍪 குக்கீ // [1F36A] +🍫 சாக்லேட் // [1F36B] +🍬 மிட்டாய் // [1F36C] +🍭 குச்சிமிட்டாய் // [1F36D] +🍮 கஸ்டர்டு // [1F36E] +🍯 தேன் பானை // [1F36F] +🍰 கேக் துண்டு // [1F370] +🍱 பென்டோ பாக்ஸ் // [1F371] +🍲 பாத்திரம் நிறைய உணவு // [1F372] +🍳 சமையல் // [1F373] +🍴 முள்கரண்டியும் கத்தியும் // [1F374] +🍵 கைப்பிடி இல்லாத தேனீர் கோப்பை // [1F375] +🍶 மது பாட்டிலும் கோப்பையும் // [1F376] +🍷 மதுக்கோப்பை // [1F377] +🍸 காக்டெயில் கிளாஸ் // [1F378] +🍹 பழச்சாறு // [1F379] +🍺 பீர் குவளை // [1F37A] +🍻 பீர் குவளைகள் // [1F37B] +🍼 ஃபீடிங் பாட்டில் // [1F37C] +🍽 தட்டுடன் முள்கரண்டியும் கத்தியும் // [1F37D] text|emoji +🍾 பீச்சடிக்கும் பாட்டில் // [1F37E] +🍿 பாப் காரன் // [1F37F] +🎀 ரிப்பன் // [1F380] +🎁 மூடப்பட்ட பரிசு // [1F381] +🎂 பிறந்தநாள் கேக் // [1F382] +🎃 பூசணிக்காய் முகம் // [1F383] +🎄 கிறிஸ்துமஸ் மரம் // [1F384] +🎅 கிறிஸ்துமஸ் தாத்தா // [1F385] +🎆 பட்டாசு // [1F386] +🎇 மத்தாப்பு // [1F387] +🎈 பலூன் // [1F388] +🎉 வண்ண வேடிக்கை // [1F389] +🎊 வண்ணக் காகிதங்களைத் தூவும் பந்து // [1F38A] +🎋 தனபதா மரம் // [1F38B] +🎌 குறுக்கே கட்டப்பட்ட கொடிகள் // [1F38C] +🎍 பைன் அலங்காரம் // [1F38D] +🎎 ஜப்பான் பொம்மைகள் // [1F38E] +🎏 கெண்டை மீன் பறக்கும் கொடி // [1F38F] +🎐 காற்றில் பறக்கும் மணி // [1F390] +🎑 அறுவடை உணவுகளை நிலவிற்குப் படைத்தல் // [1F391] +🎒 பள்ளிக்கூட பை // [1F392] +🎓 பட்டமளிப்புத் தொப்பி // [1F393] +🎖 இராணுவப் பதக்கம் // [1F396] text|emoji +🎗 ரிமைன்டர் ரிப்பன் // [1F397] text|emoji +🎙 ஸ்டூடியோ மைக்ரோஃபோன் // [1F399] text|emoji +🎚 லெவல் ஸ்லைடர் // [1F39A] text|emoji +🎛 கன்ட்ரோல் நோப்ஸ் // [1F39B] text|emoji +🎞 திரைப்பட ஃபிரேம்கள் // [1F39E] text|emoji +🎟 அட்மிஷன் டிக்கெட்டுகள் // [1F39F] text|emoji +🎠 கேராசூல் குதிரை // [1F3A0] +🎡 ஃபெர்ரிஸ் சக்கரம் // [1F3A1] +🎢 ரோலர் கோஸ்டர் // [1F3A2] +🎣 மீன் பிடித்தல் // [1F3A3] +🎤 மைக்ரோஃபோன் // [1F3A4] +🎥 மூவி கேமரா // [1F3A5] +🎦 சினிமா // [1F3A6] +🎧 ஹெட்ஃபோன் // [1F3A7] +🎨 வண்ணத் தட்டு // [1F3A8] +🎩 பெரிய தொப்பி // [1F3A9] +🎪 சர்க்கஸ் கூடாரம் // [1F3AA] +🎫 டிக்கெட் // [1F3AB] +🎬 கிளாப்பர் போர்டு // [1F3AC] +🎭 முக முடி // [1F3AD] +🎮 வீடியோ கேம் // [1F3AE] +🎯 சரியான குறி // [1F3AF] +🎰 ஸ்லாட் மிஷின் // [1F3B0] +🎱 பில்லியர்ட்ஸ் // [1F3B1] +🎲 பகடை விளையாட்டு // [1F3B2] +🎳 பந்தை பவுலிங் செய்தல் // [1F3B3] +🎴 விளையாட்டு சீட்டு // [1F3B4] +🎵 இசைக் குறிப்பு // [1F3B5] +🎶 இசைக் குறிப்புகள் // [1F3B6] +🎷 சாக்ஸபோன் // [1F3B7] +🎸 கிட்டார் // [1F3B8] +🎹 மியூசிக் கீபோர்ட் // [1F3B9] +🎺 டிரம்பட் // [1F3BA] +🎻 வயலின் // [1F3BB] +🎼 இசைக் கோர்ப்பு // [1F3BC] +🎽 ஓட்டப்பந்தயச் சட்டை // [1F3BD] +🎾 டென்னிஸ் // [1F3BE] +🎿 பனிச்சறுக்கு // [1F3BF] +🏀 கூடைப்பந்து // [1F3C0] +🏁 பந்தயக் கொடி // [1F3C1] +🏂 ஸ்னோபோர்டர் // [1F3C2] +🏃 ஓட்டம் // [1F3C3] +🏄 சர்பிங் செய்பவர் // [1F3C4] +🏅 விளையாட்டுப் பதக்கம் // [1F3C5] +🏆 வெற்றிக் கோப்பை // [1F3C6] +🏇 குதிரைப்பந்தயம் // [1F3C7] +🏈 அமெரிக்க கால்பந்து // [1F3C8] +🏉 ரக்பி கால்பந்து // [1F3C9] +🏊 நீந்துபவர் // [1F3CA] +🏋 எடைத் தூக்குபவர் // [1F3CB] text|emoji +🏌 கோல்ஃப் விளையாடுபவர் // [1F3CC] text|emoji +🏍 மோட்டார் சைக்கிள் // [1F3CD] text|emoji +🏎 கார் பந்தயம் // [1F3CE] text|emoji +🏏 கிரிக்கெட் // [1F3CF] +🏐 வாலிபால் // [1F3D0] +🏑 ஹாக்கி // [1F3D1] +🏒 ஹாக்கி மட்டை // [1F3D2] +🏓 பிங்க் பாங்க் // [1F3D3] +🏔 பனி சூழ்ந்த மலை // [1F3D4] text|emoji +🏕 முகாமிடுதல் // [1F3D5] text|emoji +🏖 கடற்கரையில் குடையுடன் // [1F3D6] text|emoji +🏗 கட்டிடம் கட்டுதல் // [1F3D7] text|emoji +🏘 வீடுகள் // [1F3D8] text|emoji +🏙 நகர அமைப்பு // [1F3D9] text|emoji +🏚 யாரும் இல்லாமல் மோசமான நிலையில் இருக்கும் வீடு // [1F3DA] text|emoji +🏛 பழைமை வாய்ந்த கட்டிடம் // [1F3DB] text|emoji +🏜 பாலைவனம் // [1F3DC] text|emoji +🏝 பாலைவனத் தீவு // [1F3DD] text|emoji +🏞 தேசியப் பூங்கா // [1F3DE] text|emoji +🏟 மைதானம் // [1F3DF] text|emoji +🏠 வீடு // [1F3E0] +🏡 தோட்டத்துடன் வீடு // [1F3E1] +🏢 அலுவலகக் கட்டிடம் // [1F3E2] +🏣 ஜப்பான் நாட்டின் அஞ்சல் அலுவலகம் // [1F3E3] +🏤 அஞ்சல் அலுவலகம் // [1F3E4] +🏥 மருத்துவமனை // [1F3E5] +🏦 வங்கி // [1F3E6] +🏧 ஏடிஎம் // [1F3E7] +🏨 ஹோட்டல் // [1F3E8] +🏩 லவ் ஹோட்டல் // [1F3E9] +🏪 சிறிய மார்க்கெட் // [1F3EA] +🏫 பள்ளிக்கூடம் // [1F3EB] +🏬 டிமார்ட்மென்டல் ஸ்டோர் // [1F3EC] +🏭 தொழிற்சாலை // [1F3ED] +🏮 சிவப்பு நிற விளக்கு // [1F3EE] +🏯 ஜப்பான் பாணி அரண்மனை // [1F3EF] +🏰 கோட்டை // [1F3F0] +🏳 அசைக்கும் வெள்ளைக் கொடி // [1F3F3] text|emoji +🏴 அசைக்கும் கருப்புக் கொடி // [1F3F4] +🏵 வட்டவடிவப் பூ // [1F3F5] text|emoji +🏷 லேபிள் // [1F3F7] text|emoji +🏸 பேட்மிண்டன் // [1F3F8] +🏹 வில்லும் அம்பும் // [1F3F9] +🏺 கும்பம் // [1F3FA] +🏻 வகை 1–2 // [1F3FB] +🏼 வகை 3 // [1F3FC] +🏽 வகை 4 // [1F3FD] +🏾 வகை 5 // [1F3FE] +🏿 வகை 6 // [1F3FF] +🐀 எலி // [1F400] +🐁 சுண்டெலி // [1F401] +🐂 எருது // [1F402] +🐃 நீர் எருமை // [1F403] +🐄 பசு // [1F404] +🐅 புலி // [1F405] +🐆 சிறுத்தை // [1F406] +🐇 முயல் // [1F407] +🐈 பூனை // [1F408] +🐉 டிராகன் // [1F409] +🐊 முதலை // [1F40A] +🐋 திமிங்கலம் // [1F40B] +🐌 நத்தை // [1F40C] +🐍 பாம்பு // [1F40D] +🐎 குதிரை // [1F40E] +🐏 செம்மறி கிடா // [1F40F] +🐐 ஆடு // [1F410] +🐑 செம்மறி ஆடு // [1F411] +🐒 குரங்கு // [1F412] +🐓 சேவல் // [1F413] +🐔 கோழிக்குஞ்சு // [1F414] +🐕 நாய் // [1F415] +🐖 பன்றி // [1F416] +🐗 ஆண்பன்றி // [1F417] +🐘 யானை // [1F418] +🐙 ஆக்டோபஸ் // [1F419] +🐚 சங்கு // [1F41A] +🐛 மூட்டைப் பூச்சி // [1F41B] +🐜 எறும்பு // [1F41C] +🐝 தேனீ // [1F41D] +🐞 பெண் வண்டு // [1F41E] +🐟 மீன் // [1F41F] +🐠 நன்னீர் மீன் // [1F420] +🐡 ஊதிப்பெருக்கமடையும் மீன் // [1F421] +🐢 ஆமை // [1F422] +🐣 முட்டையிலிருந்து வெளிவரும் குஞ்சு // [1F423] +🐤 கோழி குஞ்சு முகம் // [1F424] +🐥 நேருக்கு நேர் பார்க்கும் கோழி குஞ்சு // [1F425] +🐦 பறவை // [1F426] +🐧 பென்குயின் // [1F427] +🐨 கோவாலா // [1F428] +🐩 பூடில் // [1F429] +🐪 ஒட்டகம் // [1F42A] +🐫 இரு திமில் கொண்ட ஒட்டகம் // [1F42B] +🐬 டால்பின் // [1F42C] +🐭 சுண்டெலி முகம் // [1F42D] +🐮 பசு முகம் // [1F42E] +🐯 புலி முகம் // [1F42F] +🐰 முயல் முகம் // [1F430] +🐱 பூனை முகம் // [1F431] +🐲 டிராகன் முகம் // [1F432] +🐳 தண்ணீரைப் பீய்ச்சி அடிக்கும் திமிங்கலம் // [1F433] +🐴 குதிரை முகம் // [1F434] +🐵 குரங்கு முகம் // [1F435] +🐶 நாய் முகம் // [1F436] +🐷 பன்றி முகம் // [1F437] +🐸 தவளை முகம் // [1F438] +🐹 வெள்ளெலி முகம் // [1F439] +🐺 ஓநாய் முகம் // [1F43A] +🐻 கரடி முகம் // [1F43B] +🐼 பான்டா முகம் // [1F43C] +🐽 பன்றி மூக்கு // [1F43D] +🐾 விலங்கின் பாதத்தடம் // [1F43E] +🐿 சிப்மங்க் // [1F43F] text|emoji +👀 கண்கள் // [1F440] +👁 கண் // [1F441] text|emoji +👂 காது // [1F442] +👃 மூக்கு // [1F443] +👄 வாய் // [1F444] +👅 நாக்கு // [1F445] +👆 மேல் நோக்கி காட்டும் விரலின் பின்பக்கம் // [1F446] +👇 கீழ் நோக்கி காட்டும் விரலின் பின்பக்கம் // [1F447] +👈 இடது நோக்கி காட்டும் விரல் // [1F448] +👉 வலது நோக்கி காட்டும் விரல் // [1F449] +👊 குத்திவிடுவேன் // [1F44A] +👋 கையசைத்தல் // [1F44B] +👌 சரி சின்னம் // [1F44C] +👍 சூப்பர் // [1F44D] +👎 பிடிக்கவில்லை // [1F44E] +👏 கைதட்டல் // [1F44F] +👐 கைகளை விரித்தல் // [1F450] +👑 கிரீடம் // [1F451] +👒 பெண்கள் தொப்பி // [1F452] +👓 மூக்குக் கண்ணாடிகள் // [1F453] +👔 கழுத்து டை // [1F454] +👕 டி-சர்ட் // [1F455] +👖 ஜீன்ஸ் // [1F456] +👗 ஆடை // [1F457] +👘 கிமோனோ // [1F458] +👙 நீச்சலாடை // [1F459] +👚 பெண்களின் ஆடைகள் // [1F45A] +👛 பர்ஸ் // [1F45B] +👜 ஹேண்ட் பேக் // [1F45C] +👝 பவுச் // [1F45D] +👞 ஆண்களுக்கான ஷூ // [1F45E] +👟 தடகள வீரர்களுக்கான ஷூ // [1F45F] +👠 குத்துக்கால் செருப்பு // [1F460] +👡 பெண்கள் செருப்பு // [1F461] +👢 பெண்கள் பூட் // [1F462] +👣 காலடித் தடம் // [1F463] +👤 மார்பளவு வரை நிழல் // [1F464] +👥 மார்பளவு வரை நிழல்கள் // [1F465] +👦 சிறுவன் // [1F466] +👧 சிறுமி // [1F467] +👨 ஆண் // [1F468] +👩 பெண் // [1F469] +👪 குடும்பம் // [1F46A] +👫 கைகோர்த்த ஆணும் பெண்ணும் // [1F46B] +👬 கைகோர்த்த இரு ஆண்கள் // [1F46C] +👭 கைகோர்த்த இரு பெண்கள் // [1F46D] +👮 காவல்துறை அதிகாரி // [1F46E] +👯 பார்ட்டிக்குச் செல்லும் பெண்கள் // [1F46F] +👰 முக்காடு அணிந்த மணமகள் // [1F470] +👱 பொன் நிறத்தில் முடி கொண்டவர் // [1F471] +👲 சீனத் தொப்பி அணிந்தவர் // [1F472] +👳 தலைப்பாகை அணிந்தவர் // [1F473] +👴 வயதான ஆண் // [1F474] +👵 வயதான பெண் // [1F475] +👶 குழந்தை // [1F476] +👷 கட்டுமான தொழிலாளி // [1F477] +👸 இளவரசி // [1F478] +👹 பயமுறுத்தும் முகம் // [1F479] +👺 ஜாப்பனீஸ் பூதம் // [1F47A] +👻 பேய் // [1F47B] +👼 குழந்தை ஏஞ்சல் // [1F47C] +👽 ஏலியன் // [1F47D] +👾 ஏலியன் மான்ஸ்டர் // [1F47E] +👿 வருத்தத்துடன் இருக்கும் பேய் // [1F47F] +💀 மண்டை ஓடு // [1F480] +💁 வரவேற்பாளினி // [1F481] +💂 பாதுகாவலர் // [1F482] +💃 நடனம் // [1F483] +💄 லிப்ஸ்டிக் // [1F484] +💅 நகச்சாயம் // [1F485] +💆 முக மசாஜ் // [1F486] +💇 முடித்திருத்தம் // [1F487] +💈 பார்பர் ஃபோல் // [1F488] +💉 ஊசி // [1F489] +💊 மாத்திரை // [1F48A] +💋 முத்தம் // [1F48B] +💌 காதல் கடிதம் // [1F48C] +💍 மோதிரம் // [1F48D] +💎 ரத்தினம் // [1F48E] +💏 முத்தமிடுதல் // [1F48F] +💐 மலர்க்கொத்து // [1F490] +💑 காதலர்கள் // [1F491] +💒 திருமண தேவாலயம் // [1F492] +💓 துடிக்கும் இதயம் // [1F493] +💔 காதல் தோல்வி இதயம் // [1F494] +💕 இரு இதயங்கள் // [1F495] +💖 ஜொலிக்கும் இதயம் // [1F496] +💗 படபடக்கும் இதயம் // [1F497] +💘 காதல் இதயம் // [1F498] +💙 நீல நிற இதயம் // [1F499] +💚 பச்சை நிற இதயம் // [1F49A] +💛 மஞ்சள் நிற இதயம் // [1F49B] +💜 பர்பிள் நிற இதயம் // [1F49C] +💝 ரிப்பன் கட்டிய இதயம் // [1F49D] +💞 சுற்றும் இதயங்கள் // [1F49E] +💟 அலங்கரிக்கப்பட்ட இதயம் // [1F49F] +💠 பூ இதழ் வைர வடிவம் // [1F4A0] +💡 மின்விளக்கு // [1F4A1] +💢 கோபம் // [1F4A2] +💣 வெடிபொருள் // [1F4A3] +💤 தூக்கம் // [1F4A4] +💥 வெடித்தல் // [1F4A5] +💦 வியர்வைத் துளிகள் // [1F4A6] +💧 வியர்வை // [1F4A7] +💨 காற்றடிக்கும் சின்னம் // [1F4A8] +💩 சாணக் குவியல் // [1F4A9] +💪 வலுவான தசைகள் // [1F4AA] +💫 சுற்றல் // [1F4AB] +💬 பேச்சு வடிவ பலூன் // [1F4AC] +💭 சிந்தனை பலூன் // [1F4AD] +💮 வெள்ளைநிறப் பூ // [1F4AE] +💯 நூற்றுக்கு நூறு // [1F4AF] +💰 பணப்பை // [1F4B0] +💱 நாணயப் பரிமாற்றம் // [1F4B1] +💲 தடிமனான டாலர் சின்னம் // [1F4B2] +💳 கிரெடிட் கார்டு // [1F4B3] +💴 யென் நோட்டு // [1F4B4] +💵 டாலர் நோட்டு // [1F4B5] +💶 யூரோ நோட்டு // [1F4B6] +💷 பவுண்ட் நோட்டு // [1F4B7] +💸 பறக்கும் பணம் // [1F4B8] +💹 வளரும் பங்குச்சந்தை // [1F4B9] +💺 நாற்காலி // [1F4BA] +💻 லேப்டாப் கணினி // [1F4BB] +💼 சூட்கேஸ் // [1F4BC] +💽 மினி டிஸ்க் // [1F4BD] +💾 பிளாப்பி டிஸ்க் // [1F4BE] +💿 ஆப்டிகல் டிஸ்க் // [1F4BF] +📀 டிவிடி // [1F4C0] +📁 பைல் ஃபோல்டர் // [1F4C1] +📂 திறந்த பைல் ஃபோல்டர் // [1F4C2] +📃 கீழே சுருட்டிய பக்கம் // [1F4C3] +📄 நேர் ஆவணம் // [1F4C4] +📅 நாள்காட்டி // [1F4C5] +📆 தேதியைக் கிழித்தல் // [1F4C6] +📇 கார்டு இன்டெக்ஸ் // [1F4C7] +📈 வளர்ச்சி // [1F4C8] +📉 வீழ்ச்சி // [1F4C9] +📊 பட்டை வரைபடம் // [1F4CA] +📋 பரீட்சை அட்டை // [1F4CB] +📌 பின் // [1F4CC] +📍 குண்டூசி // [1F4CD] +📎 பேப்பர் கிளிப் // [1F4CE] +📏 அளவுகோல் // [1F4CF] +📐 முக்கோணமானி // [1F4D0] +📑 புக்மார்க் டேப்ஸ் // [1F4D1] +📒 லெட்ஜெர் // [1F4D2] +📓 நோட்டுப்புத்தகம் // [1F4D3] +📔 அழகான கவர் போடப்பட்ட நோட்டு // [1F4D4] +📕 மூடிய புத்தகம் // [1F4D5] +📖 திறந்த புத்தகம் // [1F4D6] +📗 பச்சை புத்தகம் // [1F4D7] +📘 நீலப் புத்தகம் // [1F4D8] +📙 ஆரஞ்சு புத்தகம் // [1F4D9] +📚 புத்தகங்கள் // [1F4DA] +📛 நேம் பேட்ஜ் // [1F4DB] +📜 சுருள் // [1F4DC] +📝 மெமோ // [1F4DD] +📞 டெலிபோன் ரிசீவர் // [1F4DE] +📟 பேஜர் // [1F4DF] +📠 பேக்ஸ் // [1F4E0] +📡 சாட்டிலைட் ஆன்டனா // [1F4E1] +📢 பொது அறிவிப்பு // [1F4E2] +📣 மெகாபோன் // [1F4E3] +📤 அவுட்பாக்ஸ் தட்டு // [1F4E4] +📥 இன்பாக்ஸ் தட்டு // [1F4E5] +📦 பேக்கேஜ் // [1F4E6] +📧 ஈமெயில் // [1F4E7] +📨 பெற்ற மெயில் // [1F4E8] +📩 அம்புக்குறியுடன் கடித உறை // [1F4E9] +📪 அஞ்சல் எதுவுமில்லாத தபால் பெட்டி // [1F4EA] +📫 அஞ்சல் இருப்பதைக் காட்டும் தபால் பெட்டி // [1F4EB] +📬 அஞ்சலுடன் திறக்கப்பட்ட நிலையில் இருக்கும் தபால் பெட்டி // [1F4EC] +📭 அஞ்சல் எதுவுமில்லாத திறந்த நிலையில் இருக்கும் தபால் பெட்டி // [1F4ED] +📮 தபால் பெட்டி // [1F4EE] +📯 போஸ்டல் ஹார்ன் // [1F4EF] +📰 செய்தித்தாள் // [1F4F0] +📱 மொபைல் // [1F4F1] +📲 அம்புக்குறியுடன் செல்போன் // [1F4F2] +📳 அதிர்வு // [1F4F3] +📴 மொபைல் ஆஃப் // [1F4F4] +📵 செல் பயன்படுத்தக்கூடாது // [1F4F5] +📶 சிக்னல்கள் // [1F4F6] +📷 கேமரா // [1F4F7] +📸 பிளாஷ் அடிக்கும் கேமரா // [1F4F8] +📹 வீடியோ கேமரா // [1F4F9] +📺 தொலைக்காட்சி // [1F4FA] +📻 ரேடியோ // [1F4FB] +📼 வீடியோ கேசட் // [1F4FC] +📽 பிலிம் புரோஜெக்டர் // [1F4FD] text|emoji +📿 வழிபடுவதற்குப் பயன்படும் பாசிமணிகள் // [1F4FF] +🔀 குறுக்கு அம்புக்குறிகள் // [1F500] +🔁 வலஞ்சுழி அம்புக்குறிகள் // [1F501] +🔂 எண் 1 கொண்ட வலஞ்சுழி அம்புக்குறிகள் // [1F502] +🔃 வலஞ்சுழி அம்புக்குறிகள் பொத்தான் // [1F503] +🔄 இடஞ்சுழி அம்புக்குறிகள் பொத்தான் // [1F504] +🔅 மங்கல் பட்டன் // [1F505] +🔆 பிரகாசம் // [1F506] +🔇 ஸ்பீக்கர் ஆஃப் // [1F507] +🔈 ஸ்பீக்கர் // [1F508] +🔉 ஸ்பீக்கர் ஆன் // [1F509] +🔊 அலறும் ஸ்பீக்கர் // [1F50A] +🔋 பேட்டரி // [1F50B] +🔌 பிளக் // [1F50C] +🔍 இடது சாய்வு லென்ஸ் // [1F50D] +🔎 வலது சாய்வு லென்ஸ் // [1F50E] +🔏 பேனாவுடன் பூட்டு // [1F50F] +🔐 பூட்டும் சாவியும் // [1F510] +🔑 சாவி // [1F511] +🔒 பூட்டு // [1F512] +🔓 திறந்த பூட்டு // [1F513] +🔔 மணி // [1F514] +🔕 சத்தம் போடக்கூடாது // [1F515] +🔖 புக்மார்க் // [1F516] +🔗 இரு வளையங்கள் // [1F517] +🔘 ரேடியோ பட்டன் // [1F518] +🔙 பின்னால் செல் // [1F519] +🔚 முடிவு // [1F51A] +🔛 ஆன் // [1F51B] +🔜 சீக்கிரம் // [1F51C] +🔝 மேல் // [1F51D] +🔞 18 வயதுக்கு குறைவானவர்களுக்கு அனுமதியில்லை // [1F51E] +🔟 பத்து // [1F51F] +🔠 லத்தீன் பேரேழுத்து // [1F520] +🔡 லத்தீன் சிற்றெழுத்து // [1F521] +🔢 எண்கள் // [1F522] +🔣 குறியீடுகள் // [1F523] +🔤 லத்தீன் எழுத்து // [1F524] +🔥 தீ // [1F525] +🔦 டார்ச் லைட் // [1F526] +🔧 இடுக்கி // [1F527] +🔨 சுத்தி // [1F528] +🔩 நட்டு மற்றும் போல்ட் // [1F529] +🔪 சமையல் கத்தி // [1F52A] +🔫 துப்பாக்கி // [1F52B] +🔬 மைக்ரோஸ்கோப் // [1F52C] +🔭 டெலஸ்கோப் // [1F52D] +🔮 கண்ணாடி பந்து // [1F52E] +🔯 ஆறு முனை நட்சத்திரம் // [1F52F] +🔰 புதியவர் என்பதைக் காட்டும் ஜப்பான் சின்னம் // [1F530] +🔱 திரிசூலம் // [1F531] +🔲 கருப்பு சதுரப் பட்டன் // [1F532] +🔳 வெள்ளை சதுர பட்டன் // [1F533] +🔴 சிவப்பு வட்டம் // [1F534] +🔵 நீல வட்டம் // [1F535] +🔶 பெரிய ஆரஞ்சு வைரம் // [1F536] +🔷 பெரிய நீல வைரம் // [1F537] +🔸 சிறிய ஆரஞ்சு வைரம் // [1F538] +🔹 சிறிய நீல வைரம் // [1F539] +🔺 மேல்நோக்கிய சிவப்பு முக்கோணம் // [1F53A] +🔻 கீழ்நோக்கிய சிவப்பு முக்கோணம் // [1F53B] +🔼 மேல்நோக்கிய முக்கோணம் // [1F53C] +🔽 கீழ்நோக்கிய முக்கோணம் // [1F53D] +🕉 ஓம் // [1F549] text|emoji +🕊 மணிப்புறா // [1F54A] text|emoji +🕋 காபா // [1F54B] +🕌 மசூதி // [1F54C] +🕍 ஜெப ஆலயம் // [1F54D] +🕎 மெழுகுவர்த்தி ஸ்டிக் // [1F54E] +🕐 ஒரு மணி // [1F550] +🕑 இரண்டு மணி // [1F551] +🕒 மூன்று மணி // [1F552] +🕓 நான்கு மணி // [1F553] +🕔 ஐந்து மணி // [1F554] +🕕 ஆறு மணி // [1F555] +🕖 ஏழு மணி // [1F556] +🕗 எட்டு மணி // [1F557] +🕘 ஒன்பது மணி // [1F558] +🕙 பத்து மணி // [1F559] +🕚 பதினோரு மணி // [1F55A] +🕛 பன்னிரண்டு மணி // [1F55B] +🕜 ஒன்றரை மணி // [1F55C] +🕝 இரண்டரை மணி // [1F55D] +🕞 மூன்றரை மணி // [1F55E] +🕟 நான்கரை மணி // [1F55F] +🕠 ஐந்தரை மணி // [1F560] +🕡 ஆறரை மணி // [1F561] +🕢 ஏழரை மணி // [1F562] +🕣 எட்டரை மணி // [1F563] +🕤 ஒன்பதரை மணி // [1F564] +🕥 பத்தரை மணி // [1F565] +🕦 பதினொன்றரை மணி // [1F566] +🕧 பன்னிரண்டரை மணி // [1F567] +🕯 மெழுகுவர்த்தி // [1F56F] text|emoji +🕰 மான்டேல் பீஸ் கடிகாரம் // [1F570] text|emoji +🕳 குழி // [1F573] text|emoji +🕴 வணிகம் செய்பவர் // [1F574] text|emoji +🕵 துப்பறியும் நிபுணர் // [1F575] text|emoji +🕶 சன்கிளாசஸ் // [1F576] text|emoji +🕷 சிலந்தி // [1F577] text|emoji +🕸 சிலந்தி வலை // [1F578] text|emoji +🕹 ஜாய் ஸ்டிக் // [1F579] text|emoji +🕺 நடனமாடும் மனிதன் // [1F57A] +🖇 இணைக்கப்பட்ட பேப்பர் கிளிப்கள் // [1F587] text|emoji +🖊 பேனா // [1F58A] text|emoji +🖋 பவுண்டைன் பேனா // [1F58B] text|emoji +🖌 பெயின்ட் பிரஷ் // [1F58C] text|emoji +🖍 கிரேயன் // [1F58D] text|emoji +🖐 ஐந்து விரல்களும் நீட்டப்பட்ட நிலையில் உயர்த்திய கை // [1F590] text|emoji +🖕 நடு விரல் // [1F595] +🖖 உல்கேன் சல்யூட் // [1F596] +🖤 கோபமான பெண் // [1F5A4] +🖥 டெஸ்க்டாப் கணினி // [1F5A5] text|emoji +🖨 பிரிண்டர் // [1F5A8] text|emoji +🖱 கணினி மவுஸ் // [1F5B1] text|emoji +🖲 டிராக்பால் // [1F5B2] text|emoji +🖼 ஃபிரேமுடன் படம் // [1F5BC] text|emoji +🗂 கார்டு இன்டேக்ஸ் டிவைடர்ஸ் // [1F5C2] text|emoji +🗃 கார்டு பைல் பாக்ஸ் // [1F5C3] text|emoji +🗄 பைல் கேபினட் // [1F5C4] text|emoji +🗑 குப்பைத் தொட்டி // [1F5D1] text|emoji +🗒 ஸ்பைரல் நோட்பேடு // [1F5D2] text|emoji +🗓 ஸ்பைரல் கேலெண்டர் // [1F5D3] text|emoji +🗜 கம்ப்ரஷன் கருவி // [1F5DC] text|emoji +🗝 பழையச் சாவி // [1F5DD] text|emoji +🗞 சுருட்டி மடிக்கப்பட்ட செய்தித்தாள் // [1F5DE] text|emoji +🗡 பட்டாக் கத்தி // [1F5E1] text|emoji +🗣 தலைமைப் பேச்சாளர் // [1F5E3] text|emoji +🗨 இடது புற பேச்சுவடிவக் குமிழ் // [1F5E8] text|emoji +🗯 வலது புற கோபக் குமிழ் // [1F5EF] text|emoji +🗳 ஓட்டுடன் வாக்குப் பெட்டி // [1F5F3] text|emoji +🗺 உலக வரைபடம் // [1F5FA] text|emoji +🗻 எவரெஸ்ட் // [1F5FB] +🗼 டோக்கியோ டவர் // [1F5FC] +🗽 சுதந்திர தேவி சிலை // [1F5FD] +🗾 ஜப்பான் வரைபடம் // [1F5FE] +🗿 மோயை மனித முகம் // [1F5FF] + +// 1F600..1F64F : Emoticons + +😀 புன்னகைக்கும் முகம் // [1F600] +😁 சிரித்த கண்களுடன் புன்னகைக்கும் முகம் // [1F601] +😂 ஆனந்தக் கண்ணீர் சிந்தும் முகம் // [1F602] +😃 வாய் நிறைய சிரிக்கும் முகம் // [1F603] +😄 வாய் நிறைய புன்னகையுடன் புன்னகைக்கும் கண்கள் கொண்ட முகம் // [1F604] +😅 வாய் நிறைய சிரிப்புடன், வியர்வை சொட்டும் முகம் // [1F605] +😆 வாய் நிறைய புன்னகையுடன் கண்களை இறுக்கமாக மூடிக்கொண்ட முகம் // [1F606] +😇 ஒளிவட்டத்துடன் சிரித்த முகம் // [1F607] +😈 கொம்புகளுடன் சிரிக்கும் பேய் முகம் // [1F608] +😉 கண்ணடிக்கும் முகம் // [1F609] +😊 சிரிக்கும் கண்களுடன் சிரித்த முகம் // [1F60A] +😋 ருசியான உணவு சுவைக்கும் முகம் // [1F60B] +😌 நிம்மதியான முகம் // [1F60C] +😍 இதய வடிவிலான கண்களுடன் கூடிய சிரித்த முகம் // [1F60D] +😎 சன்கிளாஸ் அணிந்த சிரித்த முகம் // [1F60E] +😏 பகட்டாகச் சிரிக்கும் முகம் // [1F60F] +😐 வாயை நேராக இறுக்கமாக மூடிய முகம் // [1F610] +😑 உணர்ச்சியற்ற முகம் // [1F611] +😒 அதிருப்தி முகம் // [1F612] +😓 திறந்த வாயுடன், வியர்வைச் சொட்டும் முகம் // [1F613] +😔 ஆழ்ந்த கவலையில் இருக்கும் முகம் // [1F614] +😕 குழம்பிய முகம் // [1F615] +😖 குழம்பித் தவிக்கும் முகம் // [1F616] +😗 முத்தமிடும் முகம் // [1F617] +😘 பறக்கும் முத்தமிடும் முகம் // [1F618] +😙 சிரித்த கண்களுடன் முத்தமிடும் முகம் // [1F619] +😚 கண்களை மூடிக்கொண்டு முத்தமிடும் முகம் // [1F61A] +😛 நாக்கை வெளித்தள்ளி கேலி செய்யும் முகம் // [1F61B] +😜 நாக்கை வெளித்தள்ளிய படி கண்சிமிட்டும் முகம் // [1F61C] +😝 நாக்கை வெளித்தள்ளிய படி கண்களை மூடிக்கொண்டு கேலி செய்யும் முகம் // [1F61D] +😞 ஏமாற்றமடைந்த முகம் // [1F61E] +😟 கவலை தோய்ந்த முகம் // [1F61F] +😠 கோப முகம் // [1F620] +😡 ஆவேசமான முகம் // [1F621] +😢 அழுகை முகம் // [1F622] +😣 உதவியில்லாமல் இருப்பதை வெளிப்படுத்தும் முகம் // [1F623] +😤 வெற்றியின் மகிழ்ச்சியில் பெருமூச்சு விடும் முகம் // [1F624] +😥 ஏமாற்றமடைந்திருந்தாலும் நிம்மதியை வெளிப்படுத்தும் முகம் // [1F625] +😦 கண்களும் வாயும் திறந்த நிலையில் இருக்கும் முகம் // [1F626] +😧 அதிர்ச்சி முகம் // [1F627] +😨 பயந்த முகம் // [1F628] +😩 மிகவும் பயந்த முகம் // [1F629] +😪 தூக்கக் கலக்கம் // [1F62A] +😫 சோர்வு முகம் // [1F62B] +😬 பற்களைக் கடிக்கும் முகம் // [1F62C] +😭 சத்தமாக அழும் முகம் // [1F62D] +😮 திறந்த வாயுடன் முகம் // [1F62E] +😯 ஆச்சரியத்தை வெளிப்படுத்தும் முகம் // [1F62F] +😰 திறந்த வாயுடன் வியர்வைச் சொட்டும் முகம் // [1F630] +😱 பயத்தில் அலறும் முகம் // [1F631] +😲 அதிர்ச்சியை வெளிப்படுத்தும் முகம் // [1F632] +😳 திகைப்பைக் காட்டு முகம் // [1F633] +😴 தூங்கும் முகம் // [1F634] +😵 தலைச்சுற்றும் முகம் // [1F635] +😶 வாய் இல்லாத முகம் // [1F636] +😷 மருத்துவ மாஸ்க் அணிந்த முகம் // [1F637] +😸 சிரிக்கும் கண்களுடன் புன்னகைக்கும் பூனை முகம் // [1F638] +😹 ஆனந்தக்கண்ணீர் சிந்தும் பூனை முகம் // [1F639] +😺 திறந்த வாயுடன் சிரிக்கும் பூனை முகம் // [1F63A] +😻 இதய வடிவ கண்களால் சிரிக்கும் பூனை முகம் // [1F63B] +😼 வருத்தமான புன்னகை சிந்தும் பூனை முகம் // [1F63C] +😽 கண்களை மூடிக்கொண்டு முத்தமிடும் பூனை முகம் // [1F63D] +😾 உதட்டைப் பிதுக்கும் பூனை முகம் // [1F63E] +😿 அழும் பூனை முகம் // [1F63F] +🙀 பயந்த பூனை முகம் // [1F640] +🙁 லேசாக வருத்தமாக இருக்கும் முகம் // [1F641] +🙂 லேசாகச் சிரித்த முகம் // [1F642] +🙃 தலைகீழ் முகம் // [1F643] +🙄 கண்களை சுழற்றியபடி இருக்கும் முகம் // [1F644] +🙅 செய்யக்கூடாது என்பதைக் குறிக்கும் சின்னம் // [1F645] +🙆 சரி என்பதைக் குறிக்கும் சின்னம் // [1F646] +🙇 மன்னிப்பு கேட்பவர் // [1F647] +🙈 தீயவற்றைப் பார்க்கக்கூடாது என்பதை உணர்த்தும் குரங்கு // [1F648] +🙉 தீயவற்றைக் கேட்கக்கூடாது என்பதை உணர்த்தும் குரங்கு // [1F649] +🙊 தீயவற்றைப் பேசக்கூடாது என்பதை உணர்த்தும் குரங்கு // [1F64A] +🙋 மகிழ்ச்சியில் ஒரு கையை உயர்த்துபவர் // [1F64B] +🙌 மகிழ்ச்சியில் இரண்டு கைகளை உயர்த்துபவர் // [1F64C] +🙍 வருத்தமாக இருப்பவர் // [1F64D] +🙎 கோபமாக இருப்பவர் // [1F64E] +🙏 கூப்பிய கைகள் // [1F64F] + +// 1F680..1F6FF : Transport and Map Symbols + +🚀 ஏவுகணை // [1F680] +🚁 ஹெலிகாப்டர் // [1F681] +🚂 புகை வண்டி // [1F682] +🚃 இரயில் வண்டி // [1F683] +🚄 விரைவு இரயில் வண்டி // [1F684] +🚅 புல்லட் இரயில் வண்டி // [1F685] +🚆 இரயில் // [1F686] +🚇 மெட்ரோ ரயில் // [1F687] +🚈 லைட் ரயில் // [1F688] +🚉 ரயில் நிலையம் // [1F689] +🚊 டிராம் // [1F68A] +🚋 டிராம் கார் // [1F68B] +🚌 பேருந்து // [1F68C] +🚍 வந்துகொண்டிருக்கும் பேருந்து // [1F68D] +🚎 டிராலி பஸ் // [1F68E] +🚏 பேருந்து நிறுத்தம் // [1F68F] +🚐 சிற்றுந்து // [1F690] +🚑 ஆம்புலன்ஸ் // [1F691] +🚒 தீயணைப்பு வாகனம் // [1F692] +🚓 போலீஸ் வண்டி // [1F693] +🚔 வந்துகொண்டிருக்கும் போலீஸ் வாகனம் // [1F694] +🚕 டாக்சி // [1F695] +🚖 வந்துகொண்டிருக்கும் டாக்சி // [1F696] +🚗 கார் // [1F697] +🚘 வந்துகொண்டிருக்கும் கார் // [1F698] +🚙 நவீன வசதிகள் கொண்ட வாகனம் // [1F699] +🚚 சரக்கு வண்டி // [1F69A] +🚛 கனரக லாரி // [1F69B] +🚜 டிராக்டர் // [1F69C] +🚝 மோனோரயில் // [1F69D] +🚞 மலைப் பாதை ரயில் // [1F69E] +🚟 தொங்கு ரயில்பாதை // [1F69F] +🚠 மலை கேபிள்வழி // [1F6A0] +🚡 கேபிள் கார் // [1F6A1] +🚢 கப்பல் // [1F6A2] +🚣 தோணி // [1F6A3] +🚤 அதிவேக படகு // [1F6A4] +🚥 கிடைமட்ட ட்ராஃபிக் லைட்டுகள் // [1F6A5] +🚦 செங்குத்து ட்ராஃபிக் லைட்டுகள் // [1F6A6] +🚧 கட்டுமான பணி // [1F6A7] +🚨 போலீஸ் காரின் சுழலும் விளக்கு // [1F6A8] +🚩 முக்கோண கொடி // [1F6A9] +🚪 கதவு // [1F6AA] +🚫 தடைசெய்யப்பட்ட பகுதி // [1F6AB] +🚬 புகைச் சின்னம் // [1F6AC] +🚭 புகைக்கக்கூடாது // [1F6AD] +🚮 குப்பையை உரிய இடத்தில் போடும் சின்னம் // [1F6AE] +🚯 குப்பை போடாதீர் // [1F6AF] +🚰 குடி தண்ணீர் // [1F6B0] +🚱 குடி தண்ணீர் அல்ல // [1F6B1] +🚲 சைக்கிள் // [1F6B2] +🚳 சைக்கிளுக்கு அனுமதி இல்லை // [1F6B3] +🚴 சைக்கிள் ஓட்டுபவர் // [1F6B4] +🚵 மலைப்பாதையில் சைக்கிள் ஓட்டுபவர் // [1F6B5] +🚶 நடை // [1F6B6] +🚷 நடந்து செல்லக்கூடாது // [1F6B7] +🚸 குழந்தைகள் கடக்கும் வழி // [1F6B8] +🚹 ஆண்கள் பகுதி // [1F6B9] +🚺 பெண்கள் பகுதி // [1F6BA] +🚻 கழிவறை // [1F6BB] +🚼 கைக்குழந்தை // [1F6BC] +🚽 கழிப்பறை // [1F6BD] +🚾 வாட்டர் குளோசட் // [1F6BE] +🚿 ஷவர் // [1F6BF] +🛀 குளியல் // [1F6C0] +🛁 குளியல் தொட்டி // [1F6C1] +🛂 பாஸ்போர்ட் கட்டுப்பாடு // [1F6C2] +🛃 சுங்கம் // [1F6C3] +🛄 உடைமை பெறுமிடம் // [1F6C4] +🛅 உடைமை விடுமிடம் // [1F6C5] +🛋 மின்விளக்கும் படுக்கையும் // [1F6CB] text|emoji +🛌 படுக்கையில் படுத்திருப்பவர் // [1F6CC] +🛍 ஷாப்பிங் பேக்ஸ் // [1F6CD] text|emoji +🛎 அழைக்கும் மணி // [1F6CE] text|emoji +🛏 படுக்கை // [1F6CF] text|emoji +🛐 வழிபடும் இடம் // [1F6D0] +🛑 நில் // [1F6D1] +🛒 ஷாப்பிங் கூடை // [1F6D2] +🛠 சுத்தியும் இடுக்கியும் // [1F6E0] text|emoji +🛡 கேடயம் // [1F6E1] text|emoji +🛢 எண்ணெய் டிரம் // [1F6E2] text|emoji +🛣 நெடுஞ்சாலை // [1F6E3] text|emoji +🛤 இரயில் தடம் // [1F6E4] text|emoji +🛥 மோட்டார் படகு // [1F6E5] text|emoji +🛩 குட்டி விமானம் // [1F6E9] text|emoji +🛫 விமானம் பறத்தல் // [1F6EB] +🛬 விமானம் தரையிறங்குதல் // [1F6EC] +🛰 செயற்கைக்கோள் // [1F6F0] text|emoji +🛳 பயணிக் கப்பல் // [1F6F3] text|emoji +🛴 கிக் ஸ்கூட்டர் // [1F6F4] +🛵 ஸ்கூட்டர் // [1F6F5] +🛶 படகு // [1F6F6] +🛷 sled // [1F6F7] (no translation) +🛸 flying saucer // [1F6F8] (no translation) + +// 1F900..1F9FF : Supplemental Symbols and Pictographs + +🤐 வாய் மூடப்பட்டுள்ள முகம் // [1F910] +🤑 பணத்தைக் கண்டு நாக்கை வெளியே காட்டும் முகம் // [1F911] +🤒 வெப்பநிலைமானி வைத்திருக்கும் முகம் // [1F912] +🤓 அழகற்ற முகம் // [1F913] +🤔 சிந்திக்கும் முகம் // [1F914] +🤕 தலைக்கட்டு கட்டப்பட்ட முகம் // [1F915] +🤖 ரோபோ முகம் // [1F916] +🤗 அணைக்கும் முகம் // [1F917] +🤘 அசத்திவிட்டீர்கள் என்பதைக் குறிக்கும் சின்னம் // [1F918] +🤙 என்னை அழை // [1F919] +🤚 உயர்த்திய கை // [1F91A] +🤛 வலதுகையால் ஒரு குத்து // [1F91B] +🤜 இடதுகையால் ஒரு குத்து // [1F91C] +🤝 கைகுலுக்கல் // [1F91D] +🤞 அதிர்ஷ்டம் // [1F91E] +🤟 love you gesture // [1F91F] (no translation) +🤠 வேட்டைக்காரன் // [1F920] +🤡 கோமாளி // [1F921] +🤢 வாந்தியெடுக்கும் முகம் // [1F922] +🤣 விழுந்து விழுந்து சிரிப்பது // [1F923] +🤤 ஜொள்ளு விடும் முகம் // [1F924] +🤥 பொய் கூறும் முகம் // [1F925] +🤦 விரக்தி // [1F926] +🤧 தும்முகின்ற முகம் // [1F927] +🤨 face with raised eyebrow // [1F928] (no translation) +🤩 star struck // [1F929] (no translation) +🤪 crazy face // [1F92A] (no translation) +🤫 shushing face // [1F92B] (no translation) +🤬 face with symbols over mouth // [1F92C] (no translation) +🤭 face with hand over mouth // [1F92D] (no translation) +🤮 face vomiting // [1F92E] (no translation) +🤯 exploding head // [1F92F] (no translation) +🤰 கருத்தரித்துள்ள பெண் // [1F930] +🤱 breast feeding // [1F931] (no translation) +🤲 palms up together // [1F932] (no translation) +🤳 செல்ஃபி // [1F933] +🤴 இளவரசன் // [1F934] +🤵 கோட்டு சூட்டு அணிந்தவர் // [1F935] +🤶 கிறிஸ்துமஸ் பாட்டி // [1F936] +🤷 சந்தேகம் // [1F937] +🤸 ஜிம்னாஸ்டிக்ஸ் // [1F938] +🤹 ஜக்ளிங் // [1F939] +🤺 கூர்வாள் விளையாட்டு // [1F93A] +🤼 மல்யுத்தம் // [1F93C] +🤽 வாட்டர் போலோ // [1F93D] +🤾 கையெறி பந்து // [1F93E] +🥀 வாடிய பூ // [1F940] +🥁 மேளம் // [1F941] +🥂 சியர்ஸ் // [1F942] +🥃 விஸ்கி கிளாஸ் // [1F943] +🥄 கரண்டி // [1F944] +🥅 கோல் கம்பம் // [1F945] +🥇 முதல் பரிசு // [1F947] +🥈 இரண்டாவது பரிசு // [1F948] +🥉 மூன்றாவது பரிசு // [1F949] +🥊 குத்துச்சண்டை // [1F94A] +🥋 கராத்தே உடை // [1F94B] +🥌 curling stone // [1F94C] (no translation) +🥐 மாவுப்பண்டம் // [1F950] +🥑 வெண்ணைப் பழம் // [1F951] +🥒 வெள்ளரி // [1F952] +🥓 பன்றி இறைச்சி // [1F953] +🥔 உருளைக்கிழங்கு // [1F954] +🥕 கேரட் // [1F955] +🥖 ரொட்டி உணவு // [1F956] +🥗 சாலட் // [1F957] +🥘 கடாய் உணவு // [1F958] +🥙 ரொட்டி வகை உணவு // [1F959] +🥚 முட்டை // [1F95A] +🥛 பால் // [1F95B] +🥜 வேர்க்கடலை // [1F95C] +🥝 கிவிப்பழம் // [1F95D] +🥞 பேன்கேக் // [1F95E] +🥟 dumpling // [1F95F] (no translation) +🥠 fortune cookie // [1F960] (no translation) +🥡 takeout box // [1F961] (no translation) +🥢 chopsticks // [1F962] (no translation) +🥣 bowl with spoon // [1F963] (no translation) +🥤 cup with straw // [1F964] (no translation) +🥥 coconut // [1F965] (no translation) +🥦 broccoli // [1F966] (no translation) +🥧 pie // [1F967] (no translation) +🥨 pretzel // [1F968] (no translation) +🥩 cut of meat // [1F969] (no translation) +🥪 sandwich // [1F96A] (no translation) +🥫 canned food // [1F96B] (no translation) +🦀 நண்டு // [1F980] +🦁 சிங்க முகம் // [1F981] +🦂 தேள் // [1F982] +🦃 வான்கோழி // [1F983] +🦄 ஒற்றைக் கொம்பு குதிரை முகம் // [1F984] +🦅 கழுகு // [1F985] +🦆 வாத்து // [1F986] +🦇 வௌவால் // [1F987] +🦈 சுறா // [1F988] +🦉 ஆந்தை // [1F989] +🦊 குள்ளநரி முகம் // [1F98A] +🦋 பட்டாம்பூச்சி // [1F98B] +🦌 மான் // [1F98C] +🦍 கொரில்லா // [1F98D] +🦎 பல்லி // [1F98E] +🦏 காண்டாமிருகம் // [1F98F] +🦐 கூனிறால் // [1F990] +🦑 கணவாய் // [1F991] +🦒 giraffe // [1F992] (no translation) +🦓 zebra // [1F993] (no translation) +🦔 hedgehog // [1F994] (no translation) +🦕 sauropod // [1F995] (no translation) +🦖 t rex // [1F996] (no translation) +🦗 cricket // [1F997] (no translation) +🧀 பாலாடைக் கட்டி // [1F9C0] +🧐 face with monocle // [1F9D0] (no translation) +🧑 adult // [1F9D1] (no translation) +🧒 child // [1F9D2] (no translation) +🧓 older adult // [1F9D3] (no translation) +🧔 bearded person // [1F9D4] (no translation) +🧕 woman with headscarf // [1F9D5] (no translation) +🧖 person in steamy room // [1F9D6] (no translation) +🧗 person climbing // [1F9D7] (no translation) +🧘 person in lotus position // [1F9D8] (no translation) +🧙 mage // [1F9D9] (no translation) +🧚 fairy // [1F9DA] (no translation) +🧛 vampire // [1F9DB] (no translation) +🧜 merperson // [1F9DC] (no translation) +🧝 elf // [1F9DD] (no translation) +🧞 genie // [1F9DE] (no translation) +🧟 zombie // [1F9DF] (no translation) +🧠 brain // [1F9E0] (no translation) +🧡 orange heart // [1F9E1] (no translation) +🧢 billed cap // [1F9E2] (no translation) +🧣 scarf // [1F9E3] (no translation) +🧤 gloves // [1F9E4] (no translation) +🧥 coat // [1F9E5] (no translation) +🧦 socks // [1F9E6] (no translation) + +// Country Flags (Regional Indicator Symbols) -- ISO 3166-1 Country Codes + +🇦🇨 அஷன்ஷியன் தீவு // [1F1E6 1F1E8] AC +🇦🇩 அன்டோரா // [1F1E6 1F1E9] AD +🇦🇪 ஐக்கிய அரபு எமிரேட்ஸ் // [1F1E6 1F1EA] AE +🇦🇫 ஆப்கானிஸ்தான் // [1F1E6 1F1EB] AF +🇦🇬 ஆண்டிகுவா மற்றும் பார்புடா // [1F1E6 1F1EC] AG +🇦🇮 அங்குய்லா // [1F1E6 1F1EE] AI +🇦🇱 அல்பேனியா // [1F1E6 1F1F1] AL +🇦🇲 அர்மேனியா // [1F1E6 1F1F2] AM +🇦🇴 அங்கோலா // [1F1E6 1F1F4] AO +🇦🇶 அண்டார்டிகா // [1F1E6 1F1F6] AQ +🇦🇷 அர்ஜென்டினா // [1F1E6 1F1F7] AR +🇦🇸 அமெரிக்க சமோவா // [1F1E6 1F1F8] AS +🇦🇹 ஆஸ்திரியா // [1F1E6 1F1F9] AT +🇦🇺 ஆஸ்திரேலியா // [1F1E6 1F1FA] AU +🇦🇼 அரூபா // [1F1E6 1F1FC] AW +🇦🇽 ஆலந்து தீவுகள் // [1F1E6 1F1FD] AX +🇦🇿 அசர்பைஜான் // [1F1E6 1F1FF] AZ +🇧🇦 போஸ்னியா & ஹெர்ஸகோவினா // [1F1E7 1F1E6] BA +🇧🇧 பார்படோஸ் // [1F1E7 1F1E7] BB +🇧🇩 பங்களாதேஷ் // [1F1E7 1F1E9] BD +🇧🇪 பெல்ஜியம் // [1F1E7 1F1EA] BE +🇧🇫 புர்கினா ஃபாஸோ // [1F1E7 1F1EB] BF +🇧🇬 பல்கேரியா // [1F1E7 1F1EC] BG +🇧🇭 பஹ்ரைன் // [1F1E7 1F1ED] BH +🇧🇮 புருண்டி // [1F1E7 1F1EE] BI +🇧🇯 பெனின் // [1F1E7 1F1EF] BJ +🇧🇱 செயின்ட் பார்தேலெமி // [1F1E7 1F1F1] BL +🇧🇲 பெர்முடா // [1F1E7 1F1F2] BM +🇧🇳 புருனே // [1F1E7 1F1F3] BN +🇧🇴 பொலிவியா // [1F1E7 1F1F4] BO +🇧🇶 கரீபியன் நெதர்லாந்து // [1F1E7 1F1F6] BQ +🇧🇷 பிரேசில் // [1F1E7 1F1F7] BR +🇧🇸 பஹாமாஸ் // [1F1E7 1F1F8] BS +🇧🇹 பூடான் // [1F1E7 1F1F9] BT +🇧🇻 பொவேட் தீவுகள் // [1F1E7 1F1FB] BV +🇧🇼 போட்ஸ்வானா // [1F1E7 1F1FC] BW +🇧🇾 பெலாரூஸ் // [1F1E7 1F1FE] BY +🇧🇿 பெலிஸ் // [1F1E7 1F1FF] BZ +🇨🇦 கனடா // [1F1E8 1F1E6] CA +🇨🇨 கோகோஸ் (கீலிங்) தீவுகள் // [1F1E8 1F1E8] CC +🇨🇩 காங்கோ - கின்ஷாசா // [1F1E8 1F1E9] CD +🇨🇫 மத்திய ஆப்ரிக்கக் குடியரசு // [1F1E8 1F1EB] CF +🇨🇬 காங்கோ - ப்ராஸாவில்லே // [1F1E8 1F1EC] CG +🇨🇭 ஸ்விட்சர்லாந்து // [1F1E8 1F1ED] CH +🇨🇮 கோட் தி’வாயர் // [1F1E8 1F1EE] CI +🇨🇰 குக் தீவுகள் // [1F1E8 1F1F0] CK +🇨🇱 சிலி // [1F1E8 1F1F1] CL +🇨🇲 கேமரூன் // [1F1E8 1F1F2] CM +🇨🇳 சீனா // [1F1E8 1F1F3] CN +🇨🇴 கொலம்பியா // [1F1E8 1F1F4] CO +🇨🇵 கிலிப்பர்டன் தீவு // [1F1E8 1F1F5] CP +🇨🇷 கோஸ்டாரிகா // [1F1E8 1F1F7] CR +🇨🇺 கியூபா // [1F1E8 1F1FA] CU +🇨🇻 கேப் வெர்டே // [1F1E8 1F1FB] CV +🇨🇼 குராகவ் // [1F1E8 1F1FC] CW +🇨🇽 கிறிஸ்துமஸ் தீவு // [1F1E8 1F1FD] CX +🇨🇾 சைப்ரஸ் // [1F1E8 1F1FE] CY +🇨🇿 செசியா // [1F1E8 1F1FF] CZ +🇩🇪 ஜெர்மனி // [1F1E9 1F1EA] DE +🇩🇬 டியகோ கார்ஷியா // [1F1E9 1F1EC] DG +🇩🇯 ஜிபௌட்டி // [1F1E9 1F1EF] DJ +🇩🇰 டென்மார்க் // [1F1E9 1F1F0] DK +🇩🇲 டொமினிகா // [1F1E9 1F1F2] DM +🇩🇴 டொமினிகன் குடியரசு // [1F1E9 1F1F4] DO +🇩🇿 அல்ஜீரியா // [1F1E9 1F1FF] DZ +🇪🇦 சியூடா & மெலில்லா // [1F1EA 1F1E6] EA +🇪🇨 ஈக்வடார் // [1F1EA 1F1E8] EC +🇪🇪 எஸ்டோனியா // [1F1EA 1F1EA] EE +🇪🇬 எகிப்து // [1F1EA 1F1EC] EG +🇪🇭 மேற்கு சஹாரா // [1F1EA 1F1ED] EH +🇪🇷 எரிட்ரியா // [1F1EA 1F1F7] ER +🇪🇸 ஸ்பெயின் // [1F1EA 1F1F8] ES +🇪🇹 எத்தியோப்பியா // [1F1EA 1F1F9] ET +🇪🇺 ஐரோப்பிய யூனியன் // [1F1EA 1F1FA] EU +🇫🇮 பின்லாந்து // [1F1EB 1F1EE] FI +🇫🇯 ஃபிஜி // [1F1EB 1F1EF] FJ +🇫🇰 ஃபாக்லாந்து தீவுகள் // [1F1EB 1F1F0] FI +🇫🇲 மைக்ரோனேஷியா // [1F1EB 1F1F2] FM +🇫🇴 ஃபாரோ தீவுகள் // [1F1EB 1F1F4] FO +🇫🇷 பிரான்ஸ் // [1F1EB 1F1F7] FR +🇬🇦 கேபான் // [1F1EC 1F1E6] GA +🇬🇧 யுனைடெட் கிங்டம் // [1F1EC 1F1E7] GB +🇬🇩 கிரனெடா // [1F1EC 1F1E9] GD +🇬🇪 ஜார்ஜியா // [1F1EC 1F1EA] GE +🇬🇫 பிரெஞ்சு கயானா // [1F1EC 1F1EB] GF +🇬🇬 கெர்ன்சி // [1F1EC 1F1EC] GG +🇬🇭 கானா // [1F1EC 1F1ED] GH +🇬🇮 ஜிப்ரால்டர் // [1F1EC 1F1EE] GI +🇬🇱 கிரீன்லாந்து // [1F1EC 1F1F1] GL +🇬🇲 காம்பியா // [1F1EC 1F1F2] GM +🇬🇳 கினியா // [1F1EC 1F1F3] GN +🇬🇵 க்வாதேலோப் // [1F1EC 1F1F5] GP +🇬🇶 ஈக்வடோரியல் கினியா // [1F1EC 1F1F6] GQ +🇬🇷 கிரீஸ் // [1F1EC 1F1F7] GR +🇬🇸 தெற்கு ஜார்ஜியா மற்றும் தெற்கு சாண்ட்விச் தீவுகள் // [1F1EC 1F1F8] GS +🇬🇹 கவுதமாலா // [1F1EC 1F1F9] GT +🇬🇺 குவாம் // [1F1EC 1F1FA] GU +🇬🇼 கினியா-பிஸ்ஸாவ் // [1F1EC 1F1FC] GW +🇬🇾 கயானா // [1F1EC 1F1FE] GY +🇭🇰 ஹாங்காங் எஸ்ஏஆர் சீனா // [1F1ED 1F1F0] HK +🇭🇲 ஹேர்ட் மற்றும் மெக்டொனால்டு தீவுகள் // [1F1ED 1F1F2] HM +🇭🇳 ஹோண்டூராஸ் // [1F1ED 1F1F3] HN +🇭🇷 குரேஷியா // [1F1ED 1F1F7] HR +🇭🇹 ஹைட்டி // [1F1ED 1F1F9] HT +🇭🇺 ஹங்கேரி // [1F1ED 1F1FA] HU +🇮🇨 கேனரி தீவுகள் // [1F1EE 1F1E8] IC +🇮🇩 இந்தோனேசியா // [1F1EE 1F1E9] ID +🇮🇪 அயர்லாந்து // [1F1EE 1F1EA] IE +🇮🇱 இஸ்ரேல் // [1F1EE 1F1F1] IL +🇮🇲 ஐல் ஆஃப் மேன் // [1F1EE 1F1F2] IM +🇮🇳 இந்தியா // [1F1EE 1F1F3] IN +🇮🇴 பிரிட்டிஷ் இந்தியப் பெருங்கடல் பிரதேசம் // [1F1EE 1F1F4] IO +🇮🇶 ஈராக் // [1F1EE 1F1F6] IQ +🇮🇷 ஈரான் // [1F1EE 1F1F7] IR +🇮🇸 ஐஸ்லாந்து // [1F1EE 1F1F8] IS +🇮🇹 இத்தாலி // [1F1EE 1F1F9] IT +🇯🇪 ஜெர்சி // [1F1EF 1F1EA] JE +🇯🇲 ஜமைகா // [1F1EF 1F1F2] JM +🇯🇴 ஜோர்டான் // [1F1EF 1F1F4] JO +🇯🇵 ஜப்பான் // [1F1EF 1F1F5] JP +🇰🇪 கென்யா // [1F1F0 1F1EA] KE +🇰🇬 கிர்கிஸ்தான் // [1F1F0 1F1EC] KG +🇰🇭 கம்போடியா // [1F1F0 1F1ED] KH +🇰🇮 கிரிபாட்டி // [1F1F0 1F1EE] KI +🇰🇲 கோமரோஸ் // [1F1F0 1F1F2] KM +🇰🇳 செயின்ட் கிட்ஸ் & நெவிஸ் // [1F1F0 1F1F3] KN +🇰🇵 வட கொரியா // [1F1F0 1F1F5] KP +🇰🇷 தென் கொரியா // [1F1F0 1F1F7] KR +🇰🇼 குவைத் // [1F1F0 1F1FC] KW +🇰🇾 கெய்மென் தீவுகள் // [1F1F0 1F1FE] KY +🇰🇿 கஸகஸ்தான் // [1F1F0 1F1FF] KZ +🇱🇦 லாவோஸ் // [1F1F1 1F1E6] LA +🇱🇧 லெபனான் // [1F1F1 1F1E7] LB +🇱🇨 செயின்ட் லூசியா // [1F1F1 1F1E8] LC +🇱🇮 லிச்செண்ஸ்டெய்ன் // [1F1F1 1F1EE] LI +🇱🇰 இலங்கை // [1F1F1 1F1F0] LK +🇱🇷 லைபீரியா // [1F1F1 1F1F7] LR +🇱🇸 லெசோதோ // [1F1F1 1F1F8] LS +🇱🇹 லிதுவேனியா // [1F1F1 1F1F9] LT +🇱🇺 லக்ஸ்சம்பர்க் // [1F1F1 1F1FA] LU +🇱🇻 லாட்வியா // [1F1F1 1F1FB] LV +🇱🇾 லிபியா // [1F1F1 1F1FE] LY +🇲🇦 மொராக்கோ // [1F1F2 1F1E6] MA +🇲🇨 மொனாக்கோ // [1F1F2 1F1E8] MC +🇲🇩 மால்டோவா // [1F1F2 1F1E9] MD +🇲🇪 மான்டேனெக்ரோ // [1F1F2 1F1EA] ME +🇲🇫 செயின்ட் மார்ட்டீன் // [1F1F2 1F1EB] MF +🇲🇬 மடகாஸ்கர் // [1F1F2 1F1EC] MG +🇲🇭 மார்ஷல் தீவுகள் // [1F1F2 1F1ED] MH +🇲🇰 மாசிடோனியா // [1F1F2 1F1F0] MK +🇲🇱 மாலி // [1F1F2 1F1F1] ML +🇲🇲 மியான்மார் (பர்மா) // [1F1F2 1F1F2] MM +🇲🇳 மங்கோலியா // [1F1F2 1F1F3] MN +🇲🇴 மகாவ் எஸ்ஏஆர் சீனா // [1F1F2 1F1F4] MO +🇲🇵 வடக்கு மரியானா தீவுகள் // [1F1F2 1F1F5] MP +🇲🇶 மார்டினிக் // [1F1F2 1F1F6] MQ +🇲🇷 மௌரிடானியா // [1F1F2 1F1F7] MR +🇲🇸 மாண்ட்செராட் // [1F1F2 1F1F8] MS +🇲🇹 மால்டா // [1F1F2 1F1F9] MT +🇲🇺 மொரிசியஸ் // [1F1F2 1F1FA] MU +🇲🇻 மாலத்தீவு // [1F1F2 1F1FB] MV +🇲🇼 மலாவி // [1F1F2 1F1FC] MW +🇲🇽 மெக்சிகோ // [1F1F2 1F1FD] MX +🇲🇾 மலேசியா // [1F1F2 1F1FE] MY +🇲🇿 மொசாம்பிக் // [1F1F2 1F1FF] MZ +🇳🇦 நமீபியா // [1F1F3 1F1E6] NA +🇳🇨 நியூ கேலிடோனியா // [1F1F3 1F1E8] NC +🇳🇪 நைஜர் // [1F1F3 1F1EA] NE +🇳🇫 நார்ஃபோக் தீவுகள் // [1F1F3 1F1EB] NF +🇳🇬 நைஜீரியா // [1F1F3 1F1EC] NG +🇳🇮 நிகரகுவா // [1F1F3 1F1EE] NI +🇳🇱 நெதர்லாந்து // [1F1F3 1F1F1] NL +🇳🇴 நார்வே // [1F1F3 1F1F4] NO +🇳🇵 நேபாளம் // [1F1F3 1F1F5] NP +🇳🇷 நௌரு // [1F1F3 1F1F7] NR +🇳🇺 நியூ // [1F1F3 1F1FA] NU +🇳🇿 நியூசிலாந்து // [1F1F3 1F1FF] NZ +🇴🇲 ஓமன் // [1F1F4 1F1F2] OM +🇵🇦 பனாமா // [1F1F5 1F1E6] PA +🇵🇪 பெரு // [1F1F5 1F1EA] PE +🇵🇫 பிரெஞ்சு பாலினேஷியா // [1F1F5 1F1EB] PF +🇵🇬 பப்புவா நியூ கினியா // [1F1F5 1F1EC] PG +🇵🇭 பிலிப்பைன்ஸ் // [1F1F5 1F1ED] PH +🇵🇰 பாகிஸ்தான் // [1F1F5 1F1F0] PK +🇵🇱 போலந்து // [1F1F5 1F1F1] PL +🇵🇲 செயின்ட் பியர் & மிக்வேலான் // [1F1F5 1F1F2] PM +🇵🇳 பிட்கெய்ர்ன் தீவுகள் // [1F1F5 1F1F3] PN +🇵🇷 பியூர்டோ ரிகோ // [1F1F5 1F1F7] PR +🇵🇸 பாலஸ்தீனிய பிரதேசங்கள் // [1F1F5 1F1F8] PS +🇵🇹 போர்ச்சுக்கல் // [1F1F5 1F1F9] PT +🇵🇼 பாலோ // [1F1F5 1F1FC] PW +🇵🇾 பராகுவே // [1F1F5 1F1FE] PY +🇶🇦 கத்தார் // [1F1F6 1F1E6] QA +🇷🇪 ரீயூனியன் // [1F1F7 1F1EA] RE +🇷🇴 ருமேனியா // [1F1F7 1F1F4] RO +🇷🇸 செர்பியா // [1F1F7 1F1F8] RS +🇷🇺 ரஷ்யா // [1F1F7 1F1FA] RU +🇷🇼 ருவாண்டா // [1F1F7 1F1FC] RW +🇸🇦 சவூதி அரேபியா // [1F1F8 1F1E6] SA +🇸🇧 சாலமன் தீவுகள் // [1F1F8 1F1E7] SB +🇸🇨 சீஷெல்ஸ் // [1F1F8 1F1E8] SC +🇸🇩 சூடான் // [1F1F8 1F1E9] SD +🇸🇪 ஸ்வீடன் // [1F1F8 1F1EA] SE +🇸🇬 சிங்கப்பூர் // [1F1F8 1F1EC] SG +🇸🇭 செயின்ட் ஹெலெனா // [1F1F8 1F1ED] SH +🇸🇮 ஸ்லோவேனியா // [1F1F8 1F1EE] SI +🇸🇯 ஸ்வல்பார்டு & ஜான் மேயன் // [1F1F8 1F1EF] SJ +🇸🇰 ஸ்லோவாகியா // [1F1F8 1F1F0] SK +🇸🇱 சியாரா லியோன் // [1F1F8 1F1F1] SL +🇸🇲 சான் மரினோ // [1F1F8 1F1F2] SM +🇸🇳 செனெகல் // [1F1F8 1F1F3] SN +🇸🇴 சோமாலியா // [1F1F8 1F1F4] SO +🇸🇷 சுரினாம் // [1F1F8 1F1F7] SR +🇸🇸 தெற்கு சூடான் // [1F1F8 1F1F8] SS +🇸🇹 சாவ் தோம் & ப்ரின்சிபி // [1F1F8 1F1F9] ST +🇸🇻 எல் சால்வடார் // [1F1F8 1F1FB] SV +🇸🇽 சின்ட் மார்டென் // [1F1F8 1F1FD] SX +🇸🇾 சிரியா // [1F1F8 1F1FE] SY +🇸🇿 ஸ்வாஸிலாந்து // [1F1F8 1F1FF] SZ +🇹🇦 டிரிஸ்டன் டா குன்ஹா // [1F1F9 1F1E6] TA +🇹🇨 டர்க்ஸ் & கைகோஸ் தீவுகள் // [1F1F9 1F1E8] TC +🇹🇩 சாட் // [1F1F9 1F1E9] TD +🇹🇫 பிரெஞ்சு தெற்கு பிரதேசங்கள் // [1F1F9 1F1EB] TF +🇹🇬 டோகோ // [1F1F9 1F1EC] TG +🇹🇭 தாய்லாந்து // [1F1F9 1F1ED] TH +🇹🇯 தஜிகிஸ்தான் // [1F1F9 1F1EF] TJ +🇹🇰 டோகேலோ // [1F1F9 1F1F0] TK +🇹🇱 தைமூர்-லெஸ்தே // [1F1F9 1F1F1] TL +🇹🇲 துர்க்மெனிஸ்தான் // [1F1F9 1F1F2] TM +🇹🇳 டுனிசியா // [1F1F9 1F1F3] TN +🇹🇴 டோங்கா // [1F1F9 1F1F4] TO +🇹🇷 துருக்கி // [1F1F9 1F1F7] TR +🇹🇹 டிரினிடாட் & டொபாகோ // [1F1F9 1F1F9] TT +🇹🇻 துவாலூ // [1F1F9 1F1FB] TV +🇹🇼 தைவான் // [1F1F9 1F1FC] TW +🇹🇿 தான்சானியா // [1F1F9 1F1FF] TZ +🇺🇦 உக்ரைன் // [1F1FA 1F1E6] UA +🇺🇬 உகாண்டா // [1F1FA 1F1EC] UG +🇺🇲 யூ.எஸ். வெளிப்புறத் தீவுகள் // [1F1FA 1F1F2] UM +🇺🇳 ஐக்கிய நாடுகள் // [1F1FA 1F1F3] UN +🇺🇸 அமெரிக்கா // [1F1FA 1F1F8] US +🇺🇾 உருகுவே // [1F1FA 1F1FE] UY +🇺🇿 உஸ்பெகிஸ்தான் // [1F1FA 1F1FF] UZ +🇻🇦 வாடிகன் நகரம் // [1F1FB 1F1E6] VA +🇻🇨 செயின்ட் வின்சென்ட் & கிரெனடைன்ஸ் // [1F1FB 1F1E8] VC +🇻🇪 வெனிசுலா // [1F1FB 1F1EA] VE +🇻🇬 பிரிட்டீஷ் கன்னித் தீவுகள் // [1F1FB 1F1EC] VG +🇻🇮 யூ.எஸ். கன்னித் தீவுகள் // [1F1FB 1F1EE] VI +🇻🇳 வியட்நாம் // [1F1FB 1F1F3] VN +🇻🇺 வனுவாட்டு // [1F1FB 1F1FA] VU +🇼🇫 வாலிஸ் மற்றும் ஃபுடுனா // [1F1FC 1F1EB] WF +🇼🇸 சமோவா // [1F1FC 1F1F8] WS +🇽🇰 கொசோவோ // [1F1FD 1F1F0] XK +🇾🇪 ஏமன் // [1F1FE 1F1EA] YE +🇾🇹 மயோட் // [1F1FE 1F1F9] YT +🇿🇦 தென் ஆப்பிரிக்கா // [1F1FF 1F1E6] ZA +🇿🇲 ஜாம்பியா // [1F1FF 1F1F2] ZM +🇿🇼 ஜிம்பாப்வே // [1F1FF 1F1FC] ZW + +// Subdivision Flags -- ISO 3166-2 Subdivision Codes + +🏴󠁧󠁢󠁥󠁮󠁧󠁿 இங்கிலாந்து // [1F3F4 E0067 E0062 E0065 E006E E0067 E007F] +🏴󠁧󠁢󠁳󠁣󠁴󠁿 ஸ்காட்லாந்து // [1F3F4 E0067 E0062 E0073 E0063 E0074 E007F] +🏴󠁧󠁢󠁷󠁬󠁳󠁿 வேல்ஸ் // [1F3F4 E0067 E0062 E0077 E006C E0073 E007F] + +// Keycaps (NOTE: keycap 10 is a single Unicode codepoint) + +#️⃣ ஹாஷ் // [0023 FE0F 20E3] +*️⃣ உடுக்குறி // [002A FE0F 20E3] +0️⃣ இலக்க எண் பூஜ்ஜியம் // [0030 FE0F 20E3] +1️⃣ இலக்க எண் ஒன்று // [0031 FE0F 20E3] +2️⃣ இலக்க எண் இரண்டு // [0032 FE0F 20E3] +3️⃣ இலக்க எண் மூன்று // [0033 FE0F 20E3] +4️⃣ இலக்க எண் நான்கு // [0034 FE0F 20E3] +5️⃣ இலக்க எண் ஐந்து // [0035 FE0F 20E3] +6️⃣ இலக்க எண் ஆறு // [0036 FE0F 20E3] +7️⃣ இலக்க எண் ஏழு // [0037 FE0F 20E3] +8️⃣ இலக்க எண் எட்டு // [0038 FE0F 20E3] +9️⃣ இலக்க எண் ஒன்பது // [0039 FE0F 20E3] + +// Emoji ZWJ Sequence: Family + +👩‍❤‍💋‍👨 முத்தமிடுதல்: பெண், ஆண் // [1F469 200D 2764 200D 1F48B 200D 1F468] +👨‍❤‍💋‍👨 முத்தமிடுதல்: ஆண், ஆண் // [1F468 200D 2764 200D 1F48B 200D 1F468] +👩‍❤‍💋‍👩 முத்தமிடுதல்: பெண், பெண் // [1F469 200D 2764 200D 1F48B 200D 1F469] +👩‍❤‍👨 காதலர்கள்: பெண், ஆண் // [1F469 200D 2764 200D 1F468] +👨‍❤‍👨 காதலர்கள்: ஆண், ஆண் // [1F468 200D 2764 200D 1F468] +👩‍❤‍👩 காதலர்கள்: பெண், பெண் // [1F469 200D 2764 200D 1F469] +👨‍👩‍👦 குடும்பம்: ஆண், பெண், சிறுவன் // [1F468 200D 1F469 200D 1F466] +👨‍👩‍👧 குடும்பம்: ஆண், பெண், சிறுமி // [1F468 200D 1F469 200D 1F467] +👨‍👩‍👧‍👦 குடும்பம்: ஆண், பெண், சிறுமி, சிறுவன் // [1F468 200D 1F469 200D 1F467 200D 1F466] +👨‍👩‍👦‍👦 குடும்பம்: ஆண், பெண், சிறுவன், சிறுவன் // [1F468 200D 1F469 200D 1F466 200D 1F466] +👨‍👩‍👧‍👧 குடும்பம்: ஆண், பெண், சிறுமி, சிறுமி // [1F468 200D 1F469 200D 1F467 200D 1F467] +👨‍👨‍👦 குடும்பம்: ஆண், ஆண், சிறுவன் // [1F468 200D 1F468 200D 1F466] +👨‍👨‍👧 குடும்பம்: ஆண், ஆண், சிறுமி // [1F468 200D 1F468 200D 1F467] +👨‍👨‍👧‍👦 குடும்பம்: ஆண், ஆண், சிறுமி, சிறுவன் // [1F468 200D 1F468 200D 1F467 200D 1F466] +👨‍👨‍👦‍👦 குடும்பம்: ஆண், ஆண், சிறுவன், சிறுவன் // [1F468 200D 1F468 200D 1F466 200D 1F466] +👨‍👨‍👧‍👧 குடும்பம்: ஆண், ஆண், சிறுமி, சிறுமி // [1F468 200D 1F468 200D 1F467 200D 1F467] +👩‍👩‍👦 குடும்பம்: பெண், பெண், சிறுவன் // [1F469 200D 1F469 200D 1F466] +👩‍👩‍👧 குடும்பம்: பெண், பெண், சிறுமி // [1F469 200D 1F469 200D 1F467] +👩‍👩‍👧‍👦 குடும்பம்: பெண், பெண், சிறுமி, சிறுவன் // [1F469 200D 1F469 200D 1F467 200D 1F466] +👩‍👩‍👦‍👦 குடும்பம்: பெண், பெண், சிறுவன், சிறுவன் // [1F469 200D 1F469 200D 1F466 200D 1F466] +👩‍👩‍👧‍👧 குடும்பம்: பெண், பெண், சிறுமி, சிறுமி // [1F469 200D 1F469 200D 1F467 200D 1F467] +👨‍👦 குடும்பம்: ஆண், சிறுவன் // [1F468 200D 1F466] +👨‍👦‍👦 குடும்பம்: ஆண், சிறுவன், சிறுவன் // [1F468 200D 1F466 200D 1F466] +👨‍👧 குடும்பம்: ஆண், சிறுமி // [1F468 200D 1F467] +👨‍👧‍👦 குடும்பம்: ஆண், சிறுமி, சிறுவன் // [1F468 200D 1F467 200D 1F466] +👨‍👧‍👧 குடும்பம்: ஆண், சிறுமி, சிறுமி // [1F468 200D 1F467 200D 1F467] +👩‍👦 குடும்பம்: பெண், சிறுவன் // [1F469 200D 1F466] +👩‍👦‍👦 குடும்பம்: பெண், சிறுவன், சிறுவன் // [1F469 200D 1F466 200D 1F466] +👩‍👧 குடும்பம்: பெண், சிறுமி // [1F469 200D 1F467] +👩‍👧‍👦 குடும்பம்: பெண், சிறுமி, சிறுவன் // [1F469 200D 1F467 200D 1F466] +👩‍👧‍👧 குடும்பம்: பெண், சிறுமி, சிறுமி // [1F469 200D 1F467 200D 1F467] + +// Emoji ZWJ Sequence: Gendered Role, with object + +👨‍⚕ ஆண் மருத்துவர் // [1F468 200D 2695] +👩‍⚕ பெண் மருத்துவர் // [1F469 200D 2695] +👨‍⚖ ஆண் நீதிபதி // [1F468 200D 2696] +👩‍⚖ பெண் நீதிபதி // [1F469 200D 2696] +👨‍✈ ஆண் விமானி // [1F468 200D 2708] +👩‍✈ பெண் விமானி // [1F469 200D 2708] +👨‍🌾 ஆண் விவசாயி // [1F468 200D 1F33E] +👩‍🌾 பெண் விவசாயி // [1F469 200D 1F33E] +👨‍🍳 ஆண் சமையல் வல்லுநர் // [1F468 200D 1F373] +👩‍🍳 பெண் சமையல் வல்லுநர் // [1F469 200D 1F373] +👨‍🎓 மாணவன் // [1F468 200D 1F393] +👩‍🎓 மாணவி // [1F469 200D 1F393] +👨‍🎤 ஆண் பாடகர் // [1F468 200D 1F3A4] +👩‍🎤 பெண் பாடகர் // [1F469 200D 1F3A4] +👨‍🎨 ஆண் ஓவியர் // [1F468 200D 1F3A8] +👩‍🎨 பெண் ஓவியர் // [1F469 200D 1F3A8] +👨‍🏫 ஆண் ஆசிரியர் // [1F468 200D 1F3EB] +👩‍🏫 பெண் ஆசிரியர் // [1F469 200D 1F3EB] +👨‍🏭 ஆண் தொழிலாளி // [1F468 200D 1F3ED] +👩‍🏭 பெண் தொழிலாளி // [1F469 200D 1F3ED] +👨‍💻 ஆண் மென்பொருள் வல்லுநர் // [1F468 200D 1F4BB] +👩‍💻 பெண் மென்பொருள் வல்லுநர் // [1F469 200D 1F4BB] +👨‍💼 ஆண் பணியாளர் // [1F468 200D 1F4BC] +👩‍💼 பெண் பணியாளர் // [1F469 200D 1F4BC] +👨‍🔧 ஆண் மெக்கானிக் // [1F468 200D 1F527] +👩‍🔧 பெண் மெக்கானிக் // [1F469 200D 1F527] +👨‍🔬 ஆண் விஞ்ஞானி // [1F468 200D 1F52C] +👩‍🔬 பெண் விஞ்ஞானி // [1F469 200D 1F52C] +👨‍🚀 ஆண் விண்வெளி வீரர் // [1F468 200D 1F680] +👩‍🚀 பெண் விண்வெளி வீரர் // [1F469 200D 1F680] +👨‍🚒 ஆண் தீயணைப்பு வீரர் // [1F468 200D 1F692] +👩‍🚒 பெண் தீயணைப்பு வீரர் // [1F469 200D 1F692] + +// Emoji ZWJ Sequence: Gendered Role + +👮‍♀ பெண் காவலர் // [1F46E 200D 2640] +👮‍♂ ஆண் காவலர் // [1F46E 200D 2642] +👱‍♀ பொன்னிற முடி கொண்ட பெண் // [1F471 200D 2640] +👱‍♂ பொன்னிற முடி கொண்ட ஆண் // [1F471 200D 2642] +👳‍♀ தலைப்பாகை அணிந்த பெண் // [1F473 200D 2640] +👳‍♂ தலைப்பாகை அணிந்த ஆண் // [1F473 200D 2642] +👷‍♀ பெண் கட்டுமானத் தொழிலாளி // [1F477 200D 2640] +👷‍♂ ஆண் கட்டுமானத் தொழிலாளி // [1F477 200D 2642] +💂‍♀ பெண் பாதுகாவலர் // [1F482 200D 2640] +💂‍♂ ஆண் பாதுகாவலர் // [1F482 200D 2642] +🕵️‍♀ பெண் துப்பறியும் நிபுணர் // [1F575 200D 2640] +🕵️‍♂ ஆண் துப்பறியும் நிபுணர் // [1F575 200D 2642] +🧙‍♀ woman mage // [1F9D9 200D 2640] (no translation) +🧙‍♂ man mage // [1F9D9 200D 2642] (no translation) +🧚‍♀ woman fairy // [1F9DA 200D 2640] (no translation) +🧚‍♂ man fairy // [1F9DA 200D 2642] (no translation) +🧛‍♀ woman vampire // [1F9DB 200D 2640] (no translation) +🧛‍♂ man vampire // [1F9DB 200D 2642] (no translation) +🧜‍♀ mermaid // [1F9DC 200D 2640] (no translation) +🧜‍♂ merman // [1F9DC 200D 2642] (no translation) +🧝‍♀ woman elf // [1F9DD 200D 2640] (no translation) +🧝‍♂ man elf // [1F9DD 200D 2642] (no translation) +🧞‍♀ woman genie // [1F9DE 200D 2640] (no translation) +🧞‍♂ man genie // [1F9DE 200D 2642] (no translation) +🧟‍♀ woman zombie // [1F9DF 200D 2640] (no translation) +🧟‍♂ man zombie // [1F9DF 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Activity + +⛹‍♀ பந்தாடும் பெண் // [26F9 200D 2640] +⛹‍♂ பந்தாடும் ஆண் // [26F9 200D 2642] +🏃‍♀ ஓடும் பெண் // [1F3C3 200D 2640] +🏃‍♂ ஓடும் ஆண் // [1F3C3 200D 2642] +🏄‍♀ அலைச்சறுக்கு விளையாடும் பெண் // [1F3C4 200D 2640] +🏄‍♂ அலைச்சறுக்கு விளையாடும் ஆண் // [1F3C4 200D 2642] +🏊‍♀ நீந்தும் பெண் // [1F3CA 200D 2640] +🏊‍♂ நீந்தும் ஆண் // [1F3CA 200D 2642] +🏋️‍♀ பளுதூக்கும் பெண் // [1F3CB 200D 2640] +🏋️‍♂ பளுதூக்கும் ஆண் // [1F3CB 200D 2642] +🏌️‍♀ கோல்ஃப் விளையாடும் பெண் // [1F3CC 200D 2640] +🏌️‍♂ கோல்ஃப் விளையாடும் ஆண் // [1F3CC 200D 2642] +👯‍♀ நடனமாடும் பெண்கள் // [1F46F 200D 2640] +👯‍♂ நடனமாடும் ஆண்கள் // [1F46F 200D 2642] +💆‍♀ தலையில் மசாஜ் செய்து கொள்ளும் பெண் // [1F486 200D 2640] +💆‍♂ தலையில் மசாஜ் செய்து கொள்ளும் ஆண் // [1F486 200D 2642] +💇‍♀ முடி வெட்டிக் கொள்ளும் பெண் // [1F487 200D 2640] +💇‍♂ முடி வெட்டிக் கொள்ளும் ஆண் // [1F487 200D 2642] +🚣‍♀ படகோட்டும் பெண் // [1F6A3 200D 2640] +🚣‍♂ படகோட்டும் ஆண் // [1F6A3 200D 2642] +🚴‍♀ சைக்கிள் ஓட்டும் பெண் // [1F6B4 200D 2640] +🚴‍♂ சைக்கிள் ஓட்டும் ஆண் // [1F6B4 200D 2642] +🚵‍♀ மலைப்பாதையில் சைக்கிள் ஓட்டும் பெண் // [1F6B5 200D 2640] +🚵‍♂ மலைப்பாதையில் சைக்கிள் ஓட்டும் ஆண் // [1F6B5 200D 2642] +🚶‍♀ நடந்து செல்லும் பெண் // [1F6B6 200D 2640] +🚶‍♂ நடந்து செல்லும் ஆண் // [1F6B6 200D 2642] +🤸‍♀ ஜிம்னாஸ்டிக்ஸ் செய்யும் பெண் // [1F938 200D 2640] +🤸‍♂ ஜிம்னாஸ்டிக்ஸ் செய்யும் ஆண் // [1F938 200D 2642] +🤹‍♀ ஜக்ளிங் செய்யும் பெண் // [1F939 200D 2640] +🤹‍♂ ஜக்ளிங் செய்யும் ஆண் // [1F939 200D 2642] +🤼‍♀ மல்யுத்தம் செய்யும் பெண்கள் // [1F93C 200D 2640] +🤼‍♂ மல்யுத்தம் செய்யும் ஆண்கள் // [1F93C 200D 2642] +🤽‍♀ வாட்டர் போலோ விளையாடும் பெண் // [1F93D 200D 2640] +🤽‍♂ வாட்டர் போலோ விளையாடும் ஆண் // [1F93D 200D 2642] +🤾‍♀ கைப்பந்து விளையாடும் பெண் // [1F93E 200D 2640] +🤾‍♂ கைப்பந்து விளையாடும் ஆண் // [1F93E 200D 2642] +🧖‍♀ woman in steamy room // [1F9D6 200D 2640] (no translation) +🧖‍♂ man in steamy room // [1F9D6 200D 2642] (no translation) +🧗‍♀ woman climbing // [1F9D7 200D 2640] (no translation) +🧗‍♂ man climbing // [1F9D7 200D 2642] (no translation) +🧘‍♀ woman in lotus position // [1F9D8 200D 2640] (no translation) +🧘‍♂ man in lotus position // [1F9D8 200D 2642] (no translation) + +// Emoji ZWJ Sequence: Gendered Gestures + +💁‍♀ பெண் வரவேற்பாளர் // [1F481 200D 2640] +💁‍♂ ஆண் வரவேற்பாளர் // [1F481 200D 2642] +🙅‍♀ மறுக்கும் பெண் // [1F645 200D 2640] +🙅‍♂ மறுக்கும் ஆண் // [1F645 200D 2642] +🙆‍♀ தலையில் கைகளை வைத்திருக்கும் பெண் // [1F646 200D 2640] +🙆‍♂ தலையில் கைகளை வைத்திருக்கும் ஆண் // [1F646 200D 2642] +🙇‍♀ மன்னிப்பு கேட்கும் பெண் // [1F647 200D 2640] +🙇‍♂ மன்னிப்பு கேட்கும் ஆண் // [1F647 200D 2642] +🙋‍♀ கை உயர்த்தும் பெண் // [1F64B 200D 2640] +🙋‍♂ கை உயர்த்தும் ஆண் // [1F64B 200D 2642] +🙍‍♀ வருத்தமான பெண் // [1F64D 200D 2640] +🙍‍♂ வருத்தமான ஆண் // [1F64D 200D 2642] +🙎‍♀ கோபமாக இருக்கும் பெண் // [1F64E 200D 2640] +🙎‍♂ கோபமான ஆண் // [1F64E 200D 2642] +🤦‍♀ விரக்தியடைந்த பெண் // [1F926 200D 2640] +🤦‍♂ விரக்தியடைந்த ஆண் // [1F926 200D 2642] +🤷‍♀ தெரியாது என்று காட்டும் பெண் // [1F937 200D 2640] +🤷‍♂ தெரியாது என்று காட்டும் ஆண் // [1F937 200D 2642] + +// Emoji ZWJ Sequence: Other + +🏳‍🌈 வானவில் கொடி // [1F3F3 200D 1F308] +👁‍🗨 பேச்சுவடிவக் குமிழியில் கண் // [1F441 200D 1F5E8] + +// References: +// [UCD] Unicode Character Database 9.0.0 [http://www.unicode.org/Public/9.0.0/ucd/] +// [Emoji] Unicode Emoji 5.0 [http://www.unicode.org/Public/emoji/5.0/] +// [CLDR] Unicode Common Locale Data Repository 31.0.1 [http://cldr.unicode.org/index/downloads/cldr-31] +// +// Sources: +// 1. emoji-test.txt (Emoji) +// 2. common/annotations/ta.xml (CLDR) +// 3. emoji-zwj-sequences.txt (Emoji) From 7fc1e3031627a61426506fbd7e2beb419535a087 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 19 Aug 2017 08:59:50 +0100 Subject: [PATCH 041/137] Add tests for espeak_SetVoiceByName. --- tests/api.c | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/tests/api.c b/tests/api.c index b7cdacce..8f068346 100644 --- a/tests/api.c +++ b/tests/api.c @@ -31,6 +31,8 @@ #include "synthesize.h" #include "translate.h" +// region espeak_Initialize + void test_espeak_terminate_without_initialize() { @@ -66,6 +68,9 @@ test_espeak_initialize() assert(p_decoder == NULL); } +// endregion +// region espeak_Synth + void test_espeak_synth() { @@ -124,6 +129,110 @@ test_espeak_synth_no_voices(const char *path) assert(p_decoder == NULL); } +// endregion +// region espeak_SetVoiceByName + +void +test_espeak_set_voice_by_name_null_voice() +{ + printf("testing espeak_SetVoiceByName(NULL)\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_SetVoiceByName("") == EE_NOT_FOUND); + assert(translator == NULL); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +void +test_espeak_set_voice_by_name_blank_voice() +{ + printf("testing espeak_SetVoiceByName(\"\")\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_SetVoiceByName("") == EE_NOT_FOUND); + assert(translator == NULL); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +void +test_espeak_set_voice_by_name_valid_voice() +{ + printf("testing espeak_SetVoiceByName(\"de\")\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_SetVoiceByName("de") == EE_OK); + assert(translator != NULL); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +// endregion + int main(int argc, char **argv) { @@ -139,6 +248,10 @@ main(int argc, char **argv) test_espeak_synth_no_voices(progdir); test_espeak_synth(); + test_espeak_set_voice_by_name_null_voice(); + test_espeak_set_voice_by_name_blank_voice(); + test_espeak_set_voice_by_name_valid_voice(); + free(progdir); return EXIT_SUCCESS; From c0308e3140c70770c80c0d8b83e0364069e0eeb6 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 19 Aug 2017 09:05:27 +0100 Subject: [PATCH 042/137] tests/api: test that the translator's dictionary is correct. --- tests/api.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/api.c b/tests/api.c index 8f068346..0e2aa705 100644 --- a/tests/api.c +++ b/tests/api.c @@ -88,10 +88,12 @@ test_espeak_synth() const char *test = "One two three."; assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Synchronize() == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Terminate() == EE_OK); @@ -153,10 +155,12 @@ test_espeak_set_voice_by_name_null_voice() const char *test = "One two three."; assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Synchronize() == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Terminate() == EE_OK); @@ -186,10 +190,12 @@ test_espeak_set_voice_by_name_blank_voice() const char *test = "One two three."; assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Synchronize() == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Terminate() == EE_OK); @@ -214,15 +220,18 @@ test_espeak_set_voice_by_name_valid_voice() assert(espeak_SetVoiceByName("de") == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "de") == 0); assert(p_decoder == NULL); const char *test = "One two three."; assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "de") == 0); assert(p_decoder != NULL); assert(espeak_Synchronize() == EE_OK); assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "de") == 0); assert(p_decoder != NULL); assert(espeak_Terminate() == EE_OK); From aee367c334106e091a9144d645f689f452039e64 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 19 Aug 2017 10:11:32 +0100 Subject: [PATCH 043/137] Add espeak_SetVoiceByProperties tests with the languages property. --- tests/api.c | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) diff --git a/tests/api.c b/tests/api.c index 0e2aa705..6733d853 100644 --- a/tests/api.c +++ b/tests/api.c @@ -240,6 +240,167 @@ test_espeak_set_voice_by_name_valid_voice() assert(p_decoder == NULL); } +// endregion +// region espeak_SetVoiceByProperties + +void +test_espeak_set_voice_by_properties_empty() +{ + printf("testing espeak_SetVoiceByProperties: (none)\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + espeak_VOICE properties; + memset(&properties, 0, sizeof(properties)); + + assert(espeak_SetVoiceByProperties(&properties) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "af") == 0); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "af") == 0); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "af") == 0); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +void +test_espeak_set_voice_by_properties_blank_language() +{ + printf("testing espeak_SetVoiceByProperties: languages=\"\"\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + espeak_VOICE properties; + memset(&properties, 0, sizeof(properties)); + properties.languages = ""; + + assert(espeak_SetVoiceByProperties(&properties) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "af") == 0); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "af") == 0); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "af") == 0); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +void +test_espeak_set_voice_by_properties_with_valid_language() +{ + printf("testing espeak_SetVoiceByProperties: languages=\"mk\" (valid)\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + espeak_VOICE properties; + memset(&properties, 0, sizeof(properties)); + properties.languages = "mk"; + + assert(espeak_SetVoiceByProperties(&properties) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "mk") == 0); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "mk") == 0); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "mk") == 0); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +void +test_espeak_set_voice_by_properties_with_invalid_language() +{ + printf("testing espeak_SetVoiceByProperties: languages=\"zzz\" (invalid)\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + espeak_VOICE properties; + memset(&properties, 0, sizeof(properties)); + properties.languages = "zzz"; + + assert(espeak_SetVoiceByProperties(&properties) == EE_NOT_FOUND); + assert(translator == NULL); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + // endregion int @@ -261,6 +422,11 @@ main(int argc, char **argv) test_espeak_set_voice_by_name_blank_voice(); test_espeak_set_voice_by_name_valid_voice(); + test_espeak_set_voice_by_properties_empty(); + test_espeak_set_voice_by_properties_blank_language(); + test_espeak_set_voice_by_properties_with_valid_language(); + test_espeak_set_voice_by_properties_with_invalid_language(); + free(progdir); return EXIT_SUCCESS; From 4d4a8419f8e1ff3fbee89457f02dd15b6ccabbaf Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 19 Aug 2017 10:19:00 +0100 Subject: [PATCH 044/137] Test espeak_SetVoiceByName with an invalid voice name. --- tests/api.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/api.c b/tests/api.c index 6733d853..bc57f8a1 100644 --- a/tests/api.c +++ b/tests/api.c @@ -240,6 +240,41 @@ test_espeak_set_voice_by_name_valid_voice() assert(p_decoder == NULL); } +void +test_espeak_set_voice_by_name_invalid_voice() +{ + printf("testing espeak_SetVoiceByName(\"zzz\")\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_SetVoiceByName("zzz") == EE_NOT_FOUND); + assert(translator == NULL); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + // endregion // region espeak_SetVoiceByProperties @@ -421,6 +456,7 @@ main(int argc, char **argv) test_espeak_set_voice_by_name_null_voice(); test_espeak_set_voice_by_name_blank_voice(); test_espeak_set_voice_by_name_valid_voice(); + test_espeak_set_voice_by_name_invalid_voice(); test_espeak_set_voice_by_properties_empty(); test_espeak_set_voice_by_properties_blank_language(); From 16bea7fd0faa75e51e95d9f7aafa6d411019025d Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 19 Aug 2017 11:44:13 +0100 Subject: [PATCH 045/137] Don't crash in LoadVoice if langopts is NULL. --- src/libespeak-ng/voices.c | 112 +++++++++++++++++++++++--------------- tests/api.c | 37 +++++++++++++ 2 files changed, 104 insertions(+), 45 deletions(-) diff --git a/src/libespeak-ng/voices.c b/src/libespeak-ng/voices.c index 6a9d68b2..47a15209 100644 --- a/src/libespeak-ng/voices.c +++ b/src/libespeak-ng/voices.c @@ -705,47 +705,57 @@ voice_t *LoadVoice(const char *vname, int control) break; case V_INTONATION: // intonation sscanf(p, "%d %d", &option_tone_flags, &option_tone2); - if ((option_tone_flags & 0xff) != 0) - langopts->intonation_group = option_tone_flags & 0xff; + if ((option_tone_flags & 0xff) != 0) { + if (langopts) + langopts->intonation_group = option_tone_flags & 0xff; + else + fprintf(stderr, "Cannot set intonation: language not set, or is invalid.\n"); + } break; case V_TUNES: n = sscanf(p, "%s %s %s %s %s %s", names[0], names[1], names[2], names[3], names[4], names[5]); - langopts->intonation_group = 0; - for (ix = 0; ix < n; ix++) { - if (strcmp(names[ix], "NULL") == 0) - continue; + if (langopts) { + langopts->intonation_group = 0; + for (ix = 0; ix < n; ix++) { + if (strcmp(names[ix], "NULL") == 0) + continue; - if ((value = LookupTune(names[ix])) < 0) - fprintf(stderr, "Unknown tune '%s'\n", names[ix]); - else - langopts->tunes[ix] = value; - } + if ((value = LookupTune(names[ix])) < 0) + fprintf(stderr, "Unknown tune '%s'\n", names[ix]); + else + langopts->tunes[ix] = value; + } + } else + fprintf(stderr, "Cannot set tunes: language not set, or is invalid.\n"); break; case V_DICTRULES: // conditional dictionary rules and list entries case V_NUMBERS: case V_STRESSOPT: - // expect a list of numbers - while (*p != 0) { - while (isspace(*p)) p++; - if ((n = atoi(p)) > 0) { - p++; - if (n < 32) { - if (key == V_DICTRULES) - conditional_rules |= (1 << n); - else if (key == V_NUMBERS) - langopts->numbers |= (1 << n); - else if (key == V_STRESSOPT) - langopts->stress_flags |= (1 << n); - } else { - if ((key == V_NUMBERS) && (n < 64)) - langopts->numbers2 |= (1 << (n-32)); - else - fprintf(stderr, "Bad option number %d\n", n); + if (langopts) { + // expect a list of numbers + while (*p != 0) { + while (isspace(*p)) p++; + if ((n = atoi(p)) > 0) { + p++; + if (n < 32) { + if (key == V_DICTRULES) + conditional_rules |= (1 << n); + else if (key == V_NUMBERS) + langopts->numbers |= (1 << n); + else if (key == V_STRESSOPT) + langopts->stress_flags |= (1 << n); + } else { + if ((key == V_NUMBERS) && (n < 64)) + langopts->numbers2 |= (1 << (n-32)); + else + fprintf(stderr, "Bad option number %d\n", n); + } } + while (isalnum(*p)) p++; } - while (isalnum(*p)) p++; - } - ProcessLanguageOptions(langopts); + ProcessLanguageOptions(langopts); + } else + fprintf(stderr, "Cannot set stressopt: language not set, or is invalid.\n"); break; case V_REPLACE: if (phonemes_set == 0) { @@ -756,22 +766,31 @@ voice_t *LoadVoice(const char *vname, int control) PhonemeReplacement(p); break; case V_WORDGAP: // words - sscanf(p, "%d %d", &langopts->word_gap, &langopts->vowel_pause); + if (langopts) + sscanf(p, "%d %d", &langopts->word_gap, &langopts->vowel_pause); + else + fprintf(stderr, "Cannot set wordgap: language not set, or is invalid.\n"); break; case V_STRESSRULE: - sscanf(p, "%d %d %d %d", &langopts->stress_rule, - &langopts->stress_flags, - &langopts->unstressed_wd1, - &langopts->unstressed_wd2); + if (langopts) + sscanf(p, "%d %d %d %d", &langopts->stress_rule, + &langopts->stress_flags, + &langopts->unstressed_wd1, + &langopts->unstressed_wd2); + else + fprintf(stderr, "Cannot set stressrule: language not set, or is invalid.\n"); break; case V_OPTION: - value2 = 0; - if (((sscanf(p, "%s %d %d", option_name, &value, &value2) >= 2) && ((ix = LookupMnem(options_tab, option_name)) >= 0)) || - ((sscanf(p, "%d %d %d", &ix, &value, &value2) >= 2) && (ix < N_LOPTS))) { - langopts->param[ix] = value; - langopts->param2[ix] = value2; + if (langopts) { + value2 = 0; + if (((sscanf(p, "%s %d %d", option_name, &value, &value2) >= 2) && ((ix = LookupMnem(options_tab, option_name)) >= 0)) || + ((sscanf(p, "%d %d %d", &ix, &value, &value2) >= 2) && (ix < N_LOPTS))) { + langopts->param[ix] = value; + langopts->param2[ix] = value2; + } else + fprintf(stderr, "Bad voice option: %s %s\n", buf, p); } else - fprintf(stderr, "Bad voice option: %s %s\n", buf, p); + fprintf(stderr, "Cannot set option: language not set, or is invalid.\n"); break; case V_ECHO: // echo. suggest: 135mS 11% @@ -852,9 +871,12 @@ voice_t *LoadVoice(const char *vname, int control) case V_STATUS: break; default: - if ((key & 0xff00) == 0x100) - sscanf(p, "%d", &langopts->param[key &0xff]); - else + if ((key & 0xff00) == 0x100) { + if (langopts) + sscanf(p, "%d", &langopts->param[key &0xff]); + else + fprintf(stderr, "Cannot set voice attribute: language not set, or is invalid.\n"); + } else fprintf(stderr, "Bad voice attribute: %s\n", buf); break; } diff --git a/tests/api.c b/tests/api.c index bc57f8a1..e474a039 100644 --- a/tests/api.c +++ b/tests/api.c @@ -275,6 +275,42 @@ test_espeak_set_voice_by_name_invalid_voice() assert(p_decoder == NULL); } +void +test_espeak_set_voice_by_name_language_variant_intonation_parameter() +{ + printf("testing espeak_SetVoiceByName(\"!v/Annie\") (language variant; intonation)\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_SetVoiceByName("!v/Annie") == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + // endregion // region espeak_SetVoiceByProperties @@ -457,6 +493,7 @@ main(int argc, char **argv) test_espeak_set_voice_by_name_blank_voice(); test_espeak_set_voice_by_name_valid_voice(); test_espeak_set_voice_by_name_invalid_voice(); + test_espeak_set_voice_by_name_language_variant_intonation_parameter(); test_espeak_set_voice_by_properties_empty(); test_espeak_set_voice_by_properties_blank_language(); From 882c2651e1d88c7f538ca706fc08090db93940a7 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 19 Aug 2017 12:04:14 +0100 Subject: [PATCH 046/137] Fix setting the default voice from espeak_SetVoiceByProperties. --- src/espeak-ng.c | 2 +- src/include/espeak-ng/espeak_ng.h | 2 ++ src/libespeak-ng/voices.c | 6 +++--- tests/api.c | 12 ++++++------ 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/espeak-ng.c b/src/espeak-ng.c index 94c62513..23854942 100644 --- a/src/espeak-ng.c +++ b/src/espeak-ng.c @@ -598,7 +598,7 @@ int main(int argc, char **argv) } if (voicename[0] == 0) - strcpy(voicename, "en"); + strcpy(voicename, ESPEAKNG_DEFAULT_VOICE); result = espeak_ng_SetVoiceByName(voicename); if (result != ENS_OK) { diff --git a/src/include/espeak-ng/espeak_ng.h b/src/include/espeak-ng/espeak_ng.h index e25fdb35..36d2682b 100644 --- a/src/include/espeak-ng/espeak_ng.h +++ b/src/include/espeak-ng/espeak_ng.h @@ -36,6 +36,8 @@ extern "C" #define ESPEAK_NG_API #endif +#define ESPEAKNG_DEFAULT_VOICE "en" + typedef enum { ENS_GROUP_MASK = 0x70000000, ENS_GROUP_ERRNO = 0x00000000, /* Values 0-255 map to errno error codes. */ diff --git a/src/libespeak-ng/voices.c b/src/libespeak-ng/voices.c index 47a15209..f657af08 100644 --- a/src/libespeak-ng/voices.c +++ b/src/libespeak-ng/voices.c @@ -544,7 +544,7 @@ voice_t *LoadVoice(const char *vname, int control) return NULL; } else { if (voicename[0] == 0) - strcpy(voicename, "en"); + strcpy(voicename, ESPEAKNG_DEFAULT_VOICE); sprintf(path_voices, "%s%cvoices%c", path_home, PATHSEP, PATHSEP); sprintf(buf, "%s%s", path_voices, voicename); // look in the main voices directory @@ -1294,7 +1294,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) if (voice_select2.name == NULL) { if ((voice_select2.name = voice_select2.identifier) == NULL) - voice_select2.name = "default"; + voice_select2.name = ESPEAKNG_DEFAULT_VOICE; } strncpy0(buf, voice_select2.name, sizeof(buf)); @@ -1321,7 +1321,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) if (nv == 0) { // no matching voice, choose the default *found = 0; - if ((voices[0] = SelectVoiceByName(voices_list, "default")) != NULL) + if ((voices[0] = SelectVoiceByName(voices_list, ESPEAKNG_DEFAULT_VOICE)) != NULL) nv = 1; } diff --git a/tests/api.c b/tests/api.c index e474a039..cff84996 100644 --- a/tests/api.c +++ b/tests/api.c @@ -333,18 +333,18 @@ test_espeak_set_voice_by_properties_empty() assert(espeak_SetVoiceByProperties(&properties) == EE_OK); assert(translator != NULL); - assert(strcmp(translator->dictionary_name, "af") == 0); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder == NULL); const char *test = "One two three."; assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); assert(translator != NULL); - assert(strcmp(translator->dictionary_name, "af") == 0); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Synchronize() == EE_OK); assert(translator != NULL); - assert(strcmp(translator->dictionary_name, "af") == 0); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Terminate() == EE_OK); @@ -373,18 +373,18 @@ test_espeak_set_voice_by_properties_blank_language() assert(espeak_SetVoiceByProperties(&properties) == EE_OK); assert(translator != NULL); - assert(strcmp(translator->dictionary_name, "af") == 0); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder == NULL); const char *test = "One two three."; assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_OK); assert(translator != NULL); - assert(strcmp(translator->dictionary_name, "af") == 0); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Synchronize() == EE_OK); assert(translator != NULL); - assert(strcmp(translator->dictionary_name, "af") == 0); + assert(strcmp(translator->dictionary_name, "en") == 0); assert(p_decoder != NULL); assert(espeak_Terminate() == EE_OK); From 8585b0b47d14cec6a921c402feab897a5bdf4d35 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 19 Aug 2017 12:27:39 +0100 Subject: [PATCH 047/137] Fix the return status code from Synthesize when the voices cannot be found. --- CHANGELOG.md | 1 + src/libespeak-ng/speech.c | 2 +- tests/api.c | 70 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 574dcf4f..0c32d3a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ bug fixes: * Fix running `make clean ; make`. * Fix reading stdin buffers larger than 1000. * Fixed various language and parent BCP 47 codes (`jp` is now `ja`). +* Fixed several crashes and bugs in `espeak_SetVoiceByName/Properties`. new languages: diff --git a/src/libespeak-ng/speech.c b/src/libespeak-ng/speech.c index bd8cd294..1def1073 100644 --- a/src/libespeak-ng/speech.c +++ b/src/libespeak-ng/speech.c @@ -400,7 +400,7 @@ static espeak_ng_STATUS Synthesize(unsigned int unique_identifier, const void *t espeak_ng_STATUS status; if (translator == NULL) { - status = espeak_SetVoiceByName("en"); + status = espeak_ng_SetVoiceByName("en"); if (status != ENS_OK) return status; } diff --git a/tests/api.c b/tests/api.c index cff84996..6a509711 100644 --- a/tests/api.c +++ b/tests/api.c @@ -117,7 +117,70 @@ test_espeak_synth_no_voices(const char *path) assert(p_decoder == NULL); const char *test = "One two three."; - assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_INTERNAL_ERROR); + assert(espeak_Synth(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == EE_NOT_FOUND); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +// endregion +// region espeak_ng_Synthesize + +void +test_espeak_ng_synthesize() +{ + printf("testing espeak_ng_Synthesize\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, NULL, 0) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_ng_Synthesize(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == ENS_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder != NULL); + + assert(espeak_Synchronize() == EE_OK); + assert(translator != NULL); + assert(strcmp(translator->dictionary_name, "en") == 0); + assert(p_decoder != NULL); + + assert(espeak_Terminate() == EE_OK); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +void +test_espeak_ng_synthesize_no_voices(const char *path) +{ + printf("testing espeak_ng_Synthesize in path with no voices\n"); + + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + assert(espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, 0, path, espeakINITIALIZE_DONT_EXIT) == 22050); + assert(event_list != NULL); + assert(translator == NULL); + assert(p_decoder == NULL); + + const char *test = "One two three."; + assert(espeak_ng_Synthesize(test, strlen(test)+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, NULL, NULL) == ENS_VOICE_NOT_FOUND); assert(translator == NULL); assert(p_decoder == NULL); @@ -489,6 +552,11 @@ main(int argc, char **argv) test_espeak_synth_no_voices(progdir); test_espeak_synth(); + test_espeak_ng_synthesize(); + test_espeak_ng_synthesize(); // Check that this does not crash when run a second time. + test_espeak_ng_synthesize_no_voices(progdir); + test_espeak_ng_synthesize(); + test_espeak_set_voice_by_name_null_voice(); test_espeak_set_voice_by_name_blank_voice(); test_espeak_set_voice_by_name_valid_voice(); From d578e9ebd71a01411389bec4eb645eee2cf4e957 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 20 Aug 2017 22:31:56 +0100 Subject: [PATCH 048/137] Android: Update gradle to 2.3.3. --- android/build.gradle | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 19e09afb..e3b3cf93 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.2.3' + classpath 'com.android.tools.build:gradle:2.3.3' } } @@ -33,6 +33,7 @@ android { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] res.srcDirs = ['res'] + jniLibs.srcDir 'libs' } androidTest.setRoot('eSpeakTests') androidTest { @@ -44,8 +45,3 @@ android { abortOnError false } } - -tasks.withType(com.android.build.gradle.tasks.PackageApplication) { - pkgTask -> pkgTask.jniFolders = new HashSet() - pkgTask.jniFolders.add(new File(projectDir, 'libs')) -} From 4f360435d8388aaf971af514af3806d3d23f4a7f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 20 Aug 2017 22:33:03 +0100 Subject: [PATCH 049/137] Android: Update the android gradle build tools to 25.0.3. --- android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/build.gradle b/android/build.gradle index e3b3cf93..78806c47 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -18,7 +18,7 @@ dependencies { } android { - buildToolsVersion '19.1' + buildToolsVersion '25.0.3' compileSdkVersion 23 defaultConfig { From dc2b2a43b8f4fb4931d71458ce4da352c04ce2ba Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 20 Aug 2017 22:34:05 +0100 Subject: [PATCH 050/137] Android: Update the compile/targetSdkVersion to 26. --- android/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 78806c47..18009da1 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -19,11 +19,11 @@ dependencies { android { buildToolsVersion '25.0.3' - compileSdkVersion 23 + compileSdkVersion 26 defaultConfig { minSdkVersion 14 - targetSdkVersion 23 + targetSdkVersion 26 versionCode 20 versionName "1.48.15" } From c8f83c6b1f5359c285ff3217fb9e85a6a39eba8f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 20 Aug 2017 22:47:56 +0100 Subject: [PATCH 051/137] Add ucd/ucd.h to readclause.c, to fix building on Android. --- src/libespeak-ng/readclause.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libespeak-ng/readclause.c b/src/libespeak-ng/readclause.c index c660c89a..719ed91a 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "error.h" #include "speech.h" From 17620ed60791b532aee49090cef03daa81b10edb Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 20 Aug 2017 22:48:21 +0100 Subject: [PATCH 052/137] Android: Update APP_PLATFORM to android-14. --- android/jni/Application.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/jni/Application.mk b/android/jni/Application.mk index d0767029..a292fa64 100644 --- a/android/jni/Application.mk +++ b/android/jni/Application.mk @@ -1,4 +1,4 @@ APP_OPTIM := release -APP_PLATFORM := android-8 +APP_PLATFORM := android-14 APP_TOOLCHAIN_VERSION := 4.6.3 APP_ABI := mips armeabi armeabi-v7a x86 From b357f47394dcc47e2d9eb76e969c98ac92ced07f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Mon, 21 Aug 2017 07:03:36 +0100 Subject: [PATCH 053/137] Android: add the language files to espeakdata.zip from their new location. --- Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.am b/Makefile.am index 698b669b..0ae0c326 100644 --- a/Makefile.am +++ b/Makefile.am @@ -389,6 +389,7 @@ android/res/raw/espeakdata.zip: espeak-ng-data/phontab dictionaries rm -f $@ find espeak-ng-data/{intonations,phondata,phonindex,phontab} | zip -@ $@ find espeak-ng-data/*_dict | zip -@ $@ + find espeak-ng-data/lang -type f | zip -@ $@ find espeak-ng-data/voices -type f | grep -vF "/mb/" | zip -@ $@ android/res/raw/espeakdata_version: android/res/raw/espeakdata.zip From 98a34ebaf58ae8bf3a02ee889d98ce7bcf50e980 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Mon, 21 Aug 2017 21:05:49 +0100 Subject: [PATCH 054/137] Android: Update the VoiceData identifier fields. --- .../com/reecedunn/espeak/test/VoiceData.java | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java index d2edfdcc..5afb7cf6 100644 --- a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java +++ b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java @@ -75,87 +75,87 @@ public class VoiceData } public static final Voice[] voices = new Voice[] { - new Voice("af", "other/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"), - new Voice("am", "test/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"), - new Voice("an", "europe/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"), - new Voice("as", "test/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"), - new Voice("az", "test/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"), - new Voice("bg", "europe/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"), - new Voice("bn", "asia/bn", "bn", "ben", "", "", "", SpeechSynthesis.GENDER_MALE, "Bengali", "ben", "This is a sample of text spoken in বাংলা", "This is a sample of text spoken in Bengali"), - new Voice("bs", "europe/bs", "bs", "bos", "", "", "", SpeechSynthesis.GENDER_MALE, "Bosnian", "bos", "This is a sample of text spoken in Bosnian", "This is a sample of text spoken in bosanski"), - new Voice("ca", "europe/ca", "ca", "cat", "", "", "", SpeechSynthesis.GENDER_MALE, "Catalan", "cat", "Aquesta és una mostra de text llegit en veu alta en català"), - new Voice("cs", "europe/cs", "cs", "ces", "", "", "", SpeechSynthesis.GENDER_MALE, "Czech", "ces", "Toto je ukázkový text namluvený v jazyce čeština"), - new Voice("cy", "europe/cy", "cy", "cym", "", "", "", SpeechSynthesis.GENDER_MALE, "Welsh", "cym", "This is a sample of text spoken in Welsh", "This is a sample of text spoken in Cymraeg"), - new Voice("da", "europe/da", "da", "dan", "", "", "", SpeechSynthesis.GENDER_MALE, "Danish", "dan", "Dette er et eksempel på talt tekst på dansk"), - new Voice("de", "de", "de", "deu", "", "", "", SpeechSynthesis.GENDER_MALE, "German", "deu", "Dies ist ein Beispieltext auf Deutsch"), - new Voice("el", "europe/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"), + new Voice("af", "gmw/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"), + new Voice("am", "sem/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"), + new Voice("an", "roa/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"), + new Voice("as", "inc/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"), + new Voice("az", "trk/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"), + new Voice("bg", "zls/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"), + new Voice("bn", "inc/bn", "bn", "ben", "", "", "", SpeechSynthesis.GENDER_MALE, "Bengali", "ben", "This is a sample of text spoken in বাংলা", "This is a sample of text spoken in Bengali"), + new Voice("bs", "zls/bs", "bs", "bos", "", "", "", SpeechSynthesis.GENDER_MALE, "Bosnian", "bos", "This is a sample of text spoken in Bosnian", "This is a sample of text spoken in bosanski"), + new Voice("ca", "roa/ca", "ca", "cat", "", "", "", SpeechSynthesis.GENDER_MALE, "Catalan", "cat", "Aquesta és una mostra de text llegit en veu alta en català"), + new Voice("cs", "zlw/cs", "cs", "ces", "", "", "", SpeechSynthesis.GENDER_MALE, "Czech", "ces", "Toto je ukázkový text namluvený v jazyce čeština"), + new Voice("cy", "cel/cy", "cy", "cym", "", "", "", SpeechSynthesis.GENDER_MALE, "Welsh", "cym", "This is a sample of text spoken in Welsh", "This is a sample of text spoken in Cymraeg"), + new Voice("da", "gmq/da", "da", "dan", "", "", "", SpeechSynthesis.GENDER_MALE, "Danish", "dan", "Dette er et eksempel på talt tekst på dansk"), + new Voice("de", "gmw/de", "de", "deu", "", "", "", SpeechSynthesis.GENDER_MALE, "German", "deu", "Dies ist ein Beispieltext auf Deutsch"), + new Voice("el", "grk/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"), new Voice("en", "default", "en", "eng", "", "", "", SpeechSynthesis.GENDER_MALE, "English", "eng", "This is a sample of text spoken in English"), new Voice("en-sc", "other/en-sc", "en", "eng", "GB", "GBR", "scotland", SpeechSynthesis.GENDER_MALE, "English (Scotland)", "eng-GBR-scotland", "This is a sample of text spoken in English (United Kingdom,Scottish Standard English)"), - new Voice("en-gb", "en", "en", "eng", "GB", "GBR", "", SpeechSynthesis.GENDER_MALE, "English (UK)", "eng-GBR", "This is a sample of text spoken in English (United Kingdom)"), + new Voice("en-gb", "gmw/en", "en", "eng", "GB", "GBR", "", SpeechSynthesis.GENDER_MALE, "English (UK)", "eng-GBR", "This is a sample of text spoken in English (United Kingdom)"), new Voice("en-uk-north", "other/en-n", "en", "eng", "GB", "GBR", "north", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-north", "This is a sample of text spoken in English (United Kingdom,NORTH)"), new Voice("en-uk-rp", "other/en-rp", "en", "eng", "GB", "GBR", "rp", SpeechSynthesis.GENDER_MALE, "English (Received Pronunciation)", "eng-GBR-rp", "This is a sample of text spoken in English (United Kingdom,RP)", "This is a sample of text spoken in English (United Kingdom,rp)"), new Voice("en-uk-wmids", "other/en-wm", "en", "eng", "GB", "GBR", "wmids", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-wmids", "This is a sample of text spoken in English (United Kingdom,WMIDS)"), - new Voice("en-us", "en-us", "en", "eng", "US", "USA", "", SpeechSynthesis.GENDER_MALE, "English (US)", "eng-USA", "This is a sample of text spoken in English (United States)"), + new Voice("en-us", "gmw/en-US", "en", "eng", "US", "USA", "", SpeechSynthesis.GENDER_MALE, "English (US)", "eng-USA", "This is a sample of text spoken in English (United States)"), new Voice("en-wi", "other/en-wi", "en", "eng", "JM", "JAM", "", SpeechSynthesis.GENDER_MALE, "English (Caribbean)", "eng-JAM", "This is a sample of text spoken in English (Jamaica)"), - new Voice("eo", "other/eo", "eo", "epo", "", "", "", SpeechSynthesis.GENDER_MALE, "Esperanto", "epo", "This is a sample of text spoken in Esperanto", "This is a sample of text spoken in esperanto"), - new Voice("es", "europe/es", "es", "spa", "", "", "", SpeechSynthesis.GENDER_MALE, "Spanish", "spa", "Esto es un ejemplo de texto hablado en español."), + new Voice("eo", "art/eo", "eo", "epo", "", "", "", SpeechSynthesis.GENDER_MALE, "Esperanto", "epo", "This is a sample of text spoken in Esperanto", "This is a sample of text spoken in esperanto"), + new Voice("es", "roa/es", "es", "spa", "", "", "", SpeechSynthesis.GENDER_MALE, "Spanish", "spa", "Esto es un ejemplo de texto hablado en español."), new Voice("es-la", "es-la", "es", "spa", "MX", "MEX", "", SpeechSynthesis.GENDER_MALE, "Spanish (Latin America)", "spa-MEX", "Esto es un ejemplo de texto hablado en español (México)."), - new Voice("et", "europe/et", "et", "est", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Estonian", "est", "This is a sample of text spoken in eesti", "This is a sample of text spoken in Estonian"), - new Voice("eu", "europe/eu", "eu", "eus", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Basque", "eus", "This is a sample of text spoken in Basque", "This is a sample of text spoken in euskara"), - new Voice("fa", "asia/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"), - new Voice("fi", "europe/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"), - new Voice("fr-be", "europe/fr-be", "fr", "fra", "BE", "BEL", "", SpeechSynthesis.GENDER_MALE, "French (Belgium)", "fra-BEL", "Voici un exemple de texte énoncé en français (Belgique)."), - new Voice("fr-fr", "fr", "fr", "fra", "FR", "FRA", "", SpeechSynthesis.GENDER_MALE, "French (France)", "fra-FRA", "Voici un exemple de texte énoncé en français (France)."), - new Voice("ga", "europe/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"), - new Voice("gd", "test/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Scottish Gaelic", "gla", "This is a sample of text spoken in Scottish Gaelic", "This is a sample of text spoken in Gàidhlig"), - new Voice("grc", "other/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"), - new Voice("gu", "asia/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"), - new Voice("hi", "asia/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"), - new Voice("hr", "europe/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"), - new Voice("hu", "europe/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."), - new Voice("hy", "asia/hy", "hy", "hye", "", "", "", SpeechSynthesis.GENDER_MALE, "Armenian", "hye", "This is a sample of text spoken in Armenian", "This is a sample of text spoken in հայերեն"), - new Voice("hy-west", "asia/hy-west", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"), - new Voice("ia", "other/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"), - new Voice("id", "asia/id", "in", "ind", "", "", "", SpeechSynthesis.GENDER_MALE, "Indonesia", "ind", "Ini adalah sebuah contoh teks yang diucapkan di Bahasa Indonesia"), // NOTE: 'id' is the correct ISO 639-1 code, but Android/Java uses 'in'. - new Voice("is", "europe/is", "is", "isl", "", "", "", SpeechSynthesis.GENDER_MALE, "Icelandic", "isl", "This is a sample of text spoken in íslenska", "This is a sample of text spoken in Icelandic"), - new Voice("it", "europe/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"), - new Voice("jbo", "other/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Lojban", "jbo", "This is a sample of text spoken in Lojban"), - new Voice("ka", "asia/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"), - new Voice("kl", "test/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"), - new Voice("kn", "asia/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"), - new Voice("ko", "asia/ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."), - new Voice("ku", "asia/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"), - new Voice("la", "other/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"), - new Voice("lt", "europe/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"), - new Voice("lv", "europe/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."), - new Voice("mk", "europe/mk", "mk", "mkd", "", "", "", SpeechSynthesis.GENDER_MALE, "Macedonian", "mkd", "This is a sample of text spoken in Macedonian", "This is a sample of text spoken in македонски"), - new Voice("ml", "asia/ml", "ml", "mal", "", "", "", SpeechSynthesis.GENDER_MALE, "Malayalam", "mal", "This is a sample of text spoken in Malayalam", "This is a sample of text spoken in മലയാളം"), - new Voice("mr", "test/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"), - new Voice("ms", "asia/ms", "ms", "msa", "", "", "", SpeechSynthesis.GENDER_MALE, "Malay", "msa", "Ini adalah sampel teks yang dilafazkan dalam Bahasa Melayu", "Ini adalah sampel teks yang dilafazkan dalam Malay"), - new Voice("ne", "asia/ne", "ne", "nep", "", "", "", SpeechSynthesis.GENDER_MALE, "Nepali", "nep", "This is a sample of text spoken in Nepali", "This is a sample of text spoken in नेपाली"), - new Voice("nl", "europe/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"), + new Voice("et", "urj/et", "et", "est", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Estonian", "est", "This is a sample of text spoken in eesti", "This is a sample of text spoken in Estonian"), + new Voice("eu", "eu", "eu", "eus", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Basque", "eus", "This is a sample of text spoken in Basque", "This is a sample of text spoken in euskara"), + new Voice("fa", "ira/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"), + new Voice("fi", "urj/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"), + new Voice("fr-be", "roa/fr-BE", "fr", "fra", "BE", "BEL", "", SpeechSynthesis.GENDER_MALE, "French (Belgium)", "fra-BEL", "Voici un exemple de texte énoncé en français (Belgique)."), + new Voice("fr-fr", "roa/fr", "fr", "fra", "FR", "FRA", "", SpeechSynthesis.GENDER_MALE, "French (France)", "fra-FRA", "Voici un exemple de texte énoncé en français (France)."), + new Voice("ga", "cel/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"), + new Voice("gd", "cel/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Scottish Gaelic", "gla", "This is a sample of text spoken in Scottish Gaelic", "This is a sample of text spoken in Gàidhlig"), + new Voice("grc", "grk/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"), + new Voice("gu", "inc/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"), + new Voice("hi", "inc/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"), + new Voice("hr", "zls/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"), + new Voice("hu", "urj/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."), + new Voice("hy", "ine/hy", "hy", "hye", "", "", "", SpeechSynthesis.GENDER_MALE, "Armenian", "hye", "This is a sample of text spoken in Armenian", "This is a sample of text spoken in հայերեն"), + new Voice("hy-west", "ine/hy-west", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"), + new Voice("ia", "art/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"), + new Voice("id", "poz/id", "in", "ind", "", "", "", SpeechSynthesis.GENDER_MALE, "Indonesia", "ind", "Ini adalah sebuah contoh teks yang diucapkan di Bahasa Indonesia"), // NOTE: 'id' is the correct ISO 639-1 code, but Android/Java uses 'in'. + new Voice("is", "gmq/is", "is", "isl", "", "", "", SpeechSynthesis.GENDER_MALE, "Icelandic", "isl", "This is a sample of text spoken in íslenska", "This is a sample of text spoken in Icelandic"), + new Voice("it", "roa/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"), + new Voice("jbo", "art/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Lojban", "jbo", "This is a sample of text spoken in Lojban"), + new Voice("ka", "ccs/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"), + new Voice("kl", "esx/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"), + new Voice("kn", "dra/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"), + new Voice("ko", "ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."), + new Voice("ku", "ira/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"), + new Voice("la", "itc/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"), + new Voice("lt", "bat/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"), + new Voice("lv", "bat/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."), + new Voice("mk", "zls/mk", "mk", "mkd", "", "", "", SpeechSynthesis.GENDER_MALE, "Macedonian", "mkd", "This is a sample of text spoken in Macedonian", "This is a sample of text spoken in македонски"), + new Voice("ml", "dra/ml", "ml", "mal", "", "", "", SpeechSynthesis.GENDER_MALE, "Malayalam", "mal", "This is a sample of text spoken in Malayalam", "This is a sample of text spoken in മലയാളം"), + new Voice("mr", "inc/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"), + new Voice("ms", "poz/ms", "ms", "msa", "", "", "", SpeechSynthesis.GENDER_MALE, "Malay", "msa", "Ini adalah sampel teks yang dilafazkan dalam Bahasa Melayu", "Ini adalah sampel teks yang dilafazkan dalam Malay"), + new Voice("ne", "inc/ne", "ne", "nep", "", "", "", SpeechSynthesis.GENDER_MALE, "Nepali", "nep", "This is a sample of text spoken in Nepali", "This is a sample of text spoken in नेपाली"), + new Voice("nl", "gmw/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"), new Voice("no", "europe/no", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"), - new Voice("om", "test/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"), - new Voice("or", "test/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"), - new Voice("pa", "asia/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"), - new Voice("pap", "test/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"), - new Voice("pl", "europe/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"), - new Voice("pt-br", "pt", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"), + new Voice("om", "cus/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"), + new Voice("or", "inc/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"), + new Voice("pa", "inc/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"), + new Voice("pap", "roa/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"), + new Voice("pl", "zlw/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"), + new Voice("pt-br", "roa/pt-BR", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"), new Voice("pt-pt", "europe/pt-pt", "pt", "por", "PT", "PRT", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Portugal)", "por-PRT", "Este é um exemplo de texto falado em português (Portugal)"), - new Voice("ro", "europe/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"), - new Voice("ru", "europe/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"), - new Voice("si", "test/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"), - new Voice("sk", "europe/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"), - new Voice("sl", "test/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"), - new Voice("sq", "europe/sq", "sq", "sqi", "", "", "", SpeechSynthesis.GENDER_MALE, "Albanian", "sqi", "This is a sample of text spoken in Albanian", "This is a sample of text spoken in Shqip", "This is a sample of text spoken in shqip"), - new Voice("sr", "europe/sr", "sr", "srp", "", "", "", SpeechSynthesis.GENDER_MALE, "Serbian", "srp", "Ово је пример текста који је изговорен на језику Српски", "Ово је пример текста који је изговорен на језику српски"), - new Voice("sv", "europe/sv", "sv", "swe", "", "", "", SpeechSynthesis.GENDER_MALE, "Swedish", "swe", "Detta är ett textexempel som läses på svenska"), - new Voice("sw", "other/sw", "sw", "swa", "", "", "", SpeechSynthesis.GENDER_MALE, "Swahili", "swa", "Hii ni sampuli ya maandishi yaliyonenwa katika Kiswahili", "Hii ni sampuli ya maandishi yaliyonenwa katika Swahili"), - new Voice("ta", "asia/ta", "ta", "tam", "", "", "", SpeechSynthesis.GENDER_MALE, "Tamil", "tam", "This is a sample of text spoken in தமிழ்", "This is a sample of text spoken in Tamil"), - new Voice("te", "asia/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"), - new Voice("tr", "asia/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"), - new Voice("ur", "test/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"), - new Voice("vi", "asia/vi", "vi", "vie", "", "", "", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie", "Đây là mẫu văn bản được đọc bằng Tiếng Việt"), + new Voice("ro", "roa/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"), + new Voice("ru", "zle/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"), + new Voice("si", "inc/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"), + new Voice("sk", "zlw/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"), + new Voice("sl", "zls/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"), + new Voice("sq", "ine/sq", "sq", "sqi", "", "", "", SpeechSynthesis.GENDER_MALE, "Albanian", "sqi", "This is a sample of text spoken in Albanian", "This is a sample of text spoken in Shqip", "This is a sample of text spoken in shqip"), + new Voice("sr", "zls/sr", "sr", "srp", "", "", "", SpeechSynthesis.GENDER_MALE, "Serbian", "srp", "Ово је пример текста који је изговорен на језику Српски", "Ово је пример текста који је изговорен на језику српски"), + new Voice("sv", "gmq/sv", "sv", "swe", "", "", "", SpeechSynthesis.GENDER_MALE, "Swedish", "swe", "Detta är ett textexempel som läses på svenska"), + new Voice("sw", "bnt/sw", "sw", "swa", "", "", "", SpeechSynthesis.GENDER_MALE, "Swahili", "swa", "Hii ni sampuli ya maandishi yaliyonenwa katika Kiswahili", "Hii ni sampuli ya maandishi yaliyonenwa katika Swahili"), + new Voice("ta", "dra/ta", "ta", "tam", "", "", "", SpeechSynthesis.GENDER_MALE, "Tamil", "tam", "This is a sample of text spoken in தமிழ்", "This is a sample of text spoken in Tamil"), + new Voice("te", "dra/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"), + new Voice("tr", "trk/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"), + new Voice("ur", "inc/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"), + new Voice("vi", "aav/vi", "vi", "vie", "", "", "", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie", "Đây là mẫu văn bản được đọc bằng Tiếng Việt"), new Voice("vi-hue", "asia/vi-hue", "vi", "vie", "VN", "VNM", "hue", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-hue", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,HUE)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,hue)"), new Voice("vi-sgn", "asia/vi-sgn", "vi", "vie", "VN", "VNM", "saigon", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-saigon", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SAIGON)"), new Voice("zh", "asia/zh", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"), From 5027f5310e37691a359d3c38c2b9754c1dab008e Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Mon, 21 Aug 2017 21:17:03 +0100 Subject: [PATCH 055/137] Android: Update the VoiceData gender field -- the default is always male now to reflect the default voice settings. --- .../com/reecedunn/espeak/test/VoiceData.java | 170 +++++++++--------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java index 5afb7cf6..cecb273a 100644 --- a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java +++ b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java @@ -75,90 +75,90 @@ public class VoiceData } public static final Voice[] voices = new Voice[] { - new Voice("af", "gmw/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"), - new Voice("am", "sem/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"), - new Voice("an", "roa/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"), - new Voice("as", "inc/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"), - new Voice("az", "trk/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"), - new Voice("bg", "zls/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"), - new Voice("bn", "inc/bn", "bn", "ben", "", "", "", SpeechSynthesis.GENDER_MALE, "Bengali", "ben", "This is a sample of text spoken in বাংলা", "This is a sample of text spoken in Bengali"), - new Voice("bs", "zls/bs", "bs", "bos", "", "", "", SpeechSynthesis.GENDER_MALE, "Bosnian", "bos", "This is a sample of text spoken in Bosnian", "This is a sample of text spoken in bosanski"), - new Voice("ca", "roa/ca", "ca", "cat", "", "", "", SpeechSynthesis.GENDER_MALE, "Catalan", "cat", "Aquesta és una mostra de text llegit en veu alta en català"), - new Voice("cs", "zlw/cs", "cs", "ces", "", "", "", SpeechSynthesis.GENDER_MALE, "Czech", "ces", "Toto je ukázkový text namluvený v jazyce čeština"), - new Voice("cy", "cel/cy", "cy", "cym", "", "", "", SpeechSynthesis.GENDER_MALE, "Welsh", "cym", "This is a sample of text spoken in Welsh", "This is a sample of text spoken in Cymraeg"), - new Voice("da", "gmq/da", "da", "dan", "", "", "", SpeechSynthesis.GENDER_MALE, "Danish", "dan", "Dette er et eksempel på talt tekst på dansk"), - new Voice("de", "gmw/de", "de", "deu", "", "", "", SpeechSynthesis.GENDER_MALE, "German", "deu", "Dies ist ein Beispieltext auf Deutsch"), - new Voice("el", "grk/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"), - new Voice("en", "default", "en", "eng", "", "", "", SpeechSynthesis.GENDER_MALE, "English", "eng", "This is a sample of text spoken in English"), - new Voice("en-sc", "other/en-sc", "en", "eng", "GB", "GBR", "scotland", SpeechSynthesis.GENDER_MALE, "English (Scotland)", "eng-GBR-scotland", "This is a sample of text spoken in English (United Kingdom,Scottish Standard English)"), - new Voice("en-gb", "gmw/en", "en", "eng", "GB", "GBR", "", SpeechSynthesis.GENDER_MALE, "English (UK)", "eng-GBR", "This is a sample of text spoken in English (United Kingdom)"), - new Voice("en-uk-north", "other/en-n", "en", "eng", "GB", "GBR", "north", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-north", "This is a sample of text spoken in English (United Kingdom,NORTH)"), - new Voice("en-uk-rp", "other/en-rp", "en", "eng", "GB", "GBR", "rp", SpeechSynthesis.GENDER_MALE, "English (Received Pronunciation)", "eng-GBR-rp", "This is a sample of text spoken in English (United Kingdom,RP)", "This is a sample of text spoken in English (United Kingdom,rp)"), - new Voice("en-uk-wmids", "other/en-wm", "en", "eng", "GB", "GBR", "wmids", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-wmids", "This is a sample of text spoken in English (United Kingdom,WMIDS)"), - new Voice("en-us", "gmw/en-US", "en", "eng", "US", "USA", "", SpeechSynthesis.GENDER_MALE, "English (US)", "eng-USA", "This is a sample of text spoken in English (United States)"), - new Voice("en-wi", "other/en-wi", "en", "eng", "JM", "JAM", "", SpeechSynthesis.GENDER_MALE, "English (Caribbean)", "eng-JAM", "This is a sample of text spoken in English (Jamaica)"), - new Voice("eo", "art/eo", "eo", "epo", "", "", "", SpeechSynthesis.GENDER_MALE, "Esperanto", "epo", "This is a sample of text spoken in Esperanto", "This is a sample of text spoken in esperanto"), - new Voice("es", "roa/es", "es", "spa", "", "", "", SpeechSynthesis.GENDER_MALE, "Spanish", "spa", "Esto es un ejemplo de texto hablado en español."), - new Voice("es-la", "es-la", "es", "spa", "MX", "MEX", "", SpeechSynthesis.GENDER_MALE, "Spanish (Latin America)", "spa-MEX", "Esto es un ejemplo de texto hablado en español (México)."), - new Voice("et", "urj/et", "et", "est", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Estonian", "est", "This is a sample of text spoken in eesti", "This is a sample of text spoken in Estonian"), - new Voice("eu", "eu", "eu", "eus", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Basque", "eus", "This is a sample of text spoken in Basque", "This is a sample of text spoken in euskara"), - new Voice("fa", "ira/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"), - new Voice("fi", "urj/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"), - new Voice("fr-be", "roa/fr-BE", "fr", "fra", "BE", "BEL", "", SpeechSynthesis.GENDER_MALE, "French (Belgium)", "fra-BEL", "Voici un exemple de texte énoncé en français (Belgique)."), - new Voice("fr-fr", "roa/fr", "fr", "fra", "FR", "FRA", "", SpeechSynthesis.GENDER_MALE, "French (France)", "fra-FRA", "Voici un exemple de texte énoncé en français (France)."), - new Voice("ga", "cel/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"), - new Voice("gd", "cel/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Scottish Gaelic", "gla", "This is a sample of text spoken in Scottish Gaelic", "This is a sample of text spoken in Gàidhlig"), - new Voice("grc", "grk/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"), - new Voice("gu", "inc/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"), - new Voice("hi", "inc/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"), - new Voice("hr", "zls/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"), - new Voice("hu", "urj/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."), - new Voice("hy", "ine/hy", "hy", "hye", "", "", "", SpeechSynthesis.GENDER_MALE, "Armenian", "hye", "This is a sample of text spoken in Armenian", "This is a sample of text spoken in հայերեն"), - new Voice("hy-west", "ine/hy-west", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"), - new Voice("ia", "art/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"), - new Voice("id", "poz/id", "in", "ind", "", "", "", SpeechSynthesis.GENDER_MALE, "Indonesia", "ind", "Ini adalah sebuah contoh teks yang diucapkan di Bahasa Indonesia"), // NOTE: 'id' is the correct ISO 639-1 code, but Android/Java uses 'in'. - new Voice("is", "gmq/is", "is", "isl", "", "", "", SpeechSynthesis.GENDER_MALE, "Icelandic", "isl", "This is a sample of text spoken in íslenska", "This is a sample of text spoken in Icelandic"), - new Voice("it", "roa/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"), - new Voice("jbo", "art/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Lojban", "jbo", "This is a sample of text spoken in Lojban"), - new Voice("ka", "ccs/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"), - new Voice("kl", "esx/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"), - new Voice("kn", "dra/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"), - new Voice("ko", "ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."), - new Voice("ku", "ira/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"), - new Voice("la", "itc/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"), - new Voice("lt", "bat/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"), - new Voice("lv", "bat/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."), - new Voice("mk", "zls/mk", "mk", "mkd", "", "", "", SpeechSynthesis.GENDER_MALE, "Macedonian", "mkd", "This is a sample of text spoken in Macedonian", "This is a sample of text spoken in македонски"), - new Voice("ml", "dra/ml", "ml", "mal", "", "", "", SpeechSynthesis.GENDER_MALE, "Malayalam", "mal", "This is a sample of text spoken in Malayalam", "This is a sample of text spoken in മലയാളം"), - new Voice("mr", "inc/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"), - new Voice("ms", "poz/ms", "ms", "msa", "", "", "", SpeechSynthesis.GENDER_MALE, "Malay", "msa", "Ini adalah sampel teks yang dilafazkan dalam Bahasa Melayu", "Ini adalah sampel teks yang dilafazkan dalam Malay"), - new Voice("ne", "inc/ne", "ne", "nep", "", "", "", SpeechSynthesis.GENDER_MALE, "Nepali", "nep", "This is a sample of text spoken in Nepali", "This is a sample of text spoken in नेपाली"), - new Voice("nl", "gmw/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"), - new Voice("no", "europe/no", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"), - new Voice("om", "cus/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"), - new Voice("or", "inc/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"), - new Voice("pa", "inc/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"), - new Voice("pap", "roa/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"), - new Voice("pl", "zlw/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"), - new Voice("pt-br", "roa/pt-BR", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"), - new Voice("pt-pt", "europe/pt-pt", "pt", "por", "PT", "PRT", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Portugal)", "por-PRT", "Este é um exemplo de texto falado em português (Portugal)"), - new Voice("ro", "roa/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"), - new Voice("ru", "zle/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"), - new Voice("si", "inc/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"), - new Voice("sk", "zlw/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"), - new Voice("sl", "zls/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"), - new Voice("sq", "ine/sq", "sq", "sqi", "", "", "", SpeechSynthesis.GENDER_MALE, "Albanian", "sqi", "This is a sample of text spoken in Albanian", "This is a sample of text spoken in Shqip", "This is a sample of text spoken in shqip"), - new Voice("sr", "zls/sr", "sr", "srp", "", "", "", SpeechSynthesis.GENDER_MALE, "Serbian", "srp", "Ово је пример текста који је изговорен на језику Српски", "Ово је пример текста који је изговорен на језику српски"), - new Voice("sv", "gmq/sv", "sv", "swe", "", "", "", SpeechSynthesis.GENDER_MALE, "Swedish", "swe", "Detta är ett textexempel som läses på svenska"), - new Voice("sw", "bnt/sw", "sw", "swa", "", "", "", SpeechSynthesis.GENDER_MALE, "Swahili", "swa", "Hii ni sampuli ya maandishi yaliyonenwa katika Kiswahili", "Hii ni sampuli ya maandishi yaliyonenwa katika Swahili"), - new Voice("ta", "dra/ta", "ta", "tam", "", "", "", SpeechSynthesis.GENDER_MALE, "Tamil", "tam", "This is a sample of text spoken in தமிழ்", "This is a sample of text spoken in Tamil"), - new Voice("te", "dra/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"), - new Voice("tr", "trk/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"), - new Voice("ur", "inc/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"), - new Voice("vi", "aav/vi", "vi", "vie", "", "", "", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie", "Đây là mẫu văn bản được đọc bằng Tiếng Việt"), - new Voice("vi-hue", "asia/vi-hue", "vi", "vie", "VN", "VNM", "hue", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-hue", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,HUE)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,hue)"), - new Voice("vi-sgn", "asia/vi-sgn", "vi", "vie", "VN", "VNM", "saigon", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-saigon", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SAIGON)"), - new Voice("zh", "asia/zh", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"), - new Voice("zh-yue", "asia/zh-yue", "zh", "zho", "HK", "HKG", "", SpeechSynthesis.GENDER_MALE, "Chinese (Cantonese)", "zho-HKG", "This is a sample of text spoken in 中文 (中華人民共和國香港特別行政區)", "This is a sample of text spoken in 中文 (香港)"), + new Voice("af", "gmw/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"), + new Voice("am", "sem/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_MALE, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"), + new Voice("an", "roa/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"), + new Voice("as", "inc/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_MALE, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"), + new Voice("az", "trk/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_MALE, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"), + new Voice("bg", "zls/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_MALE, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"), + new Voice("bn", "inc/bn", "bn", "ben", "", "", "", SpeechSynthesis.GENDER_MALE, "Bengali", "ben", "This is a sample of text spoken in বাংলা", "This is a sample of text spoken in Bengali"), + new Voice("bs", "zls/bs", "bs", "bos", "", "", "", SpeechSynthesis.GENDER_MALE, "Bosnian", "bos", "This is a sample of text spoken in Bosnian", "This is a sample of text spoken in bosanski"), + new Voice("ca", "roa/ca", "ca", "cat", "", "", "", SpeechSynthesis.GENDER_MALE, "Catalan", "cat", "Aquesta és una mostra de text llegit en veu alta en català"), + new Voice("cs", "zlw/cs", "cs", "ces", "", "", "", SpeechSynthesis.GENDER_MALE, "Czech", "ces", "Toto je ukázkový text namluvený v jazyce čeština"), + new Voice("cy", "cel/cy", "cy", "cym", "", "", "", SpeechSynthesis.GENDER_MALE, "Welsh", "cym", "This is a sample of text spoken in Welsh", "This is a sample of text spoken in Cymraeg"), + new Voice("da", "gmq/da", "da", "dan", "", "", "", SpeechSynthesis.GENDER_MALE, "Danish", "dan", "Dette er et eksempel på talt tekst på dansk"), + new Voice("de", "gmw/de", "de", "deu", "", "", "", SpeechSynthesis.GENDER_MALE, "German", "deu", "Dies ist ein Beispieltext auf Deutsch"), + new Voice("el", "grk/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"), + new Voice("en", "default", "en", "eng", "", "", "", SpeechSynthesis.GENDER_MALE, "English", "eng", "This is a sample of text spoken in English"), + new Voice("en-sc", "other/en-sc", "en", "eng", "GB", "GBR", "scotland", SpeechSynthesis.GENDER_MALE, "English (Scotland)", "eng-GBR-scotland", "This is a sample of text spoken in English (United Kingdom,Scottish Standard English)"), + new Voice("en-gb", "gmw/en", "en", "eng", "GB", "GBR", "", SpeechSynthesis.GENDER_MALE, "English (UK)", "eng-GBR", "This is a sample of text spoken in English (United Kingdom)"), + new Voice("en-uk-north", "other/en-n", "en", "eng", "GB", "GBR", "north", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-north", "This is a sample of text spoken in English (United Kingdom,NORTH)"), + new Voice("en-uk-rp", "other/en-rp", "en", "eng", "GB", "GBR", "rp", SpeechSynthesis.GENDER_MALE, "English (Received Pronunciation)", "eng-GBR-rp", "This is a sample of text spoken in English (United Kingdom,RP)", "This is a sample of text spoken in English (United Kingdom,rp)"), + new Voice("en-uk-wmids", "other/en-wm", "en", "eng", "GB", "GBR", "wmids", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-wmids", "This is a sample of text spoken in English (United Kingdom,WMIDS)"), + new Voice("en-us", "gmw/en-US", "en", "eng", "US", "USA", "", SpeechSynthesis.GENDER_MALE, "English (US)", "eng-USA", "This is a sample of text spoken in English (United States)"), + new Voice("en-wi", "other/en-wi", "en", "eng", "JM", "JAM", "", SpeechSynthesis.GENDER_MALE, "English (Caribbean)", "eng-JAM", "This is a sample of text spoken in English (Jamaica)"), + new Voice("eo", "art/eo", "eo", "epo", "", "", "", SpeechSynthesis.GENDER_MALE, "Esperanto", "epo", "This is a sample of text spoken in Esperanto", "This is a sample of text spoken in esperanto"), + new Voice("es", "roa/es", "es", "spa", "", "", "", SpeechSynthesis.GENDER_MALE, "Spanish", "spa", "Esto es un ejemplo de texto hablado en español."), + new Voice("es-la", "es-la", "es", "spa", "MX", "MEX", "", SpeechSynthesis.GENDER_MALE, "Spanish (Latin America)", "spa-MEX", "Esto es un ejemplo de texto hablado en español (México)."), + new Voice("et", "urj/et", "et", "est", "", "", "", SpeechSynthesis.GENDER_MALE, "Estonian", "est", "This is a sample of text spoken in eesti", "This is a sample of text spoken in Estonian"), + new Voice("eu", "eu", "eu", "eus", "", "", "", SpeechSynthesis.GENDER_MALE, "Basque", "eus", "This is a sample of text spoken in Basque", "This is a sample of text spoken in euskara"), + new Voice("fa", "ira/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_MALE, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"), + new Voice("fi", "urj/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"), + new Voice("fr-be", "roa/fr-BE", "fr", "fra", "BE", "BEL", "", SpeechSynthesis.GENDER_MALE, "French (Belgium)", "fra-BEL", "Voici un exemple de texte énoncé en français (Belgique)."), + new Voice("fr-fr", "roa/fr", "fr", "fra", "FR", "FRA", "", SpeechSynthesis.GENDER_MALE, "French (France)", "fra-FRA", "Voici un exemple de texte énoncé en français (France)."), + new Voice("ga", "cel/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_MALE, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"), + new Voice("gd", "cel/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_MALE, "Scottish Gaelic", "gla", "This is a sample of text spoken in Scottish Gaelic", "This is a sample of text spoken in Gàidhlig"), + new Voice("grc", "grk/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"), + new Voice("gu", "inc/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_MALE, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"), + new Voice("hi", "inc/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"), + new Voice("hr", "zls/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"), + new Voice("hu", "urj/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."), + new Voice("hy", "ine/hy", "hy", "hye", "", "", "", SpeechSynthesis.GENDER_MALE, "Armenian", "hye", "This is a sample of text spoken in Armenian", "This is a sample of text spoken in հայերեն"), + new Voice("hy-west", "ine/hy-west", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"), + new Voice("ia", "art/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_MALE, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"), + new Voice("id", "poz/id", "in", "ind", "", "", "", SpeechSynthesis.GENDER_MALE, "Indonesia", "ind", "Ini adalah sebuah contoh teks yang diucapkan di Bahasa Indonesia"), // NOTE: 'id' is the correct ISO 639-1 code, but Android/Java uses 'in'. + new Voice("is", "gmq/is", "is", "isl", "", "", "", SpeechSynthesis.GENDER_MALE, "Icelandic", "isl", "This is a sample of text spoken in íslenska", "This is a sample of text spoken in Icelandic"), + new Voice("it", "roa/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"), + new Voice("jbo", "art/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_MALE, "Lojban", "jbo", "This is a sample of text spoken in Lojban"), + new Voice("ka", "ccs/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_MALE, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"), + new Voice("kl", "esx/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_MALE, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"), + new Voice("kn", "dra/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_MALE, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"), + new Voice("ko", "ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."), + new Voice("ku", "ira/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"), + new Voice("la", "itc/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"), + new Voice("lt", "bat/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"), + new Voice("lv", "bat/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."), + new Voice("mk", "zls/mk", "mk", "mkd", "", "", "", SpeechSynthesis.GENDER_MALE, "Macedonian", "mkd", "This is a sample of text spoken in Macedonian", "This is a sample of text spoken in македонски"), + new Voice("ml", "dra/ml", "ml", "mal", "", "", "", SpeechSynthesis.GENDER_MALE, "Malayalam", "mal", "This is a sample of text spoken in Malayalam", "This is a sample of text spoken in മലയാളം"), + new Voice("mr", "inc/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_MALE, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"), + new Voice("ms", "poz/ms", "ms", "msa", "", "", "", SpeechSynthesis.GENDER_MALE, "Malay", "msa", "Ini adalah sampel teks yang dilafazkan dalam Bahasa Melayu", "Ini adalah sampel teks yang dilafazkan dalam Malay"), + new Voice("ne", "inc/ne", "ne", "nep", "", "", "", SpeechSynthesis.GENDER_MALE, "Nepali", "nep", "This is a sample of text spoken in Nepali", "This is a sample of text spoken in नेपाली"), + new Voice("nl", "gmw/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"), + new Voice("no", "europe/no", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"), + new Voice("om", "cus/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_MALE, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"), + new Voice("or", "inc/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_MALE, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"), + new Voice("pa", "inc/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_MALE, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"), + new Voice("pap", "roa/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_MALE, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"), + new Voice("pl", "zlw/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"), + new Voice("pt-br", "roa/pt-BR", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"), + new Voice("pt-pt", "europe/pt-pt", "pt", "por", "PT", "PRT", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Portugal)", "por-PRT", "Este é um exemplo de texto falado em português (Portugal)"), + new Voice("ro", "roa/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"), + new Voice("ru", "zle/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"), + new Voice("si", "inc/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_MALE, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"), + new Voice("sk", "zlw/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"), + new Voice("sl", "zls/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"), + new Voice("sq", "ine/sq", "sq", "sqi", "", "", "", SpeechSynthesis.GENDER_MALE, "Albanian", "sqi", "This is a sample of text spoken in Albanian", "This is a sample of text spoken in Shqip", "This is a sample of text spoken in shqip"), + new Voice("sr", "zls/sr", "sr", "srp", "", "", "", SpeechSynthesis.GENDER_MALE, "Serbian", "srp", "Ово је пример текста који је изговорен на језику Српски", "Ово је пример текста који је изговорен на језику српски"), + new Voice("sv", "gmq/sv", "sv", "swe", "", "", "", SpeechSynthesis.GENDER_MALE, "Swedish", "swe", "Detta är ett textexempel som läses på svenska"), + new Voice("sw", "bnt/sw", "sw", "swa", "", "", "", SpeechSynthesis.GENDER_MALE, "Swahili", "swa", "Hii ni sampuli ya maandishi yaliyonenwa katika Kiswahili", "Hii ni sampuli ya maandishi yaliyonenwa katika Swahili"), + new Voice("ta", "dra/ta", "ta", "tam", "", "", "", SpeechSynthesis.GENDER_MALE, "Tamil", "tam", "This is a sample of text spoken in தமிழ்", "This is a sample of text spoken in Tamil"), + new Voice("te", "dra/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_MALE, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"), + new Voice("tr", "trk/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"), + new Voice("ur", "inc/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_MALE, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"), + new Voice("vi", "aav/vi", "vi", "vie", "", "", "", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie", "Đây là mẫu văn bản được đọc bằng Tiếng Việt"), + new Voice("vi-hue", "asia/vi-hue", "vi", "vie", "VN", "VNM", "hue", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-hue", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,HUE)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,hue)"), + new Voice("vi-sgn", "asia/vi-sgn", "vi", "vie", "VN", "VNM", "saigon", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-saigon", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SAIGON)"), + new Voice("zh", "asia/zh", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"), + new Voice("zh-yue", "asia/zh-yue", "zh", "zho", "HK", "HKG", "", SpeechSynthesis.GENDER_MALE, "Chinese (Cantonese)", "zho-HKG", "This is a sample of text spoken in 中文 (中華人民共和國香港特別行政區)", "This is a sample of text spoken in 中文 (香港)"), }; } From 44f33468c484acfda7e9a0905572cc9b3e7dcb4d Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 22 Aug 2017 18:30:30 +0100 Subject: [PATCH 056/137] Android: Fix mapping voices who's IDs have been updated to be BCP47 compliant. --- .../com/reecedunn/espeak/test/VoiceData.java | 169 +++++++++--------- .../com/reecedunn/espeak/SpeechSynthesis.java | 21 +-- 2 files changed, 92 insertions(+), 98 deletions(-) diff --git a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java index cecb273a..2c915c5f 100644 --- a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java +++ b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java @@ -75,90 +75,89 @@ public class VoiceData } public static final Voice[] voices = new Voice[] { - new Voice("af", "gmw/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"), - new Voice("am", "sem/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_MALE, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"), - new Voice("an", "roa/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"), - new Voice("as", "inc/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_MALE, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"), - new Voice("az", "trk/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_MALE, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"), - new Voice("bg", "zls/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_MALE, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"), - new Voice("bn", "inc/bn", "bn", "ben", "", "", "", SpeechSynthesis.GENDER_MALE, "Bengali", "ben", "This is a sample of text spoken in বাংলা", "This is a sample of text spoken in Bengali"), - new Voice("bs", "zls/bs", "bs", "bos", "", "", "", SpeechSynthesis.GENDER_MALE, "Bosnian", "bos", "This is a sample of text spoken in Bosnian", "This is a sample of text spoken in bosanski"), - new Voice("ca", "roa/ca", "ca", "cat", "", "", "", SpeechSynthesis.GENDER_MALE, "Catalan", "cat", "Aquesta és una mostra de text llegit en veu alta en català"), - new Voice("cs", "zlw/cs", "cs", "ces", "", "", "", SpeechSynthesis.GENDER_MALE, "Czech", "ces", "Toto je ukázkový text namluvený v jazyce čeština"), - new Voice("cy", "cel/cy", "cy", "cym", "", "", "", SpeechSynthesis.GENDER_MALE, "Welsh", "cym", "This is a sample of text spoken in Welsh", "This is a sample of text spoken in Cymraeg"), - new Voice("da", "gmq/da", "da", "dan", "", "", "", SpeechSynthesis.GENDER_MALE, "Danish", "dan", "Dette er et eksempel på talt tekst på dansk"), - new Voice("de", "gmw/de", "de", "deu", "", "", "", SpeechSynthesis.GENDER_MALE, "German", "deu", "Dies ist ein Beispieltext auf Deutsch"), - new Voice("el", "grk/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"), - new Voice("en", "default", "en", "eng", "", "", "", SpeechSynthesis.GENDER_MALE, "English", "eng", "This is a sample of text spoken in English"), - new Voice("en-sc", "other/en-sc", "en", "eng", "GB", "GBR", "scotland", SpeechSynthesis.GENDER_MALE, "English (Scotland)", "eng-GBR-scotland", "This is a sample of text spoken in English (United Kingdom,Scottish Standard English)"), - new Voice("en-gb", "gmw/en", "en", "eng", "GB", "GBR", "", SpeechSynthesis.GENDER_MALE, "English (UK)", "eng-GBR", "This is a sample of text spoken in English (United Kingdom)"), - new Voice("en-uk-north", "other/en-n", "en", "eng", "GB", "GBR", "north", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-north", "This is a sample of text spoken in English (United Kingdom,NORTH)"), - new Voice("en-uk-rp", "other/en-rp", "en", "eng", "GB", "GBR", "rp", SpeechSynthesis.GENDER_MALE, "English (Received Pronunciation)", "eng-GBR-rp", "This is a sample of text spoken in English (United Kingdom,RP)", "This is a sample of text spoken in English (United Kingdom,rp)"), - new Voice("en-uk-wmids", "other/en-wm", "en", "eng", "GB", "GBR", "wmids", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-wmids", "This is a sample of text spoken in English (United Kingdom,WMIDS)"), - new Voice("en-us", "gmw/en-US", "en", "eng", "US", "USA", "", SpeechSynthesis.GENDER_MALE, "English (US)", "eng-USA", "This is a sample of text spoken in English (United States)"), - new Voice("en-wi", "other/en-wi", "en", "eng", "JM", "JAM", "", SpeechSynthesis.GENDER_MALE, "English (Caribbean)", "eng-JAM", "This is a sample of text spoken in English (Jamaica)"), - new Voice("eo", "art/eo", "eo", "epo", "", "", "", SpeechSynthesis.GENDER_MALE, "Esperanto", "epo", "This is a sample of text spoken in Esperanto", "This is a sample of text spoken in esperanto"), - new Voice("es", "roa/es", "es", "spa", "", "", "", SpeechSynthesis.GENDER_MALE, "Spanish", "spa", "Esto es un ejemplo de texto hablado en español."), - new Voice("es-la", "es-la", "es", "spa", "MX", "MEX", "", SpeechSynthesis.GENDER_MALE, "Spanish (Latin America)", "spa-MEX", "Esto es un ejemplo de texto hablado en español (México)."), - new Voice("et", "urj/et", "et", "est", "", "", "", SpeechSynthesis.GENDER_MALE, "Estonian", "est", "This is a sample of text spoken in eesti", "This is a sample of text spoken in Estonian"), - new Voice("eu", "eu", "eu", "eus", "", "", "", SpeechSynthesis.GENDER_MALE, "Basque", "eus", "This is a sample of text spoken in Basque", "This is a sample of text spoken in euskara"), - new Voice("fa", "ira/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_MALE, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"), - new Voice("fi", "urj/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"), - new Voice("fr-be", "roa/fr-BE", "fr", "fra", "BE", "BEL", "", SpeechSynthesis.GENDER_MALE, "French (Belgium)", "fra-BEL", "Voici un exemple de texte énoncé en français (Belgique)."), - new Voice("fr-fr", "roa/fr", "fr", "fra", "FR", "FRA", "", SpeechSynthesis.GENDER_MALE, "French (France)", "fra-FRA", "Voici un exemple de texte énoncé en français (France)."), - new Voice("ga", "cel/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_MALE, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"), - new Voice("gd", "cel/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_MALE, "Scottish Gaelic", "gla", "This is a sample of text spoken in Scottish Gaelic", "This is a sample of text spoken in Gàidhlig"), - new Voice("grc", "grk/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"), - new Voice("gu", "inc/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_MALE, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"), - new Voice("hi", "inc/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"), - new Voice("hr", "zls/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"), - new Voice("hu", "urj/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."), - new Voice("hy", "ine/hy", "hy", "hye", "", "", "", SpeechSynthesis.GENDER_MALE, "Armenian", "hye", "This is a sample of text spoken in Armenian", "This is a sample of text spoken in հայերեն"), - new Voice("hy-west", "ine/hy-west", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"), - new Voice("ia", "art/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_MALE, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"), - new Voice("id", "poz/id", "in", "ind", "", "", "", SpeechSynthesis.GENDER_MALE, "Indonesia", "ind", "Ini adalah sebuah contoh teks yang diucapkan di Bahasa Indonesia"), // NOTE: 'id' is the correct ISO 639-1 code, but Android/Java uses 'in'. - new Voice("is", "gmq/is", "is", "isl", "", "", "", SpeechSynthesis.GENDER_MALE, "Icelandic", "isl", "This is a sample of text spoken in íslenska", "This is a sample of text spoken in Icelandic"), - new Voice("it", "roa/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"), - new Voice("jbo", "art/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_MALE, "Lojban", "jbo", "This is a sample of text spoken in Lojban"), - new Voice("ka", "ccs/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_MALE, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"), - new Voice("kl", "esx/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_MALE, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"), - new Voice("kn", "dra/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_MALE, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"), - new Voice("ko", "ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."), - new Voice("ku", "ira/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"), - new Voice("la", "itc/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"), - new Voice("lt", "bat/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"), - new Voice("lv", "bat/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."), - new Voice("mk", "zls/mk", "mk", "mkd", "", "", "", SpeechSynthesis.GENDER_MALE, "Macedonian", "mkd", "This is a sample of text spoken in Macedonian", "This is a sample of text spoken in македонски"), - new Voice("ml", "dra/ml", "ml", "mal", "", "", "", SpeechSynthesis.GENDER_MALE, "Malayalam", "mal", "This is a sample of text spoken in Malayalam", "This is a sample of text spoken in മലയാളം"), - new Voice("mr", "inc/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_MALE, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"), - new Voice("ms", "poz/ms", "ms", "msa", "", "", "", SpeechSynthesis.GENDER_MALE, "Malay", "msa", "Ini adalah sampel teks yang dilafazkan dalam Bahasa Melayu", "Ini adalah sampel teks yang dilafazkan dalam Malay"), - new Voice("ne", "inc/ne", "ne", "nep", "", "", "", SpeechSynthesis.GENDER_MALE, "Nepali", "nep", "This is a sample of text spoken in Nepali", "This is a sample of text spoken in नेपाली"), - new Voice("nl", "gmw/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"), - new Voice("no", "europe/no", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"), - new Voice("om", "cus/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_MALE, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"), - new Voice("or", "inc/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_MALE, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"), - new Voice("pa", "inc/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_MALE, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"), - new Voice("pap", "roa/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_MALE, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"), - new Voice("pl", "zlw/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"), - new Voice("pt-br", "roa/pt-BR", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"), - new Voice("pt-pt", "europe/pt-pt", "pt", "por", "PT", "PRT", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Portugal)", "por-PRT", "Este é um exemplo de texto falado em português (Portugal)"), - new Voice("ro", "roa/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"), - new Voice("ru", "zle/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"), - new Voice("si", "inc/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_MALE, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"), - new Voice("sk", "zlw/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"), - new Voice("sl", "zls/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"), - new Voice("sq", "ine/sq", "sq", "sqi", "", "", "", SpeechSynthesis.GENDER_MALE, "Albanian", "sqi", "This is a sample of text spoken in Albanian", "This is a sample of text spoken in Shqip", "This is a sample of text spoken in shqip"), - new Voice("sr", "zls/sr", "sr", "srp", "", "", "", SpeechSynthesis.GENDER_MALE, "Serbian", "srp", "Ово је пример текста који је изговорен на језику Српски", "Ово је пример текста који је изговорен на језику српски"), - new Voice("sv", "gmq/sv", "sv", "swe", "", "", "", SpeechSynthesis.GENDER_MALE, "Swedish", "swe", "Detta är ett textexempel som läses på svenska"), - new Voice("sw", "bnt/sw", "sw", "swa", "", "", "", SpeechSynthesis.GENDER_MALE, "Swahili", "swa", "Hii ni sampuli ya maandishi yaliyonenwa katika Kiswahili", "Hii ni sampuli ya maandishi yaliyonenwa katika Swahili"), - new Voice("ta", "dra/ta", "ta", "tam", "", "", "", SpeechSynthesis.GENDER_MALE, "Tamil", "tam", "This is a sample of text spoken in தமிழ்", "This is a sample of text spoken in Tamil"), - new Voice("te", "dra/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_MALE, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"), - new Voice("tr", "trk/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"), - new Voice("ur", "inc/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_MALE, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"), - new Voice("vi", "aav/vi", "vi", "vie", "", "", "", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie", "Đây là mẫu văn bản được đọc bằng Tiếng Việt"), - new Voice("vi-hue", "asia/vi-hue", "vi", "vie", "VN", "VNM", "hue", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-hue", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,HUE)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,hue)"), - new Voice("vi-sgn", "asia/vi-sgn", "vi", "vie", "VN", "VNM", "saigon", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-saigon", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SAIGON)"), - new Voice("zh", "asia/zh", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"), - new Voice("zh-yue", "asia/zh-yue", "zh", "zho", "HK", "HKG", "", SpeechSynthesis.GENDER_MALE, "Chinese (Cantonese)", "zho-HKG", "This is a sample of text spoken in 中文 (中華人民共和國香港特別行政區)", "This is a sample of text spoken in 中文 (香港)"), + new Voice("af", "gmw/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"), + new Voice("am", "sem/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_MALE, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"), + new Voice("an", "roa/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"), + new Voice("as", "inc/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_MALE, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"), + new Voice("az", "trk/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_MALE, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"), + new Voice("bg", "zls/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_MALE, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"), + new Voice("bn", "inc/bn", "bn", "ben", "", "", "", SpeechSynthesis.GENDER_MALE, "Bengali", "ben", "This is a sample of text spoken in বাংলা", "This is a sample of text spoken in Bengali"), + new Voice("bs", "zls/bs", "bs", "bos", "", "", "", SpeechSynthesis.GENDER_MALE, "Bosnian", "bos", "This is a sample of text spoken in Bosnian", "This is a sample of text spoken in bosanski"), + new Voice("ca", "roa/ca", "ca", "cat", "", "", "", SpeechSynthesis.GENDER_MALE, "Catalan", "cat", "Aquesta és una mostra de text llegit en veu alta en català"), + new Voice("cs", "zlw/cs", "cs", "ces", "", "", "", SpeechSynthesis.GENDER_MALE, "Czech", "ces", "Toto je ukázkový text namluvený v jazyce čeština"), + new Voice("cy", "cel/cy", "cy", "cym", "", "", "", SpeechSynthesis.GENDER_MALE, "Welsh", "cym", "This is a sample of text spoken in Welsh", "This is a sample of text spoken in Cymraeg"), + new Voice("da", "gmq/da", "da", "dan", "", "", "", SpeechSynthesis.GENDER_MALE, "Danish", "dan", "Dette er et eksempel på talt tekst på dansk"), + new Voice("de", "gmw/de", "de", "deu", "", "", "", SpeechSynthesis.GENDER_MALE, "German", "deu", "Dies ist ein Beispieltext auf Deutsch"), + new Voice("el", "grk/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"), + new Voice("en-gb-scotland", "gmw/en-GB-scotland", "en", "eng", "GB", "GBR", "scotland", SpeechSynthesis.GENDER_MALE, "English (Scotland)", "eng-GBR-scotland", "This is a sample of text spoken in English (United Kingdom,Scottish Standard English)"), + new Voice("en-gb", "gmw/en", "en", "eng", "GB", "GBR", "", SpeechSynthesis.GENDER_MALE, "English (UK)", "eng-GBR", "This is a sample of text spoken in English (United Kingdom)"), + new Voice("en-gb-x-gbclan", "gmw/en-GB-x-gbclan", "en", "eng", "GB", "GBR", "gbclan", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-gbclan", "This is a sample of text spoken in English (United Kingdom,NORTH)"), + new Voice("en-gb-x-rp", "gmw/en-GB-x-rp", "en", "eng", "GB", "GBR", "rp", SpeechSynthesis.GENDER_MALE, "English (Received Pronunciation)", "eng-GBR-rp", "This is a sample of text spoken in English (United Kingdom,RP)", "This is a sample of text spoken in English (United Kingdom,rp)"), + new Voice("en-gb-x-gbcwmd", "gmw/en-GB-x-gbcwmd", "en", "eng", "GB", "GBR", "gbcwmd", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-gbcwmd", "This is a sample of text spoken in English (United Kingdom,WMIDS)"), + new Voice("en-us", "gmw/en-US", "en", "eng", "US", "USA", "", SpeechSynthesis.GENDER_MALE, "English (US)", "eng-USA", "This is a sample of text spoken in English (United States)"), + new Voice("en-029", "gmw/en-029", "en", "eng", "JM", "JAM", "", SpeechSynthesis.GENDER_MALE, "English (Caribbean)", "eng-JAM", "This is a sample of text spoken in English (Jamaica)"), + new Voice("eo", "art/eo", "eo", "epo", "", "", "", SpeechSynthesis.GENDER_MALE, "Esperanto", "epo", "This is a sample of text spoken in Esperanto", "This is a sample of text spoken in esperanto"), + new Voice("es", "roa/es", "es", "spa", "", "", "", SpeechSynthesis.GENDER_MALE, "Spanish", "spa", "Esto es un ejemplo de texto hablado en español."), + new Voice("es-419", "roa/es-419", "es", "spa", "MX", "MEX", "", SpeechSynthesis.GENDER_MALE, "Spanish (Latin America)", "spa-MEX", "Esto es un ejemplo de texto hablado en español (México)."), + new Voice("et", "urj/et", "et", "est", "", "", "", SpeechSynthesis.GENDER_MALE, "Estonian", "est", "This is a sample of text spoken in eesti", "This is a sample of text spoken in Estonian"), + new Voice("eu", "eu", "eu", "eus", "", "", "", SpeechSynthesis.GENDER_MALE, "Basque", "eus", "This is a sample of text spoken in Basque", "This is a sample of text spoken in euskara"), + new Voice("fa", "ira/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_MALE, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"), + new Voice("fi", "urj/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"), + new Voice("fr-be", "roa/fr-BE", "fr", "fra", "BE", "BEL", "", SpeechSynthesis.GENDER_MALE, "French (Belgium)", "fra-BEL", "Voici un exemple de texte énoncé en français (Belgique)."), + new Voice("fr-fr", "roa/fr", "fr", "fra", "FR", "FRA", "", SpeechSynthesis.GENDER_MALE, "French (France)", "fra-FRA", "Voici un exemple de texte énoncé en français (France)."), + new Voice("ga", "cel/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_MALE, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"), + new Voice("gd", "cel/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_MALE, "Scottish Gaelic", "gla", "This is a sample of text spoken in Scottish Gaelic", "This is a sample of text spoken in Gàidhlig"), + new Voice("grc", "grk/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"), + new Voice("gu", "inc/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_MALE, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"), + new Voice("hi", "inc/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"), + new Voice("hr", "zls/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"), + new Voice("hu", "urj/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."), + new Voice("hy", "ine/hy", "hy", "hye", "", "", "", SpeechSynthesis.GENDER_MALE, "Armenian", "hye", "This is a sample of text spoken in Armenian", "This is a sample of text spoken in հայերեն"), + new Voice("hy-west", "ine/hy-west", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"), + new Voice("ia", "art/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_MALE, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"), + new Voice("id", "poz/id", "in", "ind", "", "", "", SpeechSynthesis.GENDER_MALE, "Indonesia", "ind", "Ini adalah sebuah contoh teks yang diucapkan di Bahasa Indonesia"), // NOTE: 'id' is the correct ISO 639-1 code, but Android/Java uses 'in'. + new Voice("is", "gmq/is", "is", "isl", "", "", "", SpeechSynthesis.GENDER_MALE, "Icelandic", "isl", "This is a sample of text spoken in íslenska", "This is a sample of text spoken in Icelandic"), + new Voice("it", "roa/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"), + new Voice("jbo", "art/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_MALE, "Lojban", "jbo", "This is a sample of text spoken in Lojban"), + new Voice("ka", "ccs/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_MALE, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"), + new Voice("kl", "esx/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_MALE, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"), + new Voice("kn", "dra/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_MALE, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"), + new Voice("ko", "ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."), + new Voice("ku", "ira/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"), + new Voice("la", "itc/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"), + new Voice("lt", "bat/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"), + new Voice("lv", "bat/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."), + new Voice("mk", "zls/mk", "mk", "mkd", "", "", "", SpeechSynthesis.GENDER_MALE, "Macedonian", "mkd", "This is a sample of text spoken in Macedonian", "This is a sample of text spoken in македонски"), + new Voice("ml", "dra/ml", "ml", "mal", "", "", "", SpeechSynthesis.GENDER_MALE, "Malayalam", "mal", "This is a sample of text spoken in Malayalam", "This is a sample of text spoken in മലയാളം"), + new Voice("mr", "inc/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_MALE, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"), + new Voice("ms", "poz/ms", "ms", "msa", "", "", "", SpeechSynthesis.GENDER_MALE, "Malay", "msa", "Ini adalah sampel teks yang dilafazkan dalam Bahasa Melayu", "Ini adalah sampel teks yang dilafazkan dalam Malay"), + new Voice("ne", "inc/ne", "ne", "nep", "", "", "", SpeechSynthesis.GENDER_MALE, "Nepali", "nep", "This is a sample of text spoken in Nepali", "This is a sample of text spoken in नेपाली"), + new Voice("nl", "gmw/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"), + new Voice("no", "europe/no", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"), + new Voice("om", "cus/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_MALE, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"), + new Voice("or", "inc/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_MALE, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"), + new Voice("pa", "inc/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_MALE, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"), + new Voice("pap", "roa/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_MALE, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"), + new Voice("pl", "zlw/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"), + new Voice("pt", "roa/pt", "pt", "por", "", "", "", SpeechSynthesis.GENDER_MALE, "Portuguese", "por", "Este é um exemplo de texto falado em português (Portugal)"), + new Voice("pt-br", "roa/pt-BR", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"), + new Voice("ro", "roa/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"), + new Voice("ru", "zle/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"), + new Voice("si", "inc/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_MALE, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"), + new Voice("sk", "zlw/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"), + new Voice("sl", "zls/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"), + new Voice("sq", "ine/sq", "sq", "sqi", "", "", "", SpeechSynthesis.GENDER_MALE, "Albanian", "sqi", "This is a sample of text spoken in Albanian", "This is a sample of text spoken in Shqip", "This is a sample of text spoken in shqip"), + new Voice("sr", "zls/sr", "sr", "srp", "", "", "", SpeechSynthesis.GENDER_MALE, "Serbian", "srp", "Ово је пример текста који је изговорен на језику Српски", "Ово је пример текста који је изговорен на језику српски"), + new Voice("sv", "gmq/sv", "sv", "swe", "", "", "", SpeechSynthesis.GENDER_MALE, "Swedish", "swe", "Detta är ett textexempel som läses på svenska"), + new Voice("sw", "bnt/sw", "sw", "swa", "", "", "", SpeechSynthesis.GENDER_MALE, "Swahili", "swa", "Hii ni sampuli ya maandishi yaliyonenwa katika Kiswahili", "Hii ni sampuli ya maandishi yaliyonenwa katika Swahili"), + new Voice("ta", "dra/ta", "ta", "tam", "", "", "", SpeechSynthesis.GENDER_MALE, "Tamil", "tam", "This is a sample of text spoken in தமிழ்", "This is a sample of text spoken in Tamil"), + new Voice("te", "dra/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_MALE, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"), + new Voice("tr", "trk/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"), + new Voice("ur", "inc/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_MALE, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"), + new Voice("vi", "aav/vi", "vi", "vie", "", "", "", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie", "Đây là mẫu văn bản được đọc bằng Tiếng Việt"), + new Voice("vi-vn-x-central", "aav/vi-VN-x-central", "vi", "vie", "VN", "VNM", "central", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-central", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,HUE)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,hue)"), + new Voice("vi-vn-x-south", "aav/vi-VN-x-south", "vi", "vie", "VN", "VNM", "south", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-south", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SAIGON)"), + new Voice("zh", "asia/zh", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"), + new Voice("yue", "sit/yue", "zh", "zho", "HK", "HKG", "", SpeechSynthesis.GENDER_MALE, "Chinese (Cantonese)", "zho-HKG", "This is a sample of text spoken in 中文 (中華人民共和國香港特別行政區)", "This is a sample of text spoken in 中文 (香港)"), }; } diff --git a/android/src/com/reecedunn/espeak/SpeechSynthesis.java b/android/src/com/reecedunn/espeak/SpeechSynthesis.java index fa2b0814..50d67ed9 100644 --- a/android/src/com/reecedunn/espeak/SpeechSynthesis.java +++ b/android/src/com/reecedunn/espeak/SpeechSynthesis.java @@ -114,6 +114,8 @@ public class SpeechSynthesis { return new Locale(parts[0], parts[1]); case 3: // language-country-variant return new Locale(parts[0], parts[1], parts[2]); + case 4: // language-country-x-privateuse + return new Locale(parts[0], parts[1], parts[3]); default: return null; } @@ -435,18 +437,11 @@ public class SpeechSynthesis { mJavaToIanaCountryCode.put("USA", "US"); mJavaToIanaCountryCode.put("VNM", "VN"); - // Map eSpeak locales to their correct BCP47 locales supported by Android: - mLocaleFixes.put("en-sc", new Locale("en", "GB", "scotland")); - mLocaleFixes.put("en-uk-north", new Locale("en", "GB", "north")); - mLocaleFixes.put("en-uk-rp", new Locale("en", "GB", "rp")); - mLocaleFixes.put("en-uk-wmids", new Locale("en", "GB", "wmids")); - mLocaleFixes.put("en-wi", new Locale("en", "JM")); - mLocaleFixes.put("es-la", new Locale("es", "MX")); - mLocaleFixes.put("fa-pin", null); // Script tags not supported. - mLocaleFixes.put("hy-west", new Locale("hy", "AM", "arevmda")); // hy-arevmda crashes on Android 5.0 - mLocaleFixes.put("no", new Locale("nb")); // 'no' is valid, but the system uses the more specific 'nb' and 'nn' - mLocaleFixes.put("vi-hue", new Locale("vi", "VN", "hue")); - mLocaleFixes.put("vi-sgn", new Locale("vi", "VN", "saigon")); - mLocaleFixes.put("zh-yue", new Locale("zh", "HK")); + // Fix up BCP47 locales not handled correctly by Android: + mLocaleFixes.put("cmn", new Locale("zh")); + mLocaleFixes.put("en-029", new Locale("en", "JM")); + mLocaleFixes.put("es-419", new Locale("es", "MX")); + mLocaleFixes.put("hy-arevmda", new Locale("hy", "AM", "arevmda")); // hy-arevmda crashes on Android 5.0 + mLocaleFixes.put("yue", new Locale("zh", "HK")); } } From 830bed1cb1dea23114d2f304ce4725edd13d2b08 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 30 Aug 2017 07:53:59 +0100 Subject: [PATCH 057/137] Android: Fix the remaining tests. --- .../espeak/test/SpeechSynthesisTest.java | 20 ++-- .../espeak/test/TextToSpeechServiceTest.java | 108 +++++++++--------- .../espeak/test/TextToSpeechTestCase.java | 2 +- .../com/reecedunn/espeak/test/VoiceData.java | 28 +++-- .../com/reecedunn/espeak/SpeechSynthesis.java | 11 ++ 5 files changed, 96 insertions(+), 73 deletions(-) diff --git a/android/eSpeakTests/src/com/reecedunn/espeak/test/SpeechSynthesisTest.java b/android/eSpeakTests/src/com/reecedunn/espeak/test/SpeechSynthesisTest.java index b7aa89ad..2f53b8d1 100644 --- a/android/eSpeakTests/src/com/reecedunn/espeak/test/SpeechSynthesisTest.java +++ b/android/eSpeakTests/src/com/reecedunn/espeak/test/SpeechSynthesisTest.java @@ -260,7 +260,7 @@ public class SpeechSynthesisTest extends TextToSpeechTestCase public void testMatchVoiceWithLanguageAndCountry() { - final Voice voice = getVoice("fr-fr"); // language="fr" country="fr" variant="" + final Voice voice = getVoice("fr-be"); // language="fr" country="BE" variant="" assertThat(voice, is(notNullValue())); assertThat(voice.match(de), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED)); @@ -269,23 +269,23 @@ public class SpeechSynthesisTest extends TextToSpeechTestCase assertThat(voice.match(de_CH_1901), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED)); assertThat(voice.match(fr), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); - assertThat(voice.match(fr_FR), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); - assertThat(voice.match(fr_BE), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + assertThat(voice.match(fr_FR), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + assertThat(voice.match(fr_BE), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); assertThat(voice.match(fr_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); - assertThat(voice.match(fr_FR_1694acad), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE)); - assertThat(voice.match(fr_BE_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + assertThat(voice.match(fr_FR_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + assertThat(voice.match(fr_BE_1694acad), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE)); assertThat(voice.match(fra), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); - assertThat(voice.match(fra_FRA), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); - assertThat(voice.match(fra_BEL), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + assertThat(voice.match(fra_FRA), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + assertThat(voice.match(fra_BEL), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); assertThat(voice.match(fra_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); - assertThat(voice.match(fra_FRA_1694acad), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE)); - assertThat(voice.match(fra_BEL_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + assertThat(voice.match(fra_FRA_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + assertThat(voice.match(fra_BEL_1694acad), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE)); } public void testMatchVoiceWithLanguageCountryAndVariant() { - final Voice voice = getVoice("en-sc"); // language="en" country="GB" variant="scotland" + final Voice voice = getVoice("en-gb-scotland"); // language="en" country="GB" variant="scotland" assertThat(voice, is(notNullValue())); assertThat(voice.match(de), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED)); diff --git a/android/eSpeakTests/src/com/reecedunn/espeak/test/TextToSpeechServiceTest.java b/android/eSpeakTests/src/com/reecedunn/espeak/test/TextToSpeechServiceTest.java index 0bc2fa42..397e1bc5 100644 --- a/android/eSpeakTests/src/com/reecedunn/espeak/test/TextToSpeechServiceTest.java +++ b/android/eSpeakTests/src/com/reecedunn/espeak/test/TextToSpeechServiceTest.java @@ -99,10 +99,10 @@ public class TextToSpeechServiceTest extends AndroidTestCase } public void testOnLoadLanguage() { - assertThat(mService.onLoadLanguage("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "eng", "", ""); + assertThat(mService.onLoadLanguage("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + checkLanguage(mService.onGetLanguage(), "eng", "GBR", ""); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("en")); + assertThat(mService.getActiveVoice().name, is("en-gb")); assertThat(mService.onLoadLanguage("eng", "USA", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); checkLanguage(mService.onGetLanguage(), "eng", "USA", ""); @@ -112,120 +112,120 @@ public class TextToSpeechServiceTest extends AndroidTestCase assertThat(mService.onLoadLanguage("eng", "GBR", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); checkLanguage(mService.onGetLanguage(), "eng", "GBR", "scotland"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("en-sc")); + assertThat(mService.getActiveVoice().name, is("en-gb-scotland")); assertThat(mService.onLoadLanguage("eng", "USA", "rp"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE)); checkLanguage(mService.onGetLanguage(), "eng", "USA", ""); assertThat(mService.getActiveVoice(), is(notNullValue())); assertThat(mService.getActiveVoice().name, is("en-us")); - assertThat(mService.onLoadLanguage("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "eng", "", ""); + assertThat(mService.onLoadLanguage("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + checkLanguage(mService.onGetLanguage(), "eng", "GBR", ""); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("en")); + assertThat(mService.getActiveVoice().name, is("en-gb")); assertThat(mService.onLoadLanguage("eng", "FRA", "rp"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "eng", "", ""); + checkLanguage(mService.onGetLanguage(), "eng", "GBR", ""); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("en")); + assertThat(mService.getActiveVoice().name, is("en-gb")); assertThat(mService.onLoadLanguage("eng", "FRA", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "eng", "", ""); + checkLanguage(mService.onGetLanguage(), "eng", "GBR", ""); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("en")); + assertThat(mService.getActiveVoice().name, is("en-gb")); assertThat(mService.onLoadLanguage("ine", "", ""), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED)); - checkLanguage(mService.onGetLanguage(), "eng", "", ""); + checkLanguage(mService.onGetLanguage(), "eng", "GBR", ""); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("en")); + assertThat(mService.getActiveVoice().name, is("en-gb")); } public void testOnIsLanguageAvailable() { - assertThat(mService.onLoadLanguage("vie", "VNM", "saigon"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); + assertThat(mService.onLoadLanguage("vie", "VNM", "central"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); - assertThat(mService.onIsLanguageAvailable("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + assertThat(mService.onIsLanguageAvailable("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onIsLanguageAvailable("eng", "USA", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onIsLanguageAvailable("eng", "GBR", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onIsLanguageAvailable("eng", "USA", "rp"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); - assertThat(mService.onIsLanguageAvailable("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + assertThat(mService.onIsLanguageAvailable("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onIsLanguageAvailable("eng", "FRA", "rp"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onIsLanguageAvailable("eng", "FRA", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onIsLanguageAvailable("ine", "", ""), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED)); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); } public void testOnGetDefaultVoiceNameFor() { - assertThat(mService.onLoadLanguage("vie", "VNM", "saigon"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); + assertThat(mService.onLoadLanguage("vie", "VNM", "central"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); - assertThat(mService.onGetDefaultVoiceNameFor("eng", "", ""), is("en")); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + assertThat(mService.onGetDefaultVoiceNameFor("eng", "", ""), is("en-gb")); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onGetDefaultVoiceNameFor("eng", "USA", ""), is("en-us")); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); - assertThat(mService.onGetDefaultVoiceNameFor("eng", "GBR", "scotland"), is("en-sc")); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + assertThat(mService.onGetDefaultVoiceNameFor("eng", "GBR", "scotland"), is("en-gb-scotland")); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onGetDefaultVoiceNameFor("eng", "USA", "rp"), is("en-us")); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); - assertThat(mService.onGetDefaultVoiceNameFor("eng", "", "scotland"), is("en")); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + assertThat(mService.onGetDefaultVoiceNameFor("eng", "", "scotland"), is("en-gb")); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); - assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", "rp"), is("en")); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", "rp"), is("en-gb")); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); - assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", ""), is("en")); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", ""), is("en-gb")); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); assertThat(mService.onGetDefaultVoiceNameFor("ine", "", ""), is(nullValue())); - checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon"); + checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central"); assertThat(mService.getActiveVoice(), is(notNullValue())); - assertThat(mService.getActiveVoice().name, is("vi-sgn")); + assertThat(mService.getActiveVoice().name, is("vi-vn-x-central")); } public void testLanguages() { diff --git a/android/eSpeakTests/src/com/reecedunn/espeak/test/TextToSpeechTestCase.java b/android/eSpeakTests/src/com/reecedunn/espeak/test/TextToSpeechTestCase.java index 15cf7fe8..70590bf1 100644 --- a/android/eSpeakTests/src/com/reecedunn/espeak/test/TextToSpeechTestCase.java +++ b/android/eSpeakTests/src/com/reecedunn/espeak/test/TextToSpeechTestCase.java @@ -72,7 +72,7 @@ public class TextToSpeechTestCase extends AndroidTestCase Log.d("TextToSpeechTestCase", "setUp: available = " + available); } - assertThat(available, isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE)); + assertThat(available, isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); } catch (Exception e) { diff --git a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java index 2c915c5f..22e60a87 100644 --- a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java +++ b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java @@ -78,6 +78,7 @@ public class VoiceData new Voice("af", "gmw/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"), new Voice("am", "sem/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_MALE, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"), new Voice("an", "roa/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"), + new Voice("ar", "sem/ar", "ar", "ara", "", "", "", SpeechSynthesis.GENDER_MALE, "Arabic", "ara", "هذه عينة من النص الذي تم نطقه في العربية"), new Voice("as", "inc/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_MALE, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"), new Voice("az", "trk/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_MALE, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"), new Voice("bg", "zls/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_MALE, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"), @@ -91,9 +92,9 @@ public class VoiceData new Voice("el", "grk/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"), new Voice("en-gb-scotland", "gmw/en-GB-scotland", "en", "eng", "GB", "GBR", "scotland", SpeechSynthesis.GENDER_MALE, "English (Scotland)", "eng-GBR-scotland", "This is a sample of text spoken in English (United Kingdom,Scottish Standard English)"), new Voice("en-gb", "gmw/en", "en", "eng", "GB", "GBR", "", SpeechSynthesis.GENDER_MALE, "English (UK)", "eng-GBR", "This is a sample of text spoken in English (United Kingdom)"), - new Voice("en-gb-x-gbclan", "gmw/en-GB-x-gbclan", "en", "eng", "GB", "GBR", "gbclan", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-gbclan", "This is a sample of text spoken in English (United Kingdom,NORTH)"), + new Voice("en-gb-x-gbclan", "gmw/en-GB-x-gbclan", "en", "eng", "GB", "GBR", "gbclan", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-gbclan", "This is a sample of text spoken in English (United Kingdom,GBCLAN)"), new Voice("en-gb-x-rp", "gmw/en-GB-x-rp", "en", "eng", "GB", "GBR", "rp", SpeechSynthesis.GENDER_MALE, "English (Received Pronunciation)", "eng-GBR-rp", "This is a sample of text spoken in English (United Kingdom,RP)", "This is a sample of text spoken in English (United Kingdom,rp)"), - new Voice("en-gb-x-gbcwmd", "gmw/en-GB-x-gbcwmd", "en", "eng", "GB", "GBR", "gbcwmd", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-gbcwmd", "This is a sample of text spoken in English (United Kingdom,WMIDS)"), + new Voice("en-gb-x-gbcwmd", "gmw/en-GB-x-gbcwmd", "en", "eng", "GB", "GBR", "gbcwmd", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-gbcwmd", "This is a sample of text spoken in English (United Kingdom,GBCWMD)"), new Voice("en-us", "gmw/en-US", "en", "eng", "US", "USA", "", SpeechSynthesis.GENDER_MALE, "English (US)", "eng-USA", "This is a sample of text spoken in English (United States)"), new Voice("en-029", "gmw/en-029", "en", "eng", "JM", "JAM", "", SpeechSynthesis.GENDER_MALE, "English (Caribbean)", "eng-JAM", "This is a sample of text spoken in English (Jamaica)"), new Voice("eo", "art/eo", "eo", "epo", "", "", "", SpeechSynthesis.GENDER_MALE, "Esperanto", "epo", "This is a sample of text spoken in Esperanto", "This is a sample of text spoken in esperanto"), @@ -104,45 +105,54 @@ public class VoiceData new Voice("fa", "ira/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_MALE, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"), new Voice("fi", "urj/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"), new Voice("fr-be", "roa/fr-BE", "fr", "fra", "BE", "BEL", "", SpeechSynthesis.GENDER_MALE, "French (Belgium)", "fra-BEL", "Voici un exemple de texte énoncé en français (Belgique)."), + new Voice("fr-ch", "roa/fr-CH", "fr", "fra", "CH", "CHE", "", SpeechSynthesis.GENDER_MALE, "French (Switzerland)", "fra-CHE", "Voici un exemple de texte énoncé en français (Suisse)."), new Voice("fr-fr", "roa/fr", "fr", "fra", "FR", "FRA", "", SpeechSynthesis.GENDER_MALE, "French (France)", "fra-FRA", "Voici un exemple de texte énoncé en français (France)."), new Voice("ga", "cel/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_MALE, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"), new Voice("gd", "cel/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_MALE, "Scottish Gaelic", "gla", "This is a sample of text spoken in Scottish Gaelic", "This is a sample of text spoken in Gàidhlig"), + new Voice("gn", "sai/gn", "gn", "grn", "", "", "", SpeechSynthesis.GENDER_MALE, "Guarani", "grn", "This is a sample of text spoken in Guarani"), new Voice("grc", "grk/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"), new Voice("gu", "inc/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_MALE, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"), new Voice("hi", "inc/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"), new Voice("hr", "zls/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"), new Voice("hu", "urj/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."), new Voice("hy", "ine/hy", "hy", "hye", "", "", "", SpeechSynthesis.GENDER_MALE, "Armenian", "hye", "This is a sample of text spoken in Armenian", "This is a sample of text spoken in հայերեն"), - new Voice("hy-west", "ine/hy-west", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"), + new Voice("hy-arevmda", "ine/hy-arevmda", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"), new Voice("ia", "art/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_MALE, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"), new Voice("id", "poz/id", "in", "ind", "", "", "", SpeechSynthesis.GENDER_MALE, "Indonesia", "ind", "Ini adalah sebuah contoh teks yang diucapkan di Bahasa Indonesia"), // NOTE: 'id' is the correct ISO 639-1 code, but Android/Java uses 'in'. new Voice("is", "gmq/is", "is", "isl", "", "", "", SpeechSynthesis.GENDER_MALE, "Icelandic", "isl", "This is a sample of text spoken in íslenska", "This is a sample of text spoken in Icelandic"), new Voice("it", "roa/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"), + new Voice("ja", "jpx/ja", "ja", "jpn", "", "", "", SpeechSynthesis.GENDER_MALE, "Japanese", "jpn", "日本語で話すテキストサンプルです。"), new Voice("jbo", "art/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_MALE, "Lojban", "jbo", "This is a sample of text spoken in Lojban"), new Voice("ka", "ccs/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_MALE, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"), new Voice("kl", "esx/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_MALE, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"), new Voice("kn", "dra/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_MALE, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"), new Voice("ko", "ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."), + new Voice("kok", "inc/kok", "kok", "kok", "", "", "", SpeechSynthesis.GENDER_MALE, "Konkani", "kok", "This is a sample of text spoken in कोंकणी"), new Voice("ku", "ira/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"), + new Voice("ky", "trk/ky", "ky", "kir", "", "", "", SpeechSynthesis.GENDER_MALE, "Kyrgyz", "kir", "This is a sample of text spoken in кыргызча"), new Voice("la", "itc/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"), new Voice("lt", "bat/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"), new Voice("lv", "bat/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."), + new Voice("mi", "poz/mi", "mi", "mri", "", "", "", SpeechSynthesis.GENDER_MALE, "Māori", "mri", "This is a sample of text spoken in Maori"), new Voice("mk", "zls/mk", "mk", "mkd", "", "", "", SpeechSynthesis.GENDER_MALE, "Macedonian", "mkd", "This is a sample of text spoken in Macedonian", "This is a sample of text spoken in македонски"), new Voice("ml", "dra/ml", "ml", "mal", "", "", "", SpeechSynthesis.GENDER_MALE, "Malayalam", "mal", "This is a sample of text spoken in Malayalam", "This is a sample of text spoken in മലയാളം"), new Voice("mr", "inc/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_MALE, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"), new Voice("ms", "poz/ms", "ms", "msa", "", "", "", SpeechSynthesis.GENDER_MALE, "Malay", "msa", "Ini adalah sampel teks yang dilafazkan dalam Bahasa Melayu", "Ini adalah sampel teks yang dilafazkan dalam Malay"), + new Voice("mt", "sem/mt", "mt", "mlt", "", "", "", SpeechSynthesis.GENDER_MALE, "Maltese", "mlt", "This is a sample of text spoken in Malti"), + new Voice("my", "sit/my", "my", "mya", "", "", "", SpeechSynthesis.GENDER_MALE, "Myanmar", "mya", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in ဗမာ"), new Voice("ne", "inc/ne", "ne", "nep", "", "", "", SpeechSynthesis.GENDER_MALE, "Nepali", "nep", "This is a sample of text spoken in Nepali", "This is a sample of text spoken in नेपाली"), new Voice("nl", "gmw/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"), - new Voice("no", "europe/no", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"), + new Voice("nb", "gmq/nb", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"), new Voice("om", "cus/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_MALE, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"), new Voice("or", "inc/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_MALE, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"), new Voice("pa", "inc/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_MALE, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"), new Voice("pap", "roa/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_MALE, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"), new Voice("pl", "zlw/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"), - new Voice("pt", "roa/pt", "pt", "por", "", "", "", SpeechSynthesis.GENDER_MALE, "Portuguese", "por", "Este é um exemplo de texto falado em português (Portugal)"), + new Voice("pt", "roa/pt", "pt", "por", "", "", "", SpeechSynthesis.GENDER_MALE, "Portuguese", "por", "Este é um exemplo de texto falado em português"), new Voice("pt-br", "roa/pt-BR", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"), new Voice("ro", "roa/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"), new Voice("ru", "zle/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"), + new Voice("sd", "inc/sd", "sd", "snd", "", "", "", SpeechSynthesis.GENDER_MALE, "Sindhi", "snd", "This is a sample of text spoken in Sindhi"), new Voice("si", "inc/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_MALE, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"), new Voice("sk", "zlw/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"), new Voice("sl", "zls/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"), @@ -152,12 +162,14 @@ public class VoiceData new Voice("sw", "bnt/sw", "sw", "swa", "", "", "", SpeechSynthesis.GENDER_MALE, "Swahili", "swa", "Hii ni sampuli ya maandishi yaliyonenwa katika Kiswahili", "Hii ni sampuli ya maandishi yaliyonenwa katika Swahili"), new Voice("ta", "dra/ta", "ta", "tam", "", "", "", SpeechSynthesis.GENDER_MALE, "Tamil", "tam", "This is a sample of text spoken in தமிழ்", "This is a sample of text spoken in Tamil"), new Voice("te", "dra/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_MALE, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"), + new Voice("tn", "bnt/tn", "tn", "tsn", "", "", "", SpeechSynthesis.GENDER_MALE, "Setswana", "tsn", "This is a sample of text spoken in Tswana"), new Voice("tr", "trk/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"), + new Voice("tt", "trk/tt", "tt", "tat", "", "", "", SpeechSynthesis.GENDER_MALE, "Tatar", "tat", "This is a sample of text spoken in Tatar"), new Voice("ur", "inc/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_MALE, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"), new Voice("vi", "aav/vi", "vi", "vie", "", "", "", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie", "Đây là mẫu văn bản được đọc bằng Tiếng Việt"), - new Voice("vi-vn-x-central", "aav/vi-VN-x-central", "vi", "vie", "VN", "VNM", "central", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-central", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,HUE)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,hue)"), - new Voice("vi-vn-x-south", "aav/vi-VN-x-south", "vi", "vie", "VN", "VNM", "south", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-south", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SAIGON)"), - new Voice("zh", "asia/zh", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"), + new Voice("vi-vn-x-central", "aav/vi-VN-x-central", "vi", "vie", "VN", "VNM", "central", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-central", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,CENTRAL)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,central)"), + new Voice("vi-vn-x-south", "aav/vi-VN-x-south", "vi", "vie", "VN", "VNM", "south", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-south", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SOUTH)"), + new Voice("cmn", "sit/cmn", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"), new Voice("yue", "sit/yue", "zh", "zho", "HK", "HKG", "", SpeechSynthesis.GENDER_MALE, "Chinese (Cantonese)", "zho-HKG", "This is a sample of text spoken in 中文 (中華人民共和國香港特別行政區)", "This is a sample of text spoken in 中文 (香港)"), }; } diff --git a/android/src/com/reecedunn/espeak/SpeechSynthesis.java b/android/src/com/reecedunn/espeak/SpeechSynthesis.java index 50d67ed9..016586d7 100644 --- a/android/src/com/reecedunn/espeak/SpeechSynthesis.java +++ b/android/src/com/reecedunn/espeak/SpeechSynthesis.java @@ -357,6 +357,7 @@ public class SpeechSynthesis { static { mJavaToIanaLanguageCode.put("afr", "af"); mJavaToIanaLanguageCode.put("amh", "am"); + mJavaToIanaLanguageCode.put("ara", "ar"); mJavaToIanaLanguageCode.put("arg", "an"); mJavaToIanaLanguageCode.put("asm", "as"); mJavaToIanaLanguageCode.put("aze", "az"); @@ -379,6 +380,7 @@ public class SpeechSynthesis { mJavaToIanaLanguageCode.put("fra", "fr"); mJavaToIanaLanguageCode.put("gle", "ga"); mJavaToIanaLanguageCode.put("gla", "gd"); + mJavaToIanaLanguageCode.put("grn", "gn"); mJavaToIanaLanguageCode.put("guj", "gu"); mJavaToIanaLanguageCode.put("hin", "hi"); mJavaToIanaLanguageCode.put("hrv", "hr"); @@ -388,9 +390,11 @@ public class SpeechSynthesis { mJavaToIanaLanguageCode.put("ind", "in"); // NOTE: The deprecated 'in' code is used by Java/Android. mJavaToIanaLanguageCode.put("isl", "is"); mJavaToIanaLanguageCode.put("ita", "it"); + mJavaToIanaLanguageCode.put("jpn", "ja"); mJavaToIanaLanguageCode.put("kat", "ka"); mJavaToIanaLanguageCode.put("kal", "kl"); mJavaToIanaLanguageCode.put("kan", "kn"); + mJavaToIanaLanguageCode.put("kir", "ky"); mJavaToIanaLanguageCode.put("kor", "ko"); mJavaToIanaLanguageCode.put("kur", "ku"); mJavaToIanaLanguageCode.put("lat", "la"); @@ -399,7 +403,10 @@ public class SpeechSynthesis { mJavaToIanaLanguageCode.put("mkd", "mk"); mJavaToIanaLanguageCode.put("mal", "ml"); mJavaToIanaLanguageCode.put("mar", "mr"); + mJavaToIanaLanguageCode.put("mlt", "mt"); + mJavaToIanaLanguageCode.put("mri", "mi"); mJavaToIanaLanguageCode.put("msa", "ms"); + mJavaToIanaLanguageCode.put("mya", "my"); mJavaToIanaLanguageCode.put("nep", "ne"); mJavaToIanaLanguageCode.put("nld", "nl"); mJavaToIanaLanguageCode.put("nob", "nb"); @@ -414,12 +421,15 @@ public class SpeechSynthesis { mJavaToIanaLanguageCode.put("sin", "si"); mJavaToIanaLanguageCode.put("slk", "sk"); mJavaToIanaLanguageCode.put("slv", "sl"); + mJavaToIanaLanguageCode.put("snd", "sd"); mJavaToIanaLanguageCode.put("sqi", "sq"); mJavaToIanaLanguageCode.put("srp", "sr"); mJavaToIanaLanguageCode.put("swe", "sv"); mJavaToIanaLanguageCode.put("swa", "sw"); mJavaToIanaLanguageCode.put("tam", "ta"); mJavaToIanaLanguageCode.put("tel", "te"); + mJavaToIanaLanguageCode.put("tat", "tt"); + mJavaToIanaLanguageCode.put("tsn", "tn"); mJavaToIanaLanguageCode.put("tur", "tr"); mJavaToIanaLanguageCode.put("urd", "ur"); mJavaToIanaLanguageCode.put("vie", "vi"); @@ -428,6 +438,7 @@ public class SpeechSynthesis { mJavaToIanaCountryCode.put("ARM", "AM"); mJavaToIanaCountryCode.put("BEL", "BE"); mJavaToIanaCountryCode.put("BRA", "BR"); + mJavaToIanaCountryCode.put("CHE", "CH"); mJavaToIanaCountryCode.put("FRA", "FR"); mJavaToIanaCountryCode.put("GBR", "GB"); mJavaToIanaCountryCode.put("HKG", "HK"); From 06c87ae25bafabe9532df613c3d89ae659482b24 Mon Sep 17 00:00:00 2001 From: Anthony Cornehl Date: Thu, 31 Aug 2017 13:16:00 -0700 Subject: [PATCH 058/137] Detect FreeBSD FreeBSD requires __BSD_VISIBLE to be set to expose M_PI and mkstemp() in the system includes. This is normally set when _ANSI_SOURCE, _C99_SOURCE, or _C11_SOURCE are undefined. I don't want to dig into what the compiler is setting, so I'm just setting it in the configure script. /bin/sh ./libtool --tag=CC --mode=compile cc -DHAVE_CONFIG_H -I. -fPIC -fvisibility=hidden -pedantic -fno-exceptions -D PATH_ESPEAK_DATA=\"/usr/local/share/espeak-ng-data\" -DLIBESPEAK_NG_EXPORT -Isrc/include -Isrc/include/compat -I src/ucd-tools/src/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112L -Wno-endif-labels -g -O2 -std=c99 -MT src/libespeak-ng/src_libespeak_ng_la-wavegen.lo -MD -MP -MF src/libespeak-ng/.deps/src_libespeak_ng_la-wavegen.Tpo -c -o src/libespeak-ng/src_libespeak_ng_la-wavegen.lo `test -f 'src/libespeak-ng/wavegen.c' || echo './'`src/libespeak-ng/wavegen.c libtool: compile: cc -DHAVE_CONFIG_H -I. -fPIC -fvisibility=hidden -pedantic -fno-exceptions -D PATH_ESPEAK_DATA=\"/usr/local/share/espeak-ng-data\" -DLIBESPEAK_NG_EXPORT -Isrc/include -Isrc/include/compat -I src/ucd-tools/src/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112L -Wno-endif-labels -g -O2 -std=c99 -MT src/libespeak-ng/src_libespeak_ng_la-wavegen.lo -MD -MP -MF src/libespeak-ng/.deps/src_libespeak_ng_la-wavegen.Tpo -c src/libespeak-ng/wavegen.c -fPIC -DPIC -o src/libespeak-ng/.libs/src_libespeak_ng_la-wavegen.o src/libespeak-ng/wavegen.c:355:24: error: use of undeclared identifier 'M_PI' x = 127*(1.0 - cos((M_PI*2)*ix/wavemult_max)); ^ src/libespeak-ng/wavegen.c:623:16: error: use of undeclared identifier 'M_PI' minus_pi_t = -M_PI / samplerate; ^ 2 errors generated. gmake[1]: *** [Makefile:1690: src/libespeak-ng/src_libespeak_ng_la-wavegen.lo] Error 1 --- configure.ac | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/configure.ac b/configure.ac index 2d28da70..82a83a07 100644 --- a/configure.ac +++ b/configure.ac @@ -83,6 +83,23 @@ else AC_MSG_ERROR([C99 is not supported by $CC.]) fi +dnl ================================================================ +dnl FreeBSD check. +dnl ================================================================ +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ + #if ! defined(__FreeBSD__) + #error macro not defined + #endif + ]])], [FREEBSD_FOUND="yes"], [FREEBSD_FOUND="no"]) + +AC_MSG_CHECKING([if targeting FreeBSD]) +if test "$FREEBSD_FOUND" = "yes" ; then + AC_MSG_RESULT([-D__BSD_VISIBLE]) + CFLAGS="$CFLAGS -D__BSD_VISIBLE" +else + AC_MSG_RESULT([no]) +fi + dnl ================================================================ dnl library checks. dnl ================================================================ From 897fad64c14f9acdce88052da5e98d3cf3382d80 Mon Sep 17 00:00:00 2001 From: Anthony Cornehl Date: Thu, 31 Aug 2017 13:19:58 -0700 Subject: [PATCH 059/137] Remove definitions for towlower/towupper The definitions for towlower() and towupper() are defined in /usr/include/wctype.h on FreeBSD platforms. I just removed the define and used the ucd_ equivilent where towlower/towupper were found. /bin/sh ./libtool --tag=CC --mode=compile cc -DHAVE_CONFIG_H -I. -fPIC -fvisibility=hidden -pedantic -fno-exceptions -D PATH_ESPEAK_DATA=\"/usr/local/share/espeak- ng-data\" -DLIBESPEAK_NG_EXPORT -Isrc/include -Isrc/include/compat -I src/ucd-tools/src/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112L -Wno-endif-lab els -g -O2 -std=c99 -MT src/libespeak-ng/src_libespeak_ng_la-readclause.lo -MD -MP -MF src/libespeak-ng/.deps/src_libespeak_ng_la-readclause.Tpo -c -o src/libespeak-n g/src_libespeak_ng_la-readclause.lo `test -f 'src/libespeak-ng/readclause.c' || echo './'`src/libespeak-ng/readclause.c libtool: compile: cc -DHAVE_CONFIG_H -I. -fPIC -fvisibility=hidden -pedantic -fno-exceptions -D PATH_ESPEAK_DATA=\"/usr/local/share/espeak-ng-data\" -DLIBESPEAK_NG_EXPO RT -Isrc/include -Isrc/include/compat -I src/ucd-tools/src/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112L -Wno-endif-labels -g -O2 -std=c99 -MT src/li bespeak-ng/src_libespeak_ng_la-readclause.lo -MD -MP -MF src/libespeak-ng/.deps/src_libespeak_ng_la-readclause.Tpo -c src/libespeak-ng/readclause.c -fPIC -DPIC -o src/l ibespeak-ng/.libs/src_libespeak_ng_la-readclause.o In file included from src/libespeak-ng/readclause.c:32: In file included from src/include/compat/wctype.h:30: /usr/include/wctype.h:73:8: error: conflicting types for 'ucd_tolower' wint_t towlower(wint_t); ^ src/include/compat/wchar.h:37:18: note: expanded from macro 'towlower' ^ src/ucd-tools/src/include/ucd/ucd.h:503:13: note: previous declaration is here codepoint_t ucd_tolower(codepoint_t c); ^ In file included from src/libespeak-ng/readclause.c:32: In file included from src/include/compat/wctype.h:30: /usr/include/wctype.h:74:8: error: conflicting types for 'ucd_toupper' wint_t towupper(wint_t); ^ src/include/compat/wchar.h:38:18: note: expanded from macro 'towupper' ^ src/ucd-tools/src/include/ucd/ucd.h:491:13: note: previous declaration is here codepoint_t ucd_toupper(codepoint_t c); ^ src/libespeak-ng/readclause.c:366:19: warning: implicit declaration of function 'mkstemp' is invalid in C99 [-Wimplicit-function-declaration] if ((fd_temp = mkstemp(fname_temp)) >= 0) ^ 1 warning and 2 errors generated. --- src/include/compat/wchar.h | 3 --- src/libespeak-ng/readclause.c | 4 ++-- src/libespeak-ng/translate.c | 4 ++-- src/ucd-tools/tests/printcdata.c | 4 ++-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/include/compat/wchar.h b/src/include/compat/wchar.h index 46b797fb..a0dc4d1f 100644 --- a/src/include/compat/wchar.h +++ b/src/include/compat/wchar.h @@ -32,7 +32,4 @@ #include -#define towlower ucd_tolower -#define towupper ucd_toupper - #endif diff --git a/src/libespeak-ng/readclause.c b/src/libespeak-ng/readclause.c index 719ed91a..ef8da7d1 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -163,7 +163,7 @@ int towlower2(unsigned int c) if (c == 'I' && translator->langopts.dotless_i) return 0x131; // I -> ı - return towlower(c); + return ucd_tolower(c); } static int IsRomanU(unsigned int c) @@ -842,7 +842,7 @@ static int attrnumber(const wchar_t *pw, int default_value, int type) while (IsDigit09(*pw)) value = value*10 + *pw++ - '0'; - if ((type == 1) && (towlower(*pw) == 's')) { + if ((type == 1) && (ucd_tolower(*pw) == 's')) { // time: seconds rather than ms value *= 1000; } diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index abecc5fc..780d4486 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -1791,13 +1791,13 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, // don't convert the case of the second character unless the next letter is also upper case c2 = new_c >> 16; if (upper_case && iswupper(next_in)) - c2 = towupper(c2); + c2 = ucd_toupper(c2); *insert = c2; new_c &= 0xffff; } if (upper_case) - new_c = towupper(new_c); + new_c = ucd_toupper(new_c); *wordflags |= FLAG_CHAR_REPLACED; return new_c; diff --git a/src/ucd-tools/tests/printcdata.c b/src/ucd-tools/tests/printcdata.c index 6992bb94..1cb96929 100644 --- a/src/ucd-tools/tests/printcdata.c +++ b/src/ucd-tools/tests/printcdata.c @@ -178,7 +178,7 @@ void uprintf(FILE *out, codepoint_t c, const char *format) uprintf_is(out, c, *++format); break; case 'L': /* lowercase */ - uprintf_codepoint(out, towlower(c), *++format); + uprintf_codepoint(out, ucd_tolower(c), *++format); break; case 's': /* script */ fputs(ucd_get_script_string(ucd_lookup_script(c)), out); @@ -187,7 +187,7 @@ void uprintf(FILE *out, codepoint_t c, const char *format) uprintf_codepoint(out, ucd_totitle(c), *++format); break; case 'U': /* uppercase */ - uprintf_codepoint(out, towupper(c), *++format); + uprintf_codepoint(out, ucd_toupper(c), *++format); break; } ++format; From 3115f769b10605d60da69aa8fef77e3200d898d0 Mon Sep 17 00:00:00 2001 From: Anthony Cornehl Date: Thu, 31 Aug 2017 17:36:54 -0700 Subject: [PATCH 060/137] tests/language.test: Use different hashing commands when needed Outside of Linux platforms, sha1 hashing from the command-line is accomplished by commands other than sha1sum. OSX uses shasum and FreeBSD uses sha1, so I've added in detection for the appropriate command before falling back and failing the test. --- tests/languages.test | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/languages.test b/tests/languages.test index 5b8a4170..58188f8d 100755 --- a/tests/languages.test +++ b/tests/languages.test @@ -1,5 +1,24 @@ #!/bin/sh +# Test a command for presence and ability to output the sha1 hash of a file. +check_hashcmd() { + which $1 >&/dev/null && + $1 /dev/null | + awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}' +} + +# Test some common commands to find the correct one for the system being tested on. +if check_hashcmd sha1sum; then + sha1sum=sha1sum +elif check_hashcmd sha1; then + sha1sum=sha1 +elif check_hashcmd shasum; then + sha1sum=shasum +else + echo "No hashing commands found." + false +fi + test_lang() { if test "$#" -eq 3; then TEST_LANG=$1 @@ -16,7 +35,7 @@ test_lang() { echo "testing ${TEST_NAME}" ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ src/espeak-ng --stdout -v ${TEST_LANG} "${TEST_TEXT}" | \ - sha1sum | awk '{ print $1 }' > actual.txt + $sha1sum | awk '{ print $1 }' > actual.txt echo "${EXPECTED}" > expected.txt diff expected.txt actual.txt || exit 1 } From d19da58fa099a8938b08f43aa72a029a3345c705 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Fri, 1 Sep 2017 07:19:41 +0100 Subject: [PATCH 061/137] Fix running languages.test on sh/bash. --- tests/languages.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/languages.test b/tests/languages.test index 58188f8d..eba2b00e 100755 --- a/tests/languages.test +++ b/tests/languages.test @@ -2,7 +2,7 @@ # Test a command for presence and ability to output the sha1 hash of a file. check_hashcmd() { - which $1 >&/dev/null && + which $1 &>/dev/null && $1 /dev/null | awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}' } @@ -16,7 +16,7 @@ elif check_hashcmd shasum; then sha1sum=shasum else echo "No hashing commands found." - false + exit 1 fi test_lang() { From 988db184eaf1021ee41d54efd3314b8ab2445363 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 12 Sep 2017 07:17:46 +0100 Subject: [PATCH 062/137] Prevent invalid access to word in LookupDictList. Clang static analysis reports this as several 'Result of operation is garbage or undefined' errors. --- src/libespeak-ng/dictionary.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index ef887f9c..ccb154b6 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -2894,7 +2894,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f found = word2 + len; } - if (found == 0) { + if (found == 0 && length >= 2) { ph_out[0] = 0; // try modifications to find a recognised word From e6ea8fabea982d4e0985aadea4ce862814706fea Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 12 Sep 2017 07:29:07 +0100 Subject: [PATCH 063/137] Initialise ending in RemoveEnding. Clang static analysis reports this as several 'Result of operation is garbage or undefined' errors, when `ending` has not been set due to no matching endings. --- src/libespeak-ng/dictionary.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index ccb154b6..40d06c88 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -3003,7 +3003,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) int end_flags; const char *p; int len; - char ending[50]; + char ending[50] = {0}; // these lists are language specific, but are only relevent if the 'e' suffix flag is used static const char *add_e_exceptions[] = { From 8a777385a8e925016e81cee196c6a417caf7253f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 12 Sep 2017 07:36:54 +0100 Subject: [PATCH 064/137] Use wflags to access wtab->flags in LookupDict2. Clang static analysis reports a 'Dereference of null pointer' error when accessing wtab->flags. This is properly guarded against when setting the wflags variable, so use that variable instead. --- src/libespeak-ng/dictionary.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index 40d06c88..c15bff49 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -2719,7 +2719,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor continue; } - if ((dictionary_flags2 & FLAG_ATSTART) && !(wtab->flags & FLAG_FIRST_WORD)) { + if ((dictionary_flags2 & FLAG_ATSTART) && !(wflags & FLAG_FIRST_WORD)) { // only use this pronunciation if it's the first word of a clause continue; } From ecdff298b058ab035102b68c980da77975bb8be9 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 12 Sep 2017 07:43:00 +0100 Subject: [PATCH 065/137] last_letter in MatchRule is not used. This was identified by the clang static analyser. --- src/libespeak-ng/dictionary.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index c15bff49..0fbe909c 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -1571,7 +1571,6 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ int letter_w; // current letter, wide character int last_letter_w; // last letter, wide character int letter_xbytes; // number of extra bytes of multibyte character (num bytes - 1) - unsigned char last_letter; char *pre_ptr; char *post_ptr; // pointer to first character after group @@ -1732,7 +1731,6 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ distance_right += 6; if (distance_right > 18) distance_right = 19; - last_letter = letter; last_letter_w = letter_w; letter_xbytes = utf8_in(&letter_w, post_ptr)-1; letter = *post_ptr++; @@ -1939,7 +1937,6 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ if (distance_left > 18) distance_left = 19; - last_letter = *pre_ptr; utf8_in(&last_letter_w, pre_ptr); pre_ptr--; letter_xbytes = utf8_in2(&letter_w, pre_ptr, 1)-1; From a2f751044ccb212b2be7e9c50cb329254da4ae8e Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 12 Sep 2017 07:46:53 +0100 Subject: [PATCH 066/137] Remove unused letter assignment in MatchRule. This was identified by the clang static analyser. The letter variable is set in the various match_type switch cases, so does not need to be initialised in the start of the while loop. --- src/libespeak-ng/dictionary.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index 0fbe909c..c82e4272 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -1626,7 +1626,6 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ unpron_ignore = word_flags & FLAG_UNPRON_TEST; match_type = 0; consumed = 0; - letter = 0; letter_w = 0; distance_right = -6; // used to reduce points for matches further away the current letter distance_left = -2; From 19b2bebc0215bb64e743ab1976d9c560e5ec102f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 13 Sep 2017 07:03:18 +0100 Subject: [PATCH 067/137] Don't save an intonation if it was not found. Clang static analysis reports an 'Assigned value is garbage or undefined' error. This happens if the default_tune data has not been copied in the kTUNE case. Extending this further, it does not make sense to save the tune data if the tune was not found, or if the tune already exists. --- src/libespeak-ng/compiledata.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index 959f17d2..d58a2262 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -2825,6 +2825,7 @@ espeak_ng_STATUS espeak_ng_CompileIntonation(FILE *log, espeak_ng_ERROR_CONTEXT error("Bad tune name: '%s;", new_tune.name); break; case kENDTUNE: + if (!found) continue; if (done_onset == 0) { new_tune.unstr_start[0] = new_tune.unstr_start[1]; new_tune.unstr_end[0] = new_tune.unstr_end[1]; From 4a882e21d38624868dcccfd7b0909277a6e2ee73 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 13 Sep 2017 07:13:29 +0100 Subject: [PATCH 068/137] Don't update env_x/y if no points were read. Clang static analysis reports an 'Assigned value is garbage or undefined' for this. If no points were read from the file, the `n_points` variable is 0 and `env_x[n_points-1]` performs an out-of-bounds access. --- src/libespeak-ng/compiledata.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index d58a2262..f32754cf 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -1401,8 +1401,10 @@ static int LoadEnvelope2(FILE *f, const char *fname) n_points++; } } - env_x[n_points] = env_x[n_points-1]; - env_y[n_points] = env_y[n_points-1]; + if (n_points > 0) { + env_x[n_points] = env_x[n_points-1]; + env_y[n_points] = env_y[n_points-1]; + } ix = -1; ix2 = 0; From 57108e1ed7fa93c7a7f1515339a8d72ff7322885 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 13 Sep 2017 07:28:58 +0100 Subject: [PATCH 069/137] Add n_points guards in the LoadEnvelope2 loop. Clang static analysis reports these as 'Result of operation is garbage or undefined' errors. --- src/libespeak-ng/compiledata.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index f32754cf..213692b7 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -1408,10 +1408,10 @@ static int LoadEnvelope2(FILE *f, const char *fname) ix = -1; ix2 = 0; - for (x = 0; x < ENV_LEN; x++) { - if (x > env_x[ix+4]) + if (n_points > 0) for (x = 0; x < ENV_LEN; x++) { + if (n_points > 3 && x > env_x[ix+4]) ix++; - if (x >= env_x[ix2+1]) + if (n_points > 2 && x >= env_x[ix2+1]) ix2++; if (env_lin[ix2] > 0) { From df7e9a23e1f75c4a762e3658b790e99cb1688872 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 14 Sep 2017 07:57:50 +0100 Subject: [PATCH 070/137] Ensure that flags in the syllables are initialised. Clang static analysis reports this as 'Assigned value is garbage or undefined'. --- src/libespeak-ng/intonation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/intonation.c b/src/libespeak-ng/intonation.c index 946e89f3..7c61faaf 100644 --- a/src/libespeak-ng/intonation.c +++ b/src/libespeak-ng/intonation.c @@ -949,8 +949,8 @@ void CalcPitches(Translator *tr, int clause_type) n_primary = 0; for (ix = 0; ix < (n_phoneme_list-1); ix++) { p = &phoneme_list[ix]; + syllable_tab[ix].flags = 0; if (p->synthflags & SFLAG_SYLLABLE) { - syllable_tab[n_st].flags = 0; syllable_tab[n_st].env = PITCHfall; syllable_tab[n_st].nextph_type = phoneme_list[ix+1].type; syllable_tab[n_st++].stress = p->stresslevel; From 4b4da735587ea7a1c1bb253fd796828f7fae3bf1 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 24 Sep 2017 09:53:13 +0100 Subject: [PATCH 071/137] mbrowrap: fix building on Windows. --- src/libespeak-ng/mbrowrap.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libespeak-ng/mbrowrap.c b/src/libespeak-ng/mbrowrap.c index 6214f37d..01333248 100644 --- a/src/libespeak-ng/mbrowrap.c +++ b/src/libespeak-ng/mbrowrap.c @@ -18,6 +18,11 @@ */ #include "config.h" + +#if defined(_WIN32) || defined(_WIN64) +#include +#endif + #include "mbrowrap.h" int (WINAPI *init_MBR)(char *voice_path); @@ -33,9 +38,6 @@ void (WINAPI *setNoError_MBR)(int no_error); #if defined(_WIN32) || defined(_WIN64) -#include - - HINSTANCE hinstDllMBR = NULL; BOOL load_MBR() From 3ed34d3a74eb69cedcdfa98dbedef4359279d352 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 24 Sep 2017 10:10:00 +0100 Subject: [PATCH 072/137] eSpeak NG 1.49.2 --- CHANGELOG.md | 2 +- README.md | 6 +++--- android/jni/include/config.h | 2 +- configure.ac | 2 +- src/windows/config.h | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c32d3a5..0ca5ece9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ The espeak-ng project is a fork of the espeak project. -### 1.49.2 - (In Development) +### 1.49.2 - 2017-09-24 * Provide more validation when reading phoneme tables and voice/language files. * Removed support for phoneme equivalence tables. These were disabled in the diff --git a/README.md b/README.md index f624c4ad..dac80c21 100644 --- a/README.md +++ b/README.md @@ -49,11 +49,11 @@ The following platforms are supported: ### Binaries -The Windows version of eSpeak NG 1.49.1 is available as: +The Windows version of eSpeak NG 1.49.2 is available as: -* [espeak-ng-x64.msi](https://github.com/espeak-ng/espeak-ng/releases/download/1.49.1/espeak-ng-x64.msi) -- +* [espeak-ng-x64.msi](https://github.com/espeak-ng/espeak-ng/releases/download/1.49.2/espeak-ng-x64.msi) -- 64-bit Windows installer -* [espeak-ng-x86.msi](https://github.com/espeak-ng/espeak-ng/releases/download/1.49.1/espeak-ng-x86.msi) -- +* [espeak-ng-x86.msi](https://github.com/espeak-ng/espeak-ng/releases/download/1.49.2/espeak-ng-x86.msi) -- 32-bit Windows installer You also need to install the [Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48145). diff --git a/android/jni/include/config.h b/android/jni/include/config.h index f1807a0a..b177caaa 100644 --- a/android/jni/include/config.h +++ b/android/jni/include/config.h @@ -1,2 +1,2 @@ // This is created by autoconf on POSIX-compatibe build environments. -#define PACKAGE_VERSION "1.49.2-dev" +#define PACKAGE_VERSION "1.49.2" diff --git a/configure.ac b/configure.ac index 82a83a07..33960c24 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.63]) -AC_INIT([eSpeak NG], [1.49.2-dev], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng]) +AC_INIT([eSpeak NG], [1.49.2], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng]) AM_INIT_AUTOMAKE() LT_INIT diff --git a/src/windows/config.h b/src/windows/config.h index 12b5e8c1..f9d5350a 100644 --- a/src/windows/config.h +++ b/src/windows/config.h @@ -9,4 +9,4 @@ #define _CRT_NONSTDC_NO_DEPRECATE // This is created by autoconf on POSIX-compatibe build environments. -#define PACKAGE_VERSION "1.49.2-dev" +#define PACKAGE_VERSION "1.49.2" From 3a2663030b1b0bed3049eff3b482aba3dd1ecd40 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 24 Sep 2017 10:46:15 +0100 Subject: [PATCH 073/137] Update the version to 1.49.3-dev. --- CHANGELOG.md | 2 ++ android/jni/include/config.h | 2 +- configure.ac | 2 +- src/windows/config.h | 2 +- src/windows/installer/Product.wxs | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ca5ece9..3e26c232 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ The espeak-ng project is a fork of the espeak project. +### 1.49.3 - (In Development) + ### 1.49.2 - 2017-09-24 * Provide more validation when reading phoneme tables and voice/language files. diff --git a/android/jni/include/config.h b/android/jni/include/config.h index b177caaa..5207ad6d 100644 --- a/android/jni/include/config.h +++ b/android/jni/include/config.h @@ -1,2 +1,2 @@ // This is created by autoconf on POSIX-compatibe build environments. -#define PACKAGE_VERSION "1.49.2" +#define PACKAGE_VERSION "1.49.3-dev" diff --git a/configure.ac b/configure.ac index 33960c24..691e31d1 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.63]) -AC_INIT([eSpeak NG], [1.49.2], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng]) +AC_INIT([eSpeak NG], [1.49.3-dev], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng]) AM_INIT_AUTOMAKE() LT_INIT diff --git a/src/windows/config.h b/src/windows/config.h index f9d5350a..19968220 100644 --- a/src/windows/config.h +++ b/src/windows/config.h @@ -9,4 +9,4 @@ #define _CRT_NONSTDC_NO_DEPRECATE // This is created by autoconf on POSIX-compatibe build environments. -#define PACKAGE_VERSION "1.49.2" +#define PACKAGE_VERSION "1.49.3-dev" diff --git a/src/windows/installer/Product.wxs b/src/windows/installer/Product.wxs index d3e865ae..fedc13c4 100644 --- a/src/windows/installer/Product.wxs +++ b/src/windows/installer/Product.wxs @@ -1,7 +1,7 @@ - + From 265bee5e23dc8c359aed47dbc9d72699d20930b3 Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Mon, 25 Sep 2017 20:04:54 +0300 Subject: [PATCH 074/137] Added some common finnish abbreviations and foreign words Mostly these are related to computers and internet (usb, ict and facebook) but there's others as well. --- dictsource/fi_list | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/dictsource/fi_list b/dictsource/fi_list index 9806f2bc..d8f2666d 100644 --- a/dictsource/fi_list +++ b/dictsource/fi_list @@ -370,22 +370,40 @@ yogurt jogurt:i // Abbreviations +(à la) 'ala $dot // jonka mukaan abc $abbrev adhd $abbrev -os $abbrev $dot ad $abbrev $dot // anno Domini, Herran vuonna +atk $abbrev +ay $abbrev // ammaatiyhdistys ca $abbrev $dot // circa +dna $abbrev // elinkeinoelämän keskusliitto +eg esimerkiksi $dot // exempli gratia, esimerkiksi em $abbrev $dot +ek $abbrev // elinkeinoelämän keskusliitto ekr $abbrev $dot // ennen Kristuksen syntymää etc et_setera $dot // et cetera, ym., jne. -ym ynn&_mu:ta $dot // ynnä muuta (etc) -eg esimerkiksi $dot // exempli gratia, esimerkiksi +eu $abbrev +hiv $abbrev +ict $abbrev +isbn $abbrev +it $abbrev jne $abbrev $dot // ja niin edelleen -(à la) 'ala $dot // jonka mukaan ky $abbrev $dot // kommandiittiyhtiö -oy $abbrev // osakeyhtiö nro numero $dot +nvda $abbrev +os $abbrev $dot +oy $abbrev // osakeyhtiö +ry $abbrev $dot // rekisteröity yhdistys +usb $abbrev +utf $abbrev +ym ynn&_mu:ta $dot // ynnä muuta (etc) - - - +// foreign words +blindsquare _^_EN +bluetooth _^_EN +daisy _^_EN +facebook _^_EN +talkback _^_EN +voiceover _^_EN +youtube _^_EN From 411eec2b55a13ced556008a8bb5fd752c8e4912e Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Tue, 26 Sep 2017 20:44:42 +0300 Subject: [PATCH 075/137] Follow swedish pronunciation for words ending in -rg. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In finnish these are almost exclusively swedish place names (Uleåborg) or family names (Lindberg) --- dictsource/fi_rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dictsource/fi_rules b/dictsource/fi_rules index c064e3fd..81085ac4 100644 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -171,7 +171,7 @@ .group r r r - + rg (_ Rj // follow swedish pronunciation .group s s s From 418aadc2ba24527a76fe357d73d9975462a45e44 Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Tue, 26 Sep 2017 21:29:04 +0300 Subject: [PATCH 076/137] Finnish: clarification for -rg This rule "CA) rg (_" only matches the place and family names, and exempts words like "org", in which the g should be pronounced. --- dictsource/fi_rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dictsource/fi_rules b/dictsource/fi_rules index 81085ac4..a906dd0a 100644 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -171,7 +171,7 @@ .group r r r - rg (_ Rj // follow swedish pronunciation + CA) rg (_ Rj // follow swedish pronunciation .group s s s From 780631845d3bc4250e4a12d80148ed0319ba3864 Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Sat, 30 Sep 2017 10:26:20 +0300 Subject: [PATCH 077/137] finnish: pronunciation exception for "ruoan". Should be pronounced exactly like "ruuan" --- dictsource/fi_list | 1 + 1 file changed, 1 insertion(+) diff --git a/dictsource/fi_list b/dictsource/fi_list index d8f2666d..e12cd243 100644 --- a/dictsource/fi_list +++ b/dictsource/fi_list @@ -366,6 +366,7 @@ ok 'o:_,ko: okay okei yoghurt jogurt:i yogurt jogurt:i +ruoan ru:an // Abbreviations From d9d498832e384e13bb1caa6ea3aa913d4ffb353e Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Sat, 30 Sep 2017 10:32:51 +0300 Subject: [PATCH 078/137] Compound word with the first word ending in -rg should also follow the swedish pronunciation. This affects words familynames like Berglund and Bergholm and place names like Bergbackan. --- dictsource/fi_rules | 1 + 1 file changed, 1 insertion(+) diff --git a/dictsource/fi_rules b/dictsource/fi_rules index a906dd0a..8122e71f 100644 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -172,6 +172,7 @@ .group r r r CA) rg (_ Rj // follow swedish pronunciation + _CA) rg (C Rj // follow swedish pronunciation .group s s s From ec99b6ba48cc04a0e9434680544214f39471da07 Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Sat, 30 Sep 2017 10:51:40 +0300 Subject: [PATCH 079/137] Finnish: Move ruoan from pronunciation exception to a rule to include usage in compound words and inflections. In general, most finnish exceptions should be inside rules since compound words and inflections are very common in finnish --- dictsource/fi_list | 1 - dictsource/fi_rules | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dictsource/fi_list b/dictsource/fi_list index e12cd243..d8f2666d 100644 --- a/dictsource/fi_list +++ b/dictsource/fi_list @@ -366,7 +366,6 @@ ok 'o:_,ko: okay okei yoghurt jogurt:i yogurt jogurt:i -ruoan ru:an // Abbreviations diff --git a/dictsource/fi_rules b/dictsource/fi_rules index 8122e71f..05470dcb 100644 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -173,6 +173,8 @@ r r CA) rg (_ Rj // follow swedish pronunciation _CA) rg (C Rj // follow swedish pronunciation + ruoan ru:an // Pronounce ruoan as ruuan. Include all inflections and compound words. + // eg. ruoanlaitto, ruoankin, arkiruoan .group s s s From ef067a11fbb889083b9167007191e0d0976bd628 Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Sat, 30 Sep 2017 11:07:21 +0300 Subject: [PATCH 080/137] finnish: ui sounds better than wi in all tested cases (subjective opinion). I haven't heard of any rule saying ui should be pronounced like wi. --- dictsource/fi_rules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dictsource/fi_rules b/dictsource/fi_rules index 05470dcb..fafdcdfa 100644 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -200,9 +200,9 @@ .group u u u uu u: - ui wi - _) ui ui - _j) ui ui // [ui] sounds better than [wi] when stressed. Especially at the beginning of the word sounds bad if pronounced [jwi] + ui ui +// _) ui ui +// _j) ui ui // [ui] sounds better than [wi] when stressed. Especially at the beginning of the word sounds bad if pronounced [jwi] uii u|i: uo uo uoo u|o: From 119c200e00a46248bbaa149e8d0c3b1f19f86135 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 1 Oct 2017 08:41:22 +0100 Subject: [PATCH 081/137] Use strcpy instead of memcpy+strlen. This replaces uses of: memcpy(dst, src, strlen(src)) with: strcpy(dst, src) This fixes issues with reading past the end of the copied buffer (e.g. when processing word-based replacements for emoji characters) by ensuring that the destination buffer is null terminated. Reported by Michael Curran --- .gitignore | 1 + Makefile.am | 1 + src/libespeak-ng/dictionary.c | 4 ++-- src/libespeak-ng/translate.c | 12 ++++++------ tests/phoneme-output.test | 21 +++++++++++++++++++++ 5 files changed, 31 insertions(+), 8 deletions(-) create mode 100755 tests/phoneme-output.test diff --git a/.gitignore b/.gitignore index 60f7758e..47826973 100644 --- a/.gitignore +++ b/.gitignore @@ -96,6 +96,7 @@ src/speak-ng tests/*.test !tests/languages.test +!tests/phoneme-output.test espeak-ng.pc diff --git a/Makefile.am b/Makefile.am index 0ae0c326..427083de 100644 --- a/Makefile.am +++ b/Makefile.am @@ -250,6 +250,7 @@ tests_api_test_SOURCES = tests/api.c check: tests/encoding.check \ tests/readclause.check \ tests/api.check \ + tests/phoneme-output.check \ tests/languages.check ##### phoneme data: diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index c82e4272..4ce6d8df 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -2394,7 +2394,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c match1.end_type |= p - p_start; } strcpy(end_phonemes, match1.phonemes); - memcpy(p_start, word_copy, strlen(word_copy)); + strcpy(p_start, word_copy); return match1.end_type; } } @@ -2404,7 +2404,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c } } - memcpy(p_start, word_copy, strlen(word_copy)); + strcpy(p_start, word_copy); return 0; } diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index 780d4486..73cd9948 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -795,7 +795,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char if (end2) { RemoveEnding(tr, wordx, end2, word_copy); end_type = TranslateRules(tr, wordx, phonemes, N_WORD_PHONEMES, end_phonemes, wflags|FLAG_NO_TRACE, dictionary_flags); - memcpy(wordx, word_copy, strlen(word_copy)); + strcpy(wordx, word_copy); if ((end_type & SUFX_P) == 0) { // after removing the suffix, the prefix is no longer recognised. // Keep the suffix, but don't use the prefix @@ -902,7 +902,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char wordx[-1] = ' '; if (phonemes[0] == phonSWITCH) { // change to another language in order to translate this word - memcpy(wordx, word_copy, strlen(word_copy)); + strcpy(wordx, word_copy); strcpy(word_phonemes, phonemes); return 0; } @@ -920,7 +920,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char found = LookupDictList(tr, &wordx, phonemes, dictionary_flags2, end_flags, wtab); // without prefix and suffix if (phonemes[0] == phonSWITCH) { // change to another language in order to translate this word - memcpy(wordx, word_copy, strlen(word_copy)); + strcpy(wordx, word_copy); strcpy(word_phonemes, phonemes); return 0; } @@ -960,7 +960,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char if (phonemes[0] == phonSWITCH) { // change to another language in order to translate this word strcpy(word_phonemes, phonemes); - memcpy(wordx, word_copy, strlen(word_copy)); + strcpy(wordx, word_copy); wordx[-1] = c_temp; return 0; } @@ -974,7 +974,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char AppendPhonemes(tr, phonemes, N_WORD_PHONEMES, end_phonemes); end_phonemes[0] = 0; } - memcpy(wordx, word_copy, strlen(word_copy)); + strcpy(wordx, word_copy); } wordx[-1] = c_temp; @@ -1139,7 +1139,7 @@ int TranslateWord(Translator *tr, char *word_start, WORD_TAB *wtab, char *word_o char word[N_WORD_BYTES+1]; word[0] = 0; word[1] = ' '; - memcpy(word+2, word_out, strlen(word_out)); + strcpy(word+2, word_out); word_out = word+2; while (*word_out && available > 1) { diff --git a/tests/phoneme-output.test b/tests/phoneme-output.test new file mode 100755 index 00000000..1468bec3 --- /dev/null +++ b/tests/phoneme-output.test @@ -0,0 +1,21 @@ +#!/bin/sh + +test_phonemes() { + TEST_LANG=$1 + EXPECTED=$2 + TEST_TEXT=$3 + + echo "testing ${TEST_LANG} \"${TEST_TEXT}\"" + ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ + src/espeak-ng -xq -v ${TEST_LANG} "${TEST_TEXT}" > actual.txt + echo "${EXPECTED}" > expected.txt + diff expected.txt actual.txt || exit 1 +} + +test_phonemes en " h@l'oU" "hello" + +# Emoji + +# ED-3 - emoji_character [http://www.unicode.org/reports/tr51/tr51-12.html#def_emoji_character] +test_phonemes en " Ekskla#m'eIS@N kw'EstS@n m'A@k" "⁉" +test_phonemes en " Ekskla#m'eIS@N kw'EstS@n m'A@k r'eInboU" "⁉ 🌈" From 516786aecb74f2057305f4e8b1f4079725ca6f37 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 1 Oct 2017 11:28:33 +0100 Subject: [PATCH 082/137] ka: Comment out the emoji translations that were breaking the pronunciation of '3' and '7'. --- dictsource/ka_emoji | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dictsource/ka_emoji b/dictsource/ka_emoji index d4f55111..92b78ee9 100644 --- a/dictsource/ka_emoji +++ b/dictsource/ka_emoji @@ -926,7 +926,8 @@ $textmode 😖 შეცბუნებული სახე // [1F616] 😗 კოცნის გამომხატველი სახე // [1F617] 😘 სახე, რომელიც კოცნას აგზავნის // [1F618] -😙 კოცნის გამომხატველი სახე მომღიმარე თვალებით // [1F619] +😗 kissing face // [1F617] +//😙 კოცნის გამომხატველი სახე მომღიმარე თვალებით // [1F619] TODO: This breaks speaking "7". 😚 კოცნის გამომხატველი სახე დახუჭული თვალებით // [1F61A] 😛 სახე გამოყოფილი ენით // [1F61B] 😜 სახე გამოყოფილი ენითა და ჩაკრული თვალით // [1F61C] @@ -938,7 +939,8 @@ $textmode 😢 მტირალა სახე // [1F622] 😣 შეუპოვარი სახე // [1F623] 😤 სახე ცხვირიდან გამომავალი ორთქლით // [1F624] -😥 იმედგაცრუებული, მაგრამ შვების გამომხატველი სახე // [1F625] +😥 disappointed but relieved face // [1F625] +//😥 იმედგაცრუებული, მაგრამ შვების გამომხატველი სახე // [1F625] TODO: This breaks speaking "3". 😦 შეჭმუხნილი სახე ღია პირით // [1F626] 😧 ტანჯული სახე // [1F627] 😨 შეშინებული სახე // [1F628] From 2442dd05aefea74d7c486439394664a14a007d3c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 1 Oct 2017 12:23:12 +0100 Subject: [PATCH 083/137] Document the ignored characters in tr_languages.c. --- src/libespeak-ng/tr_languages.c | 43 ++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/libespeak-ng/tr_languages.c b/src/libespeak-ng/tr_languages.c index 38034312..083ed186 100644 --- a/src/libespeak-ng/tr_languages.c +++ b/src/libespeak-ng/tr_languages.c @@ -158,19 +158,44 @@ static void SetLetterBitsRange(Translator *tr, int group, int first, int last) // ignore these characters static const unsigned short chars_ignore_default[] = { - 0xad, 1, // soft hyphen - 0x200c, 1, // zero width non-joiner - 0x200d, 1, // zero width joiner - 0, 0 + // U+00AD SOFT HYPHEN + // Used to mark hyphenation points in words for where to split a + // word at the end of a line to provide readable justified text. + 0xad, 1, + // U+200C ZERO WIDTH NON-JOINER + // Used to prevent combined ligatures being displayed in their + // combined form. + 0x200c, 1, + // U+200D ZERO WIDTH JOINER + // Used to indicate an alternative connected form made up of the + // characters surrounding the ZWJ in Devanagari, Kannada, Malayalam + // and Emoji. + 0x200d, 1, + // End of the ignored character list. + 0, 0 }; // alternatively, ignore characters but allow zero-width-non-joiner (lang-fa) static const unsigned short chars_ignore_zwnj_hyphen[] = { - 0xad, 1, // soft hyphen - 0x640, 1, // igniore Arabic Tatweel (lang=FA) - 0x200c, '-', // zero width non-joiner, replace with hyphen - 0x200d, 1, // zero width joiner - 0, 0 + // U+00AD SOFT HYPHEN + // Used to mark hyphenation points in words for where to split a + // word at the end of a line to provide readable justified text. + 0xad, 1, + // U+0640 TATWEEL (KASHIDA) + // Used in Arabic scripts to stretch characters for justifying + // the text. + 0x640, 1, + // U+200C ZERO WIDTH NON-JOINER + // Used to prevent combined ligatures being displayed in their + // combined form. + 0x200c, '-', + // U+200D ZERO WIDTH JOINER + // Used to indicate an alternative connected form made up of the + // characters surrounding the ZWJ in Devanagari, Kannada, Malayalam + // and Emoji. + 0x200d, 1, + // End of the ignored character list. + 0, 0 }; const unsigned char utf8_ordinal[] = { 0xc2, 0xba, 0 }; // masculine ordinal character, UTF-8 From 7f5914c0ded36f20556c984cecb94074c2f7ea41 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 1 Oct 2017 12:24:30 +0100 Subject: [PATCH 084/137] Don't ignore ZWJ characters. --- src/libespeak-ng/tr_languages.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libespeak-ng/tr_languages.c b/src/libespeak-ng/tr_languages.c index 083ed186..6556d224 100644 --- a/src/libespeak-ng/tr_languages.c +++ b/src/libespeak-ng/tr_languages.c @@ -170,7 +170,7 @@ static const unsigned short chars_ignore_default[] = { // Used to indicate an alternative connected form made up of the // characters surrounding the ZWJ in Devanagari, Kannada, Malayalam // and Emoji. - 0x200d, 1, +// 0x200d, 1, // Not ignored. // End of the ignored character list. 0, 0 }; @@ -193,7 +193,7 @@ static const unsigned short chars_ignore_zwnj_hyphen[] = { // Used to indicate an alternative connected form made up of the // characters surrounding the ZWJ in Devanagari, Kannada, Malayalam // and Emoji. - 0x200d, 1, +// 0x200d, 1, // Not ignored. // End of the ignored character list. 0, 0 }; From 686a82f1b8fdef9accee02adefa59ed0c39a5936 Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Sun, 1 Oct 2017 17:59:54 +0300 Subject: [PATCH 085/137] finnish: added pronunciation for letter q Formerly, q was pronounced exactly like k. This is not the case in finnish. --- dictsource/fi_list | 2 +- dictsource/fi_rules | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dictsource/fi_list b/dictsource/fi_list index d8f2666d..7c9e1b23 100644 --- a/dictsource/fi_list +++ b/dictsource/fi_list @@ -29,7 +29,7 @@ n &n o o: ö Y: p pe: -q ku: +q qu: r &r s &s t te: diff --git a/dictsource/fi_rules b/dictsource/fi_rules index fafdcdfa..6f03a69e 100644 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -165,8 +165,8 @@ .group q - q k - qq k: + q q + qq q: .group r From c4cab2e42ab236298928d4ed3bc610746e2dae16 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Mon, 2 Oct 2017 07:39:50 +0100 Subject: [PATCH 086/137] Update the changelog. --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e26c232..fbc62f74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,14 @@ The espeak-ng project is a fork of the espeak project. ### 1.49.3 - (In Development) +bug fixes: + +* Fix several issues with the emoji support. + +updated languages: + +* fi (Finnish) -- Juho Hiltunen + ### 1.49.2 - 2017-09-24 * Provide more validation when reading phoneme tables and voice/language files. From 4b284c02663f3ac5dae38370d1677925b614bba4 Mon Sep 17 00:00:00 2001 From: chrislm Date: Tue, 3 Oct 2017 17:45:54 +0200 Subject: [PATCH 087/137] IT: updated it_list and it_rules --- dictsource/it_list | 7 ++++++- dictsource/it_rules | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/dictsource/it_list b/dictsource/it_list index fef8493b..95c6e7d9 100644 --- a/dictsource/it_list +++ b/dictsource/it_list @@ -1,6 +1,6 @@  // This file is UTF-8 encoded -// Updated 2017 31 july by Christian Leo M, +// Updated 2017 october 3 by Christian Leo M, // $alt change [e] or [o] in the stressed syllable to [E] or [O] // $alt2 change [E] or [O] in the stressed syllable to [e] or [o] @@ -102,6 +102,10 @@ _< min'oRe||d'I _> madZ:'oRe||d'I _〈 ap'E@-*ta||,angol'aRe _〉 kj'uza||,angol'aRe +_〈 ap'E@-*ta||angol'ata +_〉 kj'uza||angol'ata +_【 ap'E@-*ta||lentikol'aRe +_】 kj'uza||lentikol'aRe * aste@-*'isko $max3 $ d'Ol:aRI % pe@-*tS'ENto $max3 @@ -3207,6 +3211,7 @@ distino $1 distintesi $2 disturbano $2 disturbino $2 +dissuadere dissuad'eRe divaghino $2 divaricano $2 diventino $2 diff --git a/dictsource/it_rules b/dictsource/it_rules index ec4045d0..ef64f2c2 100644 --- a/dictsource/it_rules +++ b/dictsource/it_rules @@ -1,7 +1,7 @@ // Italian translation rules // This file is UTF-8 encoded -// Last update: 2017 july 31 by Christian Leo Mameli +// Last update: 2017 october 3 by Christian Leo Mameli // letter groups // A any vowel // C any consonant @@ -37,14 +37,15 @@ @) a (bile_ 'a @) a (ggine_ 'a _) ae (r aE - avano (_ 'avano + avano (_ 'avano // verbs a (tterA_ 'a _) all' (P4t all _) anch' (P5t ank @) amo (L04_ 'amo // Pron.s verbs Ci) amo (L04_ 'amo @) ander (L04_ 'andE@-* - ate (L04_+ 'ate + ate (L04_+ 'ate + abb) assa (L07_ 'assa _L04Z) auguri (_ 'awguRI astano (_ 'astano // verbs @@ -569,6 +570,8 @@ _) segna (L05_ s'en^a in) segna (L07_ s'En^a _)segnala (L07_ sen^'ala + specifica (L07_ spetS'ifika + stringi (L04_ st@-*'indZi/ A) scano (_ =skano // verbs sciano (_ =Sano A) schiano (_ =skiano @@ -602,6 +605,7 @@ au) tentica (L07_ t'ENtIka/ a) ttiva (L07_ t:'iva taglia (L07_ t'al^a + tira (L07_ t'iRa L02) tre (_ t@-*'e _) tutt' (P5t tut: @@ -625,6 +629,7 @@ ustano (_ 'u:stano C) uo (tano_ U'O uomini (_ w2'Omini + fanc) u (lA_ 'u: .group v v v From 55290b7aed9ee8cacf1baa3539bc5fecd9e4ede4 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 3 Oct 2017 18:36:17 +0100 Subject: [PATCH 088/137] Update the changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbc62f74..57b16c1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ bug fixes: updated languages: * fi (Finnish) -- Juho Hiltunen +* it (Italian) -- chrislm ### 1.49.2 - 2017-09-24 From dd3df1d0a8abd8276f24323dce0172b4a5c0913e Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 07:05:47 +0100 Subject: [PATCH 089/137] Enable and fix -Wunused-function warnings. --- .gitignore | 4 +- configure.ac | 8 ++++ m4/ax_check_compile_flag.m4 | 75 +++++++++++++++++++++++++++++++++++++ src/libespeak-ng/voices.c | 12 ------ 4 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 m4/ax_check_compile_flag.m4 diff --git a/.gitignore b/.gitignore index 47826973..36d797e3 100644 --- a/.gitignore +++ b/.gitignore @@ -66,11 +66,13 @@ depcomp install-sh libtool ltmain.sh -m4/ missing stamp-h1 .dirstamp +m4/* +!m4/ax_check_compile_flag.m4 + # libraries docs/speak_lib.h diff --git a/configure.ac b/configure.ac index 691e31d1..f51c54ee 100644 --- a/configure.ac +++ b/configure.ac @@ -269,6 +269,14 @@ AM_CONDITIONAL(HAVE_RU_EXTENDED_DICTIONARY, [test x"$have_extdict_ru" = xyes]) AM_CONDITIONAL(HAVE_ZH_EXTENDED_DICTIONARY, [test x"$have_extdict_zh" = xyes]) AM_CONDITIONAL(HAVE_ZHY_EXTENDED_DICTIONARY, [test x"$have_extdict_zhy" = xyes]) +dnl ================================================================ +dnl Compiler warnings. +dnl +dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html +dnl ================================================================ + +AX_CHECK_COMPILE_FLAG([-Wunused-function], [CFLAGS="-Wunused-function $CFLAGS"]) + dnl ================================================================ dnl Generate output. dnl ================================================================ diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 new file mode 100644 index 00000000..80c79114 --- /dev/null +++ b/m4/ax_check_compile_flag.m4 @@ -0,0 +1,75 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS + diff --git a/src/libespeak-ng/voices.c b/src/libespeak-ng/voices.c index f657af08..c7a1a75e 100644 --- a/src/libespeak-ng/voices.c +++ b/src/libespeak-ng/voices.c @@ -474,18 +474,6 @@ static int Read8Numbers(char *data_in, int *data) &data[0], &data[1], &data[2], &data[3], &data[4], &data[5], &data[6], &data[7]); } -static unsigned int StringToWord2(const char *string) -{ - // Convert a language name string to a word such as L('e','n') - int ix; - int c; - unsigned int value = 0; - - for (ix = 0; (ix < 4) && ((c = string[ix]) != 0); ix++) - value = (value << 8) | (c & 0xff); - return value; -} - voice_t *LoadVoice(const char *vname, int control) { // control, bit 0 1= no_default From 6d9bb7ef1725a96409f1b254c9da8f6cc14e64ed Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 07:06:33 +0100 Subject: [PATCH 090/137] Enable and fix -Wunused-parameter warnings. --- configure.ac | 2 ++ src/libespeak-ng/encoding.c | 1 + src/libespeak-ng/synth_mbrola.c | 9 +++++++++ tests/api.c | 2 ++ tests/encoding.c | 3 +++ tests/readclause.c | 3 +++ 6 files changed, 20 insertions(+) diff --git a/configure.ac b/configure.ac index f51c54ee..273889d8 100644 --- a/configure.ac +++ b/configure.ac @@ -277,6 +277,8 @@ dnl ================================================================ AX_CHECK_COMPILE_FLAG([-Wunused-function], [CFLAGS="-Wunused-function $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) + dnl ================================================================ dnl Generate output. dnl ================================================================ diff --git a/src/libespeak-ng/encoding.c b/src/libespeak-ng/encoding.c index 122e9099..2084e5f3 100644 --- a/src/libespeak-ng/encoding.c +++ b/src/libespeak-ng/encoding.c @@ -654,6 +654,7 @@ string_decoder_getc_auto(espeak_ng_TEXT_DECODER *decoder) static uint32_t null_decoder_getc(espeak_ng_TEXT_DECODER *decoder) { + (void)decoder; // unused parameter return 0; } diff --git a/src/libespeak-ng/synth_mbrola.c b/src/libespeak-ng/synth_mbrola.c index 3e2031dc..f9bd3a3a 100644 --- a/src/libespeak-ng/synth_mbrola.c +++ b/src/libespeak-ng/synth_mbrola.c @@ -573,16 +573,25 @@ void MbrolaReset(void) espeak_ng_STATUS LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int *srate) { + (void)mbrola_voice; // unused parameter + (void)phtrans; // unused parameter + (void)srate; // unused parameter return ENS_NOT_SUPPORTED; } int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) { + (void)phoneme_list; // unused parameter + (void)n_ph; // unused parameter + (void)resume; // unused parameter return 0; } int MbrolaFill(int length, int resume, int amplitude) { + (void)length; // unused parameter + (void)resume; // unused parameter + (void)amplitude; // unused parameter return 0; } diff --git a/tests/api.c b/tests/api.c index 6a509711..9a48859e 100644 --- a/tests/api.c +++ b/tests/api.c @@ -540,6 +540,8 @@ test_espeak_set_voice_by_properties_with_invalid_language() int main(int argc, char **argv) { + (void)argc; // unused parameter + char *progdir = strdup(argv[0]); char *dir = strrchr(progdir, '/'); if (dir != NULL) *dir = 0; diff --git a/tests/encoding.c b/tests/encoding.c index 3a141051..52dffe2e 100644 --- a/tests/encoding.c +++ b/tests/encoding.c @@ -876,6 +876,9 @@ test_peekc() int main(int argc, char **argv) { + (void)argc; // unused parameter + (void)argv; // unused parameter + test_unbound_text_decoder(); test_unknown_encoding(); diff --git a/tests/readclause.c b/tests/readclause.c index e0002c4d..486c0979 100644 --- a/tests/readclause.c +++ b/tests/readclause.c @@ -513,6 +513,9 @@ test_uts51_emoji_keycap_sequence() int main(int argc, char **argv) { + (void)argc; // unused parameter + (void)argv; // unused parameter + assert(espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS, 0, NULL, espeakINITIALIZE_DONT_EXIT) == 22050); test_latin(); From d89fa59beda49c0365afc19c2990a2bf935ef369 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 07:23:17 +0100 Subject: [PATCH 091/137] Enable and fix -Wunused-variable warnings. --- configure.ac | 4 ++-- src/libespeak-ng/compiledata.c | 2 -- src/libespeak-ng/readclause.c | 1 - src/libespeak-ng/synthdata.c | 2 -- src/libespeak-ng/translate.c | 1 - tests/readclause.c | 1 - 6 files changed, 2 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index 273889d8..0619cb3a 100644 --- a/configure.ac +++ b/configure.ac @@ -275,9 +275,9 @@ dnl dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html dnl ================================================================ -AX_CHECK_COMPILE_FLAG([-Wunused-function], [CFLAGS="-Wunused-function $CFLAGS"]) - +AX_CHECK_COMPILE_FLAG([-Wunused-function], [CFLAGS="-Wunused-function $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-variable], [CFLAGS="-Wunused-variable $CFLAGS"]) dnl ================================================================ dnl Generate output. diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index 213692b7..572961df 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -2359,8 +2359,6 @@ static void WritePhonemeTables() static void EndPhonemeTable() { int ix; - int *pw; - int length; if (n_phoneme_tabs == 0) return; diff --git a/src/libespeak-ng/readclause.c b/src/libespeak-ng/readclause.c index ef8da7d1..39a3f026 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -184,7 +184,6 @@ int Eof(void) static int GetC(void) { int c1; - static int ungot2 = 0; if ((c1 = ungot_char) != 0) { ungot_char = 0; diff --git a/src/libespeak-ng/synthdata.c b/src/libespeak-ng/synthdata.c index 9bf47423..2d4f27a1 100644 --- a/src/libespeak-ng/synthdata.c +++ b/src/libespeak-ng/synthdata.c @@ -112,7 +112,6 @@ espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context) int length = 0; int rate; unsigned char *p; - int *pw; espeak_ng_STATUS status; if ((status = ReadPhFile((void **)&phoneme_tab_data, "phontab", NULL, context)) != ENS_OK) @@ -508,7 +507,6 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, unsigned int data; int instn; int instn2; - int count; int check_endtype = 0; PHONEME_TAB *ph; PHONEME_LIST *plist_this; diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index 73cd9948..7ddb49af 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -525,7 +525,6 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char int more_suffixes; int confirm_prefix; int spell_word; - int stress_bits; int emphasize_allcaps = 0; int wflags; int wmark; diff --git a/tests/readclause.c b/tests/readclause.c index 486c0979..2692ba10 100644 --- a/tests/readclause.c +++ b/tests/readclause.c @@ -41,7 +41,6 @@ static short charix[N_TR_SOURCE+4]; static int charix_top = 0; static int tone2; static char voice_change_name[40]; -static int terminator; static espeak_ng_STATUS set_text(const char *text, const char *voicename) From 977c85ad6eafa6e8ea9b9f08c35d164bfa7e1f62 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 07:35:10 +0100 Subject: [PATCH 092/137] Enable and fix -Wunused-but-set-variable warnings. --- configure.ac | 7 ++++--- src/libespeak-ng/event.c | 16 ++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/configure.ac b/configure.ac index 0619cb3a..5ec75351 100644 --- a/configure.ac +++ b/configure.ac @@ -275,9 +275,10 @@ dnl dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html dnl ================================================================ -AX_CHECK_COMPILE_FLAG([-Wunused-function], [CFLAGS="-Wunused-function $CFLAGS"]) -AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) -AX_CHECK_COMPILE_FLAG([-Wunused-variable], [CFLAGS="-Wunused-variable $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-function], [CFLAGS="-Wunused-function $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-variable], [CFLAGS="-Wunused-variable $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-but-set-variable], [CFLAGS="-Wunused-but-set-variable $CFLAGS"]) dnl ================================================================ dnl Generate output. diff --git a/src/libespeak-ng/event.c b/src/libespeak-ng/event.c index c1dcd1f0..f762bc26 100644 --- a/src/libespeak-ng/event.c +++ b/src/libespeak-ng/event.c @@ -257,7 +257,7 @@ static void *polling_thread(void *p) while (1) { int a_stop_is_required = 0; - int a_status = pthread_mutex_lock(&my_mutex); + (void)pthread_mutex_lock(&my_mutex); my_event_is_running = 0; while (my_start_is_required == 0) { @@ -284,16 +284,16 @@ static void *polling_thread(void *p) event->user_data = NULL; } - a_status = pthread_mutex_lock(&my_mutex); + (void)pthread_mutex_lock(&my_mutex); event_delete((espeak_EVENT *)pop()); a_stop_is_required = my_stop_is_required; if (a_stop_is_required > 0) my_stop_is_required = 0; - a_status = pthread_mutex_unlock(&my_mutex); + (void)pthread_mutex_unlock(&my_mutex); } - a_status = pthread_mutex_lock(&my_mutex); + (void)pthread_mutex_lock(&my_mutex); my_event_is_running = 0; @@ -303,7 +303,7 @@ static void *polling_thread(void *p) my_stop_is_required = 0; } - a_status = pthread_mutex_unlock(&my_mutex); + (void)pthread_mutex_unlock(&my_mutex); if (a_stop_is_required > 0) { // no mutex required since the stop command is synchronous @@ -311,10 +311,10 @@ static void *polling_thread(void *p) init(); // acknowledge the stop request - espeak_ng_STATUS a_status = pthread_mutex_lock(&my_mutex); + (void)pthread_mutex_lock(&my_mutex); my_stop_is_acknowledged = 1; - a_status = pthread_cond_signal(&my_cond_stop_is_acknowledged); - a_status = pthread_mutex_unlock(&my_mutex); + (void)pthread_cond_signal(&my_cond_stop_is_acknowledged); + (void)pthread_mutex_unlock(&my_mutex); } } From 20dc74eafb4e55fe1dfbca5c41ba21c690d09ca4 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 07:39:58 +0100 Subject: [PATCH 093/137] Use the -Wunused flag instead of the separate flags. --- configure.ac | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 5ec75351..11400b5b 100644 --- a/configure.ac +++ b/configure.ac @@ -275,10 +275,8 @@ dnl dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html dnl ================================================================ -AX_CHECK_COMPILE_FLAG([-Wunused-function], [CFLAGS="-Wunused-function $CFLAGS"]) -AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) -AX_CHECK_COMPILE_FLAG([-Wunused-variable], [CFLAGS="-Wunused-variable $CFLAGS"]) -AX_CHECK_COMPILE_FLAG([-Wunused-but-set-variable], [CFLAGS="-Wunused-but-set-variable $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) dnl ================================================================ dnl Generate output. From ed4d82c61be58a17da168df2b44a41fd5f3358e1 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 19:50:22 +0100 Subject: [PATCH 094/137] Fix the UCD version in the comments. --- src/case.c | 2 +- src/categories.c | 2 +- src/scripts.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/case.c b/src/case.c index 14a5e9aa..9ab0223a 100644 --- a/src/case.c +++ b/src/case.c @@ -26,7 +26,7 @@ #include -/* Unicode Character Data 9.0.0 */ +/* Unicode Character Data 10.0.0 */ struct case_conversion_entry { diff --git a/src/categories.c b/src/categories.c index 4eade2eb..66311df9 100644 --- a/src/categories.c +++ b/src/categories.c @@ -58,7 +58,7 @@ #define Zs UCD_CATEGORY_Zs #define Ii UCD_CATEGORY_Ii -/* Unicode Character Data 9.0.0 */ +/* Unicode Character Data 10.0.0 */ static const uint8_t categories_Cn[256] = { diff --git a/src/scripts.c b/src/scripts.c index ae1a4893..573c137a 100644 --- a/src/scripts.c +++ b/src/scripts.c @@ -203,7 +203,7 @@ #define Zyyy UCD_SCRIPT_Zyyy #define Zzzz UCD_SCRIPT_Zzzz -/* Unicode Character Data 9.0.0 */ +/* Unicode Character Data 10.0.0 */ static const uint8_t scripts_Latn[256] = { From 256229b3482b7f3d7222f7713a64db19dc5460e7 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 19:52:34 +0100 Subject: [PATCH 095/137] Enable and fix -Wreturn-type warnings. --- .gitignore | 4 +- configure.ac | 8 ++++ m4/ax_check_compile_flag.m4 | 75 +++++++++++++++++++++++++++++++++++++ src/categories.c | 1 + tools/categories.py | 1 + 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 m4/ax_check_compile_flag.m4 diff --git a/.gitignore b/.gitignore index 532cd277..41f06e59 100644 --- a/.gitignore +++ b/.gitignore @@ -53,8 +53,10 @@ depcomp install-sh libtool ltmain.sh -m4/ missing Makefile Makefile.in stamp-h1 + +m4/* +!m4/ax_check_compile_flag.m4 diff --git a/configure.ac b/configure.ac index 9da5bfa4..46fc4cba 100644 --- a/configure.ac +++ b/configure.ac @@ -41,6 +41,14 @@ AC_ARG_WITH([unicode-version], AC_SUBST(UCD_VERSION) +dnl ================================================================ +dnl Compiler warnings. +dnl +dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html +dnl ================================================================ + +AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"]) + dnl ================================================================ dnl Generate output. dnl ================================================================ diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 new file mode 100644 index 00000000..80c79114 --- /dev/null +++ b/m4/ax_check_compile_flag.m4 @@ -0,0 +1,75 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS + diff --git a/src/categories.c b/src/categories.c index 66311df9..d0e2a4a8 100644 --- a/src/categories.c +++ b/src/categories.c @@ -3532,6 +3532,7 @@ ucd_category_group ucd_get_category_group_for_category(ucd_category c) case Zl: case Zp: case Zs: return UCD_CATEGORY_GROUP_Z; case Ii: + default: return UCD_CATEGORY_GROUP_I; } } diff --git a/tools/categories.py b/tools/categories.py index 43b46eb0..c189adf1 100755 --- a/tools/categories.py +++ b/tools/categories.py @@ -228,6 +228,7 @@ ucd_category_group ucd_get_category_group_for_category(ucd_category c) case Zl: case Zp: case Zs: return UCD_CATEGORY_GROUP_Z; case Ii: + default: return UCD_CATEGORY_GROUP_I; } } From 05d9a4839c1ac792b9a3842e6bd0ad13c5316359 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 20:14:06 +0100 Subject: [PATCH 096/137] Enable and fix -Wmissing-prototypes warnings. --- configure.ac | 1 + tests/printcdata.c | 12 ++++++------ tests/printucddata.c | 12 ++++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/configure.ac b/configure.ac index 46fc4cba..399f99e9 100644 --- a/configure.ac +++ b/configure.ac @@ -47,6 +47,7 @@ dnl dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html dnl ================================================================ +AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"]) dnl ================================================================ diff --git a/tests/printcdata.c b/tests/printcdata.c index 6992bb94..9d0ab18a 100644 --- a/tests/printcdata.c +++ b/tests/printcdata.c @@ -33,7 +33,7 @@ static int iswblank(wint_t c) } #endif -void fput_utf8c(FILE *out, codepoint_t c) +static void fput_utf8c(FILE *out, codepoint_t c) { if (c < 0x80) fputc((uint8_t)c, out); @@ -57,7 +57,7 @@ void fput_utf8c(FILE *out, codepoint_t c) } } -int fget_utf8c(FILE *in, codepoint_t *c) +static int fget_utf8c(FILE *in, codepoint_t *c) { int ch = EOF; if ((ch = fgetc(in)) == EOF) return 0; @@ -90,7 +90,7 @@ int fget_utf8c(FILE *in, codepoint_t *c) return 1; } -void uprintf_codepoint(FILE *out, codepoint_t c, char mode) +static void uprintf_codepoint(FILE *out, codepoint_t c, char mode) { switch (mode) { @@ -112,7 +112,7 @@ void uprintf_codepoint(FILE *out, codepoint_t c, char mode) } } -void uprintf_is(FILE *out, codepoint_t c, char mode) +static void uprintf_is(FILE *out, codepoint_t c, char mode) { switch (mode) { @@ -155,7 +155,7 @@ void uprintf_is(FILE *out, codepoint_t c, char mode) } } -void uprintf(FILE *out, codepoint_t c, const char *format) +static void uprintf(FILE *out, codepoint_t c, const char *format) { while (*format) switch (*format) { @@ -221,7 +221,7 @@ void uprintf(FILE *out, codepoint_t c, const char *format) } } -void print_file(FILE *in, const char *format) +static void print_file(FILE *in, const char *format) { codepoint_t c = 0; while (fget_utf8c(in, &c)) diff --git a/tests/printucddata.c b/tests/printucddata.c index b592f820..9a623bf3 100644 --- a/tests/printucddata.c +++ b/tests/printucddata.c @@ -22,7 +22,7 @@ #include #include -void fput_utf8c(FILE *out, codepoint_t c) +static void fput_utf8c(FILE *out, codepoint_t c) { if (c < 0x80) fputc((uint8_t)c, out); @@ -46,7 +46,7 @@ void fput_utf8c(FILE *out, codepoint_t c) } } -int fget_utf8c(FILE *in, codepoint_t *c) +static int fget_utf8c(FILE *in, codepoint_t *c) { int ch = EOF; if ((ch = fgetc(in)) == EOF) return 0; @@ -79,7 +79,7 @@ int fget_utf8c(FILE *in, codepoint_t *c) return 1; } -void uprintf_codepoint(FILE *out, codepoint_t c, char mode) +static void uprintf_codepoint(FILE *out, codepoint_t c, char mode) { switch (mode) { @@ -101,7 +101,7 @@ void uprintf_codepoint(FILE *out, codepoint_t c, char mode) } } -void uprintf_is(FILE *out, codepoint_t c, char mode) +static void uprintf_is(FILE *out, codepoint_t c, char mode) { switch (mode) { @@ -144,7 +144,7 @@ void uprintf_is(FILE *out, codepoint_t c, char mode) } } -void uprintf(FILE *out, codepoint_t c, const char *format) +static void uprintf(FILE *out, codepoint_t c, const char *format) { while (*format) switch (*format) { @@ -210,7 +210,7 @@ void uprintf(FILE *out, codepoint_t c, const char *format) } } -void print_file(FILE *in, const char *format) +static void print_file(FILE *in, const char *format) { codepoint_t c = 0; while (fget_utf8c(in, &c)) From 553a6f38a612dd0e2c43a99608eccd8b82a6192c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 5 Oct 2017 20:28:28 +0100 Subject: [PATCH 097/137] Enable and fix -Wreturn-type warnings. --- configure.ac | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 11400b5b..d0d80243 100644 --- a/configure.ac +++ b/configure.ac @@ -275,8 +275,9 @@ dnl dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html dnl ================================================================ -AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"]) -AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) dnl ================================================================ dnl Generate output. From 6d168ead228bbe6a75243218ab4b14698e1f798b Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Fri, 6 Oct 2017 07:09:41 +0100 Subject: [PATCH 098/137] fifo.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/fifo.c | 2 +- src/libespeak-ng/fifo.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libespeak-ng/fifo.c b/src/libespeak-ng/fifo.c index 6076492b..21b0de25 100644 --- a/src/libespeak-ng/fifo.c +++ b/src/libespeak-ng/fifo.c @@ -58,7 +58,7 @@ static int my_stop_is_acknowledged = 0; static void *say_thread(void *); static espeak_ng_STATUS push(t_espeak_command *the_command); -static t_espeak_command *pop(); +static t_espeak_command *pop(void); static void init(int process_parameters); static int node_counter = 0; diff --git a/src/libespeak-ng/fifo.h b/src/libespeak-ng/fifo.h index 2b491441..7d5c001e 100644 --- a/src/libespeak-ng/fifo.h +++ b/src/libespeak-ng/fifo.h @@ -29,7 +29,7 @@ extern "C" // Initialize the fifo component. // First function to be called. -void fifo_init(); +void fifo_init(void); // Add an espeak command. // @@ -44,15 +44,15 @@ espeak_ng_STATUS fifo_add_command(t_espeak_command *c); espeak_ng_STATUS fifo_add_commands(t_espeak_command *c1, t_espeak_command *c2); // The current running command must be stopped and the awaiting commands are cleared. -espeak_ng_STATUS fifo_stop(); +espeak_ng_STATUS fifo_stop(void); // Is there a running command? // Returns 1 if yes; 0 otherwise. -int fifo_is_busy(); +int fifo_is_busy(void); // Terminate the fifo component. // Last function to be called. -void fifo_terminate(); +void fifo_terminate(void); // Indicates if the running command is still enabled. // @@ -61,7 +61,7 @@ void fifo_terminate(); // stopping speech as soon as a cancel command is applied. // // Returns 1 if yes, or 0 otherwise. -int fifo_is_command_enabled(); +int fifo_is_command_enabled(void); #ifdef __cplusplus } From ba62f9a1626d82f51385dd924ce62ed2505945b2 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Fri, 6 Oct 2017 07:11:17 +0100 Subject: [PATCH 099/137] event.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/event.c | 4 ++-- src/libespeak-ng/event.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libespeak-ng/event.c b/src/libespeak-ng/event.c index f762bc26..c47fd641 100644 --- a/src/libespeak-ng/event.c +++ b/src/libespeak-ng/event.c @@ -66,8 +66,8 @@ static node *head = NULL; static node *tail = NULL; static int node_counter = 0; static espeak_ng_STATUS push(void *data); -static void *pop(); -static void init(); +static void *pop(void); +static void init(void); static void *polling_thread(void *); void event_set_callback(t_espeak_callback *SynthCallback) diff --git a/src/libespeak-ng/event.h b/src/libespeak-ng/event.h index 226d3c2a..262b457a 100644 --- a/src/libespeak-ng/event.h +++ b/src/libespeak-ng/event.h @@ -52,14 +52,14 @@ void event_init(void); void event_set_callback(t_espeak_callback *cb); // Clear any pending event. -espeak_ng_STATUS event_clear_all(); +espeak_ng_STATUS event_clear_all(void); // Declare a future event espeak_ng_STATUS event_declare(espeak_EVENT *event); // Terminate the event component. // Last function to be called. -void event_terminate(); +void event_terminate(void); // general functions void clock_gettime2(struct timespec *ts); From 63b162c6005147ec5ade7bbf452f1cde7d29dfa2 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Fri, 6 Oct 2017 07:13:26 +0100 Subject: [PATCH 100/137] mbrowrap.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/mbrowrap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/libespeak-ng/mbrowrap.c b/src/libespeak-ng/mbrowrap.c index 01333248..e9abde41 100644 --- a/src/libespeak-ng/mbrowrap.c +++ b/src/libespeak-ng/mbrowrap.c @@ -519,7 +519,7 @@ static ssize_t receive_from_mbrola(void *buffer, size_t bufsize) * API functions. */ -int init_mbrola(char *voice_path) +static int init_mbrola(char *voice_path) { int error, result; unsigned char wavhdr[45]; @@ -562,7 +562,7 @@ int init_mbrola(char *voice_path) return 0; } -void close_mbrola(void) +static void close_mbrola(void) { stop_mbrola(); free_pending_data(); @@ -571,7 +571,7 @@ void close_mbrola(void) mbr_volume = 1.0; } -void reset_mbrola(void) +static void reset_mbrola(void) { int result, success = 1; char dummybuf[4096]; @@ -595,7 +595,7 @@ void reset_mbrola(void) mbr_state = MBR_IDLE; } -int read_mbrola(short *buffer, int nb_samples) +static int read_mbrola(short *buffer, int nb_samples) { int result = receive_from_mbrola(buffer, nb_samples * 2); if (result > 0) @@ -603,23 +603,23 @@ int read_mbrola(short *buffer, int nb_samples) return result; } -int write_mbrola(char *data) +static int write_mbrola(char *data) { mbr_state = MBR_NEWDATA; return send_to_mbrola(data); } -int flush_mbrola(void) +static int flush_mbrola(void) { return send_to_mbrola("\n#\n") == 3; } -int getFreq_mbrola(void) +static int getFreq_mbrola(void) { return mbr_samplerate; } -void setVolumeRatio_mbrola(float value) +static void setVolumeRatio_mbrola(float value) { if (value == mbr_volume) return; @@ -634,7 +634,7 @@ void setVolumeRatio_mbrola(float value) init_MBR(mbr_voice_path); } -char *lastErrorStr_mbrola(char *buffer, int bufsize) +static char *lastErrorStr_mbrola(char *buffer, int bufsize) { if (mbr_pid) mbrola_has_errors(); @@ -642,7 +642,7 @@ char *lastErrorStr_mbrola(char *buffer, int bufsize) return buffer; } -void setNoError_mbrola(int no_error) +static void setNoError_mbrola(int no_error) { (void)no_error; // unused } From 66a53cce02d3fd2639be8dd02438291db0ec547f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Fri, 6 Oct 2017 07:17:31 +0100 Subject: [PATCH 101/137] klatt.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/klatt.c | 4 ++-- src/libespeak-ng/synthesize.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libespeak-ng/klatt.c b/src/libespeak-ng/klatt.c index 3bbd1014..d8fae5eb 100644 --- a/src/libespeak-ng/klatt.c +++ b/src/libespeak-ng/klatt.c @@ -846,7 +846,7 @@ static int klattp[N_KLATTP]; static double klattp1[N_KLATTP]; static double klattp_inc[N_KLATTP]; -int Wavegen_Klatt(int resume) +static int Wavegen_Klatt(int resume) { int pk; int x; @@ -935,7 +935,7 @@ int Wavegen_Klatt(int resume) return 0; } -void SetSynth_Klatt(int length, frame_t *fr1, frame_t *fr2, voice_t *v, int control) +static void SetSynth_Klatt(int length, frame_t *fr1, frame_t *fr2, voice_t *v, int control) { int ix; DOUBLEX next; diff --git a/src/libespeak-ng/synthesize.h b/src/libespeak-ng/synthesize.h index a2c52ea0..eb001848 100644 --- a/src/libespeak-ng/synthesize.h +++ b/src/libespeak-ng/synthesize.h @@ -545,7 +545,7 @@ int NumInstnWords(USHORT *prog); void InitBreath(void); -void KlattInit(); +void KlattInit(void); void KlattReset(int control); int Wavegen_Klatt2(int length, int resume, frame_t *fr1, frame_t *fr2); From 5c14e92f6b60472ba38a02857312db3483e8aa54 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Fri, 6 Oct 2017 07:22:38 +0100 Subject: [PATCH 102/137] voices.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/speech.c | 1 - src/libespeak-ng/voice.h | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/speech.c b/src/libespeak-ng/speech.c index 1def1073..c5685bbc 100644 --- a/src/libespeak-ng/speech.c +++ b/src/libespeak-ng/speech.c @@ -877,7 +877,6 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Synchronize(void) } extern void FreePhData(void); -extern void FreeVoiceList(void); ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Terminate(void) { diff --git a/src/libespeak-ng/voice.h b/src/libespeak-ng/voice.h index cafaf995..0765aaa7 100644 --- a/src/libespeak-ng/voice.h +++ b/src/libespeak-ng/voice.h @@ -86,6 +86,7 @@ espeak_ng_STATUS DoVoiceChange(voice_t *v); void WavegenSetVoice(voice_t *v); void ReadTonePoints(char *string, int *tone_pts); void VoiceReset(int control); +void FreeVoiceList(void); #ifdef __cplusplus } From 7ea0d0d7e93fd2c5e8ab538722d2b688d5cb3bdf Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Fri, 6 Oct 2017 07:36:09 +0100 Subject: [PATCH 103/137] speech.c: Fix -Wmissing-prototypes warnings. --- src/include/espeak-ng/speak_lib.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/include/espeak-ng/speak_lib.h b/src/include/espeak-ng/speak_lib.h index 8a42ed7f..b010ecb1 100644 --- a/src/include/espeak-ng/speak_lib.h +++ b/src/include/espeak-ng/speak_lib.h @@ -38,7 +38,7 @@ #define ESPEAK_API #endif -#define ESPEAK_API_REVISION 10 +#define ESPEAK_API_REVISION 12 /* Revision 2 Added parameter "options" to eSpeakInitialize() @@ -68,6 +68,12 @@ Revision 9 30.May.2013 Revision 10 29.Aug.2014 Changed phonememode parameter to espeak_TextToPhonemes() and espeak_SetPhonemeTrace +Revision 11 (espeak-ng) + Made ESPEAK_API import/export symbols correctly on Windows. + +Revision 12 (espeak-ng) + Exposed espeak_SetPhonemeCallback. This is available in eSpeak, but was not exposed in this header. + */ /********************/ /* Initialization */ @@ -260,6 +266,11 @@ int UriCallback(int type, const char *uri, const char *base); occurs. The calling program can then play the sound at that point. */ +#ifdef __cplusplus +extern "C" +#endif +ESPEAK_API void espeak_SetPhonemeCallback(int (*PhonemeCallback)(const char *)); + /********************/ /* Synthesis */ From 74f9f5e34b561fec582196d749ac0528cd290060 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 10 Oct 2017 21:37:46 +0100 Subject: [PATCH 104/137] wavegen.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/compiledata.c | 2 +- src/libespeak-ng/compiledict.c | 1 + src/libespeak-ng/compilembrola.c | 1 + src/libespeak-ng/dictionary.c | 1 + src/libespeak-ng/error.c | 1 + src/libespeak-ng/espeak_api.c | 1 + src/libespeak-ng/intonation.c | 2 +- src/libespeak-ng/klatt.c | 2 +- src/libespeak-ng/numbers.c | 2 +- src/libespeak-ng/phonemelist.c | 1 + src/libespeak-ng/readclause.c | 2 +- src/libespeak-ng/setlengths.c | 3 +-- src/libespeak-ng/spect.c | 3 +-- src/libespeak-ng/speech.c | 2 +- src/libespeak-ng/synth_mbrola.c | 3 +-- src/libespeak-ng/synthdata.c | 2 +- src/libespeak-ng/synthesize.c | 2 +- src/libespeak-ng/synthesize.h | 14 ++++++++------ src/libespeak-ng/tr_languages.c | 1 + src/libespeak-ng/translate.c | 2 +- src/libespeak-ng/voice.h | 2 ++ src/libespeak-ng/voices.c | 2 +- src/libespeak-ng/wavegen.c | 10 +++++----- tests/api.c | 1 + tests/readclause.c | 1 + 25 files changed, 37 insertions(+), 27 deletions(-) diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index 572961df..d3135ef3 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -37,8 +37,8 @@ #include "error.h" #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "spect.h" typedef struct { diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index 509b8fa7..38a67ad4 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -35,6 +35,7 @@ #include "error.h" #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" diff --git a/src/libespeak-ng/compilembrola.c b/src/libespeak-ng/compilembrola.c index 919821ee..2f96ba47 100644 --- a/src/libespeak-ng/compilembrola.c +++ b/src/libespeak-ng/compilembrola.c @@ -31,6 +31,7 @@ #include "error.h" #include "phoneme.h" #include "speech.h" +#include "voice.h" #include "synthesize.h" static const char *basename(const char *filename) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index 4ce6d8df..5bcfdbe9 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -33,6 +33,7 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" diff --git a/src/libespeak-ng/error.c b/src/libespeak-ng/error.c index b83f2214..c8b629d6 100644 --- a/src/libespeak-ng/error.c +++ b/src/libespeak-ng/error.c @@ -29,6 +29,7 @@ #include "error.h" #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" espeak_ng_STATUS diff --git a/src/libespeak-ng/espeak_api.c b/src/libespeak-ng/espeak_api.c index c50f4776..cf0e21af 100644 --- a/src/libespeak-ng/espeak_api.c +++ b/src/libespeak-ng/espeak_api.c @@ -29,6 +29,7 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" #include "event.h" diff --git a/src/libespeak-ng/intonation.c b/src/libespeak-ng/intonation.c index 7c61faaf..a505be48 100644 --- a/src/libespeak-ng/intonation.c +++ b/src/libespeak-ng/intonation.c @@ -30,8 +30,8 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" /* Note this module is mostly old code that needs to be rewritten to diff --git a/src/libespeak-ng/klatt.c b/src/libespeak-ng/klatt.c index d8fae5eb..6cd9bf21 100644 --- a/src/libespeak-ng/klatt.c +++ b/src/libespeak-ng/klatt.c @@ -37,8 +37,8 @@ #include "speech.h" #include "klatt.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" extern unsigned char *out_ptr; extern unsigned char *out_start; diff --git a/src/libespeak-ng/numbers.c b/src/libespeak-ng/numbers.c index 015cba47..77868841 100644 --- a/src/libespeak-ng/numbers.c +++ b/src/libespeak-ng/numbers.c @@ -33,8 +33,8 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" #define M_LIGATURE 0x8000 diff --git a/src/libespeak-ng/phonemelist.c b/src/libespeak-ng/phonemelist.c index 5339161e..ee5a7ce7 100644 --- a/src/libespeak-ng/phonemelist.c +++ b/src/libespeak-ng/phonemelist.c @@ -30,6 +30,7 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" diff --git a/src/libespeak-ng/readclause.c b/src/libespeak-ng/readclause.c index 39a3f026..1a78af7c 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -39,8 +39,8 @@ #include "error.h" #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" #define N_XML_BUF 500 diff --git a/src/libespeak-ng/setlengths.c b/src/libespeak-ng/setlengths.c index 241ab658..754660dd 100644 --- a/src/libespeak-ng/setlengths.c +++ b/src/libespeak-ng/setlengths.c @@ -30,11 +30,10 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" -extern int GetAmplitude(void); extern void DoSonicSpeed(int value); extern int saved_parameters[]; diff --git a/src/libespeak-ng/spect.c b/src/libespeak-ng/spect.c index 4ea7160b..7bb0bb94 100644 --- a/src/libespeak-ng/spect.c +++ b/src/libespeak-ng/spect.c @@ -32,12 +32,11 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "spect.h" extern double ConvertFromIeeeExtended(unsigned char *bytes); -extern int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control); extern unsigned char pk_shape1[]; extern int pk_select; diff --git a/src/libespeak-ng/speech.c b/src/libespeak-ng/speech.c index c5685bbc..36465aff 100644 --- a/src/libespeak-ng/speech.c +++ b/src/libespeak-ng/speech.c @@ -50,8 +50,8 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" #include "espeak_command.h" #include "fifo.h" diff --git a/src/libespeak-ng/synth_mbrola.c b/src/libespeak-ng/synth_mbrola.c index f9bd3a3a..f6b93013 100644 --- a/src/libespeak-ng/synth_mbrola.c +++ b/src/libespeak-ng/synth_mbrola.c @@ -33,14 +33,13 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" -#include "voice.h" #ifdef INCLUDE_MBROLA extern int Read4Bytes(FILE *f); -extern void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pitch_range); extern unsigned char *outbuf; #if defined(_WIN32) || defined(_WIN64) diff --git a/src/libespeak-ng/synthdata.c b/src/libespeak-ng/synthdata.c index 2d4f27a1..039235ac 100644 --- a/src/libespeak-ng/synthdata.c +++ b/src/libespeak-ng/synthdata.c @@ -34,8 +34,8 @@ #include "error.h" #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" const char *version_string = PACKAGE_VERSION; diff --git a/src/libespeak-ng/synthesize.c b/src/libespeak-ng/synthesize.c index 48b14967..d504fc93 100644 --- a/src/libespeak-ng/synthesize.c +++ b/src/libespeak-ng/synthesize.c @@ -33,8 +33,8 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" extern FILE *f_log; diff --git a/src/libespeak-ng/synthesize.h b/src/libespeak-ng/synthesize.h index eb001848..008f9427 100644 --- a/src/libespeak-ng/synthesize.h +++ b/src/libespeak-ng/synthesize.h @@ -74,7 +74,6 @@ extern "C" extern int embedded_value[N_EMBEDDED_VALUES]; extern int embedded_default[N_EMBEDDED_VALUES]; -#define N_PEAKS 9 #define N_PEAKS2 9 // plus Notch and Fill (not yet implemented) #define N_MARKERS 8 @@ -453,14 +452,17 @@ extern int wcmdq_head; extern int wcmdq_tail; // from Wavegen file -int WcmdqFree(); -void WcmdqStop(); -int WcmdqUsed(); -void WcmdqInc(); +int WcmdqFree(void); +void WcmdqStop(void); +int WcmdqUsed(void); +void WcmdqInc(void); void WavegenInit(int rate, int wavemult_fact); float polint(float xa[], float ya[], int n, float x); -int WavegenFill(); +int WavegenFill(void); void MarkerEvent(int type, unsigned int char_position, int value, int value2, unsigned char *out_ptr); +int GetAmplitude(void); +void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pitch_range); +int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control); extern unsigned char *wavefile_data; extern int samplerate; diff --git a/src/libespeak-ng/tr_languages.c b/src/libespeak-ng/tr_languages.c index 6556d224..0cbbb04d 100644 --- a/src/libespeak-ng/tr_languages.c +++ b/src/libespeak-ng/tr_languages.c @@ -32,6 +32,7 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index 7ddb49af..ca878fd0 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -33,8 +33,8 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" Translator *translator = NULL; // the main translator diff --git a/src/libespeak-ng/voice.h b/src/libespeak-ng/voice.h index 0765aaa7..ff7d7a79 100644 --- a/src/libespeak-ng/voice.h +++ b/src/libespeak-ng/voice.h @@ -22,6 +22,8 @@ extern "C" { #endif +#define N_PEAKS 9 + typedef struct { char v_name[40]; char language_name[20]; diff --git a/src/libespeak-ng/voices.c b/src/libespeak-ng/voices.c index c7a1a75e..6aed8c25 100644 --- a/src/libespeak-ng/voices.c +++ b/src/libespeak-ng/voices.c @@ -40,8 +40,8 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #include "translate.h" MNEM_TAB genders[] = { diff --git a/src/libespeak-ng/wavegen.c b/src/libespeak-ng/wavegen.c index dd656f9c..178fc6a1 100644 --- a/src/libespeak-ng/wavegen.c +++ b/src/libespeak-ng/wavegen.c @@ -33,8 +33,8 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" #if HAVE_SONIC_H #include "sonic.h" @@ -665,7 +665,7 @@ static int ApplyBreath(void) return value; } -int Wavegen() +static int Wavegen() { if (wvoice == NULL) return 0; @@ -1117,7 +1117,7 @@ void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pit *pitch_range = base + (pitch2 * range)/2 - *pitch_base; } -void SetPitch(int length, unsigned char *env, int pitch1, int pitch2) +static void SetPitch(int length, unsigned char *env, int pitch1, int pitch2) { if (wvoice == NULL) return; @@ -1140,7 +1140,7 @@ void SetPitch(int length, unsigned char *env, int pitch1, int pitch2) flutter_amp = wvoice->flutter; } -void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v) +static void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v) { if (wvoice == NULL || v == NULL) return; @@ -1246,7 +1246,7 @@ void Write4Bytes(FILE *f, int value) } } -int WavegenFill2() +static int WavegenFill2() { // Pick up next wavegen commands from the queue // return: 0 output buffer has been filled diff --git a/tests/api.c b/tests/api.c index 9a48859e..b017e6ec 100644 --- a/tests/api.c +++ b/tests/api.c @@ -28,6 +28,7 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" diff --git a/tests/readclause.c b/tests/readclause.c index 2692ba10..8b465118 100644 --- a/tests/readclause.c +++ b/tests/readclause.c @@ -31,6 +31,7 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" From f605f79465bc1bc9a90e0e728a6169f8ef25ef5e Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:07:20 +0100 Subject: [PATCH 105/137] tr_languages.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/tr_languages.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libespeak-ng/tr_languages.c b/src/libespeak-ng/tr_languages.c index 0cbbb04d..57e2502c 100644 --- a/src/libespeak-ng/tr_languages.c +++ b/src/libespeak-ng/tr_languages.c @@ -413,7 +413,7 @@ static void SetCyrillicLetters(Translator *tr) SetLetterBits(tr, LETTERGP_VOWEL2, (char *)ru_vowels); } -void SetIndicLetters(Translator *tr) +static void SetIndicLetters(Translator *tr) { // Set letter types for Indic scripts, Devanagari, Tamill, etc static const char dev_consonants2[] = { 0x02, 0x03, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x7b, 0x7c, 0x7e, 0x7f, 0 }; @@ -438,7 +438,7 @@ void SetIndicLetters(Translator *tr) tr->langopts.suffix_add_e = tr->letter_bits_offset + 0x4d; // virama } -void SetupTranslator(Translator *tr, const short *lengths, const unsigned char *amps) +static void SetupTranslator(Translator *tr, const short *lengths, const unsigned char *amps) { if (lengths != NULL) memcpy(tr->stress_lengths, lengths, sizeof(tr->stress_lengths)); From 8d8170ea0d7ef619104e3412f04b9d19f122eb20 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:07:49 +0100 Subject: [PATCH 106/137] translate.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/translate.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index ca878fd0..c8d41087 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -254,7 +254,7 @@ int IsDigit(unsigned int c) return 0; } -int IsSpace(unsigned int c) +static int IsSpace(unsigned int c) { if (c == 0) return 0; @@ -396,17 +396,6 @@ char *strchr_w(const char *s, int c) return strchr((char *)s, c); // (char *) is needed for Borland compiler } -int IsAllUpper(const char *word) -{ - int c; - while ((*word != 0) && !isspace2(*word)) { - word += utf8_in(&c, word); - if (!iswupper(c)) - return 0; - } - return 1; -} - static char *SpeakIndividualLetters(Translator *tr, char *word, char *phonemes, int spell_word) { int posn = 0; @@ -1194,7 +1183,7 @@ static int CountSyllables(unsigned char *phonemes) return count; } -void Word_EmbeddedCmd() +static void Word_EmbeddedCmd() { // Process embedded commands for emphasis, sayas, and break int embedded_cmd; @@ -1873,7 +1862,7 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c, static const char *UCase_ga[] = { "bp", "bhf", "dt", "gc", "hA", "mb", "nd", "ng", "ts", "tA", "nA", NULL }; -int UpperCaseInWord(Translator *tr, char *word, int c) +static int UpperCaseInWord(Translator *tr, char *word, int c) { int ix; int len; From 6acec43043a50426e92d1608adbdc6f248b18512 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:16:43 +0100 Subject: [PATCH 107/137] synthesize.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/setlengths.c | 1 - src/libespeak-ng/synthdata.c | 2 -- src/libespeak-ng/synthesize.h | 5 +++++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libespeak-ng/setlengths.c b/src/libespeak-ng/setlengths.c index 754660dd..9ee49cac 100644 --- a/src/libespeak-ng/setlengths.c +++ b/src/libespeak-ng/setlengths.c @@ -34,7 +34,6 @@ #include "synthesize.h" #include "translate.h" -extern void DoSonicSpeed(int value); extern int saved_parameters[]; // convert from words-per-minute to internal speed factor diff --git a/src/libespeak-ng/synthdata.c b/src/libespeak-ng/synthdata.c index 039235ac..e15f9d1d 100644 --- a/src/libespeak-ng/synthdata.c +++ b/src/libespeak-ng/synthdata.c @@ -66,8 +66,6 @@ int vowel_transition[4]; int vowel_transition0; int vowel_transition1; -int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsigned int data2, PHONEME_TAB *other_ph, int which); - static espeak_ng_STATUS ReadPhFile(void **ptr, const char *fname, int *size, espeak_ng_ERROR_CONTEXT *context) { if (!ptr) return EINVAL; diff --git a/src/libespeak-ng/synthesize.h b/src/libespeak-ng/synthesize.h index 008f9427..9aac8d4b 100644 --- a/src/libespeak-ng/synthesize.h +++ b/src/libespeak-ng/synthesize.h @@ -499,11 +499,16 @@ void SetSpeed(int control); void SetEmbedded(int control, int value); void SelectPhonemeTable(int number); int SelectPhonemeTableName(const char *name); +int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsigned int data2, PHONEME_TAB *other_ph, int which); void Write4Bytes(FILE *f, int value); int Read4Bytes(FILE *f); int Reverse4Bytes(int word); +#if HAVE_SONIC_H +void DoSonicSpeed(int value); +#endif + #define ENV_LEN 128 // length of pitch envelopes #define PITCHfall 0 // standard pitch envelopes #define PITCHrise 2 From e6c75fa350555561d244309c3fa372ea20587f87 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:20:19 +0100 Subject: [PATCH 108/137] speech.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/speech.c | 2 -- src/libespeak-ng/synthesize.h | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libespeak-ng/speech.c b/src/libespeak-ng/speech.c index 36465aff..da0bd3eb 100644 --- a/src/libespeak-ng/speech.c +++ b/src/libespeak-ng/speech.c @@ -876,8 +876,6 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Synchronize(void) return berr; } -extern void FreePhData(void); - ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Terminate(void) { #ifdef USE_ASYNC diff --git a/src/libespeak-ng/synthesize.h b/src/libespeak-ng/synthesize.h index 9aac8d4b..f3975271 100644 --- a/src/libespeak-ng/synthesize.h +++ b/src/libespeak-ng/synthesize.h @@ -487,6 +487,7 @@ extern char mbrola_name[20]; // from synthdata file unsigned int LookupSound(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int *match_level, int control); frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist); +void FreePhData(void); unsigned char *LookupEnvelope(int ix); espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context); From e6db4c1779072d03728faa61415613946540a131 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:23:32 +0100 Subject: [PATCH 109/137] spect.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/spect.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/spect.h b/src/libespeak-ng/spect.h index d0be68d3..8d593821 100644 --- a/src/libespeak-ng/spect.h +++ b/src/libespeak-ng/spect.h @@ -124,7 +124,7 @@ typedef struct { int file_format; } SpectSeq; -SpectSeq *SpectSeqCreate(); +SpectSeq *SpectSeqCreate(void); void SpectSeqDestroy(SpectSeq *spect); espeak_ng_STATUS LoadSpectSeq(SpectSeq *spect, const char *filename); From 255147ee75abbbb61eb082ccca4f2322646da11c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:26:35 +0100 Subject: [PATCH 110/137] readclause.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/readclause.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/readclause.c b/src/libespeak-ng/readclause.c index 1a78af7c..c6412b02 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -918,7 +918,7 @@ static int attr_prosody_value(int param_type, const wchar_t *pw, int *value_out) return sign; // -1, 0, or 1 } -int AddNameData(const char *name, int wide) +static int AddNameData(const char *name, int wide) { // Add the name to the namedata and return its position // (Used by the Windows SAPI wrapper) From 8768cba0ae2a6fe349d0c2c16a26c36e9d7b901d Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:29:49 +0100 Subject: [PATCH 111/137] numbers.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/numbers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libespeak-ng/numbers.c b/src/libespeak-ng/numbers.c index 77868841..35521cb6 100644 --- a/src/libespeak-ng/numbers.c +++ b/src/libespeak-ng/numbers.c @@ -548,7 +548,7 @@ static const int number_ranges[] = { 0 }; -int NonAsciiNumber(int letter) +static int NonAsciiNumber(int letter) { // Change non-ascii digit into ascii digit '0' to '9', (or -1 if not) const int *p; @@ -1711,7 +1711,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null return 0; } -bool CheckThousandsGroup(char *word, int group_len) +static bool CheckThousandsGroup(char *word, int group_len) { // Is this a group of 3 digits which looks like a thousands group? int ix; From 68724badf3c06b05871ff767e55cf4604d0f651d Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:41:31 +0100 Subject: [PATCH 112/137] encoding.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/compiledata.c | 5 ++--- src/libespeak-ng/encoding.c | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index d3135ef3..00a97d6f 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -33,6 +33,7 @@ #include #include +#include #include "error.h" #include "speech.h" @@ -40,6 +41,7 @@ #include "voice.h" #include "synthesize.h" #include "spect.h" +#include "translate.h" typedef struct { unsigned int value; @@ -50,9 +52,6 @@ NAMETAB *manifest = NULL; int n_manifest; char phsrc[sizeof(path_home)+40]; // Source: path to the 'phonemes' source file. -extern ESPEAK_NG_API int utf8_in(int *c, const char *buf); -extern int utf8_out(unsigned int c, char *buf); - typedef struct { const char *mnem; int type; diff --git a/src/libespeak-ng/encoding.c b/src/libespeak-ng/encoding.c index 2084e5f3..e7a920d5 100644 --- a/src/libespeak-ng/encoding.c +++ b/src/libespeak-ng/encoding.c @@ -26,6 +26,10 @@ #include #include "speech.h" +#include "phoneme.h" +#include "voice.h" +#include "synthesize.h" +#include "translate.h" #define LEADING_2_BITS 0xC0 // 0b11000000 #define UTF8_TAIL_BITS 0x80 // 0b10000000 From b8b0119b622f638984e0fc8ab4105c0a4b5d51e2 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:46:17 +0100 Subject: [PATCH 113/137] dictionary.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/compiledict.c | 1 - src/libespeak-ng/translate.h | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index 38a67ad4..461176e9 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -40,7 +40,6 @@ #include "translate.h" extern void Write4Bytes(FILE *f, int value); -int HashDictionary(const char *string); static FILE *f_log = NULL; extern char *dir_dictionary; diff --git a/src/libespeak-ng/translate.h b/src/libespeak-ng/translate.h index 89f3f680..1d3ac99f 100644 --- a/src/libespeak-ng/translate.h +++ b/src/libespeak-ng/translate.h @@ -747,6 +747,7 @@ void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf); int LoadDictionary(Translator *tr, const char *name, int no_error); int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *flags, int end_flags, WORD_TAB *wtab); +int HashDictionary(const char *string); void MakePhonemeList(Translator *tr, int post_pause, int new_sentence); int ChangePhonemes_ru(Translator *tr, PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch); From 7f42e0aaca071b635cc5e3ef0eab64af3eed328c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:51:36 +0100 Subject: [PATCH 114/137] compiledict.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/compiledict.c | 4 ++-- src/libespeak-ng/dictionary.c | 3 --- src/libespeak-ng/translate.h | 3 +++ 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index 461176e9..5c7e0842 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -762,7 +762,7 @@ static int group3_ix; #define N_RULES 3000 // max rules for each group -int isHexDigit(int c) +static int isHexDigit(int c) { if ((c >= '0') && (c <= '9')) return c - '0'; @@ -1169,7 +1169,7 @@ static char *compile_rule(char *input) return prule; } -int __cdecl string_sorter(char **a, char **b) +static int __cdecl string_sorter(char **a, char **b) { char *pa, *pb; int ix; diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index 5bcfdbe9..5a504fb7 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -40,9 +40,6 @@ int dictionary_skipwords; char dictionary_name[40]; -extern void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len); -extern char *DecodeRule(const char *group_chars, int group_length, char *rule, int control); - // accented characters which indicate (in some languages) the start of a separate syllable static const unsigned short diereses_list[7] = { 0xe4, 0xeb, 0xef, 0xf6, 0xfc, 0xff, 0 }; diff --git a/src/libespeak-ng/translate.h b/src/libespeak-ng/translate.h index 1d3ac99f..2ff593f2 100644 --- a/src/libespeak-ng/translate.h +++ b/src/libespeak-ng/translate.h @@ -749,6 +749,9 @@ int LoadDictionary(Translator *tr, const char *name, int no_error); int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *flags, int end_flags, WORD_TAB *wtab); int HashDictionary(const char *string); +void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len); +char *DecodeRule(const char *group_chars, int group_length, char *rule, int control); + void MakePhonemeList(Translator *tr, int post_pause, int new_sentence); int ChangePhonemes_ru(Translator *tr, PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch); void ApplySpecialAttribute2(Translator *tr, char *phonemes, int dict_flags); From b11480c09d575d600804966d1eed14b2436da54d Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:56:22 +0100 Subject: [PATCH 115/137] compiledata.c: Fix -Wmissing-prototypes warnings. --- src/libespeak-ng/compiledata.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index 00a97d6f..6beb5d79 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -721,7 +721,7 @@ static void unget_char(unsigned int c) linenum--; } -int CheckNextChar() +static int CheckNextChar() { int c; while (((c = get_char()) == ' ') || (c == '\t')) @@ -892,7 +892,7 @@ static int Range(int value, int divide, int min, int max) return value - min; } -int CompileVowelTransition(int which) +static int CompileVowelTransition(int which) { // Compile a vowel transition int key; @@ -998,7 +998,7 @@ int CompileVowelTransition(int which) return 0; } -espeak_ng_STATUS LoadSpect(const char *path, int control, int *addr) +static espeak_ng_STATUS LoadSpect(const char *path, int control, int *addr) { SpectSeq *spectseq; int peak; @@ -1613,7 +1613,7 @@ static void CompileSound(int keyword, int isvowel) =8 data = stress bitmap =9 special tests */ -int CompileIf(int elif) +static int CompileIf(int elif) { int key; int finish = 0; @@ -1722,7 +1722,7 @@ int CompileIf(int elif) return 0; } -void FillThen(int add) +static void FillThen(int add) { USHORT *p; int offset; @@ -1750,7 +1750,7 @@ void FillThen(int add) then_count = 0; } -int CompileElse(void) +static int CompileElse(void) { USHORT *ref; USHORT *p; @@ -1777,7 +1777,7 @@ int CompileElse(void) return 0; } -int CompileElif(void) +static int CompileElif(void) { if (if_level < 1) { error("ELIF not expected"); @@ -1789,7 +1789,7 @@ int CompileElif(void) return 0; } -int CompileEndif(void) +static int CompileEndif(void) { USHORT *p; int chain; @@ -1952,7 +1952,7 @@ static void DecThenCount() then_count--; } -int CompilePhoneme(int compile_phoneme) +static int CompilePhoneme(int compile_phoneme) { int endphoneme = 0; int keyword; @@ -2696,7 +2696,7 @@ MNEM_TAB envelope_names[] = { { NULL, -1 } }; -int LookupEnvelopeName(const char *name) +static int LookupEnvelopeName(const char *name) { return LookupMnem(envelope_names, name); } From 941f439ca76502235f71f75aa0d965f2dcc857d6 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 07:57:31 +0100 Subject: [PATCH 116/137] espeak-ng.c: Fix -Wmissing-prototypes warnings. --- src/espeak-ng.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/espeak-ng.c b/src/espeak-ng.c index 23854942..487acace 100644 --- a/src/espeak-ng.c +++ b/src/espeak-ng.c @@ -126,7 +126,7 @@ FILE *f_wavfile = NULL; char filetype[5]; char wavefile[200]; -void DisplayVoices(FILE *f_out, char *language) +static void DisplayVoices(FILE *f_out, char *language) { int ix; const char *p; @@ -197,7 +197,7 @@ static void Write4Bytes(FILE *f, int value) } } -int OpenWavFile(char *path, int rate) +static int OpenWavFile(char *path, int rate) { static unsigned char wave_hdr[44] = { 'R', 'I', 'F', 'F', 0x24, 0xf0, 0xff, 0x7f, 'W', 'A', 'V', 'E', 'f', 'm', 't', ' ', From 6a735f19f2ff582da96d4ad19eaf428c8dd03868 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 21:13:50 +0100 Subject: [PATCH 117/137] ieee80.c: Fix -Wmissing-prototypes warnings (create an ieee80.h header file). --- README.md | 4 +-- src/libespeak-ng/ieee80.c | 7 +---- src/libespeak-ng/ieee80.h | 62 +++++++++++++++++++++++++++++++++++++++ src/libespeak-ng/spect.c | 5 ++-- 4 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 src/libespeak-ng/ieee80.h diff --git a/README.md b/README.md index dac80c21..d5935ffd 100644 --- a/README.md +++ b/README.md @@ -391,8 +391,8 @@ The `ieee80.c` implementation is taken directly from [ToFromIEEE.c.txt](http://www.realitypixels.com/turk/opensource/ToFromIEEE.c.txt) which has been made available for use in Open Source applications per the [license statement](COPYING.IEEE) on http://www.realitypixels.com/turk/opensource/. -The only modification made to the code is to comment out the `TEST_FP` define -to make it useable in the eSpeak NG library. +The only modifications made to the code is to comment out the `TEST_FP` define +to make it useable in the eSpeak NG library, and to fix compiler warnings. The `getopt.c` compatibility implementation for getopt support on Windows is taken from the NetBSD `getopt_long` implementation, which is licensed under a diff --git a/src/libespeak-ng/ieee80.c b/src/libespeak-ng/ieee80.c index c3653d15..43c10191 100644 --- a/src/libespeak-ng/ieee80.c +++ b/src/libespeak-ng/ieee80.c @@ -49,15 +49,10 @@ #include #include +#include "ieee80.h" typedef float Single; -#ifndef applec - typedef double defdouble; -#else applec - typedef long double defdouble; -#endif applec - #ifndef THINK_C typedef double Double; #else THINK_C diff --git a/src/libespeak-ng/ieee80.h b/src/libespeak-ng/ieee80.h new file mode 100644 index 00000000..04ca67f4 --- /dev/null +++ b/src/libespeak-ng/ieee80.h @@ -0,0 +1,62 @@ +/* Copyright (C) 1989-1991 Apple Computer, Inc. + * + * All rights reserved. + * + * Warranty Information + * Even though Apple has reviewed this software, Apple makes no warranty + * or representation, either express or implied, with respect to this + * software, its quality, accuracy, merchantability, or fitness for a + * particular purpose. As a result, this software is provided "as is," + * and you, its user, are assuming the entire risk as to its quality + * and accuracy. + * + * This code may be used and freely distributed as long as it includes + * this copyright notice and the above warranty information. + * + * Machine-independent I/O routines for IEEE floating-point numbers. + * + * NaN's and infinities are converted to HUGE_VAL or HUGE, which + * happens to be infinity on IEEE machines. Unfortunately, it is + * impossible to preserve NaN's in a machine-independent way. + * Infinities are, however, preserved on IEEE machines. + * + * These routines have been tested on the following machines: + * Apple Macintosh, MPW 3.1 C compiler + * Apple Macintosh, THINK C compiler + * Silicon Graphics IRIS, MIPS compiler + * Cray X/MP and Y/MP + * Digital Equipment VAX + * Sequent Balance (Multiprocesor 386) + * NeXT + * + * + * Implemented by Malcolm Slaney and Ken Turkowski. + * + * Malcolm Slaney contributions during 1988-1990 include big- and little- + * endian file I/O, conversion to and from Motorola's extended 80-bit + * floating-point format, and conversions to and from IEEE single- + * precision floating-point format. + * + * In 1991, Ken Turkowski implemented the conversions to and from + * IEEE double-precision format, added more precision to the extended + * conversions, and accommodated conversions involving +/- infinity, + * NaN's, and denormalized numbers. + */ +#ifndef IEEE_H +#define IEEE_H + +#ifndef applec + typedef double defdouble; +#else applec + typedef long double defdouble; +#endif applec + +defdouble ConvertFromIeeeSingle( char *bytes); +defdouble ConvertFromIeeeDouble( char *bytes); +defdouble ConvertFromIeeeExtended(char *bytes); + +void ConvertToIeeeSingle( defdouble num, char *bytes); +void ConvertToIeeeDouble( defdouble num, char *bytes); +void ConvertToIeeeExtended(defdouble num, char *bytes); + +#endif diff --git a/src/libespeak-ng/spect.c b/src/libespeak-ng/spect.c index 7bb0bb94..e468dfd6 100644 --- a/src/libespeak-ng/spect.c +++ b/src/libespeak-ng/spect.c @@ -35,8 +35,7 @@ #include "voice.h" #include "synthesize.h" #include "spect.h" - -extern double ConvertFromIeeeExtended(unsigned char *bytes); +#include "ieee80.h" extern unsigned char pk_shape1[]; extern int pk_select; @@ -56,7 +55,7 @@ static double read_double(FILE *stream) { unsigned char bytes[10]; fread(bytes, sizeof(char), 10, stream); - return ConvertFromIeeeExtended(bytes); + return ConvertFromIeeeExtended((char *)bytes); } float polint(float xa[], float ya[], int n, float x) From f4248fd728454f2adb409b3786bc247d455e773f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 21:20:39 +0100 Subject: [PATCH 118/137] tests: Fix -Wmissing-prototypes warnings. --- configure.ac | 1 + tests/api.c | 30 +++++++++++++------------- tests/encoding.c | 52 +++++++++++++++++++++++----------------------- tests/readclause.c | 40 +++++++++++++++++------------------ 4 files changed, 62 insertions(+), 61 deletions(-) diff --git a/configure.ac b/configure.ac index d0d80243..feb6046f 100644 --- a/configure.ac +++ b/configure.ac @@ -275,6 +275,7 @@ dnl dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html dnl ================================================================ +AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) diff --git a/tests/api.c b/tests/api.c index b017e6ec..985b2543 100644 --- a/tests/api.c +++ b/tests/api.c @@ -34,7 +34,7 @@ // region espeak_Initialize -void +static void test_espeak_terminate_without_initialize() { printf("testing espeak_Terminate without espeak_Initialize\n"); @@ -49,7 +49,7 @@ test_espeak_terminate_without_initialize() assert(p_decoder == NULL); } -void +static void test_espeak_initialize() { printf("testing espeak_Initialize\n"); @@ -72,7 +72,7 @@ test_espeak_initialize() // endregion // region espeak_Synth -void +static void test_espeak_synth() { printf("testing espeak_Synth\n"); @@ -103,7 +103,7 @@ test_espeak_synth() assert(p_decoder == NULL); } -void +static void test_espeak_synth_no_voices(const char *path) { printf("testing espeak_Synth in path with no voices\n"); @@ -135,7 +135,7 @@ test_espeak_synth_no_voices(const char *path) // endregion // region espeak_ng_Synthesize -void +static void test_espeak_ng_synthesize() { printf("testing espeak_ng_Synthesize\n"); @@ -166,7 +166,7 @@ test_espeak_ng_synthesize() assert(p_decoder == NULL); } -void +static void test_espeak_ng_synthesize_no_voices(const char *path) { printf("testing espeak_ng_Synthesize in path with no voices\n"); @@ -198,7 +198,7 @@ test_espeak_ng_synthesize_no_voices(const char *path) // endregion // region espeak_SetVoiceByName -void +static void test_espeak_set_voice_by_name_null_voice() { printf("testing espeak_SetVoiceByName(NULL)\n"); @@ -233,7 +233,7 @@ test_espeak_set_voice_by_name_null_voice() assert(p_decoder == NULL); } -void +static void test_espeak_set_voice_by_name_blank_voice() { printf("testing espeak_SetVoiceByName(\"\")\n"); @@ -268,7 +268,7 @@ test_espeak_set_voice_by_name_blank_voice() assert(p_decoder == NULL); } -void +static void test_espeak_set_voice_by_name_valid_voice() { printf("testing espeak_SetVoiceByName(\"de\")\n"); @@ -304,7 +304,7 @@ test_espeak_set_voice_by_name_valid_voice() assert(p_decoder == NULL); } -void +static void test_espeak_set_voice_by_name_invalid_voice() { printf("testing espeak_SetVoiceByName(\"zzz\")\n"); @@ -339,7 +339,7 @@ test_espeak_set_voice_by_name_invalid_voice() assert(p_decoder == NULL); } -void +static void test_espeak_set_voice_by_name_language_variant_intonation_parameter() { printf("testing espeak_SetVoiceByName(\"!v/Annie\") (language variant; intonation)\n"); @@ -378,7 +378,7 @@ test_espeak_set_voice_by_name_language_variant_intonation_parameter() // endregion // region espeak_SetVoiceByProperties -void +static void test_espeak_set_voice_by_properties_empty() { printf("testing espeak_SetVoiceByProperties: (none)\n"); @@ -417,7 +417,7 @@ test_espeak_set_voice_by_properties_empty() assert(p_decoder == NULL); } -void +static void test_espeak_set_voice_by_properties_blank_language() { printf("testing espeak_SetVoiceByProperties: languages=\"\"\n"); @@ -457,7 +457,7 @@ test_espeak_set_voice_by_properties_blank_language() assert(p_decoder == NULL); } -void +static void test_espeak_set_voice_by_properties_with_valid_language() { printf("testing espeak_SetVoiceByProperties: languages=\"mk\" (valid)\n"); @@ -497,7 +497,7 @@ test_espeak_set_voice_by_properties_with_valid_language() assert(p_decoder == NULL); } -void +static void test_espeak_set_voice_by_properties_with_invalid_language() { printf("testing espeak_SetVoiceByProperties: languages=\"zzz\" (invalid)\n"); diff --git a/tests/encoding.c b/tests/encoding.c index 52dffe2e..6ec97a84 100644 --- a/tests/encoding.c +++ b/tests/encoding.c @@ -26,7 +26,7 @@ #include #include -void +static void test_unbound_text_decoder() { printf("testing unbound text decoder\n"); @@ -39,7 +39,7 @@ test_unbound_text_decoder() destroy_text_decoder(decoder); } -void +static void test_unknown_encoding() { printf("testing unknown encodings\n"); @@ -57,7 +57,7 @@ test_unknown_encoding() destroy_text_decoder(decoder); } -void +static void test_us_ascii_encoding() { printf("testing US-ASCII encoding\n"); @@ -91,7 +91,7 @@ test_us_ascii_encoding() destroy_text_decoder(decoder); } -void +static void test_koi8_r_encoding() { printf("testing KOI8-R encoding\n"); @@ -117,7 +117,7 @@ test_koi8_r_encoding() destroy_text_decoder(decoder); } -void +static void test_iscii_encoding() { printf("testing ISCII encoding\n"); @@ -142,7 +142,7 @@ test_iscii_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_1_encoding() { printf("testing ISO-8859-1 encoding\n"); @@ -175,7 +175,7 @@ test_iso_8859_1_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_2_encoding() { printf("testing ISO-8859-2 encoding\n"); @@ -206,7 +206,7 @@ test_iso_8859_2_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_3_encoding() { printf("testing ISO-8859-3 encoding\n"); @@ -237,7 +237,7 @@ test_iso_8859_3_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_4_encoding() { printf("testing ISO-8859-4 encoding\n"); @@ -268,7 +268,7 @@ test_iso_8859_4_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_5_encoding() { printf("testing ISO-8859-5 encoding\n"); @@ -298,7 +298,7 @@ test_iso_8859_5_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_6_encoding() { printf("testing ISO-8859-6 encoding\n"); @@ -330,7 +330,7 @@ test_iso_8859_6_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_7_encoding() { printf("testing ISO-8859-7 encoding\n"); @@ -363,7 +363,7 @@ test_iso_8859_7_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_8_encoding() { printf("testing ISO-8859-8 encoding\n"); @@ -393,7 +393,7 @@ test_iso_8859_8_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_9_encoding() { printf("testing ISO-8859-9 encoding\n"); @@ -424,7 +424,7 @@ test_iso_8859_9_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_10_encoding() { printf("testing ISO-8859-10 encoding\n"); @@ -455,7 +455,7 @@ test_iso_8859_10_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_11_encoding() { printf("testing ISO-8859-11 encoding\n"); @@ -482,7 +482,7 @@ test_iso_8859_11_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_13_encoding() { printf("testing ISO-8859-13 encoding\n"); @@ -508,7 +508,7 @@ test_iso_8859_13_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_14_encoding() { printf("testing ISO-8859-14 encoding\n"); @@ -540,7 +540,7 @@ test_iso_8859_14_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_15_encoding() { printf("testing ISO-8859-15 encoding\n"); @@ -568,7 +568,7 @@ test_iso_8859_15_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_8859_16_encoding() { printf("testing ISO-8859-16 encoding\n"); @@ -599,7 +599,7 @@ test_iso_8859_16_encoding() destroy_text_decoder(decoder); } -void +static void test_utf_8_encoding() { printf("testing UTF-8 encoding\n"); @@ -702,7 +702,7 @@ test_utf_8_encoding() destroy_text_decoder(decoder); } -void +static void test_iso_10646_ucs_2_encoding() { printf("testing ISO-10646-UCS-2 encoding\n"); @@ -728,7 +728,7 @@ test_iso_10646_ucs_2_encoding() destroy_text_decoder(decoder); } -void +static void test_char_decoder() { printf("testing char decoder\n"); @@ -754,7 +754,7 @@ test_char_decoder() destroy_text_decoder(decoder); } -void +static void test_wchar_decoder() { printf("testing wchar_t decoder\n"); @@ -796,7 +796,7 @@ test_wchar_decoder() destroy_text_decoder(decoder); } -void +static void test_auto_decoder() { printf("testing auto decoder (UTF-8 + codepage-based fallback)\n"); @@ -846,7 +846,7 @@ test_auto_decoder() destroy_text_decoder(decoder); } -void +static void test_peekc() { printf("testing peekc\n"); diff --git a/tests/readclause.c b/tests/readclause.c index 8b465118..673f28d1 100644 --- a/tests/readclause.c +++ b/tests/readclause.c @@ -57,7 +57,7 @@ set_text(const char *text, const char *voicename) return text_decoder_decode_string(p_decoder, text, -1, ESPEAKNG_ENCODING_UTF_8); } -void +static void test_latin() { printf("testing Latin (Latn)\n"); @@ -76,7 +76,7 @@ test_latin() assert(clause_type_from_codepoint(0x2026) == (CLAUSE_SEMICOLON | CLAUSE_SPEAK_PUNCTUATION_NAME | CLAUSE_OPTIONAL_SPACE_AFTER)); } -void +static void test_latin_sentence() { printf("testing Latin (Latn) ... sentence\n"); @@ -108,7 +108,7 @@ test_latin_sentence() assert(charix_top == 0); } -void +static void test_greek() { printf("testing Greek (Grek)\n"); @@ -117,7 +117,7 @@ test_greek() assert(clause_type_from_codepoint(0x0387) == CLAUSE_SEMICOLON); } -void +static void test_armenian() { printf("testing Armenian (Armn)\n"); @@ -129,7 +129,7 @@ test_armenian() assert(clause_type_from_codepoint(0x0589) == (CLAUSE_PERIOD | CLAUSE_OPTIONAL_SPACE_AFTER)); } -void +static void test_arabic() { printf("testing Arabic (Arab)\n"); @@ -140,7 +140,7 @@ test_arabic() assert(clause_type_from_codepoint(0x06D4) == CLAUSE_PERIOD); } -void +static void test_devanagari() { printf("testing Devanagari (Deva)\n"); @@ -148,7 +148,7 @@ test_devanagari() assert(clause_type_from_codepoint(0x0964) == (CLAUSE_PERIOD | CLAUSE_OPTIONAL_SPACE_AFTER)); } -void +static void test_tibetan() { printf("testing Tibetan (Tibt)\n"); @@ -157,7 +157,7 @@ test_tibetan() assert(clause_type_from_codepoint(0x0F0E) == CLAUSE_PARAGRAPH); } -void +static void test_sinhala() { printf("testing Sinhala (Sinh)\n"); @@ -165,7 +165,7 @@ test_sinhala() assert(clause_type_from_codepoint(0x0DF4) == (CLAUSE_PERIOD | CLAUSE_OPTIONAL_SPACE_AFTER)); } -void +static void test_georgian() { printf("testing Georgian (Geor)\n"); @@ -173,7 +173,7 @@ test_georgian() assert(clause_type_from_codepoint(0x10FB) == CLAUSE_PARAGRAPH); } -void +static void test_ethiopic() { printf("testing Ethiopic (Ethi)\n"); @@ -187,7 +187,7 @@ test_ethiopic() assert(clause_type_from_codepoint(0x1368) == CLAUSE_PARAGRAPH); } -void +static void test_ideographic() { printf("testing Ideographic (Hani)\n"); @@ -196,7 +196,7 @@ test_ideographic() assert(clause_type_from_codepoint(0x3002) == (CLAUSE_PERIOD | CLAUSE_OPTIONAL_SPACE_AFTER)); } -void +static void test_fullwidth() { printf("testing Full Width\n"); @@ -209,7 +209,7 @@ test_fullwidth() assert(clause_type_from_codepoint(0xFF1F) == (CLAUSE_QUESTION | CLAUSE_OPTIONAL_SPACE_AFTER)); } -void +static void test_uts51_emoji_character() { printf("testing Emoji ... UTS-51 ED-3. emoji character\n"); @@ -245,7 +245,7 @@ test_uts51_emoji_character() assert(voice_change_name[0] == 0); } -void +static void test_uts51_text_presentation_sequence() { printf("testing Emoji ... UTS-51 ED-8a. text presentation sequence\n"); @@ -278,7 +278,7 @@ test_uts51_text_presentation_sequence() assert(voice_change_name[0] == 0); } -void +static void test_uts51_emoji_presentation_sequence() { printf("testing Emoji ... UTS-51 ED-9a. emoji presentation sequence\n"); @@ -311,7 +311,7 @@ test_uts51_emoji_presentation_sequence() assert(voice_change_name[0] == 0); } -void +static void test_uts51_emoji_modifier_sequence() { printf("testing Emoji ... UTS-51 ED-13. emoji modifier sequence\n"); @@ -341,7 +341,7 @@ test_uts51_emoji_modifier_sequence() assert(voice_change_name[0] == 0); } -void +static void test_uts51_emoji_flag_sequence() { printf("testing Emoji ... UTS-51 ED-14. emoji flag sequence\n"); @@ -374,7 +374,7 @@ test_uts51_emoji_flag_sequence() assert(voice_change_name[0] == 0); } -void +static void test_uts51_emoji_tag_sequence_emoji_character() { printf("testing Emoji ... UTS-51 ED-14a. emoji tag sequence (emoji character)\n"); @@ -450,7 +450,7 @@ test_uts51_emoji_tag_sequence_emoji_character() assert(voice_change_name[0] == 0); } -void +static void test_uts51_emoji_combining_sequence() { printf("testing Emoji ... UTS-51 ED-14b. emoji combining sequence\n"); @@ -480,7 +480,7 @@ test_uts51_emoji_combining_sequence() assert(voice_change_name[0] == 0); } -void +static void test_uts51_emoji_keycap_sequence() { printf("testing Emoji ... UTS-51 ED-14c. emoji keycap sequence\n"); From c59c9633de425978c25da227e4cbf0c50742d570 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 22:01:41 +0100 Subject: [PATCH 119/137] Fix -Wuninitialized warnings. --- configure.ac | 1 + src/libespeak-ng/compiledata.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index feb6046f..39ac0a4e 100644 --- a/configure.ac +++ b/configure.ac @@ -277,6 +277,7 @@ dnl ================================================================ AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wuninitialized], [CFLAGS="-Wuninitialized $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index 6beb5d79..c114681d 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -2716,7 +2716,7 @@ espeak_ng_STATUS espeak_ng_CompileIntonation(FILE *log, espeak_ng_ERROR_CONTEXT int done_onset = 0; int done_last = 0; int n_preset_tunes = 0; - int found; + int found = 0; int tune_number = 0; FILE *f_out; TUNE *tune_data; From 22bbd28d2c0285a9230b469a0e9ff35c79561631 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 11 Oct 2017 22:03:08 +0100 Subject: [PATCH 120/137] Add -Wimplicit warning checks. --- configure.ac | 1 + 1 file changed, 1 insertion(+) diff --git a/configure.ac b/configure.ac index 39ac0a4e..9fb64e41 100644 --- a/configure.ac +++ b/configure.ac @@ -275,6 +275,7 @@ dnl dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html dnl ================================================================ +AX_CHECK_COMPILE_FLAG([-Wimplicit], [CFLAGS="-Wimplicit $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wuninitialized], [CFLAGS="-Wuninitialized $CFLAGS"]) From 242990ab311b987ef7d1c383aedac174d3328f2c Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Wed, 18 Oct 2017 23:24:36 +0300 Subject: [PATCH 121/137] Fix for wrongly interpreted bars in markdown --- docs/dictionary.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dictionary.md b/docs/dictionary.md index 73edfa0a..bbde7a21 100644 --- a/docs/dictionary.md +++ b/docs/dictionary.md @@ -55,9 +55,9 @@ The utility 'phonemes' are: | `=` | put the primary stress on the preceding syllable | | `_:` | short pause | | `_` | a shorter pause | -| `||` | indicates a word boundary within a phoneme string | -| `|` | can be used to separate two adjacent characters, to prevent them from being considered as a multi-character phoneme mnemonic | - +| | | indicates a word boundary within a phoneme string | +| || | can be used to separate two adjacent characters, to prevent them from being considered as a multi-character phoneme mnemonic | + It is not necessary to specify the stress of every syllable. Stress markers are only needed in order to change the effect of the language's default stress rule. From 154c9f5089eaf4118049fbbd2887bbbf2fe56b98 Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Thu, 19 Oct 2017 18:01:29 +0300 Subject: [PATCH 122/137] Latvian language improvements --- dictsource/lv_list | 11 +++--- dictsource/lv_rules | 69 ++++++++++++++++++++++++++------------ espeak-ng-data/lang/bat/lv | 12 +++---- phsource/ph_latvian | 64 +++++++++++++++++++++++++++++------ 4 files changed, 112 insertions(+), 44 deletions(-) diff --git a/dictsource/lv_list b/dictsource/lv_list index 9365c8d1..47a3c0b8 100644 --- a/dictsource/lv_list +++ b/dictsource/lv_list @@ -422,6 +422,7 @@ tikpat $2 tikvien $u2+ turpat $u2+ turpretī $u2 +uzreiz $2 vienalga $2 vismaz $2 @@ -465,7 +466,7 @@ vismaz $2 // Abbreviations // /////////////////// as $abbrev -asv ,a:_:,ess_!v'e:_: +asv ,a:_:,ess_!v'e:_: $allcaps ano 'ano: ba $abbrev bba $abbrev @@ -475,7 +476,7 @@ dz $abbrev eest $abbrev est $abbrev eur 'euR -lnnk 'ell_,en_,en_k'a: $pause +lnnk $abbrev $pause lp $abbrev ls $abbrev lu $abbrev @@ -483,7 +484,7 @@ lvu $abbrev na $abbrev nra $abbrev nr $abbrev -pctvl p'e:_ts,e:_t,e:_v,e:_'ell_ $pause +pctvl $abbrev $pause prks $abbrev psrs $abbrev rpi $abbrev @@ -493,11 +494,11 @@ sv $abbrev šķ $abbrev tjpr $abbrev $u $pause tml $abbrev $u $pause -tp t,e:_p'e: $pause +tp $abbrev $pause utjpr $abbrev $u $pause utml $abbrev $u $pause utt $abbrev $u $pause -zzs z'e:_z,e:_'ess $pause +zzs $abbrev $pause /////////////////////////// // other exception words // diff --git a/dictsource/lv_rules b/dictsource/lv_rules index cea7bc17..f84c24fe 100644 --- a/dictsource/lv_rules +++ b/dictsource/lv_rules @@ -38,6 +38,7 @@ .L17 ai ais am ā ām ās ie iem o os // suffixes of certain adjectives finishing with ..ējais .L18 am āk i u ot ēt os // suffixes of adverbs (apstākļa vārdi) +.L10 ~ at ie iz jā jā jāat jāie jāiz jāno jāsa ne no no pa pār pie pie sa vis // optional verb prefixes .L20 ~ ne // optional negation prefix // +---------------------------+ @@ -62,7 +63,6 @@ // +---------------------------+ // | Pronunciation of o | // +---------------------------+ -.L30 ō ȯ // uo pre/post fixes. If facultative writing is used, o is spelled as uo // Default rules for o with succeeding consonants .L40 č ģ ķ ļ ņ ŗ š ž // uo indicators — o is spelled as uo in words with Latvian soft consonants @@ -164,7 +164,7 @@ .group e e e // Default as narrow e ee e_|e // internationalisms, prefix: ne-e... - ei (+ ei + ei (++ ei // narrow e ---------------------------------------------------------------------- // a) e (ro e // internationalisms @@ -204,7 +204,7 @@ // wide e ------------------------------------------------------------------------ // // widening consonants follow - e (L25 E + e (L25< E e (L25L25 E // widening vowels follow e (L25L24+ E @@ -216,7 +216,7 @@ e (L25L01_ E e (L25L25L01_ E e (Jam E - L25) e (L18_+ E // vareni etc. + L25) e (CJL18_ E // vareni etc. // specific words ----------------------------------------------------------------- // b) e (dL82L05_ e // bedre @@ -253,6 +253,7 @@ _L20) e (sat_+ _!e // esat _L20) e (si_ _!e // esi _L20) e (smu_ _!e // esmu + _L20) e (sot_ _!e // esot _m) e (dūzL04_ e _m) e (kL04_ e // Meka m) e (lL88 E @@ -261,6 +262,7 @@ _n) ere (tL04_ ERE // Nereta n) e (rv E p) e (rs e + pr) e (cL52z e pr) e (L71L05_ e // prece _pr) e (t e pr) etē (@ ete: @@ -287,12 +289,13 @@ t) ermo eRmo t) e (st e _t) e (v_ e // tev + _t) e (vi_ e // tevi _v) e (lgL04_ e // Velga _v) e (ltL04_ e // Velta _v) e (ntL04_ E // Venta _v) e (ntsp E // Ventspils _z) e (lmL04_ e // Zelma - _z) e (m e + z) e (m+ e .group ē ē e: // Default as narrow ē @@ -337,7 +340,7 @@ // wide ē --------------------------------------------------------------------------- // // widening consonants follow - ē (L25 E: + ē (L25< E: ē (L25L25 E: // widening vowels follow ē (L25L24+ E: @@ -346,7 +349,7 @@ ē (L25L25L25L25L24 E: // widening endings ē (L01_ E: - ē (L25L01_ E: + ē (L25L01_+ E: ē (L25L25L01_ E: // 5. dec. words ē (CL05_ e: @@ -369,8 +372,10 @@ ē (rkšķ e: ē (tā_ E: ē (tL55_ E: + gr) ē (kL01_ E: izp) ē (t e: _kāp) ē (c_ e: // kāpēc + _l) ē (L83+ e: // lēst m) ēne (L83 e:ne m) ē (rķ e: _m) ē (s_ e: // mēs @@ -393,6 +398,7 @@ t) ē (L90 e: t) ē (mL04_ e: // ..tēma t) ērē e:Re: + t) ē (zL05_ e: // ..tēze _v) ē (l_ e: // vēl _v) ē (lL01_ E: // vēls _v) ē (rā_ e: // vērā @@ -414,14 +420,15 @@ i i i (A i_! ie ie - ikv) ie (n 'ie // stress on 2nd syllable + _) i (kkat %i // ikkatrs + _) i (kkuL82 %i // ikkurš + _) i (kvien %i // ikviens iu iu .group ī ī i: .group j - A) j (@ :j j j _) jebk j%ebk // stress on 2nd syllable @@ -455,6 +462,7 @@ C) n (C n- // more voiced variant between consonants L59) n (@ :n n (d N + ne (vienl+ n'e // nevienlīdzība _) ne (vien n%e // stress on 2nd syllable n (g N n (k N @@ -477,11 +485,6 @@ o (L41+ o // o indicators after o (JL41+ o - L30J) o uo // uo indicators before (facultative writing) - L30) o (+ uo - o (JL30 uo // uo indicators after (facultative writing) - o (L30+ uo - o uo // words with Latvian roots are more common o (_++ uo // common ending for Latvian words o (L40 uo // usually uo before soft (Latvian) consonants @@ -535,6 +538,7 @@ L46L45L45) o (<< uo arist) o o ater) o o: _aut) o (< o + bals) o uo bandr) o o: _bar) o (L12_ uo bar) o (L65 uo // barot @@ -569,12 +573,12 @@ L46L45L45) o (<< uo dinam) o o: disp) o o eg) o o> + eir) o o _ek) o o eks) o o ekspl) o o ekvin) o o elektr) o o: - ez) o o> energ) o o: enL87) o o ent) o (@ o @@ -582,6 +586,7 @@ L46L45L45) o (<< uo epr) o o ept) o (@ o eur) o o + ez) o o> gen) o o get) o o glik) o o @@ -686,6 +691,7 @@ L46L45L45) o (<< uo pomp) o o: por) o o pr) o (L90 o + _pr) o o prop) o o pseid) o o raps) o o: @@ -714,6 +720,7 @@ L46L45L45) o (<< uo sol) o o: son) o o spid) o o + sp) o (L77++ uo sport) o uo sten) o (L65 uo _sten) o o @@ -757,6 +764,8 @@ L46L45L45) o (<< uo gl) ob ob g) ob (e ob k) ob ob + l) ob (ē ob + l) oboto (m oboto m) ob ob _) ob (amL01_ ob // Obama ob (je ob @@ -800,6 +809,7 @@ L46L45L45) o (<< uo m) od (u od m) od (uš uod n) od (L05_ o:d // ..node + n) od uod _) od (ek od od (erL51 uod _) od (esL04_ od // Odesa @@ -872,6 +882,7 @@ L46L45L45) o (<< uo _d) ok (L01_ ok // doks d) ok (u ok fil) okok okok + gl) ok (sīn ok g) ok ok _k) okako (lL04_ okako: // kokakola k) ok (L01 uok // koks @@ -1057,6 +1068,7 @@ L46L45L45) o (<< uo pr) om om _pr) om (_ uom // prom pt) om (L01_ o:m // ..ptoms + pt) om o>m rd) om (L01_ o:m r) om (b om _r) om (L04_ uom // Roma @@ -1211,6 +1223,7 @@ L46L45L45) o (<< uo m) op op net) op (_ uop n) op (er+++ uop + n) opo (st uopuo op (c op op (en op _) op (erL04_++++ o:p // opera @@ -1313,6 +1326,7 @@ L46L45L45) o (<< uo or (ien oR _) origo (_ oRigo: // Origo or (iģ oR + or (kā oR or (ķest oR or (L01_+ o:R // ..ors _) or (L02_+ uoR // ore @@ -1353,8 +1367,8 @@ L46L45L45) o (<< uo .group os ap) ostrof ostRo:f atm) os os - b) os (L01_ os // boss _blont) os (_ uos // Blontos + b) os (L01_ os // boss _cit) os (_ uos // citos _dat) os (_ uos _d) osto (jevskL02_ osto // Dostojevskis @@ -1362,6 +1376,7 @@ L46L45L45) o (<< uo f) osfo osfo: _gr) osto (nL04_ osto: // Grostona iz) os uos + kāp) os (t uos k) os (in os k) os (m os _k) osmo (sL01_ osmo // kosmoss @@ -1376,14 +1391,14 @@ L46L45L45) o (<< uo osto (L65 uostuo os (t_ uos p) os (m uos + p) os (tC@ os p) os (te os p) os (ter os + p) os (tind os p) os (tī uos - p) os (tL56m os - p) os (tm os - p) os (tk os + p) os (tL01 uos + p) os (tL55m os p) os (to uos - p) os (tso os p) os (tul os pr) os (p os pr) os (t os @@ -1395,17 +1410,22 @@ L46L45L45) o (<< uo š) os (ej os _t) os (te os _t) os (tL01_ os // tosts + v) osto (k osto _z) os (L06_ uos // zoss .group ot + an) ot ot + ast) ot uot av) ot uot _bal) ot (ē ot + bankr) ot ot b) ot (ān ot d) ot (āc ot d) ot (ē ot er) ot (iL67 o:t er) ot (is o:t + _er) ot (L01_ ot // Erots _ez) ot ot f) oto (_ oto: g) ot (ik o:t @@ -1416,6 +1436,7 @@ L46L45L45) o (<< uo k) ot (an ot k) ot (L51 ot k) ot (l ot + _L10pr) ot (L13_ uot // (ne|sa..)prot(i|u) lin) ot (ip ot _l) ot (iņL04 ot // Lotiņa l) ot (L05_ ot // ..lote @@ -1426,28 +1447,31 @@ L46L45L45) o (<< uo nepr) ot uot _n) ot (L04_ ot // nota n) ot (L50r ot + ot (āj uot ot (k ot + m) otō oto: _) oto (C< oto pil) ot ot _p) ot (ašL04 ot // potaša p) ot (eL68 ot + pr) ot (am uot pr) ot (e ot pr) ot (o ot pr) oto (š uotuo // protoš.. pr) otot (ip otot pr) oto (t uotuo // ..protot - pr) ot (u_ uot publisk) ot uot r) ot (āc ot + r) ot (b ot r) ot (er ot r) ot (ē ot + r) ot (kaL77 o`t sab) ot ot sk) ot (L01_ ot sl) ot (L04_ uot // slota sp) ot (+ ot t) ot (ēm ot t) ot (L50l ot - tr) ot ot _v) ot (_++++++ ot // vot zig) ot (L01_ ot // ..zigots zig) ot (L04_ ot // ..zigota @@ -1559,6 +1583,7 @@ L46L45L45) o (<< uo v v // unstressed if starts as vis.. prefix // except for words where vis.. is part of root + vecvec vetsvets _) vi (sād v'i // visād _) vi (sēd v'i // visēd _) vi (skijL01_ v'i // viskijs diff --git a/espeak-ng-data/lang/bat/lv b/espeak-ng-data/lang/bat/lv index 32e66412..a64ebfc0 100644 --- a/espeak-ng-data/lang/bat/lv +++ b/espeak-ng-data/lang/bat/lv @@ -4,10 +4,10 @@ maintainer Valdis Vitolins status mature words 0 2 pitch 64 118 -breath 5 2 0 0 0 1 -breathw 20 40 500 1200 -formant 1 95 100 100 -5 +breath 10 2 1 0 0 0 +breathw 20 42 85 200 500 1200 +formant 0 95 100 100 -5 //tunes s5 c5 q5 e5 -tone 150 220 450 255 850 10 3500 255 -stressAmp 12 10 10 8 0 0 18 15 -stressLength 180 180 180 160 0 0 240 180 +tone 150 220 450 255 750 20 3500 255 +stressAmp 12 10 10 8 0 0 20 15 +stressLength 180 180 180 160 0 0 250 180 diff --git a/phsource/ph_latvian b/phsource/ph_latvian index 6663e4af..ecc8cfc3 100644 --- a/phsource/ph_latvian +++ b/phsource/ph_latvian @@ -52,7 +52,7 @@ endphoneme phoneme i: vwl starttype #i endtype #i length 300 - FMT(vwl_lv/ii, 100) // was i_7 + FMT(vwl_lv/ii, 90) // was i_7 endphoneme @@ -171,7 +171,7 @@ phoneme tS WAV(ustop/tsh,40) endphoneme -phoneme n- +phoneme n- // more voiced variant of n vwl starttype #a endtype #a ipa nU+0329 lengthmod 4 @@ -179,6 +179,25 @@ phoneme n- FMT(n/n-syl) endphoneme +phoneme h // more quiet version of standard h + vls glt apr + lengthmod 3 + ipa h + + IF nextPh(#a) THEN + WAV(h/ha, 20) + ELIF nextPh(#e) THEN + WAV(h/he, 20) + ELIF nextPh(#i) THEN + WAV(h/hi, 20) + ELIF nextPh(#o) THEN + WAV(h/ho, 20) + ELIF nextPh(#u) THEN + WAV(h/hu, 20) + ENDIF + WAV(h/h_, 20) // no vowel following +endphoneme + phoneme R // Latvian hard r liquid trl lengthmod 6 @@ -317,15 +336,6 @@ phoneme } // Tiny, 5ms non-linked pause (used between phonemes in word) length 5 endphoneme -// TODO should use this with correct lengthening -//phoneme l -// liquid -// unstressed -// dnt -// length 150 -// FMT(vwl_hi/l-voc) -//endphoneme - phoneme s vls alv frc sib voicingswitch z @@ -335,3 +345,35 @@ phoneme s WAV(ufric/s,60) endphoneme +phoneme j // **y**es + liquid pal starttype #i + + IF nextPhW(isVowel) THEN + NextVowelStarts + VowelStart(j/j@) + VowelStart(j/ja) + VowelStart(j/je) + VowelStart(j/ji) + VowelStart(j/jo) + VowelStart(j/ju) + EndSwitch + VowelEnding(j/xj, 70) // In difference with English, vowel is lengthened, not shortened + ELSE + Vowelout len=127 // no vowel follows + FMT(j/xj) + ENDIF + + IF prevPh(isPause) THEN + FMT(j/_j) + ENDIF +endphoneme + +// TODO should use this with correct lengthening +//phoneme l +// liquid +// unstressed +// dnt +// length 150 +// FMT(vwl_hi/l-voc) +//endphoneme + From c7ab0a2a3311c05897027ebfd7a0d5b183d3f814 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 19 Oct 2017 18:30:10 +0100 Subject: [PATCH 123/137] Update the changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57b16c1e..74be10bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ updated languages: * fi (Finnish) -- Juho Hiltunen * it (Italian) -- chrislm +* lv (Latvian) -- Valdis Vitolins ### 1.49.2 - 2017-09-24 From 3be1464ccb41534840e03a13754240118f13faa2 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 19 Oct 2017 18:30:54 +0100 Subject: [PATCH 124/137] Include the number of languages and accents in languages.md. --- docs/languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/languages.md b/docs/languages.md index fc60dfa5..a329655b 100644 --- a/docs/languages.md +++ b/docs/languages.md @@ -8,7 +8,7 @@ and dialects, [private-use extensions](https://raw.githubusercontent.com/espeak-ng/bcp47-data/master/bcp47-extensions) have been used. -The supported languages are: +The 99 supported languages and accents are: | Family Code | Identifier | Language Family | Language | Accent/Dialect | |-------------|-------------------|-----------------------|-----------------------------|------------------------| From 76c9400fb04c4d395da5eb7f3568f028016e4ef1 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 19 Oct 2017 20:25:02 +0100 Subject: [PATCH 125/137] =?UTF-8?q?Add=20a=20name=20property=20to=20the=20?= =?UTF-8?q?M=C4=81ori=20(mi)=20voice=20file.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/languages.md | 3 ++- espeak-ng-data/lang/poz/mi | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/languages.md b/docs/languages.md index a329655b..8b955783 100644 --- a/docs/languages.md +++ b/docs/languages.md @@ -8,7 +8,7 @@ and dialects, [private-use extensions](https://raw.githubusercontent.com/espeak-ng/bcp47-data/master/bcp47-extensions) have been used. -The 99 supported languages and accents are: +The 100 supported languages and accents are: | Family Code | Identifier | Language Family | Language | Accent/Dialect | |-------------|-------------------|-----------------------|-----------------------------|------------------------| @@ -75,6 +75,7 @@ The 99 supported languages and accents are: | `art` | `lfn` | Constructed | Lingua Franca Nova | | | `bat` | `lt` | Baltic | Lithuanian | | | `art` | `jbo` | Constructed | Lojban | | +| `poz` | `mi` | Malayo-Polynesian | Māori | | | `zls` | `mk` | South Slavic | Macedonian | | | `poz` | `ms` | Malayo-Polynesian | Malay | | | `dra` | `ml` | Dravidian | Malayalam | | diff --git a/espeak-ng-data/lang/poz/mi b/espeak-ng-data/lang/poz/mi index 1640cc6a..fa1c71eb 100644 --- a/espeak-ng-data/lang/poz/mi +++ b/espeak-ng-data/lang/poz/mi @@ -1,3 +1,4 @@ +name Māori language mi status testing From a8abad2975f86d4ef52ddf266ae0a4c7968e228c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 19 Oct 2017 20:28:14 +0100 Subject: [PATCH 126/137] af: Updates from Christo de Klerk. --- CHANGELOG.md | 1 + dictsource/af_list | 16 +++++++++++++++- dictsource/af_rules | 9 ++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74be10bf..6a2bf1d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ bug fixes: updated languages: +* af (Afrikaans) -- Christo de Klerk * fi (Finnish) -- Juho Hiltunen * it (Italian) -- chrislm * lv (Latvian) -- Valdis Vitolins diff --git a/dictsource/af_list b/dictsource/af_list index 42008178..19ea9378 100644 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -220,6 +220,7 @@ albanië alb'A:ne@:@- algerië alx2'e@re@:@- alhambra al'ambra amanzimtoti $4 +amstel amst@l antwerpen antv&rp@n avignon _^_FR babilon babilOn @@ -383,7 +384,7 @@ uruguay urugwaI wakloof vA:klo@f zimbabwe zI:mb'ab_wE zulu zulu // Kwazulu-Natal - +zürich _^_DE // People names abdullah abd'ula @@ -607,6 +608,7 @@ julia _^_EN jung juN khayyam kaj'am kelvin _^_EN +kennedy _^_EN kim _^_EN $capital kleopatra kliu:p'A:tra krige krix2@ @@ -1086,6 +1088,7 @@ vivos _^_LA aangaande $2 aanmerklik $2 aanstaande $2 +aanswel A:nsw&l (a cappella) a||kap'&la adagio ad'A:dZi;%@U afgaanse afg'A:ns@ @@ -1199,6 +1202,7 @@ diffuus d@fy:s dikwels dIkv@ls diplomasie d@plo@mas'i disleksie $2 +dissiplinering d@s@plin'e@r@N divan div'an doktore $2 doyen dO:j'En @@ -1316,6 +1320,7 @@ insomnia @nsOmnija inteling Inte@l@N intens @nt'Ens intensiteit $4 +inwegery Inve@x2@reI ironieë irun'i:@ jantwak jantw'ak @@ -1326,6 +1331,7 @@ kafee kaf'e@ kaliefa kal'ifa kameraderie kam@rA:d@r'i kapittel kap'It@l +karolie kar_o@li kateter kat'e@t@r katswink katsv@nk kaviaar kavi'A:r @@ -1360,6 +1366,7 @@ libido l@bidu liefdespel lifd@sp&l lipstiek lIpstik lisensiaat l@se~nsi;'A:t +logieserwys lo@x2is@rveIs lokaas lOk_A:s londense lOnd@ns@ lord _^_EN @@ -1471,6 +1478,7 @@ oorsee $2 oorsese $2 oorval $2 $verb opend Op_Ent +opwindends Opv'Ind@nts oraal o@r'A:l orale o@r'A:l@ oranjepers o@r'anj@p&:rs @@ -1495,6 +1503,7 @@ pinotage pinut'A:Z pirouette p@ru:'Et plaasjaap plA:sjA:p plasenta plas'Enta +platwaai platvAI poinsettia pOIns'Etia pond po~nt poniepers po@nip&rs @@ -1527,6 +1536,7 @@ salute sal'yt@ samelewing sA:m@l,e@v@N sanhedrin sanh'e@dr@n sangemeenskap sanx2@me@nskap +sedeles se@d@lEs sedertdien $3 sektore $2 sinagoge s@n@x2o@x2@ @@ -1578,6 +1588,8 @@ tesourus t@s@UrWs tevrede t@fre@d@ thula tu:la toegee tux2e@ +toegeklik tux2@klIk +toemessel tumEs@l toereken ture@k@n toleransie tOl@r'ansi tornado $2 @@ -1648,6 +1660,7 @@ voëlent fo@@l_Ent vraprys frA:preIs vrek fr&k vroeërig fru:@r@x2 +vrygelatene freIx2@lA:t@n@ vu _^_FR waarskynlik $2 @@ -1664,6 +1677,7 @@ welaf v&l_af weleer v&l_'e@r wentaktiek $1 willens vIl@ns +wydoog veIt_o@x2 wysgere veIsx2e@r@ êrenster &:r@nst@r \ No newline at end of file diff --git a/dictsource/af_rules b/dictsource/af_rules index 78fa80e8..3ab130e9 100644 --- a/dictsource/af_rules +++ b/dictsource/af_rules @@ -1460,6 +1460,7 @@ een (Cjie e@:iN // eendjie/Leentjie/steentjies een (vorm %e@n // move default stress: eenvormig/-e/-heid _) een (voud@ %e@n // stress on 2nd slb: eenvoudig, but on 1st: eenvoud + eend (agtig %e@nt_ // fix d sound, insert pause: eendagtig/-e/-heid eerbied (A e@rb'id // eerbiedig/ing eerbiedw %e@rb%itv // eerbiedwaardig/eerbiedwekkend _) eerw %e@rv // stress: eerwaarde @@ -2285,7 +2286,7 @@ klaarblyklik klA:rbl'eIkl@k // klaarblyklik/e kla (kous klA: // fix stress and long a sound: klakous/-e klande (sti kl%and@ // move default stress: klandestien/-e - _) kla (sA@@ kla // klasaantekeninge/klasonderwyser and other compounds + _) klas (A@ klas_ // klasaantekeninge/klasonderwyser/-opdrag(te)/-ure and other compounds kla (ssiek kl%a // move default stress: klassiek/-e klavesimbel klA:v@s@mb@l // fix v and e sounds: klavesimbel and compounds kla (vier kl%a // klavier and many compounds @@ -2376,6 +2377,7 @@ kabine (t k%ab%inE // kabinet/drankkabinet/-te/kabinetsvergadering _) ka (d@ k%a // stress and 1st a: kadawer-/kadet-/kado/kadot(jie)/kadriel,etc. + kadet (A k%adEt_ // fix e sound, insert pause: kadetorkes/-offisier/-oefening, etc. ka (der kA: // restore stress on long a: kader/-s and compounds kad (mium kad // fix stress and d sound: kadmium and compounds kafe (te k%af@ // fix stress and vowel sounds: kafeteria and compounds @@ -2758,6 +2760,7 @@ mando (lien m%and%u // fix stress and o sound: mandolien and compounds mane (l m%an& // fix stress and e sound: (kerk)manel(le)punte, etc. mane (wale m%an@ // fix stress and shorten a sound: manewale/-s and compounds + maneuvers m%anY@f@rs // fix last e sound: (krygs)maneuvers, etc. _) mango maNg%u // fix g and o sounds: mangoboord/-sap/-'s man (haft m%an // move default stress: manhaftig/-e/-heid mani (akK mA:n%i // fix stress and 1st a sound: maniak/-ke and compounds @@ -3220,6 +3223,7 @@ ofoon uf'o@n // mikrofoon/sakso(saxo)foon ofone uf'o@n@ // mikrofone/sakso(saxo)fone ograaf ux2r'A:f // biograaf/demograaf/fotograaf + ografeer ux2raf'e@r // fix o sound: (ge)fotografeer ografie ux2raf'i // biografie/demografie/fotografie ografies ux2r'A:fis // biografies/demografies/fotografies ograwe ux2r'A:v@ // biograwe/demograwe/fotograwe @@ -4128,6 +4132,7 @@ sirene s@re@n@ // move default stress and fix vowel sounds: sirene/-s/-lied/-sang si (troen s@ // move default stress: sitroen and compounds sitronella s@tr%un&l%a // fix stress and vowel sounds: sitronella and compounds + s (juffrou s // fix s sound: kuns-/kos-/geselskapsjuffrou, etc. skade skA:d@ // elik suffix rule breaks a sound of (on)skadelik skadu skA:dy // skaduagtig/skadutjie skaker (ing sk%ake@r // skakering/-s/kleurskakering @@ -4300,6 +4305,7 @@ swepe swe@p@ // fix w sound: rubberswepe sw (erm sw // fix e sound: naderswerm switser swIts@r // fix e sound: Switserland/Switserse + sypel (end seIp@l // fix e sound: sypelend/-e .group se se (_ s@ //the word se and some ending in se @@ -5238,6 +5244,7 @@ waardeer vard'e@r // waardeer/waardeerder waarder (@ vard'e@r // waarderend/e/waardering &) waardig v'A:rd@x2 // stress on -waardig: merkwaardig/besienswaardigheid, etc. + waar (din v%A:r // fix stress: waardin/-ne waar (neemba v%A:r // move default stress: waarneembaar/-bare C) waarts vA:rts // fix w sound: dakwaarts/huiswaarts/kerkwaarts/noordwaarts/weswaarts wêrel (djie v&:r@l // fix -djie in wêreldjie and compounds From da3eefff6f4ac580e8e3e20e5c701edecf4f66f2 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 21 Oct 2017 08:28:20 +0100 Subject: [PATCH 127/137] ur: Updates from Ejaz Shah --- CHANGELOG.md | 1 + dictsource/ur_list | 31 ++++++++++++++++++++----------- dictsource/ur_rules | 39 ++++++++++++++++++++++++++++----------- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a2bf1d4..44fecc8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ updated languages: * fi (Finnish) -- Juho Hiltunen * it (Italian) -- chrislm * lv (Latvian) -- Valdis Vitolins +* ur (Urdu) -- Ejaz Shah ### 1.49.2 - 2017-09-24 diff --git a/dictsource/ur_list b/dictsource/ur_list index 41b8510a..f8f5b88d 100644 --- a/dictsource/ur_list +++ b/dictsource/ur_list @@ -204,7 +204,7 @@ _dpt _ISaRI'Ia_ کے $u سے $u -اور OR $u $brk +اور aUR $u $brk کہ k'e:H $u نے $u @@ -334,7 +334,7 @@ _dpt _ISaRI'Ia_ حفاظت H,Ifa:z.'at ہمت HIm'at سمیت sam'e:t -اگرچہ ,agaRc'e:H +اگرچہ ,agaRc'e:H $pause بلکہ b,alk'e:H حصہ H'Is.,a حصے H'Is.e: @@ -686,9 +686,9 @@ _dpt _ISaRI'Ia_ لنک lInk فہرست fEHRIst کیلئے ke:li:;e: -اگر agaR $u +اگر agaR $pause ضرورت zaRu:Rat -مگر magaR $u +مگر magaR $pause دیگر digaR اہم EHEm فیصد fis.ad @@ -791,7 +791,7 @@ _dpt _ISaRI'Ia_ ابرق abRaq ابرنا UbaRna: ابرو abRu: -کنول ka~val $2 +کنول kV~val $2 ابل Ubal ابلا Ubla: ابلی Ubli: @@ -926,7 +926,7 @@ _dpt _ISaRI'Ia_ بچپن bacpan بچپنا bacpana: قطب qUtUb -ذہن DEHEn +ذہن zEHEn سلوک sUlu:k انڈین Ind.i;an متنبہ mUtanabe: @@ -948,15 +948,12 @@ _dpt _ISaRI'Ia_ الذمہ UzzIma صحبت s.OHbat برے bURe: -بزدل bUzdIl بز bUz -بزدلانہ bUzdIla:na -بزدلی bUzdIli: بزم bazm بستر bIstaR مرگ maRg بسکٹ bIskIt. -(بسم اللہ) bIsmIlla:H +(بسم اللہ) bIsmIl:a:H بسم bIsm بسنت basant بضد bazId @@ -973,7 +970,7 @@ _dpt _ISaRI'Ia_ (بن بلائے) bIn||bUla:e: (بن مول) bIn||mo:l بنت bInt -سنور sa~vaR +سنور sV~vaR بو bu: $only بورڈنگ bo:Rd.Ing بولنگ bo:lIng @@ -983,3 +980,15 @@ _dpt _ISaRI'Ia_ (ان پڑھ) anpar.h (ان گنت) an||gInat قدرت qUdRat +انسلٹ Insalt. +انسیت Unsi;at +اللہ al:a:H +انصاف Ins.a:f +انصافی Ins.a:fi +تپش tapIS +انثیت Unsi;at +انجم anJUm +انجمن anJUman +الجھن UlJ#an +الحمد alHamd +التفات IltIfa:t diff --git a/dictsource/ur_rules b/dictsource/ur_rules index b79b6efc..ea1ccb6d 100644 --- a/dictsource/ur_rules +++ b/dictsource/ur_rules @@ -17,6 +17,7 @@ ٩ 9 ي ی یٰ ا +ٰی ا آ آ @@ -27,7 +28,7 @@ .L02 ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ غ ف ق ک کھ گ گھ ل م ن ہ ئ // Letter group - L03: Most of the letters -.L03 ا ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک کھ گ گھ ل م ن و ہ ئ ی ے +.L03 ا ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک کھ گ گھ ل م ن و ہ ئ ی ے ٰ // VOWELS @@ -35,7 +36,7 @@ َ a َی E َے E - َو O + َو aU َع a: .group ِ @@ -84,7 +85,7 @@ _) ای e: افتتاح ,ItIt'a:H اسلام ,Isl'a:m _) انسان Ins'a:n - _) انت (L02 'Int,a + _) انت (L02L01 'Int,a _) امید Um'i:d اً(_S2 'an _) امکان ,Imk'a:n @@ -162,9 +163,22 @@ _) ای e: _)ارا(د IRa: _)اونچ u:nc اں a~ + _)انج(L02L01 InJI _)امت(L02L01 ImtI _)انح(L02L01 InHI _)انخ(L02L01 InxI + _)انس(پ Ins + _)انس(L02L01 InsI + _)انس(ٹ Ins + _)انسٹھ Unsat.# + _)انشا InSa: + _)انش(L02L01 InSI + _)انص(L02L01 Ins.I + _)انض(L02L01 InzI + _)انق(L02L01 InqI + _)الت(L02L01 IltI + _)انف(L02L01 InfI + _)ال(L03L03L03P2 al .group آ آ a: @@ -220,6 +234,8 @@ _) ای e: L03)یکشن e:kSan L03L03L03L03)یں(S2 e~ یں e~ + L03)یک(ٹ e:k + L03L01)یا(_S2 ja: .group ے // yeh barree ے e: @@ -277,6 +293,7 @@ _) ای e: _)بخار bUxa:R _)برائی bURa:i _)بوا(ئ boa: + _)بزدل bUzdIl .group پ @@ -312,7 +329,7 @@ _) ای e: تجرب taJ'aRb _) تیار t,ai:;'a:R _) تیسر t'i:sR - L03L03) تا (_S2 ta: + L03L03)تا(_S2 ta: L03L03) تی (_S2 ti: L03L03) تے (_S2 te: _) توا t'ava: @@ -597,8 +614,8 @@ _) ای e: .group ل ل lV ل (L01 l - لّ llV - لّ (L01 ll + لّ l:V + لّ (L01 l: لکھ l'Ik# _) لہ (L02 l'EH _) لیت le:t @@ -660,12 +677,12 @@ _) ای e: _) نمٹ nIm'at. _) نمٹ (L01 nImt. @) ن (پ n - @) نچل n'Icl + _) نچل n'Icl نشان nIS'a:n @) ن (ڈ n _) نظر naz.'aR _) نظام nIz.'a:m - _) نہ (L02 n'H + _) نہ (L02 nEHE L01) نٹ n't. نھ nH _) نکت n'Ukt @@ -690,8 +707,8 @@ _) ای e: ہ H _) ہ (L01 H _) ہ (ند HI - ہّ HHV - ہّ (L01 HH + ہّ H:V + ہّ (L01 H: ہ (_ a _) ہلن H'Iln @@ -700,7 +717,7 @@ _) ای e: _) ہم (L02L02L02P2 H'am .group ّ - ّ + ّ : .group ً ً an From 54e87adbb8ae6c68b5b7d9459eb1442359612b9d Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 24 Oct 2017 07:29:58 +0100 Subject: [PATCH 128/137] Move isspace2 from compiledict.c to translate.c. --- src/libespeak-ng/compiledict.c | 10 ---------- src/libespeak-ng/translate.c | 10 ++++++++++ src/libespeak-ng/translate.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index 5c7e0842..cd341834 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -171,16 +171,6 @@ typedef struct { int group3_ix; } RGROUP; -int isspace2(unsigned int c) -{ - // can't use isspace() because on Windows, isspace(0xe1) gives TRUE ! - int c2; - - if (((c2 = (c & 0xff)) == 0) || (c > ' ')) - return 0; - return 1; -} - void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len) { int stress; diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index c8d41087..19c8ef69 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -265,6 +265,16 @@ static int IsSpace(unsigned int c) return iswspace(c); } +int isspace2(unsigned int c) +{ + // can't use isspace() because on Windows, isspace(0xe1) gives TRUE ! + int c2; + + if (((c2 = (c & 0xff)) == 0) || (c > ' ')) + return 0; + return 1; +} + void DeleteTranslator(Translator *tr) { if (tr->data_dictlist != NULL) diff --git a/src/libespeak-ng/translate.h b/src/libespeak-ng/translate.h index 2ff593f2..7effa4a0 100644 --- a/src/libespeak-ng/translate.h +++ b/src/libespeak-ng/translate.h @@ -1,7 +1,7 @@ /* * Copyright (C) 2005 to 2014 by Jonathan Duddington * email: jonsd@users.sourceforge.net - * Copyright (C) 2015 Reece H. Dunn + * Copyright (C) 2015-2017 Reece H. Dunn * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by From 70d492c8dc3fa25b1083fd3010c4ba45f512e140 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 24 Oct 2017 07:49:24 +0100 Subject: [PATCH 129/137] Move utf8_out back to translate.c as it is no longer used in tests. --- src/libespeak-ng/encoding.c | 37 ------------------------------------ src/libespeak-ng/translate.c | 34 +++++++++++++++++++++++++++++++++ src/libespeak-ng/translate.h | 5 +++++ 3 files changed, 39 insertions(+), 37 deletions(-) diff --git a/src/libespeak-ng/encoding.c b/src/libespeak-ng/encoding.c index e7a920d5..02ec0189 100644 --- a/src/libespeak-ng/encoding.c +++ b/src/libespeak-ng/encoding.c @@ -31,43 +31,6 @@ #include "synthesize.h" #include "translate.h" -#define LEADING_2_BITS 0xC0 // 0b11000000 -#define UTF8_TAIL_BITS 0x80 // 0b10000000 - -int utf8_out(unsigned int c, char *buf) -{ - // write a unicode character into a buffer as utf8 - // returns the number of bytes written - - int n_bytes; - int j; - int shift; - static char unsigned code[4] = { 0, 0xc0, 0xe0, 0xf0 }; - - if (c < 0x80) { - buf[0] = c; - return 1; - } - if (c >= 0x110000) { - buf[0] = ' '; // out of range character code - return 1; - } - if (c < 0x0800) - n_bytes = 1; - else if (c < 0x10000) - n_bytes = 2; - else - n_bytes = 3; - - shift = 6*n_bytes; - buf[0] = code[n_bytes] | (c >> shift); - for (j = 0; j < n_bytes; j++) { - shift -= 6; - buf[j+1] = 0x80 + ((c >> shift) & 0x3f); - } - return n_bytes+1; -} - // http://www.iana.org/assignments/character-sets/character-sets.xhtml MNEM_TAB mnem_encoding[] = { { "ANSI_X3.4-1968", ESPEAKNG_ENCODING_US_ASCII }, diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index 19c8ef69..62610133 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -398,6 +398,40 @@ int utf8_in(int *c, const char *buf) } #pragma GCC visibility pop +int utf8_out(unsigned int c, char *buf) +{ + // write a unicode character into a buffer as utf8 + // returns the number of bytes written + + int n_bytes; + int j; + int shift; + static char unsigned code[4] = { 0, 0xc0, 0xe0, 0xf0 }; + + if (c < 0x80) { + buf[0] = c; + return 1; + } + if (c >= 0x110000) { + buf[0] = ' '; // out of range character code + return 1; + } + if (c < 0x0800) + n_bytes = 1; + else if (c < 0x10000) + n_bytes = 2; + else + n_bytes = 3; + + shift = 6*n_bytes; + buf[0] = code[n_bytes] | (c >> shift); + for (j = 0; j < n_bytes; j++) { + shift -= 6; + buf[j+1] = 0x80 + ((c >> shift) & 0x3f); + } + return n_bytes+1; +} + char *strchr_w(const char *s, int c) { // return NULL for any non-ascii character diff --git a/src/libespeak-ng/translate.h b/src/libespeak-ng/translate.h index 7effa4a0..376e17ce 100644 --- a/src/libespeak-ng/translate.h +++ b/src/libespeak-ng/translate.h @@ -706,10 +706,15 @@ extern void SetLengthMods(Translator *tr, int value); void LoadConfig(void); int TransposeAlphabet(Translator *tr, char *text); + +#define LEADING_2_BITS 0xC0 // 0b11000000 +#define UTF8_TAIL_BITS 0x80 // 0b10000000 + ESPEAK_NG_API int utf8_in(int *c, const char *buf); int utf8_in2(int *c, const char *buf, int backwards); int utf8_out(unsigned int c, char *buf); int utf8_nbytes(const char *buf); + int lookupwchar(const unsigned short *list, int c); int lookupwchar2(const unsigned short *list, int c); int Eof(void); From 90d53e145fd1bb4bb557d2a9251d4246f851c76b Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 25 Oct 2017 07:12:45 +0100 Subject: [PATCH 130/137] Move the klatt methods from synthesize.h to klatt.h. --- src/libespeak-ng/klatt.c | 2 +- src/libespeak-ng/klatt.h | 6 +++++- src/libespeak-ng/synthesize.h | 4 ---- src/libespeak-ng/wavegen.c | 4 ++++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/libespeak-ng/klatt.c b/src/libespeak-ng/klatt.c index 6cd9bf21..8b754307 100644 --- a/src/libespeak-ng/klatt.c +++ b/src/libespeak-ng/klatt.c @@ -35,10 +35,10 @@ #include #include "speech.h" -#include "klatt.h" #include "phoneme.h" #include "voice.h" #include "synthesize.h" +#include "klatt.h" extern unsigned char *out_ptr; extern unsigned char *out_start; diff --git a/src/libespeak-ng/klatt.h b/src/libespeak-ng/klatt.h index 0dbb996e..23934ad5 100644 --- a/src/libespeak-ng/klatt.h +++ b/src/libespeak-ng/klatt.h @@ -1,7 +1,7 @@ /* * Copyright (C) 2008 by Jonathan Duddington * email: jonsd@users.sourceforge.net - * Copyright (C) 2015 Reece H. Dunn + * Copyright (C) 2015-2017 Reece H. Dunn * * Based on a re-implementation by: * (c) 1993,94 Jon Iles and Nick Ing-Simmons @@ -171,6 +171,10 @@ typedef struct { DOUBLEX bp_inc; } klatt_peaks_t; +void KlattInit(void); +void KlattReset(int control); +int Wavegen_Klatt2(int length, int resume, frame_t *fr1, frame_t *fr2); + #ifdef __cplusplus } diff --git a/src/libespeak-ng/synthesize.h b/src/libespeak-ng/synthesize.h index f3975271..63346b70 100644 --- a/src/libespeak-ng/synthesize.h +++ b/src/libespeak-ng/synthesize.h @@ -553,10 +553,6 @@ int NumInstnWords(USHORT *prog); void InitBreath(void); -void KlattInit(void); -void KlattReset(int control); -int Wavegen_Klatt2(int length, int resume, frame_t *fr1, frame_t *fr2); - #ifdef __cplusplus } #endif diff --git a/src/libespeak-ng/wavegen.c b/src/libespeak-ng/wavegen.c index 178fc6a1..a083c534 100644 --- a/src/libespeak-ng/wavegen.c +++ b/src/libespeak-ng/wavegen.c @@ -36,6 +36,10 @@ #include "voice.h" #include "synthesize.h" +#ifdef INCLUDE_KLATT +#include "klatt.h" +#endif + #if HAVE_SONIC_H #include "sonic.h" #endif From 351126b3b18fe4af8523a60bffb30d634534091b Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Wed, 25 Oct 2017 07:31:03 +0100 Subject: [PATCH 131/137] Move polint from synthesize.h to spect.h. --- src/libespeak-ng/spect.h | 2 ++ src/libespeak-ng/synthesize.h | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libespeak-ng/spect.h b/src/libespeak-ng/spect.h index 8d593821..f4f1c883 100644 --- a/src/libespeak-ng/spect.h +++ b/src/libespeak-ng/spect.h @@ -22,6 +22,8 @@ extern "C" { #endif +float polint(float xa[], float ya[], int n, float x); + #define FRAME_WIDTH 1000 // max width for 8000kHz frame #define MAX_DISPLAY_FREQ 9500 #define FRAME_HEIGHT 240 diff --git a/src/libespeak-ng/synthesize.h b/src/libespeak-ng/synthesize.h index 63346b70..f76bf90d 100644 --- a/src/libespeak-ng/synthesize.h +++ b/src/libespeak-ng/synthesize.h @@ -457,7 +457,6 @@ void WcmdqStop(void); int WcmdqUsed(void); void WcmdqInc(void); void WavegenInit(int rate, int wavemult_fact); -float polint(float xa[], float ya[], int n, float x); int WavegenFill(void); void MarkerEvent(int type, unsigned int char_position, int value, int value2, unsigned char *out_ptr); int GetAmplitude(void); From b5c415a98dd0844412df982a767bbda3503a0a2c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 28 Oct 2017 12:38:39 +0100 Subject: [PATCH 132/137] Rename OPCODE_ to INSTN_. --- src/libespeak-ng/compiledata.c | 6 +++--- src/libespeak-ng/synthdata.c | 8 ++++---- src/libespeak-ng/synthesize.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index c114681d..6002f4b9 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -2232,11 +2232,11 @@ static int CompilePhoneme(int compile_phoneme) CompileToneSpec(); break; case kCONTINUE: - *prog_out++ = OPCODE_CONTINUE; + *prog_out++ = INSTN_CONTINUE; DecThenCount(); break; case kRETURN: - *prog_out++ = OPCODE_RETURN; + *prog_out++ = INSTN_RETURN; DecThenCount(); break; case kINCLUDE: @@ -2249,7 +2249,7 @@ static int CompilePhoneme(int compile_phoneme) if (if_level > 0) error("Missing ENDIF"); if ((prog_out > prog_buf) && (if_stack[0].returned == 0)) - *prog_out++ = OPCODE_RETURN; + *prog_out++ = INSTN_RETURN; break; } break; diff --git a/src/libespeak-ng/synthdata.c b/src/libespeak-ng/synthdata.c index e15f9d1d..a39fa9bd 100644 --- a/src/libespeak-ng/synthdata.c +++ b/src/libespeak-ng/synthdata.c @@ -756,7 +756,7 @@ int NumInstnWords(USHORT *prog) // This instruction is followed by addWav(), 2 more words return 4; } - if (instn2 == OPCODE_CONTINUE) + if (instn2 == INSTN_CONTINUE) return 3; return 2; } @@ -813,10 +813,10 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ // instructions with no operand switch (data) { - case OPCODE_RETURN: + case INSTN_RETURN: end_flag = 1; break; - case OPCODE_CONTINUE: + case INSTN_CONTINUE: break; default: InvalidInstn(ph, instn); @@ -954,7 +954,7 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ param_sc = phdata->sound_param[instn2] = (instn >> 4) & 0xff; prog++; - if (prog[1] != OPCODE_CONTINUE) { + if (prog[1] != INSTN_CONTINUE) { if (instn2 < 2) { // FMT() and WAV() imply Return end_flag = 1; diff --git a/src/libespeak-ng/synthesize.h b/src/libespeak-ng/synthesize.h index f76bf90d..65bf6836 100644 --- a/src/libespeak-ng/synthesize.h +++ b/src/libespeak-ng/synthesize.h @@ -267,8 +267,8 @@ typedef struct { // instructions -#define OPCODE_RETURN 0x0001 -#define OPCODE_CONTINUE 0x0002 +#define INSTN_RETURN 0x0001 +#define INSTN_CONTINUE 0x0002 // Group 0 instrcutions with 8 bit operand. These values go into bits 8-15 of the instruction #define i_CHANGE_PHONEME 0x01 From c098f91182b8cc4fb6b19007ca4fad5617c23a56 Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Wed, 1 Nov 2017 20:48:51 +0200 Subject: [PATCH 133/137] =?UTF-8?q?Fix=20for=20bug=20#324=20=E2=80=94=20ar?= =?UTF-8?q?abic=20m=20spelled=20as=20metter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dictsource/ar_list | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dictsource/ar_list b/dictsource/ar_list index 55d9ea8b..bf5b6362 100644 --- a/dictsource/ar_list +++ b/dictsource/ar_list @@ -252,7 +252,7 @@ $ duulaar طن t[un كم kiiluu||mitar سا saaAa -م mitar +// م mitar // conflicts with single letter name س su?aal ج dZawaab ص s[afHah From a7ed4fd7fba0cd444e7b77cf157c5d80643150e0 Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Wed, 1 Nov 2017 22:14:05 +0200 Subject: [PATCH 134/137] More Arabic conflicting letters/units removed for bug #324 --- dictsource/ar_list | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/dictsource/ar_list b/dictsource/ar_list index bf5b6362..76a8b8c1 100644 --- a/dictsource/ar_list +++ b/dictsource/ar_list @@ -251,11 +251,12 @@ $ duulaar كغم kiluu||gHraam طن t[un كم kiiluu||mitar -سا saaAa -// م mitar // conflicts with single letter name -س su?aal -ج dZawaab -ص s[afHah +سا saaAa +// Units below conflict with single letter name +// م mitar +// س su?aal +// ج dZawaab +// ص s[afHah // العملات د.ج diinaar||dZazaa?irij $ duulaar From 50a2d8e291803e1d466b6fa713884863e3ecba73 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 4 Nov 2017 08:14:59 +0000 Subject: [PATCH 135/137] Revert "Use strcpy instead of memcpy+strlen." This reverts commit 119c200e00a46248bbaa149e8d0c3b1f19f86135. --- .gitignore | 1 - Makefile.am | 1 - src/libespeak-ng/dictionary.c | 4 ++-- src/libespeak-ng/translate.c | 12 ++++++------ tests/phoneme-output.test | 21 --------------------- 5 files changed, 8 insertions(+), 31 deletions(-) delete mode 100755 tests/phoneme-output.test diff --git a/.gitignore b/.gitignore index 36d797e3..ab5fcdf8 100644 --- a/.gitignore +++ b/.gitignore @@ -98,7 +98,6 @@ src/speak-ng tests/*.test !tests/languages.test -!tests/phoneme-output.test espeak-ng.pc diff --git a/Makefile.am b/Makefile.am index 427083de..0ae0c326 100644 --- a/Makefile.am +++ b/Makefile.am @@ -250,7 +250,6 @@ tests_api_test_SOURCES = tests/api.c check: tests/encoding.check \ tests/readclause.check \ tests/api.check \ - tests/phoneme-output.check \ tests/languages.check ##### phoneme data: diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index 5a504fb7..1b43acea 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -2392,7 +2392,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c match1.end_type |= p - p_start; } strcpy(end_phonemes, match1.phonemes); - strcpy(p_start, word_copy); + memcpy(p_start, word_copy, strlen(word_copy)); return match1.end_type; } } @@ -2402,7 +2402,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c } } - strcpy(p_start, word_copy); + memcpy(p_start, word_copy, strlen(word_copy)); return 0; } diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index 62610133..14bbf3ec 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -827,7 +827,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char if (end2) { RemoveEnding(tr, wordx, end2, word_copy); end_type = TranslateRules(tr, wordx, phonemes, N_WORD_PHONEMES, end_phonemes, wflags|FLAG_NO_TRACE, dictionary_flags); - strcpy(wordx, word_copy); + memcpy(wordx, word_copy, strlen(word_copy)); if ((end_type & SUFX_P) == 0) { // after removing the suffix, the prefix is no longer recognised. // Keep the suffix, but don't use the prefix @@ -934,7 +934,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char wordx[-1] = ' '; if (phonemes[0] == phonSWITCH) { // change to another language in order to translate this word - strcpy(wordx, word_copy); + memcpy(wordx, word_copy, strlen(word_copy)); strcpy(word_phonemes, phonemes); return 0; } @@ -952,7 +952,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char found = LookupDictList(tr, &wordx, phonemes, dictionary_flags2, end_flags, wtab); // without prefix and suffix if (phonemes[0] == phonSWITCH) { // change to another language in order to translate this word - strcpy(wordx, word_copy); + memcpy(wordx, word_copy, strlen(word_copy)); strcpy(word_phonemes, phonemes); return 0; } @@ -992,7 +992,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char if (phonemes[0] == phonSWITCH) { // change to another language in order to translate this word strcpy(word_phonemes, phonemes); - strcpy(wordx, word_copy); + memcpy(wordx, word_copy, strlen(word_copy)); wordx[-1] = c_temp; return 0; } @@ -1006,7 +1006,7 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char AppendPhonemes(tr, phonemes, N_WORD_PHONEMES, end_phonemes); end_phonemes[0] = 0; } - strcpy(wordx, word_copy); + memcpy(wordx, word_copy, strlen(word_copy)); } wordx[-1] = c_temp; @@ -1171,7 +1171,7 @@ int TranslateWord(Translator *tr, char *word_start, WORD_TAB *wtab, char *word_o char word[N_WORD_BYTES+1]; word[0] = 0; word[1] = ' '; - strcpy(word+2, word_out); + memcpy(word+2, word_out, strlen(word_out)); word_out = word+2; while (*word_out && available > 1) { diff --git a/tests/phoneme-output.test b/tests/phoneme-output.test deleted file mode 100755 index 1468bec3..00000000 --- a/tests/phoneme-output.test +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -test_phonemes() { - TEST_LANG=$1 - EXPECTED=$2 - TEST_TEXT=$3 - - echo "testing ${TEST_LANG} \"${TEST_TEXT}\"" - ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ - src/espeak-ng -xq -v ${TEST_LANG} "${TEST_TEXT}" > actual.txt - echo "${EXPECTED}" > expected.txt - diff expected.txt actual.txt || exit 1 -} - -test_phonemes en " h@l'oU" "hello" - -# Emoji - -# ED-3 - emoji_character [http://www.unicode.org/reports/tr51/tr51-12.html#def_emoji_character] -test_phonemes en " Ekskla#m'eIS@N kw'EstS@n m'A@k" "⁉" -test_phonemes en " Ekskla#m'eIS@N kw'EstS@n m'A@k r'eInboU" "⁉ 🌈" From 6043d35c720efdafc7338f5ea65ad64f7d49c942 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 4 Nov 2017 08:26:48 +0000 Subject: [PATCH 136/137] Add phoneme output tests. --- .gitignore | 1 + Makefile.am | 1 + tests/phoneme-output.test | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100755 tests/phoneme-output.test diff --git a/.gitignore b/.gitignore index ab5fcdf8..36d797e3 100644 --- a/.gitignore +++ b/.gitignore @@ -98,6 +98,7 @@ src/speak-ng tests/*.test !tests/languages.test +!tests/phoneme-output.test espeak-ng.pc diff --git a/Makefile.am b/Makefile.am index 0ae0c326..427083de 100644 --- a/Makefile.am +++ b/Makefile.am @@ -250,6 +250,7 @@ tests_api_test_SOURCES = tests/api.c check: tests/encoding.check \ tests/readclause.check \ tests/api.check \ + tests/phoneme-output.check \ tests/languages.check ##### phoneme data: diff --git a/tests/phoneme-output.test b/tests/phoneme-output.test new file mode 100755 index 00000000..a75c4e82 --- /dev/null +++ b/tests/phoneme-output.test @@ -0,0 +1,23 @@ +#!/bin/sh + +test_phonemes() { + TEST_LANG=$1 + EXPECTED=$2 + TEST_TEXT=$3 + + echo "testing ${TEST_LANG} \"${TEST_TEXT}\"" + ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ + src/espeak-ng -xq -v ${TEST_LANG} "${TEST_TEXT}" > actual.txt + echo "${EXPECTED}" > expected.txt + diff expected.txt actual.txt || exit 1 +} + +# word lookup +test_phonemes en " h@l'oU" "hello" + +# correct word stress +test_phonemes en " s'VmTIN Imp'o@t@nt" "something important" + +# spelling rules for suffices (-mas, -mu) +test_phonemes lv " nev'ie:na no\`_ 'eiRo:pas v'a>lsti:m nek,ad nav p'a:Rga:jusi no\`_ 'univERsa::la:s_:_: no\` visp'aRe:jiem n'uoduok}l^iem f'inansE:tas_:_: s'iste:mas uz 'obliga:ta:s 'apdRuoSina:Sanas s'iste:mu b'eigas" "Neviena no Eiropas valstīm nekad nav pārgājusi no universālās (no visparējiem nodokļiem finansētas) sistēmas uz obligātās apdrošināšanas sistēmu Beigas." + From 7a33e602344027483d3e6c16211158bac673846a Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sat, 4 Nov 2017 08:31:13 +0000 Subject: [PATCH 137/137] Reapply the emoji fix from commit 119c200e, only changing the code causing the issue. --- src/libespeak-ng/translate.c | 2 +- tests/phoneme-output.test | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index 14bbf3ec..32f3e86d 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -1171,7 +1171,7 @@ int TranslateWord(Translator *tr, char *word_start, WORD_TAB *wtab, char *word_o char word[N_WORD_BYTES+1]; word[0] = 0; word[1] = ' '; - memcpy(word+2, word_out, strlen(word_out)); + strcpy(word+2, word_out); word_out = word+2; while (*word_out && available > 1) { diff --git a/tests/phoneme-output.test b/tests/phoneme-output.test index a75c4e82..b5dc1adb 100755 --- a/tests/phoneme-output.test +++ b/tests/phoneme-output.test @@ -21,3 +21,8 @@ test_phonemes en " s'VmTIN Imp'o@t@nt" "something important" # spelling rules for suffices (-mas, -mu) test_phonemes lv " nev'ie:na no\`_ 'eiRo:pas v'a>lsti:m nek,ad nav p'a:Rga:jusi no\`_ 'univERsa::la:s_:_: no\` visp'aRe:jiem n'uoduok}l^iem f'inansE:tas_:_: s'iste:mas uz 'obliga:ta:s 'apdRuoSina:Sanas s'iste:mu b'eigas" "Neviena no Eiropas valstīm nekad nav pārgājusi no universālās (no visparējiem nodokļiem finansētas) sistēmas uz obligātās apdrošināšanas sistēmu Beigas." +# Emoji + +# ED-3 - emoji_character [http://www.unicode.org/reports/tr51/tr51-12.html#def_emoji_character] +test_phonemes en " Ekskla#m'eIS@N kw'EstS@n m'A@k" "⁉" +test_phonemes en " Ekskla#m'eIS@N kw'EstS@n m'A@k r'eInboU" "⁉ 🌈"