diff --git a/.gitignore b/.gitignore index 60f7758e..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 @@ -96,6 +98,7 @@ src/speak-ng tests/*.test !tests/languages.test +!tests/phoneme-output.test espeak-ng.pc diff --git a/CHANGELOG.md b/CHANGELOG.md index 41eee4a9..44fecc8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,21 @@ The espeak-ng project is a fork of the espeak project. -### 1.49.2 - (In Development) +### 1.49.3 - (In Development) + +bug fixes: + +* Fix several issues with the emoji support. + +updated languages: + +* af (Afrikaans) -- Christo de Klerk +* fi (Finnish) -- Juho Hiltunen +* it (Italian) -- chrislm +* lv (Latvian) -- Valdis Vitolins +* ur (Urdu) -- Ejaz Shah + +### 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 @@ -25,6 +39,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: @@ -32,7 +47,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: @@ -90,10 +105,14 @@ 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) +* my (Myanmar/Burmese) +* ne (Nepali) * nl (Dutch) * or (Oriya) +* pa (Punjabi) * pl (Polish) * pt (Portuguese) -- Brazil * ro (Romanian) @@ -105,6 +124,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 490388a0..427083de 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,9 +248,9 @@ 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/phoneme-output.check \ tests/languages.check ##### phoneme data: @@ -398,6 +390,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 @@ -672,7 +665,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 @@ -684,13 +677,13 @@ 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 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 @@ -705,7 +698,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 @@ -761,7 +754,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/README.md b/README.md index 79dd7896..d5935ffd 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). @@ -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. @@ -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/android/build.gradle b/android/build.gradle index 19e09afb..18009da1 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' } } @@ -18,12 +18,12 @@ dependencies { } android { - buildToolsVersion '19.1' - compileSdkVersion 23 + buildToolsVersion '25.0.3' + compileSdkVersion 26 defaultConfig { minSdkVersion 14 - targetSdkVersion 23 + targetSdkVersion 26 versionCode 20 versionName "1.48.15" } @@ -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')) -} 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 d2edfdcc..22e60a87 100644 --- a/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java +++ b/android/eSpeakTests/src/com/reecedunn/espeak/test/VoiceData.java @@ -75,90 +75,101 @@ 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("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-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-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("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("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("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("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("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", "Това е откъс от изговорен текст на български"), + 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,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,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"), + 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-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-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("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"), + 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"), + 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("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,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/jni/Android.mk b/android/jni/Android.mk index 45be3745..5dd4cc7f 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*)) @@ -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/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 diff --git a/android/jni/include/config.h b/android/jni/include/config.h index f1807a0a..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-dev" +#define PACKAGE_VERSION "1.49.3-dev" diff --git a/android/src/com/reecedunn/espeak/SpeechSynthesis.java b/android/src/com/reecedunn/espeak/SpeechSynthesis.java index fa2b0814..016586d7 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; } @@ -355,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"); @@ -377,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"); @@ -386,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"); @@ -397,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"); @@ -412,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"); @@ -426,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"); @@ -435,18 +448,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")); } } diff --git a/configure.ac b/configure.ac index 2d28da70..9fb64e41 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.3-dev], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng]) AM_INIT_AUTOMAKE() LT_INIT @@ -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 ================================================================ @@ -252,6 +269,19 @@ 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([-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"]) +AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"]) + dnl ================================================================ dnl Generate output. dnl ================================================================ diff --git a/dictsource/af_list b/dictsource/af_list index 9443be40..19ea9378 100644 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -218,7 +218,9 @@ afganistan afg'anistan alaska al'aska albanië alb'A:ne@:@- algerië alx2'e@re@:@- +alhambra al'ambra amanzimtoti $4 +amstel amst@l antwerpen antv&rp@n avignon _^_FR babilon babilOn @@ -333,6 +335,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 +345,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 @@ -380,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 @@ -585,6 +589,7 @@ james _^_EN jane _^_EN janine dZ@ni:n Jean ZA~n $capital +jeff _^_EN jesebel je@s@b&l jessica _^_EN jimmy _^_EN @@ -603,6 +608,7 @@ julia _^_EN jung juN khayyam kaj'am kelvin _^_EN +kennedy _^_EN kim _^_EN $capital kleopatra kliu:p'A:tra krige krix2@ @@ -769,9 +775,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 +824,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 +834,7 @@ alibama $3 antares $2 beatles _^_EN boeing _^_EN +cadillac _^_EN checkers tSEk@rs chevrolet _^_FR chrysler kraIsl@r @@ -1044,7 +1054,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,7 +1086,9 @@ vivos _^_LA // main word list aangaande $2 +aanmerklik $2 aanstaande $2 +aanswel A:nsw&l (a cappella) a||kap'&la adagio ad'A:dZi;%@U afgaanse afg'A:ns@ @@ -1091,6 +1104,7 @@ algaande $2 alge alx2@ algehele alx2@h,e@l@ allegro al'Egru +allengs alENs allergene $3 almiskie $3 alom al_'Om @@ -1116,11 +1130,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 +1146,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 +1172,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 +1191,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 @@ -1183,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 @@ -1219,12 +1239,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 +1291,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,8 +1317,10 @@ inkatha iNk'A:ta inkluis $2 innestel InnEst@l insomnia @nsOmnija +inteling Inte@l@N intens @nt'Ens intensiteit $4 +inwegery Inve@x2@reI ironieë irun'i:@ jantwak jantw'ak @@ -1306,12 +1331,14 @@ 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 kennisvaardig $1 kimono $2 klaasvakie $2 +kliënteel $3 klimeid klImeIt knapsekêrel knaps@k&:r@l kolossense kOl@s'e~ns@ @@ -1325,11 +1352,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@ @@ -1337,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 @@ -1448,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 @@ -1472,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 @@ -1504,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@ @@ -1532,6 +1565,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 @@ -1554,7 +1588,10 @@ 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 totale tut'A:l@ totsiens $2 @@ -1566,6 +1603,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 @@ -1622,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 @@ -1638,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 d8f65eda..3ab130e9 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 @@ -1451,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 @@ -1589,6 +1599,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 +1613,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 +1706,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 +1739,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 +1755,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 +1861,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 +1999,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 +2130,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 @@ -2269,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 @@ -2324,10 +2341,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 @@ -2359,11 +2377,13 @@ 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 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 +2564,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 +2677,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@ @@ -2738,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 @@ -2805,6 +2828,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 +2970,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,7 +3060,8 @@ 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 (om n&k_ // fix e sound, insert pause: nekom(ge)draai + nek (_ n&k // catch-all for words ending in -nek: koedoe-/swaannek + _) 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 @@ -3080,6 +3106,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 @@ -3196,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 @@ -3417,6 +3445,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 +3512,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 +3608,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/-ë @@ -4101,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 @@ -4118,6 +4150,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 +4285,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 @@ -4271,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 @@ -4411,6 +4446,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 @@ -4561,7 +4597,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 +4610,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 +4912,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 +4981,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 +5088,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 @@ -5204,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 diff --git a/dictsource/ar_list b/dictsource/ar_list index 55d9ea8b..76a8b8c1 100644 --- a/dictsource/ar_list +++ b/dictsource/ar_list @@ -251,11 +251,12 @@ $ duulaar كغم kiluu||gHraam طن t[un كم kiiluu||mitar -سا saaAa -م mitar -س su?aal -ج dZawaab -ص s[afHah +سا saaAa +// Units below conflict with single letter name +// م mitar +// س su?aal +// ج dZawaab +// ص s[afHah // العملات د.ج diinaar||dZazaa?irij $ duulaar diff --git a/dictsource/en_list b/dictsource/en_list index b1e02404..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 @@ -2228,7 +2229,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 @@ -2716,6 +2717,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 +3422,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 +3457,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 @@ -3568,7 +3571,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 @@ -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 @@ -4042,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:@ @@ -4546,8 +4550,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 @@ -4898,7 +4900,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 @@ -4912,8 +4913,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 a74b8b46..3fe3e9ef 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 @@ -180,7 +184,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 +517,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 @@ -847,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 @@ -1202,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 @@ -1227,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 @@ -1391,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 @@ -1463,7 +1471,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 +1485,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 @@ -2150,6 +2158,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 @@ -2377,7 +2387,9 @@ _it_separ) ate (_ @t @x) ed (_S2vi d# y) ed (_S2v d# debut) ed (_S2 d# - edly (_S4m I#dl%i + 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 @@ -2567,6 +2579,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 @@ -2771,7 +2785,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: @@ -2890,6 +2904,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 @@ -3099,7 +3114,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 @@ -4288,6 +4303,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 @@ -4299,6 +4316,7 @@ multip) ly laI &) mouth (_ m@T &) mouth (_$w_alt1 maUT _) multi mVlti + _) multi (pl m,VltI _) multi (@@P5 m,VltI .group mi @@ -5622,6 +5640,7 @@ multip) ly laI .group re _) re (C@ rI# + _) re (collec rE _) reflex ri:flE2ks _) reflexive rI#fl'EksIv &Ct) red (_ @d @@ -5847,6 +5866,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# @@ -5861,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 @@ -5878,6 +5902,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 +6107,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 @@ -6411,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 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 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 diff --git a/dictsource/fi_list b/dictsource/fi_list index 9806f2bc..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: @@ -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 diff --git a/dictsource/fi_rules b/dictsource/fi_rules index c064e3fd..6f03a69e 100644 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -165,13 +165,16 @@ .group q - q k - qq k: + q q + qq q: .group r 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 @@ -197,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: diff --git a/dictsource/it_list b/dictsource/it_list index 4f8d43f1..95c6e7d9 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 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 @@ -111,7 +115,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 +140,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 @@ -150,6 +152,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 @@ -159,8 +163,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 @@ -787,6 +789,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 @@ -1020,7 +1023,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 @@ -2381,6 +2384,7 @@ ivano $2 jace _^_en $only jack dZ'E:k jackson _^_EN +jefferson $1 jacopo j'a:kopo james _^_EN jane _^_EN @@ -2477,6 +2481,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 @@ -3206,6 +3211,7 @@ distino $1 distintesi $2 disturbano $2 disturbino $2 +dissuadere dissuad'eRe divaghino $2 divaricano $2 diventino $2 @@ -4330,6 +4336,7 @@ situino $1 sloggiano $1 smagnetizzino $3 smascher $1 +smascherano $1 smercino $1 sniffano $1 snodano $1 @@ -4673,6 +4680,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 @@ -4775,6 +4784,7 @@ espellerl $2 esprimiti $2 evolverci $2 evolversi $2 +facendomici fatS'endom,itSi fammel $1 fattel f'at:el fattoci $1 @@ -4825,7 +4835,6 @@ orientaci $3 pensaci $1 perdonatel $3 permettigli $2 -pervenutaci $3 pizzical $1 pizzicami $1 portala $1 @@ -4841,7 +4850,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 aca7c35b..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 @@ -137,6 +138,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..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 march 31 by Christian Leo Mameli +// Last update: 2017 october 3 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/ @@ -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 @@ -59,6 +60,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 +92,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 @@ -208,6 +211,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 @@ -504,6 +509,7 @@ qui (A kwj _) quell' (P6t kwEll _) quest' (P6t kwest + _) quant' (P6t kwant .group r r @-* @@ -522,6 +528,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 @@ -563,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 @@ -596,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: @@ -619,6 +629,7 @@ ustano (_ 'u:stano C) uo (tano_ U'O uomini (_ w2'Omini + fanc) u (lA_ 'u: .group v v v @@ -636,6 +647,8 @@ _) vota (L07_ v'Ota s) veglia (L07_ v'el^a volta (L07_ v'Olta + venut (AL04_ ven'ut + _) v' (P2t v .group w w w2 @@ -696,6 +709,7 @@ man) zie (_ ts'i;e me) zz dz: amma) zziamo (L04_ _tsi'a:mo + sbara) zz (arL04_ ts: .group 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] diff --git a/dictsource/lv_list b/dictsource/lv_list index 3e1dc8a6..7adeb971 100644 --- a/dictsource/lv_list +++ b/dictsource/lv_list @@ -423,6 +423,7 @@ tikpat $2 tikvien $u2+ turpat $u2+ turpretī $u2 +uzreiz $2 vienalga $2 vismaz $2 diff --git a/dictsource/lv_rules b/dictsource/lv_rules index b2ae56f2..0ae886ea 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 @@ -204,7 +204,7 @@ // wide e ------------------------------------------------------------------------ // // widening consonants follow - e (L25 E + e (L25< E e (L25L25 E // widening vowels follow e (L25L24+ E @@ -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,6 +289,7 @@ 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 @@ -337,7 +340,7 @@ // wide ē --------------------------------------------------------------------------- // // widening consonants follow - ē (L25 E: + ē (L25< E: ē (L25L25 E: // widening vowels follow ē (L25L24+ E: @@ -372,6 +375,7 @@ 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 @@ -425,7 +429,6 @@ ī i: .group j -// A) j (@ :j j j _) jebk j%ebk // stress on 2nd syllable @@ -483,11 +486,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 @@ -541,6 +539,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 @@ -575,12 +574,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 @@ -588,6 +587,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 @@ -692,6 +692,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: @@ -720,6 +721,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 @@ -763,6 +765,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 @@ -806,6 +810,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 @@ -878,6 +883,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 uo`k // koks with short uo, because of ambiguity @@ -1063,6 +1069,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 @@ -1217,6 +1224,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 @@ -1320,6 +1328,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 @@ -1387,6 +1396,7 @@ L46L45L45) o (<< uo p) os (tC@ os p) os (te os p) os (ter os + p) os (tind os p) os (tī uos p) os (tL01 uos p) os (tL55m os @@ -1402,17 +1412,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 @@ -1423,6 +1438,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 @@ -1433,22 +1449,25 @@ 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 @@ -1566,6 +1585,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/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) 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) 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) 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) diff --git a/dictsource/sd_list b/dictsource/sd_list index 06093f74..24b25872 100644 --- a/dictsource/sd_list +++ b/dictsource/sd_list @@ -1,170 +1,194 @@ -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: +ٿ t#e: +ٽ 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: +ز 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||je: +ۂ 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 +ٗ Ubto:pe:S + + +// 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~ $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 c90759b5..f5c111cb 100644 --- a/dictsource/sd_rules +++ b/dictsource/sd_rules @@ -1,668 +1,559 @@ - -// 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 + + +.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: + ي(_ٿ e: + +.group ے // yeh barree + ے e: + +.group ۂ + ۂ 'ae: + +// with hamza +.group ئ + ئ + +.group ٗ + ٗ u: + +.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 + _) خیا 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,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 ذ + ذ zV + ذ(L01 z + +.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: + +.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/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) 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 diff --git a/dictsource/ur_list b/dictsource/ur_list index 3cb86c3e..f8f5b88d 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 @@ -199,7 +204,7 @@ _dpt _ISaRI'Ia_ کے $u سے $u -اور OR $u $brk +اور aUR $u $brk کہ k'e:H $u نے $u @@ -329,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: @@ -677,14 +682,13 @@ _dpt _ISaRI'Ia_ کلک klIk فکسنگ f,Iks'Ing مانند ma:n'Ind $1 -اتار Ut'a:R آرکائیو ,a:Rk'a:jv لنک lInk فہرست fEHRIst کیلئے ke:li:;e: -اگر agaR $u +اگر agaR $pause ضرورت zaRu:Rat -مگر magaR $u +مگر magaR $pause دیگر digaR اہم EHEm فیصد fis.ad @@ -718,4 +722,273 @@ _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: +کنول kV~val $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 +ذہن zEHEn +سلوک 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 +الذمہ UzzIma +صحبت s.OHbat +برے bURe: +بز bUz +بزم bazm +بستر bIstaR +مرگ maRg +بسکٹ bIskIt. +(بسم اللہ) bIsmIl:a: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 +سنور sV~vaR +بو bu: $only +بورڈنگ bo:Rd.Ing +بولنگ bo:lIng +امرت amRIt +(ان بجھا) anbUJ#a: +(ان بن) anban +(ان پڑھ) 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 13c537a7..ea1ccb6d 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,16 +17,18 @@ ٩ 9 ي ی یٰ ا +ٰی ا +آ آ // vowel signs, alif acts as consonants at start of word if these follow .L01 َ ِ ُ و ی ع ا ے // Consonants -.L02 ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ غ ف ق ک گ ل م ن ہ ئ +.L02 ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ غ ف ق ک کھ گ گھ ل م ن ہ ئ // Letter group - L03: Most of the letters -.L03 ا ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ہ ئ ی ے +.L03 ا ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک کھ گ گھ ل م ن و ہ ئ ی ے ٰ // VOWELS @@ -34,7 +36,7 @@ َ a َی E َے E - َو O + َو aU َع a: .group ِ @@ -48,6 +50,9 @@ ُو u: ُع O +.group ٗ + ٗ u: + .group ھ ھ HV ھ (_ H: @@ -80,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 @@ -123,12 +128,65 @@ _) ای 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~ + _)انج(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: آتش 'a:tIS آہست a:H'Ist آئ (L02 'a:I + آمیز a:me:z + آویز a:ve:z .group ع @@ -141,6 +199,8 @@ _) ای e: _) عمر 'UmR L02) عی (_ 'ai: علیحد 'alEHd + عُ 'U + عِ I .group و و o: @@ -152,8 +212,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 +225,17 @@ _) ای e: _) ی jV یع(_ i: @) ی i: - @) یں (_ e:n + @) یں (_ e~ یّ jj @) یت (_S2 i:;'at _) یو jO ی (و e: L02)یوں i;o:n + L03)یکشن e:kSan + L03L03L03L03)یں(S2 e~ + یں e~ + L03)یک(ٹ e:k + L03L01)یا(_S2 ja: .group ے // yeh barree ے e: @@ -180,7 +248,7 @@ _) ای e: ئ .group ؤ - ؤ aU // ?? + ؤ o: .group أ أ // ?? @@ -220,6 +288,12 @@ _) ای e: بوڑھ b'u:r.h _) بے (P2 b'e: بحران b,OHR'a:n + _)بپھر(L01 bIp#R + _)بچھ bIc# + _)بخار bUxa:R + _)برائی bURa:i + _)بوا(ئ boa: + _)بزدل bUzdIl .group پ @@ -237,6 +311,7 @@ _) ای e: پیچھ p'i:c# پھونک p#'u:nk _) پور (L01 p'u:R + _)پچھل(L01 pIc#l .group ت ت tV @@ -254,10 +329,11 @@ _) ای e: تجرب taJ'aRb _) تیار t,ai:;'a:R _) تیسر t'i:sR - L03L03) تا (_S2 ta: + L03L03)تا(_S2 ta: L03L03) تی (_S2 ti: L03L03) تے (_S2 te: _) توا t'ava: + تہ(_ ta .group ٹ ٹ t.V @@ -295,6 +371,7 @@ _) ای e: _) جمل J'Uml _) جہ (L02 J'EH _) جدا J'Uda: + _)جذب JaDb .group چ چ cV @@ -320,6 +397,7 @@ _) ای e: حّ HHV حّ (L01 HH + _)حیا Haja: .group خ خ xV @@ -331,6 +409,8 @@ _) ای e: _) خود x'Ud _) خواہش xv'a:HIS _) خیا x'aja: + _)خوا xva: + _)خدا xUda: .group د @@ -353,6 +433,7 @@ _) ای e: _) دوسر d'u:sR _) دین de:n _) دیت de:t + دہ(_ da .group ڈ ڈ d.V @@ -366,11 +447,9 @@ _) ای e: ڈرائیور d.R'a:jvaR .group ذ - ذ DV - ذ (L01 D - ذّ DDV - ذّ (L01 DD - _) ذہ (L02 D'EH + ذ zV + ذ (L01 z + _) ذہ (L02 z'EH .group ر ر RV @@ -446,6 +525,7 @@ _) ای e: _) شخص S'axs. _) شہ (L02 S'EH شرمند S,aRm'Ind + _)شمار SUma:R .group ص ص s.V @@ -529,12 +609,13 @@ _) ای e: _) گہ (L02 g'EH گزارش gUz'a:RIS _) گیت g'i:t + _)گزار gUza:R .group ل ل lV ل (L01 l - لّ llV - لّ (L01 ll + لّ l:V + لّ (L01 l: لکھ l'Ik# _) لہ (L02 l'EH _) لیت le:t @@ -596,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 @@ -626,8 +707,8 @@ _) ای e: ہ H _) ہ (L01 H _) ہ (ند HI - ہّ HHV - ہّ (L01 HH + ہّ H:V + ہّ (L01 H: ہ (_ a _) ہلن H'Iln @@ -636,24 +717,25 @@ _) ای e: _) ہم (L02L02L02P2 H'am .group ّ - ّ + ّ : .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/docs/dictionary.md b/docs/dictionary.md index 7aaa30e8..26f63d25 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. diff --git a/docs/languages.md b/docs/languages.md index fc60dfa5..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 supported languages are: +The 100 supported languages and accents are: | Family Code | Identifier | Language Family | Language | Accent/Dialect | |-------------|-------------------|-----------------------|-----------------------------|------------------------| @@ -75,6 +75,7 @@ The supported languages 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/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'; } 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 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 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/phsource/ph_latvian b/phsource/ph_latvian index 2f5045d8..21e890ca 100644 --- a/phsource/ph_latvian +++ b/phsource/ph_latvian @@ -198,6 +198,25 @@ phoneme n- // more voiced variant of 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 @@ -336,15 +355,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 @@ -422,4 +432,3 @@ phoneme l endphoneme - diff --git a/src/espeak-ng.c b/src/espeak-ng.c index 94c62513..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', ' ', @@ -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/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/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" { 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/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 */ 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/compiledata.c b/src/libespeak-ng/compiledata.c index 959f17d2..6002f4b9 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -33,13 +33,15 @@ #include #include +#include #include "error.h" #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #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; @@ -722,7 +721,7 @@ static void unget_char(unsigned int c) linenum--; } -int CheckNextChar() +static int CheckNextChar() { int c; while (((c = get_char()) == ' ') || (c == '\t')) @@ -893,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; @@ -999,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; @@ -1401,15 +1400,17 @@ 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; - 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) { @@ -1612,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; @@ -1721,7 +1722,7 @@ int CompileIf(int elif) return 0; } -void FillThen(int add) +static void FillThen(int add) { USHORT *p; int offset; @@ -1749,7 +1750,7 @@ void FillThen(int add) then_count = 0; } -int CompileElse(void) +static int CompileElse(void) { USHORT *ref; USHORT *p; @@ -1776,7 +1777,7 @@ int CompileElse(void) return 0; } -int CompileElif(void) +static int CompileElif(void) { if (if_level < 1) { error("ELIF not expected"); @@ -1788,7 +1789,7 @@ int CompileElif(void) return 0; } -int CompileEndif(void) +static int CompileEndif(void) { USHORT *p; int chain; @@ -1951,7 +1952,7 @@ static void DecThenCount() then_count--; } -int CompilePhoneme(int compile_phoneme) +static int CompilePhoneme(int compile_phoneme) { int endphoneme = 0; int keyword; @@ -2231,11 +2232,11 @@ 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: @@ -2248,7 +2249,7 @@ 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; @@ -2357,8 +2358,6 @@ static void WritePhonemeTables() static void EndPhonemeTable() { int ix; - int *pw; - int length; if (n_phoneme_tabs == 0) return; @@ -2697,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); } @@ -2717,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; @@ -2825,6 +2824,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]; diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index 2472694e..cd341834 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -35,11 +35,11 @@ #include "error.h" #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" extern void Write4Bytes(FILE *f, int value); -int HashDictionary(const char *string); static FILE *f_log = NULL; extern char *dir_dictionary; @@ -52,8 +52,15 @@ static int text_mode = 0; static int debug_flag = 0; static int error_need_dictionary = 0; -static int hash_counts[N_HASH_DICT]; +// 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[] = { @@ -164,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; @@ -411,8 +408,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)) { @@ -649,7 +646,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; } @@ -669,7 +666,6 @@ static void compile_dictlist_start(void) p = p2; } hash_chains[ix] = NULL; - hash_counts[ix] = 0; } } @@ -682,10 +678,9 @@ 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 *)); + length = *(uint8_t *)(p+sizeof(char *)); fwrite(p+sizeof(char *), length, 1, f_out); memcpy(&p, p, sizeof(char *)); } @@ -702,7 +697,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; @@ -725,8 +720,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) { @@ -738,6 +731,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++; } @@ -758,7 +752,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'; @@ -1165,7 +1159,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/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 d03f7d2a..1b43acea 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -33,15 +33,13 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" 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 }; @@ -198,7 +196,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 @@ -254,7 +252,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 } @@ -1571,7 +1569,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 @@ -1627,7 +1624,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; @@ -1732,7 +1728,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 +1934,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; @@ -2719,7 +2713,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; } @@ -2894,7 +2888,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 @@ -3003,7 +2997,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[] = { diff --git a/src/libespeak-ng/encoding.c b/src/libespeak-ng/encoding.c index 122e9099..02ec0189 100644 --- a/src/libespeak-ng/encoding.c +++ b/src/libespeak-ng/encoding.c @@ -26,43 +26,10 @@ #include #include "speech.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; -} +#include "phoneme.h" +#include "voice.h" +#include "synthesize.h" +#include "translate.h" // http://www.iana.org/assignments/character-sets/character-sets.xhtml MNEM_TAB mnem_encoding[] = { @@ -654,6 +621,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/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/event.c b/src/libespeak-ng/event.c index c1dcd1f0..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) @@ -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); } } 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); 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 } 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/intonation.c b/src/libespeak-ng/intonation.c index 946e89f3..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 @@ -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; diff --git a/src/libespeak-ng/klatt.c b/src/libespeak-ng/klatt.c index 3bbd1014..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 "synthesize.h" #include "voice.h" +#include "synthesize.h" +#include "klatt.h" extern unsigned char *out_ptr; extern unsigned char *out_start; @@ -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/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/mbrowrap.c b/src/libespeak-ng/mbrowrap.c index f1ad7d38..e9abde41 100644 --- a/src/libespeak-ng/mbrowrap.c +++ b/src/libespeak-ng/mbrowrap.c @@ -20,11 +20,24 @@ #include "config.h" #if defined(_WIN32) || defined(_WIN64) - #include +#endif #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) + HINSTANCE hinstDllMBR = NULL; BOOL load_MBR() @@ -69,8 +82,6 @@ void unload_MBR() #include #include - -#include "mbrowrap.h" #include "speech.h" /* @@ -508,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]; @@ -551,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(); @@ -560,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]; @@ -584,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) @@ -592,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; @@ -623,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(); @@ -631,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 } 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); diff --git a/src/libespeak-ng/numbers.c b/src/libespeak-ng/numbers.c index 015cba47..35521cb6 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 @@ -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; 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 e14d71a6..c6412b02 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -34,12 +34,13 @@ #include #include #include +#include #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 @@ -89,6 +90,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 @@ -113,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) @@ -134,7 +184,6 @@ int Eof(void) static int GetC(void) { int c1; - static int ungot2 = 0; if ((c1 = ungot_char) != 0) { ungot_char = 0; @@ -792,7 +841,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; } @@ -869,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) diff --git a/src/libespeak-ng/setlengths.c b/src/libespeak-ng/setlengths.c index 241ab658..9ee49cac 100644 --- a/src/libespeak-ng/setlengths.c +++ b/src/libespeak-ng/setlengths.c @@ -30,12 +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[]; // convert from words-per-minute to internal speed factor diff --git a/src/libespeak-ng/spect.c b/src/libespeak-ng/spect.c index 4ea7160b..e468dfd6 100644 --- a/src/libespeak-ng/spect.c +++ b/src/libespeak-ng/spect.c @@ -32,12 +32,10 @@ #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); +#include "ieee80.h" extern unsigned char pk_shape1[]; extern int pk_select; @@ -57,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) diff --git a/src/libespeak-ng/spect.h b/src/libespeak-ng/spect.h index d0be68d3..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 @@ -124,7 +126,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); diff --git a/src/libespeak-ng/speech.c b/src/libespeak-ng/speech.c index bd8cd294..da0bd3eb 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" @@ -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; } @@ -876,9 +876,6 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Synchronize(void) return berr; } -extern void FreePhData(void); -extern void FreeVoiceList(void); - ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Terminate(void) { #ifdef USE_ASYNC diff --git a/src/libespeak-ng/synth_mbrola.c b/src/libespeak-ng/synth_mbrola.c index 3e2031dc..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) @@ -573,16 +572,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/src/libespeak-ng/synthdata.c b/src/libespeak-ng/synthdata.c index 4087197e..a39fa9bd 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; @@ -66,14 +66,12 @@ 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; FILE *f_in; - unsigned int length; + int length; char buf[sizeof(path_home)+40]; sprintf(buf, "%s%c%s", path_home, PATHSEP, fname); @@ -112,7 +110,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 +505,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; @@ -760,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; } @@ -817,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); @@ -958,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.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 a2c52ea0..65bf6836 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 @@ -268,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 @@ -453,14 +452,16 @@ 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; @@ -485,6 +486,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); @@ -497,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 @@ -545,10 +552,6 @@ int NumInstnWords(USHORT *prog); void InitBreath(void); -void KlattInit(); -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/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/libespeak-ng/tr_languages.c b/src/libespeak-ng/tr_languages.c index 38034312..57e2502c 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" @@ -158,19 +159,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, // Not ignored. + // 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, // Not ignored. + // End of the ignored character list. + 0, 0 }; const unsigned char utf8_ordinal[] = { 0xc2, 0xba, 0 }; // masculine ordinal character, UTF-8 @@ -387,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 }; @@ -412,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)); diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index abecc5fc..32f3e86d 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 @@ -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; @@ -265,6 +265,16 @@ 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) @@ -388,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 @@ -396,17 +440,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; @@ -525,7 +558,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; @@ -1139,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) { @@ -1195,7 +1227,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; @@ -1791,13 +1823,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; @@ -1874,7 +1906,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; diff --git a/src/libespeak-ng/translate.h b/src/libespeak-ng/translate.h index 89f3f680..376e17ce 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 @@ -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); @@ -747,6 +752,10 @@ 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 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); diff --git a/src/libespeak-ng/voice.h b/src/libespeak-ng/voice.h index cafaf995..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]; @@ -86,6 +88,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 } diff --git a/src/libespeak-ng/voices.c b/src/libespeak-ng/voices.c index 6a9d68b2..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[] = { @@ -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 @@ -544,7 +532,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 @@ -705,47 +693,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 +754,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 +859,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; } @@ -1272,7 +1282,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)); @@ -1299,7 +1309,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/src/libespeak-ng/wavegen.c b/src/libespeak-ng/wavegen.c index dd656f9c..a083c534 100644 --- a/src/libespeak-ng/wavegen.c +++ b/src/libespeak-ng/wavegen.c @@ -33,8 +33,12 @@ #include "speech.h" #include "phoneme.h" -#include "synthesize.h" #include "voice.h" +#include "synthesize.h" + +#ifdef INCLUDE_KLATT +#include "klatt.h" +#endif #if HAVE_SONIC_H #include "sonic.h" @@ -665,7 +669,7 @@ static int ApplyBreath(void) return value; } -int Wavegen() +static int Wavegen() { if (wvoice == NULL) return 0; @@ -1117,7 +1121,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 +1144,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 +1250,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/src/ucd-tools/.gitignore b/src/ucd-tools/.gitignore index 90829833..02672261 100644 --- a/src/ucd-tools/.gitignore +++ b/src/ucd-tools/.gitignore @@ -1,4 +1,5 @@ .*.swp +*~ # intermediate files: @@ -52,12 +53,15 @@ depcomp install-sh libtool ltmain.sh -m4/ missing Makefile Makefile.in stamp-h1 +m4/* +!m4/ax_check_compile_flag.m4 + # emscripten: + a.out.js a.out.js.mem diff --git a/src/ucd-tools/CHANGELOG.md b/src/ucd-tools/CHANGELOG.md index 97e1b478..db784527 100644 --- a/src/ucd-tools/CHANGELOG.md +++ b/src/ucd-tools/CHANGELOG.md @@ -7,11 +7,14 @@ These are eSpeak NG specific modifications to the `ucd-tools` project: * `data/espeak-ng` data files for eSpeak NG extended data. * espeak-ng PropList property lookup as part of the `ucd_property` API. -## 9.0.0.1 - (In Progress) +## 10.0.0 - 2017-06-25 * Add `iswblank` and `iswxdigit` compatibility. * Improve ctype compatibility. -* PropList property lookup. +* 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/src/ucd-tools/Makefile.am b/src/ucd-tools/Makefile.am index 24680ebc..6d9f1ed3 100644 --- a/src/ucd-tools/Makefile.am +++ b/src/ucd-tools/Makefile.am @@ -55,34 +55,34 @@ 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 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 ################################### diff --git a/src/ucd-tools/configure.ac b/src/ucd-tools/configure.ac index c99d67ce..399f99e9 100644 --- a/src/ucd-tools/configure.ac +++ b/src/ucd-tools/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]) @@ -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 @@ -33,13 +34,22 @@ 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) +dnl ================================================================ +dnl Compiler warnings. +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 ================================================================ dnl Generate output. dnl ================================================================ diff --git a/src/ucd-tools/m4/ax_check_compile_flag.m4 b/src/ucd-tools/m4/ax_check_compile_flag.m4 new file mode 100644 index 00000000..80c79114 --- /dev/null +++ b/src/ucd-tools/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/ucd-tools/src/case.c b/src/ucd-tools/src/case.c index 3e46a56d..9ab0223a 100644 --- a/src/ucd-tools/src/case.c +++ b/src/ucd-tools/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 10.0.0 */ struct case_conversion_entry { diff --git a/src/ucd-tools/src/categories.c b/src/ucd-tools/src/categories.c index 964ac416..d0e2a4a8 100644 --- a/src/ucd-tools/src/categories.c +++ b/src/ucd-tools/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 10.0.0 */ static const uint8_t categories_Cn[256] = { @@ -327,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, @@ -356,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] = @@ -376,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] = @@ -421,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, @@ -696,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] = @@ -716,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] = @@ -772,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, @@ -816,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] = @@ -934,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, }; @@ -985,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, @@ -1043,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, @@ -1114,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, }; @@ -1463,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, @@ -1841,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, @@ -1879,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, @@ -2035,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, }; @@ -2079,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] = @@ -2427,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, @@ -2474,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] = @@ -2521,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, }; @@ -2612,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, }; @@ -2698,11 +2759,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 +2776,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 +2793,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 +2976,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 +2995,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_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_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, /* 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_Lo, /* 01B000 */ + categories_01B100, + categories_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 +3186,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_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 */ + 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 +3487,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) @@ -3471,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/src/ucd-tools/src/ctype.c b/src/ucd-tools/src/ctype.c index 5c8b025c..42bb9f58 100644 --- a/src/ucd-tools/src/ctype.c +++ b/src/ucd-tools/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/ucd-tools/src/include/ucd/ucd.h b/src/ucd-tools/src/include/ucd/ucd.h index 41087208..988f455a 100644 --- a/src/ucd-tools/src/include/ucd/ucd.h +++ b/src/ucd-tools/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 */ @@ -366,6 +369,8 @@ 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 */ +#define UCD_PROPERTY_EMOJI_COMPONENT 0x0000004000000000ull /**< @brief Emoji_Component */ // eSpeak NG extended properties: #define ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION 0x0010000000000000ull /**< @brief Inverted_Terminal_Punctuation */ @@ -679,6 +684,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 */ @@ -776,6 +782,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 */ @@ -805,6 +812,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 */ @@ -876,6 +884,8 @@ 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 */ + Emoji_Component = UCD_PROPERTY_EMOJI_COMPONENT, /**< @brief Emoji_Component */ }; /** @brief Return the properties of the specified codepoint. diff --git a/src/ucd-tools/src/proplist.c b/src/ucd-tools/src/proplist.c index 5288f703..73de0941 100644 --- a/src/ucd-tools/src/proplist.c +++ b/src/ucd-tools/src/proplist.c @@ -78,9 +78,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; @@ -90,7 +87,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: @@ -148,11 +145,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; @@ -166,12 +163,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: @@ -179,45 +176,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; @@ -332,7 +329,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; @@ -407,19 +404,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; } @@ -434,8 +433,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; @@ -443,49 +442,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; @@ -613,6 +612,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; @@ -709,6 +709,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; @@ -818,6 +824,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; @@ -848,7 +856,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; @@ -964,7 +973,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: @@ -1111,6 +1120,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; @@ -1120,6 +1139,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; @@ -1165,7 +1194,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; @@ -1279,10 +1308,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: @@ -1337,9 +1366,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 | ESPEAKNG_PROPERTY_EXCLAMATION_MARK; 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 | ESPEAKNG_PROPERTY_COMMA; if (c == 0x002E) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_SENTENCE_TERMINAL | UCD_PROPERTY_PATTERN_SYNTAX | ESPEAKNG_PROPERTY_FULL_STOP; if (c == 0x003A) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_PATTERN_SYNTAX | ESPEAKNG_PROPERTY_COLON; @@ -1609,6 +1638,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; @@ -1664,7 +1698,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; @@ -1746,7 +1780,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; } @@ -1839,7 +1873,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; @@ -1979,7 +2013,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 | UCD_PROPERTY_EMOJI_COMPONENT; break; case 0x01F200: if (c == 0x01F201) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; @@ -2074,23 +2108,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 >= 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 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 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 UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c == 0x01F9C0) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + 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; @@ -2132,6 +2172,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 | ESPEAKNG_PROPERTY_PARAGRAPH_SEPARATOR; 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/ucd-tools/src/scripts.c b/src/ucd-tools/src/scripts.c index 17254607..573c137a 100644 --- a/src/ucd-tools/src/scripts.c +++ b/src/ucd-tools/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" @@ -66,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 @@ -163,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 @@ -192,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 @@ -199,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] = { @@ -644,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, @@ -689,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, @@ -718,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] = @@ -738,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] = @@ -783,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, @@ -1038,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] = @@ -1058,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] = @@ -1094,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, @@ -1121,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, @@ -1176,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, }; @@ -1227,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, @@ -1285,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, @@ -1376,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, }; @@ -1705,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, @@ -2083,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, @@ -2121,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, @@ -2277,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, }; @@ -2323,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] = @@ -2669,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, @@ -2696,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] = @@ -2743,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, }; @@ -2834,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, }; @@ -2904,7 +2968,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 +2984,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 +2997,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_002300, + scripts_Zyyy, /* 002200 */ + scripts_Zyyy, /* 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 +3019,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 +3201,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 +3220,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_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_01B100, + scripts_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 +3411,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_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 */ + 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 +3712,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/src/ucd-tools/src/tostring.c b/src/ucd-tools/src/tostring.c index 25852355..3d89d198 100644 --- a/src/ucd-tools/src/tostring.c +++ b/src/ucd-tools/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/src/ucd-tools/tests/printcdata.c b/src/ucd-tools/tests/printcdata.c index 686ef44a..36dd6b4b 100644 --- a/src/ucd-tools/tests/printcdata.c +++ b/src/ucd-tools/tests/printcdata.c @@ -17,6 +17,7 @@ * along with ucd-tools. If not, see . */ +#include "config.h" #include "ucd/ucd.h" #include @@ -25,7 +26,14 @@ #include #include -void fput_utf8c(FILE *out, codepoint_t c) +#ifndef HAVE_ISWBLANK +static int iswblank(wint_t c) +{ + return iswspace(c) && !(c >= 0x0A && c <= 0x0D); +} +#endif + +static void fput_utf8c(FILE *out, codepoint_t c) { if (c < 0x80) fputc((uint8_t)c, out); @@ -49,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; @@ -82,11 +90,11 @@ 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) { - case 'c': // character + case 'c': /* character */ switch (c) { case '\t': fputs("\\t", out); break; @@ -95,91 +103,91 @@ 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; } } -void uprintf_is(FILE *out, codepoint_t c, char mode) +static 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; } } -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) { 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 - uprintf_codepoint(out, towlower(c), *++format); + 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 - uprintf_codepoint(out, towupper(c), *++format); + case 'U': /* uppercase */ + uprintf_codepoint(out, ucd_toupper(c), *++format); break; } ++format; @@ -213,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)) @@ -224,7 +232,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 +259,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/src/ucd-tools/tests/printucddata.c b/src/ucd-tools/tests/printucddata.c index bdcb783f..9a623bf3 100644 --- a/src/ucd-tools/tests/printucddata.c +++ b/src/ucd-tools/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,11 +79,11 @@ 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) { - case 'c': // character + case 'c': /* character */ switch (c) { case '\t': fputs("\\t", out); break; @@ -92,90 +92,90 @@ 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; } } -void uprintf_is(FILE *out, codepoint_t c, char mode) +static 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; } } -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) { 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; } @@ -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)) @@ -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"); } diff --git a/src/ucd-tools/tools/case.py b/src/ucd-tools/tools/case.py index 7af5d55c..3c237a47 100755 --- a/src/ucd-tools/tools/case.py +++ b/src/ucd-tools/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/src/ucd-tools/tools/categories.py b/src/ucd-tools/tools/categories.py index 35dca2bf..c189adf1 100755 --- a/src/ucd-tools/tools/categories.py +++ b/src/ucd-tools/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(""" @@ -227,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; } } diff --git a/src/ucd-tools/tools/printdata.py b/src/ucd-tools/tools/printdata.py index 66fb31fa..ea306466 100755 --- a/src/ucd-tools/tools/printdata.py +++ b/src/ucd-tools/tools/printdata.py @@ -166,6 +166,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) # PropList 10.0.0 + props += (2 ** 38) * data.get('Emoji_Component', 0) # emoji-data 5.0 # eSpeak NG extended properties: props += (2 ** 52) * data.get('Inverted_Terminal_Punctuation', 0) props += (2 ** 53) * data.get('Punctuation_In_Word', 0) diff --git a/src/ucd-tools/tools/scripts.py b/src/ucd-tools/tools/scripts.py index 54fcfc6a..b6aaa752 100755 --- a/src/ucd-tools/tools/scripts.py +++ b/src/ucd-tools/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" @@ -152,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 @@ -249,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 @@ -278,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 @@ -285,7 +289,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 +327,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 +337,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') diff --git a/src/windows/config.h b/src/windows/config.h index 12b5e8c1..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-dev" +#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 @@ - + 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/api.c b/tests/api.c index b7cdacce..985b2543 100644 --- a/tests/api.c +++ b/tests/api.c @@ -28,10 +28,13 @@ #include "speech.h" #include "phoneme.h" +#include "voice.h" #include "synthesize.h" #include "translate.h" -void +// region espeak_Initialize + +static void test_espeak_terminate_without_initialize() { printf("testing espeak_Terminate without espeak_Initialize\n"); @@ -46,7 +49,7 @@ test_espeak_terminate_without_initialize() assert(p_decoder == NULL); } -void +static void test_espeak_initialize() { printf("testing espeak_Initialize\n"); @@ -66,7 +69,10 @@ test_espeak_initialize() assert(p_decoder == NULL); } -void +// endregion +// region espeak_Synth + +static void test_espeak_synth() { printf("testing espeak_Synth\n"); @@ -83,10 +89,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); @@ -95,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"); @@ -110,7 +118,7 @@ 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); @@ -124,9 +132,417 @@ test_espeak_synth_no_voices(const char *path) assert(p_decoder == NULL); } +// endregion +// region espeak_ng_Synthesize + +static 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); +} + +static 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); + + 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_SetVoiceByName + +static 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(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); +} + +static 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(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); +} + +static 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(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); + assert(event_list == NULL); + assert(translator == NULL); + assert(p_decoder == NULL); +} + +static 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); +} + +static 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 + +static 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, "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); +} + +static 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, "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); +} + +static 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); +} + +static 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 main(int argc, char **argv) { + (void)argc; // unused parameter + char *progdir = strdup(argv[0]); char *dir = strrchr(progdir, '/'); if (dir != NULL) *dir = 0; @@ -139,6 +555,22 @@ 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(); + 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(); + test_espeak_set_voice_by_properties_with_valid_language(); + test_espeak_set_voice_by_properties_with_invalid_language(); + free(progdir); return EXIT_SUCCESS; diff --git a/tests/encoding.c b/tests/encoding.c index 3a141051..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"); @@ -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/languages.test b/tests/languages.test index 5b8a4170..eba2b00e 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." + exit 1 +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 } diff --git a/tests/phoneme-output.test b/tests/phoneme-output.test new file mode 100755 index 00000000..b5dc1adb --- /dev/null +++ b/tests/phoneme-output.test @@ -0,0 +1,28 @@ +#!/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." + +# 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" "⁉ 🌈" diff --git a/tests/readclause.c b/tests/readclause.c index e0002c4d..673f28d1 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" @@ -41,7 +42,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) @@ -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"); @@ -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(); 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; -}