From b5347b9364914cc7af2fd3eb6070589c7b16f03b Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Thu, 18 Jan 2024 21:06:59 +0100 Subject: [PATCH 01/10] Decomposition tests for icu4x (#658) --- unicodetools/data/ucd/dev/NormalizationTest.txt | 4 +++- .../src/main/java/org/unicode/text/UCD/GenerateData.java | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/unicodetools/data/ucd/dev/NormalizationTest.txt b/unicodetools/data/ucd/dev/NormalizationTest.txt index 008613b90..c5a85ed4a 100644 --- a/unicodetools/data/ucd/dev/NormalizationTest.txt +++ b/unicodetools/data/ucd/dev/NormalizationTest.txt @@ -1,5 +1,5 @@ # NormalizationTest-16.0.0.txt -# Date: 2023-11-10, 20:57:38 GMT +# Date: 2024-01-18, 12:57:29 GMT # © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html @@ -66,6 +66,8 @@ 0592 05B7 05BC 05A5 05B0 05C0 05C4 05AD;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4; # (◌֒◌ַ◌ּ◌֥◌ְ׀◌ׄ◌֭; ◌ְ◌ַ◌ּ◌֥◌֒׀◌֭◌ׄ; ◌ְ◌ַ◌ּ◌֥◌֒׀◌֭◌ׄ; ◌ְ◌ַ◌ּ◌֥◌֒׀◌֭◌ׄ; ◌ְ◌ַ◌ּ◌֥◌֒׀◌֭◌ׄ; ) HEBREW ACCENT SEGOL, HEBREW POINT PATAH, HEBREW POINT DAGESH OR MAPIQ, HEBREW ACCENT MERKHA, HEBREW POINT SHEVA, HEBREW PUNCTUATION PASEQ, HEBREW MARK UPPER DOT, HEBREW ACCENT DEHI 1100 AC00 11A8;1100 AC01;1100 1100 1161 11A8;1100 AC01;1100 1100 1161 11A8; # (ᄀ각; ᄀ각; ᄀ각; ᄀ각; ᄀ각; ) HANGUL CHOSEONG KIYEOK, HANGUL SYLLABLE GA, HANGUL JONGSEONG KIYEOK 1100 AC00 11A8 11A8;1100 AC01 11A8;1100 1100 1161 11A8 11A8;1100 AC01 11A8;1100 1100 1161 11A8 11A8; # (ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ) HANGUL CHOSEONG KIYEOK, HANGUL SYLLABLE GA, HANGUL JONGSEONG KIYEOK, HANGUL JONGSEONG KIYEOK +01C4 0323;01C4 0323;01C4 0323;0044 1E92 030C;0044 005A 0323 030C; # (DŽ◌̣; DŽ◌̣; DŽ◌̣; DẒ◌̌; DZ◌̣◌̌; ) LATIN CAPITAL LETTER DZ WITH CARON, COMBINING DOT BELOW +0DDD 0334;0DDD 0334;0DD9 0DCF 0334 0DCA;0DDD 0334;0DD9 0DCF 0334 0DCA; # (ෝ◌̴; ෝ◌̴; ො◌̴◌්; ෝ◌̴; ො◌̴◌්; ) SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA, COMBINING TILDE OVERLAY # @Part1 # Character by character test # All characters not explicitly occurring in c1 of Part 1 have identical NFC, D, KC, KD forms. diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java index 42706826e..c073630fc 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java @@ -1051,6 +1051,13 @@ static final String comma(String s) { "\u0592\u05B7\u05BC\u05A5\u05B0\u05C0\u05C4\u05AD", "\u1100\uAC00\u11A8", "\u1100\uAC00\u11A8\u11A8", + // Some implementations have an edge case when a character whose + // decomposition contains multiple starters and ends with a non-starter + // is followed by a non-starter of lower CCC. + // See https://github.com/unicode-org/unicodetools/issues/656 + // and https://github.com/unicode-org/icu4x/pull/4530. + "\u01C4\u0323", + "\u0DDD\u0334", }; /* static final void backwardsCompat(String directory, String filename, int[] list) throws IOException { From 854fab965ce401b90930f38ad4490ec610b84a11 Mon Sep 17 00:00:00 2001 From: Mark Davis Date: Thu, 18 Jan 2024 17:52:58 -0700 Subject: [PATCH 02/10] Update pipeline.md (#638) * Update pipeline.md A couple of clarifications in the PR prep section * L2/yy-nnn Co-authored-by: Markus Scherer * Update pipeline.md * Update docs/pipeline.md Co-authored-by: Robin Leroy --------- Co-authored-by: Robin Leroy Co-authored-by: Markus Scherer --- docs/pipeline.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/pipeline.md b/docs/pipeline.md index f8df415c7..2d5da0764 100644 --- a/docs/pipeline.md +++ b/docs/pipeline.md @@ -58,10 +58,10 @@ Indic scripts only: --- PR preparation: -- [ ] Proposal document — Cite L2 number -- [ ] UTC decisions — Cite _in extenso_ +- [ ] When for a UTC decision — Cite in the format UTC-\d\d\d-[MC]\d+ +- [ ] Whenever there is a Proposal document — Cite L2 number in the format L2/yy-nnn - [ ] data-for-new — Set label -- [ ] pipeline-* — Set label +- [ ] pipeline-* — Set label to **pipeline-recommended-to-UTC** if the characters are not yet in the pipeline, and **pipeline-provisionally-assigned**, or **pipeline-``** depending on their status in [the Pipeline](https://unicode.org/alloc/Pipeline.html#future). - [ ] PR button — Set to DRAFT pull request - unless approved for the upcoming version - [ ] PR button — Press @@ -135,6 +135,13 @@ git add unicodetools/data git merge --continue ``` +macchiati (IDE) +``` +sync github +run MakeUnicodeFiles.java -c +``` +Cf. https://github.com/unicode-org/unicodetools/pull/636 + ### Regenerate UCD eggrobin (Windows, in-source). From fa7eadc78e6b88ced486abe6f3be911c2541ca5e Mon Sep 17 00:00:00 2001 From: Ned Holbrook Date: Thu, 18 Jan 2024 18:30:09 -0800 Subject: [PATCH 03/10] Update docRegistry.txt to end of 2023 (#655) --- .../org/unicode/tools/emoji/docRegistry.txt | 173 +++++++++++++++++- 1 file changed, 171 insertions(+), 2 deletions(-) diff --git a/unicodetools/src/main/resources/org/unicode/tools/emoji/docRegistry.txt b/unicodetools/src/main/resources/org/unicode/tools/emoji/docRegistry.txt index def2f43d3..15e0f79d9 100644 --- a/unicodetools/src/main/resources/org/unicode/tools/emoji/docRegistry.txt +++ b/unicodetools/src/main/resources/org/unicode/tools/emoji/docRegistry.txt @@ -9028,7 +9028,7 @@ L2/23-049 Proposed Update UAX #44, Unicode Character Database (HTML version) Ken L2/23-050 Proposed Update UAX #45, U-Source Ideographs (HTML version) John Jenkins 2023-01-20 L2/23-051 Proposed Update UTS #39, Unicode Security Mechanisms (HTML version) Mark Davis, Michel Suignard 2023-01-20 L2/23-052 Proposed Draft UTS #55, Unicode Source Code Handling (HTML version) Robin Leroy, Mark Davis 2023-01-20 -L2/23-053 Proposed Update UTS #51, Unicode Emoji (HTML version) Mark David, Ned Holbrook 2023-01-23 +L2/23-053 Proposed Update UTS #51, Unicode Emoji (HTML version) Mark Davis, Ned Holbrook 2023-01-23 L2/23-054 Requirements and Process for Changing Script Status for Identifier Use Asmus Freytag 2023-01-23 L2/23-055 Disunification of Tulu-Tigalari script & Invented Tulu Script Vaishnavi Murthy, Vinodh Rajan 2023-01-23 L2/23-056 Beyond Canonical Equivalence: A discussion on a way forward Lawrence Wolf-Sonkin 2023-01-23 @@ -9092,4 +9092,173 @@ L2/23-113 GB 18030-2022 Amendment, Draft 1 China NB 2023-04-26 L2/23-114 Proposal to encode 603 urgently needed ideographs in UCS Ken Lunde, USNB 2023-05-02 L2/23-115 USNB Comments on Draft 2 of GB 18030-2020 Amendment 1 and recommendation for ISO/IEC 10646:2022 Amendment 2 Peter Constable 2023-05-03 L2/23-116 Proposal to update Appendix F: Documentation of CJK Strokes in Unicode 16.0 Night Koo 2023-05-02 -L2/23-117 Handling of the Heh in Sindhi Text Kamal Mansour 2023-05-05 \ No newline at end of file +L2/23-117 Handling of the Heh in Sindhi Text Kamal Mansour 2023-05-05 +L2/23-118 Proposal for superscript katakana letters for Ryukyuan languages Gen Kojitani 2023-05-08 +L2/23-119 Core Spec note on click letters Kirk Miller 2023-05-15 +L2/23-120 Dot behavior for U+06CC ARABIC LETTER FARSI YEH followed by U+0654 ARABIC HAMZA ABOVE Lorna Evans 2023-05-15 +L2/23-121 Proposal to encode Arabic Letter Thin Noon Khaled Hosny, Mostafa Jbire 2023-05-17 +L2/23-122 Proposal to Encode Kashmiri Sharada Characters Vinodh Rajan 2023-05-17 +L2/23-123 Feedback on L2/23-118 (Proposal for superscript katakana letters for Ryukyuan languages) Eiso Chan 2023-05-25 +L2/23-124 Proposal to add one common character used for Duanxi inkstone to UAX #45 Eiso Chan 2023-05-25 +L2/23-125 ISO 12199 forward (ISO/TC 37/SC2 N 1071) TC37/SC2 2023-05-26 +L2/23-126 Proposal about adding 10 complex Hongmen related ideographs to UAX#45 Xieyang Wang (王谢杨) 2023-05-30 +L2/23-127 Introduction on two unencoded Katakana letters Eiso Chan 2023-05-31 +L2/23-128 Request for consideration to update kSBGY property in Unihan DB Eiso Chan 2023-06-06 +L2/23-129 Proposal to encode CID+15910 in Adobe-Japan1 as Latin small letter theta Nozomu Katō 2023-06-06 +L2/23-130 Proposal to add 36 ideographs for Japanese place names to UAX #45 Tsukada Masaki 2023-06-06 +L2/23-131 Hungarian FORINT SIGN - Response from Vacek Nules (revised) Deborah Anderson 2023-06-29 +L2/23-132 ISO/IEC JTC 1/SC 22 liaison report to UTC #175 Robin Leroy 2023-06-13 +L2/23-133 Revised 3 G-Source Glyphs China NB 2023-06-12 +L2/23-134 Revised proposal for the addition of LATIN CAPITAL LETTER TURNED W (WG2 N5224) Michael Everson 2023-06-14 +L2/23-135 Revised proposal to add two characters for Middle English (WG2 N5225) Michael Everson, Andrew West 2023-06-14 +L2/23-136 Preliminary proposal for encoding the Aiha script (WG2 N5226) Michael Everson 2023-06-16 +L2/23-137 Revised proposal to add the combining overcurl (WG2 N5227) Michael Everson, et al 2023-06-16 +L2/23-138 Preliminary proposal for encoding Blissymbols (WG2 N5228) Michael Everson 2023-06-23 +L2/23-139 Proposal to Encode Abbreviated Ideographs(Kanjis) in Japanese Gen Kojitani 2023-06-21 +L2/23-140 Setting expectations for grapheme clusters Norbert Lindenberg 2023-07-05 +L2/23-141 Required conjunct forms in extended grapheme clusters Norbert Lindenberg 2023-07-05 +L2/23-142 Proposal to Define Variation Sequences for Emoji Mapped to Legacy Computing Symbols Charlotte Buff 2023-06-26 +L2/23-143 Adding a self-referencing source reference "KU-03E02" to U+3E02 (WG2 N5198) Korea NB 2023-06-26 +L2/23-144 Request for Horizontal Extension in the J-column of ISO/IEC 10646 (WG2 N5221) Japan NB 2023-06-26 +L2/23-145 Recommendations from WG 2 meeting 70 (WG2 N5234) WG2 2023-06-26 +L2/23-146 Additional draft repertoire for 10646:2020 Amendment 2 and Unicode 16.0 (WG2 N5235) Michel Suignard 2023-06-26 +L2/23-147 Additional draft repertoire for provisionnally accepted code points for Unicode (post 16.0) and ISO/IEC 10646 (post Amendment 2) (WG2 N5236) Michel Suignard 2023-06-26 +L2/23-148 Glyph corrections for four Tangut ideographs (WG2 N5237) Andrew West 2023-06-26 +L2/23-149 Proposal to encode 2 Tangut components and 29 Tangut ideographs (WG2 N5217) Andrew West 2023-06-26 +L2/23-150 Proposal to encode 114 Tangut components (WG2 N5218) Andrew West 2023-06-26 +L2/23-151 SC2 Consent Docket Deborah Anderson 2023-06-27 +L2/23-152 IR Report from SC2 #28, June 2023 Deborah Anderson 2023-06-29 +L2/23-153 Opposition to and Comment on L2/23-107 Fredrick R. Brennan 2023-06-30 +L2/23-154 Revision of 622 UNCs of China (Feedback on WG2 N5214) (WG2 N5238) China NB 2023-07-05 +L2/23-155 Evidence for Glyph Forms of U+17121 and U+17C51 Andrew West 2023-07-05 +L2/23-156 UTC #176 Agenda Peter Constable 2023-07-20 +L2/23-157 UTC #176 Minutes Peter Constable 2023-07-28 +L2/23-158 Recently Closed Action Items (since 2023-04-06) Rick McGowan 2023-07-24 +L2/23-159 Comments on Public Review Issues (April 5 - July 4, 2023) Rick McGowan 2023-07-06 +L2/23-160 UTC #176 properties feedback & recommendations Markus Scherer, et al. 2023-07-17 +L2/23-161 Editorial Committee Report and Recommendations for UTC #176 Meeting EDC / Ken Whistler 2023-07-20 +L2/23-162 Emoji Subcommittee Report for UTC #176 (2023Q3) ESC / Jennifer Daniel 2023-07-18 +L2/23-163 CJK & Unihan Group Recommendations for UTC #176 Meeting Ken Lunde 2023-07-11 +L2/23-164 Recommendations to UTC #176 July 2023 on Script Proposals Deborah Anderson, et al 2023-07-21 +L2/23-165 SEI Liaison Report Deborah Anderson / SEI 2023-07-21 +L2/23-166 Glyph Image Chart to Review L2/22-279 Mapping (size: 76MB) Toshiya Suzuki 2023-07-10 +L2/23-167 Proposal to update representative glyph of U+3029 SUZHOU NUMERAL NINE Night Koo 2023-07-10 +L2/23-168 Proposed Update UAX #9, Unicode Bidirectional Algorithm (HTML version) Mark Davis, Ken Whistler 2023-07-10 +L2/23-169 Proposed Update UTS #10, Unicode Collation algorithm (HTML version) Ken Whistler, Markus Scherer 2023-07-10 +L2/23-170 Proposed Update UAX #14, Unicode Line Breaking Algorithm (HTML version) Robin Leroy 2023-07-10 +L2/23-171 Proposed Update UTS #18, Unicode Regular Expressions (HTML version) Mark Davis 2023-07-10 +L2/23-172 Proposed Update UAX #29, Unicode Text Segmentation (HTML version) Christopher Chapman 2023-07-10 +L2/23-173 Proposed Update UAX #38, Unicode Han Database (HTML version) Ken Lunde, Richard Cook 2023-07-10 +L2/23-174 Proposed Update UTS #39, Unicode Security Mechanisms (HTML version) Mark Davis, Michel Suignard 2023-07-10 +L2/23-175 Proposed Update UAX #41, Common References for Unicode Standard Annexes (HTML version) Ken Whistler, Rick McGowan 2023-07-10 +L2/23-176 Proposed Update UAX #44, Unicode Character Database (HTML version) Ken Whistler 2023-07-10 +L2/23-177 Proposed Update UAX #45, U-Source Ideographs (HTML version) Ken Lunde 2023-07-10 +L2/23-178 Proposed Update UTS #51, Unicode Emoji (HTML version) Mark Davis, Ned Holbrook 2023-07-10 +L2/23-179 Draft UTS #55, Unicode Source Code Handling (HTML version) Robin Leroy, Mark Davis 2023-07-10 +L2/23-180 Unicode PRI #476 - Background (LDML (UTS #35 Part 7: Keyboards) Steven Loomis 2023-07-10 +L2/23-181 Encoding proposal for an extended Egyptian Hieroglyphs repertoire (WG2 N5240) (Sign Database [pdf 38MB]) (revised) Michel Suignard 2023-12-29 +L2/23-182 Proposed Update UAX #31, Unicode Identifiers and Syntax (HTML version) Mark Davis, Robin Leroy 2023-07-11 +L2/23-183 Proposed Update UAX #42, Unicode Character Database in XML (HTML version) Eric Muller, Laurențiu Iancu 2023-07-11 +L2/23-184 Proposed Update UTS #46, Unicode IDNA Compatibility Processing Mark Davis, Michel Suignard 2023-07-11 +L2/23-185 Encoding proposal for two arrow symbols used in Egyptology Michel Suignard 2023-07-27 +L2/23-186 A note on cuneiform ligatures Robin Leroy 2023-07-11 +L2/23-187 Release Management Report Group Report to UTC #176 Peter Constable, UTC Release Management Group 2023-07-22 +L2/23-188 Unicode request for compound tone diacritics Kirk Miller 2023-09-21 +L2/23-189 Unicode request for IPA compound tone diacritic Kirk Miller 2023-07-17 +L2/23-190 Revised proposal to encode Proto-Cuneiform in Unicode Anshuman Pandey 2023-07-11 +L2/23-191 Proposal to Encode 3 Additional Latin Characters for Wakashan and Salishan Languages to the Unicode Standard Robyn Humchitt, Denis Jacquerye, Kevin King 2023-07-17 +L2/23-192 Unicode Conformance Model House Cleaning Asmus Freytag 2023-07-15 +L2/23-193 Proposal for Ten Chemical Symbols (revised) Neil Soiffer, Murray Sargent, Asmus Freytag 2023-11-14 +L2/23-194 Text Terminal Working Group Report to UTC #176 Dustin Howett 2023-07-27 +L2/23-195 Unicode liaison report to ISO/IEC JTC 1/SC 22 #42 Robin Leroy 2023-08-01 +L2/23-196 Proposal to encode Proto-Elamite in Unicode Anshuman Pandey 2023-08-21 +L2/23-197 Three Latin Lambdas for version 16.0 Request Kevin King 2023-08-29 +L2/23-198 Preliminary proposal for additions for Hei Yi to Miao block Eiso Chan 2023-08-29 +L2/23-199 Glyph correction for Khitan Small Script U+18BD2 Andrew West 2023-08-29 +L2/23-200 Invariants between Indic positional and syllabic categories and general category Norbert Lindenberg 2023-08-31 +L2/23-201 Remove ambiguity from D14 Noncharacters for Unicode 16.0 Asmus Freytag 2023-08-31 +L2/23-202 Proposal to encode one ideograph for Korean place names to UAX #45 Jiseop LEE 2023-09-06 +L2/23-203 Update on Usage and Implementation Status of African Scripts Oreen Yousuf, et al 2023-09-21 +L2/23-204 US/Unicode Activity Report for IRG #61 Meeting Ken Lunde 2023-09-19 +L2/23-205 Reordering virama Norbert Lindenberg 2023-09-25 +L2/23-206 Unicode request for Harrington diacritics (revised) Yoram Meroz, et al 2023-11-06 +L2/23-207 Unicode request for historical asteroid symbols Gavin Jared Bala, Kirk Miller 2023-09-25 +L2/23-208 Unicode request for compound tone diacritics II Kirk Miller 2023-09-25 +L2/23-209 Unihan property feedback for CJK Ext. I Eiso Chan 2023-09-27 +L2/23-210 Recommendation for UTR #53 to become a UAX Roozbeh Pournader, et al 2023-09-29 +L2/23-211 Proposal to add an RSIndex.txt data file to each release of the Unicode Standard Ken Lunde 2023-10-02 +L2/23-212 Proposal to add standardized variation sequences for four quotation marks (revised) Ken Lunde 2023-10-18 +L2/23-213 Proposal to add one common character used for one kind of bird in Cantonese to UAX #45 Eiso Chan 2023-10-02 +L2/23-214 Proposal to add one common character to mark the rhythm of Chinese traditional music to UAX #45 Eiso Chan 2023-10-02 +L2/23-215 Progress report on Loma language and script activity Charles L. Riley 2023-10-04 +L2/23-216 Revised request to change glyphs of four Kannada characters Srinidhi A, Sridatta A 2023-10-16 +L2/23-217 Summary of Script Extensions for Tulu-Tigalari Srinidhi A, Sridatta A 2023-10-04 +L2/23-218 Proposal to encode Geomantic Figures George Pollard 2023-10-04 +L2/23-219 Proposal to add two Latin pharyngeal voiced fricative characters Denis Moyogo Jacquerye 2023-10-04 +L2/23-220 Proposal to encode (disunify) two stroke characters in CJK Strokes block Night Koo 2023-10-05 +L2/23-221 Proposal to modify the representative glyph of U+31D2 CJK STROKE P Night Koo 2023-10-05 +L2/23-222 Proposal to Encode the Pabuchi Script Biswajit Mandal 2023-10-05 +L2/23-223 Preliminary Proposal to Encode the Kurux Banna Biswajit Mandal 2023-10-05 +L2/23-224 Next steps for ISO 12199 ISO/TC 37/SC 2 Scty 2023-10-05 +L2/23-225 Request to up date the G Source reference for U+320DD (IRG N2648) Eiso Chan, H. W. Ho 2023-10-08 +L2/23-226 Proposal to add one character used for ancient geographical name related to Mazu belief and customs to UAX #45 Eiso Chan 2023-10-08 +L2/23-227 Feedback on L2/23-167 (Proposal to update representative glyph of U+3029 SUZHOU NUMERAL NINE) Eiso Chan 2023-10-08 +L2/23-228 Updated List of Characters for Mayan Codices (supersedes L2/20-248) Carlos Pallán Gayol 2023-10-10 +L2/23-229 Proposed changes to PDUTR #56 Robin Leroy 2023-10-16 +L2/23-230 UTC #177 Agenda Peter Constable 2023-10-30 +L2/23-231 UTC #177 Minutes Peter Constable 2023-11-08 +L2/23-232 Recently Closed Action Items (since 2023-07-24) Rick McGowan 2023-10-26 +L2/23-233 Comments on Public Review Issues (July 4 - October 11, 2023) Rick McGowan 2023-10-26 +L2/23-234 UTC #177 properties feedback & recommendations Markus Scherer, et al. 2023-10-26 +L2/23-235 Editorial Committee Report and Recommendations for UTC #177 Meeting EDC / Ken Whistler 2023-10-26 +L2/23-236 Emoji Subcommittee Report for UTC #177 (2023Q4) (revised) ESC / Jennifer Daniel 2023-11-02 +L2/23-237 CJK & Unihan Group Recommendations for UTC #177 Meeting (revised) Ken Lunde 2023-11-02 +L2/23-238 Recommendations to UTC #177 November 2023 on Script Proposals (revised) Deborah Anderson, et al 2023-11-01 +L2/23-239 SEI Liaison Report Deborah Anderson / SEI 2023-10-25 +L2/23-240 IRG #61 Activity Report China NB 2023-10-16 +L2/23-241 Annotations for Kashmiri Yeh Manish Goregaokar (मनीष गोरेगांवकर) 2023-10-16 +L2/23-242 Proposal to Change Glyph of U+21128 (IRG N2651) Vietnam NB 2023-10-17 +L2/23-243 Request to confirm one unification for U+2C21C (IRG N2636) Eiso Chan 2023-10-17 +L2/23-244 Suggestions to correct representative glyphs of 4 CJKUIs (IRG N2616) Xieyang Wang 2023-10-18 +L2/23-245 Proposal to update the reference glyphs for 3 characters (IRG N2642) Kushim Jiang 2023-10-18 +L2/23-246 Proposal to encode 2 Tangut components and 28 Tangut ideographs (WG2 N5217R2) Andrew West 2023-10-18 +L2/23-247 Proposal to encode 114 Tangut components (WG2 N5218R2) Andrew West 2023-10-18 +L2/23-248 Proposal to encode Arabic Double Vertical Bar Below Lateef Sagar Shaikh 2023-10-19 +L2/23-249 Editorial Report on Miscellaneous Issues (IRG N2622) IRG 2023-10-19 +L2/23-250 IRG Meeting #61 Recommendations and Action Items (IRG N2620) IRG 2023-10-19 +L2/23-251 Corrections of existing kVietnamese values (data file embedded) Vietnam NB / Lee Collins, Alexandre Lê 2023-10-20 +L2/23-252 Proposal to disunify Symbols for Legacy Computing from emoji Rebecca Bettencourt, Doug Ewell 2023-10-20 +L2/23-253 Working draft of Proposed Draft Unicode Standard Annex #57: Egyptian Hieroglyph Database Michel Suignard 2023-10-24 +L2/23-254 Standardized Variation Sequences stability Michel Suignard 2023-10-24 +L2/23-255 Proposal for Leafless Tree Emoji Brian Baihaki 2023-10-24 +L2/23-256 Proposal for Emoji: HARP Mary Lattimore, Theo Schear 2023-10-24 +L2/23-257 Beet [emoji proposal] Thomas Woodside, Nicholas Beninato 2023-10-24 +L2/23-258 Proposal for Emoji: FINGERPRINT Gregory Fiumara, Rafaella Ferraro 2023-10-24 +L2/23-259 Proposal for Emoji: SHOVEL Justdiggit Foundation, Tim Dekens 2023-10-24 +L2/23-260 Proposal for Emoji Eye Bags Face Erin Collett 2023-10-24 +L2/23-261 Splash Emoji Aurora Zeng, Kamilé Demir 2023-10-24 +L2/23-262 Unicode request for letters with overstruck tilde Kirk Miller 2023-10-24 +L2/23-263 Status update on the Script Exemplars project Roozbeh Pournader 2023-10-25 +L2/23-264 Release Management Group Report to UTC #177 Peter Constable 2023-10-25 +L2/23-265 Proposal to maintain UCS repertoire via a maintenance agency Peter Constable 2023-10-30 +L2/23-266 Proposed Update UTR #53, Unicode Arabic Mark Rendering (HTML version) Roozbeh Pournader, et al 2023-10-30 +L2/23-267 Proposed Draft UTR #56, Unicode Cuneiform Sign Lists (HTML version) Robin Leroy 2023-10-30 +L2/23-268 Proposed Update UAX #38, Unicode Han Database (Unihan) (HTML version) Ken Lunde, Richard Cook 2023-10-30 +L2/23-269 Feedback on year-2022 proposed kMandarin changes/additions for 285 characters (per several UTC actions) Sharon Chen 2023-11-02 +L2/23-270 CLDR liaison report for UTC #177 Peter Edberg / CLDR-TC 2023-11-03 +L2/23-271 GB 18030-2022 Amendment, Draft 3 + Disposition of Comments, Draft 2 China NB 2023-11-28 +L2/23-272 Propose to Add Script_Extension for some CJK Punctuations CheonHyeong Sim 2023-11-20 +L2/23-273 Report on Kashmiri Yeh (revised) Manish Goregaokar 2024-01-02 +L2/23-274 Propose to Change BidiMirroring property for U+226D CheonHyeong Sim 2023-11-20 +L2/23-275 Proposal to add an annotation to BATAK LETTER KARO BA Ben Yang 2023-11-20 +L2/23-276 Unicode request for Stein-Zimmermann quarter-tone accidentals Gavin Jared Bala, Kirk Miller 2023-11-20 +L2/23-277 Unicode request for digits with slashes used in figured bass Gavin Jared Bala, Kirk Miller 2023-11-20 +L2/23-278 Unicode request for three musical symbols (revised) Gavin Jared Bala, Kirk Miller 2024-01-08 +L2/23-279 Bété (Ivorian alphabet) working document Adam Yeo, et al 2023-11-22 +L2/23-280 Request for additions to ScriptExtensions Roozbeh Pournader 2023-11-22 +L2/23-281 Update Suzhou numerals in CJK Symbols font (GitHub issue) Night Koo 2023-12-05 +L2/23-282 ISO/IEC CD 14651 (Ed.7), Information technology - International string ordering and comparison (SC2 N4890) SC2 2023-12-07 +L2/23-283 Proposal to add a property for auto inter-script spacing Koji Ishii, Yasuo Kida 2023-12-12 +L2/23-284 Proposal to encode two small form CJK characters for Chinese Andrew West, Eiso Chan 2023-12-13 +L2/23-285 Proposal to add one character used for one kind of Hakka snack to UAX #45 Eiso Chan 2023-12-19 +L2/23-286 Unicode core spec improvements for variation selectors Markus Scherer, et al 2023-12-28 \ No newline at end of file From bf38a00395be93b6dbda3fbb2b7655367e6f6423 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Fri, 19 Jan 2024 22:27:32 +0100 Subject: [PATCH 04/10] Another script from the future (#660) Co-authored-by: Markus Scherer --- .../src/main/java/org/unicode/text/UCD/UCD_Names.java | 2 ++ .../src/main/java/org/unicode/text/UCD/UCD_Types.java | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/UCD_Names.java b/unicodetools/src/main/java/org/unicode/text/UCD/UCD_Names.java index 0f12b0ffc..e91b1ffba 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/UCD_Names.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/UCD_Names.java @@ -427,6 +427,7 @@ public final class UCD_Names implements UCD_Types { "Sidetic", "Tai_Yo", "Tolong_Siki", + "Beria_Erfe", }; public static final Relation EXTRA_SCRIPT = @@ -624,6 +625,7 @@ public final class UCD_Names implements UCD_Types { "Sidt", "Tayo", "Tols", + "Qaba", // Beria Erfe }; static final String[] SHORT_AGE = { diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/UCD_Types.java b/unicodetools/src/main/java/org/unicode/text/UCD/UCD_Types.java index 972753c37..5a6652a42 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/UCD_Types.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/UCD_Types.java @@ -607,12 +607,13 @@ public interface UCD_Types { Sunuwar = 170, Todhri = 171, Tulu_Tigalari = 172, - // Provisionally assigned + // Provisionally assigned or proposed Chisoi = 173, Sidetic = 174, Tai_Yo = 175, Tolong_Siki = 176, - LIMIT_SCRIPT = Tolong_Siki + 1; + Beria_Erfe = 177, + LIMIT_SCRIPT = Beria_Erfe + 1; // Bidi_Paired_Bracket_Type public static final byte BPT_N = 0, BPT_O = 1, BPT_C = 2, LIMIT_BPT = 3; From fdc9c956e0813a7d572d5818c136239ca5275ca2 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Sat, 20 Jan 2024 01:59:21 +0100 Subject: [PATCH 05/10] Fix the IndexUnicodeProperties Joining_Type (#657) --- .../java/org/unicode/props/UcdProperty.java | 3 ++ .../org/unicode/props/UcdPropertyValues.java | 34 +++++++++++++++++++ .../unicode/props/ExtraPropertyAliases.txt | 3 ++ .../props/ExtraPropertyValueAliases.txt | 11 ++++-- .../unicode/props/IndexUnicodeProperties.txt | 5 ++- .../unicode/text/UCD/UnicodeInvariantTest.txt | 11 ++++++ .../org/unicode/propstest/TestProperties.java | 29 ---------------- 7 files changed, 64 insertions(+), 32 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/props/UcdProperty.java b/unicodetools/src/main/java/org/unicode/props/UcdProperty.java index 750beb165..cd60a6623 100644 --- a/unicodetools/src/main/java/org/unicode/props/UcdProperty.java +++ b/unicodetools/src/main/java/org/unicode/props/UcdProperty.java @@ -29,6 +29,7 @@ import org.unicode.props.UcdPropertyValues.NFKC_Quick_Check_Values; import org.unicode.props.UcdPropertyValues.NFKD_Quick_Check_Values; import org.unicode.props.UcdPropertyValues.Numeric_Type_Values; +import org.unicode.props.UcdPropertyValues.Other_Joining_Type_Values; import org.unicode.props.UcdPropertyValues.Script_Values; import org.unicode.props.UcdPropertyValues.Sentence_Break_Values; import org.unicode.props.UcdPropertyValues.Vertical_Orientation_Values; @@ -241,6 +242,8 @@ public enum UcdProperty { NFKC_Quick_Check(PropertyType.Enumerated, NFKC_Quick_Check_Values.class, null, "NFKC_QC"), NFKD_Quick_Check(PropertyType.Enumerated, NFKD_Quick_Check_Values.class, null, "NFKD_QC"), Numeric_Type(PropertyType.Enumerated, Numeric_Type_Values.class, null, "nt"), + Other_Joining_Type( + PropertyType.Enumerated, Other_Joining_Type_Values.class, null, "Other_Joining_Type"), Sentence_Break(PropertyType.Enumerated, Sentence_Break_Values.class, null, "SB"), Vertical_Orientation(PropertyType.Enumerated, Vertical_Orientation_Values.class, null, "vo"), Word_Break(PropertyType.Enumerated, Word_Break_Values.class, null, "WB"), diff --git a/unicodetools/src/main/java/org/unicode/props/UcdPropertyValues.java b/unicodetools/src/main/java/org/unicode/props/UcdPropertyValues.java index 64f818680..4307bf30f 100644 --- a/unicodetools/src/main/java/org/unicode/props/UcdPropertyValues.java +++ b/unicodetools/src/main/java/org/unicode/props/UcdPropertyValues.java @@ -1708,6 +1708,40 @@ public static Numeric_Type_Values forName(String name) { } // Numeric_Value + public enum Other_Joining_Type_Values implements Named { + Join_Causing("C"), + Dual_Joining("D"), + Left_Joining("L"), + Right_Joining("R"), + Transparent("T"), + Non_Joining("U"), + Deduce_From_General_Category("Deduce_From_General_Category"); + private final PropertyNames names; + + private Other_Joining_Type_Values(String shortName, String... otherNames) { + names = + new PropertyNames( + Other_Joining_Type_Values.class, this, shortName, otherNames); + } + + @Override + public PropertyNames getNames() { + return names; + } + + @Override + public String getShortName() { + return names.getShortName(); + } + + private static final NameMatcher NAME_MATCHER = + PropertyNames.getNameToEnums(Other_Joining_Type_Values.class); + + public static Other_Joining_Type_Values forName(String name) { + return NAME_MATCHER.get(name); + } + } + public enum Script_Values implements Named { Adlam("Adlm"), Caucasian_Albanian("Aghb"), diff --git a/unicodetools/src/main/resources/org/unicode/props/ExtraPropertyAliases.txt b/unicodetools/src/main/resources/org/unicode/props/ExtraPropertyAliases.txt index 25bb25675..6f023eeba 100644 --- a/unicodetools/src/main/resources/org/unicode/props/ExtraPropertyAliases.txt +++ b/unicodetools/src/main/resources/org/unicode/props/ExtraPropertyAliases.txt @@ -27,6 +27,9 @@ idtype ; Identifier_Type idns ; Idn_Status idn8 ; Idn_2008 +# Unofficial contributory property used in the derivation of Joining_Type. +Other_Joining_Type ; Other_Joining_Type + # ================================================ # String Properties # ================================================ diff --git a/unicodetools/src/main/resources/org/unicode/props/ExtraPropertyValueAliases.txt b/unicodetools/src/main/resources/org/unicode/props/ExtraPropertyValueAliases.txt index f61c06c4a..beca905c4 100644 --- a/unicodetools/src/main/resources/org/unicode/props/ExtraPropertyValueAliases.txt +++ b/unicodetools/src/main/resources/org/unicode/props/ExtraPropertyValueAliases.txt @@ -96,7 +96,6 @@ # @missing: 0000..10FFFF; kTraditionalVariant ; # @missing: 0000..10FFFF; Joining_Group ; No_Joining_Group -# @missing: 0000..10FFFF; Joining_Type ; Non_Joining # Overrides for bugs @@ -124,7 +123,6 @@ idn8 ; na ; na # @missing: 0000..10FFFF; Idn_Mapping ; - # @missing: 0000..10FFFF; Identifier_Status ; r idstatus ; r ; Restricted @@ -162,3 +160,12 @@ sc ; Zxxx ; Unwritten # TODO: there is no Unicode 13.1, see https://github.com/unicode-org/unicodetools/issues/100 age; 13.1 ; V13_1 + +# @missing: 0000..10FFFF; Other_Joining_Type ; Deduce_From_General_Category +Other_Joining_Type ; C ; Join_Causing +Other_Joining_Type ; D ; Dual_Joining +Other_Joining_Type ; L ; Left_Joining +Other_Joining_Type ; R ; Right_Joining +Other_Joining_Type ; T ; Transparent +Other_Joining_Type ; U ; Non_Joining +Other_Joining_Type ; Deduce_From_General_Category ; Deduce_From_General_Category \ No newline at end of file diff --git a/unicodetools/src/main/resources/org/unicode/props/IndexUnicodeProperties.txt b/unicodetools/src/main/resources/org/unicode/props/IndexUnicodeProperties.txt index 5e1b020aa..60b93500b 100644 --- a/unicodetools/src/main/resources/org/unicode/props/IndexUnicodeProperties.txt +++ b/unicodetools/src/main/resources/org/unicode/props/IndexUnicodeProperties.txt @@ -92,7 +92,10 @@ UnicodeData; Simple_Lowercase_Mapping ; 13 UnicodeData; Simple_Titlecase_Mapping ; 14 UnicodeData; Unicode_1_Name ; 10 UnicodeData; ISO_Comment ; 11 -ArabicShaping; Joining_Type; 2 +# Handle the complex default of ArabicShaping.txt by introducing an unofficial +# contributory property, to be used when deriving Joining_Type. +ArabicShaping; Other_Joining_Type; 2 +DerivedJoiningType; Joining_Type; 1 ArabicShaping; Joining_Group; 3 BidiMirroring; Bidi_Mirroring_Glyph; Blocks ; Block diff --git a/unicodetools/src/main/resources/org/unicode/text/UCD/UnicodeInvariantTest.txt b/unicodetools/src/main/resources/org/unicode/text/UCD/UnicodeInvariantTest.txt index 34928fd9f..76ae34cb6 100644 --- a/unicodetools/src/main/resources/org/unicode/text/UCD/UnicodeInvariantTest.txt +++ b/unicodetools/src/main/resources/org/unicode/text/UCD/UnicodeInvariantTest.txt @@ -546,6 +546,17 @@ Let $nonAlphabeticDependentVowels = [\N{ORIYA SIGN OVERLINE}\N{THAI CHARACTER MA Let $nonDiacriticNuktas = [\u1BE6\U00010A38\U00010A39\U00010A3A\U0001133B] [\p{InSc=Nukta} - \p{Diacritic}] = $nonDiacriticNuktas +## Joining_Type and Joining_Group +# Where defined, the Joining_Group refines the Joining_Type. +EquivalencesOf \P{Joining_Group=No_Joining_Group} Joining_Group ⇒ Joining_Type +\p{gc=Mn} ⊆ \p{Joining_Type=Transparent} +\p{gc=Me} ⊆ \p{Joining_Type=Transparent} + +# Derivation of Joining_Type from the second column of ArabicShaping.txt (unofficially Other_Joining_Type). +In \P{Other_Joining_Type=Deduce_From_General_Category} Joining_Type = Other_Joining_Type +[ \p{Other_Joining_Type=Deduce_From_General_Category} & [\p{gc=Mn}\p{gc=Me}\p{gc=Cf}] ] ⊆ \p{Joining_Type=Transparent} +[ \p{Other_Joining_Type=Deduce_From_General_Category} - [\p{gc=Mn}\p{gc=Me}\p{gc=Cf}] ] ⊆ \p{Joining_Type=Non_Joining} + ########################## # LineBreak property ########################## diff --git a/unicodetools/src/test/java/org/unicode/propstest/TestProperties.java b/unicodetools/src/test/java/org/unicode/propstest/TestProperties.java index 8f8a246c7..eecdd5219 100644 --- a/unicodetools/src/test/java/org/unicode/propstest/TestProperties.java +++ b/unicodetools/src/test/java/org/unicode/propstest/TestProperties.java @@ -214,35 +214,6 @@ public void TestAAScripts() { } } - @Test - public void TestJoiningGroupConsistency() { - // TODO(egg): I would like to be able to put that in the invariants tests as « the partition - // defined by Joining_Group is finer than that defined by Joining_Type ». - UnicodeMap joiningGroup = iup.load(UcdProperty.Joining_Group); - UnicodeMap joiningType = iup.load(UcdProperty.Joining_Type); - var charactersByJoiningGroup = new HashMap(); - joiningGroup.addInverseTo(charactersByJoiningGroup).remove("No_Joining_Group"); - charactersByJoiningGroup.forEach( - (group, set) -> { - final int first = set.getRangeStart(0); - final String firstType = joiningType.get(first); - set.forEach( - (c) -> { - assertEquals( - "U+" - + getCodeAndName(Character.toString(first)) - + "\nand\nU+" - + getCodeAndName(c) - + "\nhave different joining types but are in the" - + " same joining group (" - + group - + ")\n", - firstType, - joiningType.get(c)); - }); - }); - } - @Test public void TestScripts() { From b4bae46211e47f445a930f529c36ad7563cbd7a3 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Sat, 20 Jan 2024 15:13:39 +0100 Subject: [PATCH 06/10] There can only be one MySymbolTable (#667) Whose symbol table? --- .../java/org/unicode/jsp/MySymbolTable.java | 225 ------------------ .../unicode/propstest/TestXUnicodeSet.java | 49 ---- 2 files changed, 274 deletions(-) delete mode 100644 unicodetools/src/main/java/org/unicode/jsp/MySymbolTable.java delete mode 100644 unicodetools/src/test/java/org/unicode/propstest/TestXUnicodeSet.java diff --git a/unicodetools/src/main/java/org/unicode/jsp/MySymbolTable.java b/unicodetools/src/main/java/org/unicode/jsp/MySymbolTable.java deleted file mode 100644 index 5ba954e1d..000000000 --- a/unicodetools/src/main/java/org/unicode/jsp/MySymbolTable.java +++ /dev/null @@ -1,225 +0,0 @@ -package org.unicode.jsp; - -import com.ibm.icu.text.UTF16; -import com.ibm.icu.text.UnicodeSet; -import java.util.Comparator; -import java.util.List; -import org.unicode.props.UnicodeProperty; - -public class MySymbolTable extends UnicodeSet.XSymbolTable { - private UnicodeRegex unicodeRegex; - private UnicodeProperty.Factory factory; - - public MySymbolTable(UnicodeProperty.Factory propertyFactory) { - factory = propertyFactory; - unicodeRegex = new UnicodeRegex().setSymbolTable(this); - } - - // public boolean applyPropertyAlias0(String propertyName, - // String propertyValue, UnicodeSet result) { - // if (!propertyName.contains("*")) { - // return applyPropertyAlias(propertyName, propertyValue, result); - // } - // String[] propertyNames = propertyName.split("[*]"); - // for (int i = propertyNames.length - 1; i >= 0; ++i) { - // String pname = propertyNames[i]; - // - // } - // return null; - // } - - public boolean applyPropertyAlias( - String propertyName, String propertyValue, UnicodeSet result) { - boolean status = false; - boolean invert = false; - int posNotEqual = propertyName.indexOf('\u2260'); - int posColon = propertyName.indexOf(':'); - if (posNotEqual >= 0 || posColon >= 0) { - if (posNotEqual < 0) posNotEqual = propertyName.length(); - if (posColon < 0) posColon = propertyName.length(); - int opPos = posNotEqual < posColon ? posNotEqual : posColon; - propertyValue = - propertyValue.length() == 0 - ? propertyName.substring(opPos + 1) - : propertyName.substring(opPos + 1) + "=" + propertyValue; - propertyName = propertyName.substring(0, opPos); - if (posNotEqual < posColon) { - invert = true; - } - } - if (propertyName.endsWith("!")) { - propertyName = propertyName.substring(0, propertyName.length() - 1); - invert = !invert; - } - propertyValue = propertyValue.trim(); - if (propertyValue.length() != 0) { - status = applyPropertyAlias0(propertyName, propertyValue, result); - } else { - try { - status = applyPropertyAlias0("gc", propertyName, result); - } catch (Exception e) { - } - ; - if (!status) { - try { - status = applyPropertyAlias0("sc", propertyName, result); - } catch (Exception e) { - } - ; - if (!status) { - try { - status = applyPropertyAlias0(propertyName, "Yes", result); - } catch (Exception e) { - } - ; - if (!status) { - status = applyPropertyAlias0(propertyName, "", result); - } - } - } - } - if (status && invert) { - result.complement(); - } - return status; - } - - public boolean applyPropertyAlias0( - String propertyName, String propertyValue, UnicodeSet result) { - result.clear(); - UnicodeProperty.PatternMatcher patternMatcher = null; - if (propertyValue.length() > 1 - && propertyValue.startsWith("/") - && propertyValue.endsWith("/")) { - String fixedRegex = - unicodeRegex.transform(propertyValue.substring(1, propertyValue.length() - 1)); - patternMatcher = new UnicodeProperty.RegexMatcher().set(fixedRegex); - } - UnicodeProperty otherProperty = null; - boolean testCp = false; - if (propertyValue.length() > 1 - && propertyValue.startsWith("@") - && propertyValue.endsWith("@")) { - String otherPropName = propertyValue.substring(1, propertyValue.length() - 1).trim(); - if ("cp".equalsIgnoreCase(otherPropName)) { - testCp = true; - } else { - otherProperty = factory.getProperty(otherPropName); - } - } - boolean isAge = UnicodeProperty.equalNames("age", propertyName); - UnicodeProperty prop = factory.getProperty(propertyName); - if (prop != null) { - UnicodeSet set; - if (testCp) { - set = new UnicodeSet(); - for (int i = 0; i <= 0x10FFFF; ++i) { - if (UnicodeProperty.equals(i, prop.getValue(i))) { - set.add(i); - } - } - } else if (otherProperty != null) { - set = new UnicodeSet(); - for (int i = 0; i <= 0x10FFFF; ++i) { - String v1 = prop.getValue(i); - String v2 = otherProperty.getValue(i); - if (UnicodeProperty.equals(v1, v2)) { - set.add(i); - } - } - } else if (patternMatcher == null) { - if (!isValid(prop, propertyValue)) { - throw new IllegalArgumentException( - "The value '" - + propertyValue - + "' is illegal. Values for " - + propertyName - + " must be in " - + prop.getAvailableValues() - + " or in " - + prop.getValueAliases()); - } - if (isAge) { - set = - prop.getSet( - new ComparisonMatcher( - propertyValue, ComparisonMatcher.Relation.geq)); - } else { - set = prop.getSet(propertyValue); - } - } else if (isAge) { - set = new UnicodeSet(); - List values = prop.getAvailableValues(); - for (String value : values) { - if (patternMatcher.test(value)) { - for (String other : values) { - if (other.compareTo(value) <= 0) { - set.addAll(prop.getSet(other)); - } - } - } - } - } else { - set = prop.getSet(patternMatcher); - } - result.addAll(set); - return true; - } - throw new IllegalArgumentException("Illegal property: " + propertyName); - } - - private boolean isValid(UnicodeProperty prop, String propertyValue) { - // if (prop.getName().equals("General_Category")) { - // if (propertyValue) - // } - return prop.isValidValue(propertyValue); - } - - public static class ComparisonMatcher implements UnicodeProperty.PatternMatcher { - Relation relation; - - enum Relation { - less, - leq, - equal, - geq, - greater - } - - static Comparator comparator = new UTF16.StringComparator(true, false, 0); - - String pattern; - - public ComparisonMatcher(String pattern, Relation comparator) { - this.relation = comparator; - this.pattern = pattern; - } - - @Override - public boolean test(String value) { - int comp = comparator.compare(pattern, value.toString()); - switch (relation) { - case less: - return comp < 0; - case leq: - return comp <= 0; - default: - return comp == 0; - case geq: - return comp >= 0; - case greater: - return comp > 0; - } - } - - public UnicodeProperty.PatternMatcher set(String pattern) { - this.pattern = pattern; - return this; - } - } - - public static void setDefaultXSymbolTable(UnicodeProperty.Factory factory) { - UnicodeSet.setDefaultXSymbolTable(new MySymbolTable(factory)); - UnicodeProperty.ResetCacheProperties(); - } -} diff --git a/unicodetools/src/test/java/org/unicode/propstest/TestXUnicodeSet.java b/unicodetools/src/test/java/org/unicode/propstest/TestXUnicodeSet.java deleted file mode 100644 index a75e6e17f..000000000 --- a/unicodetools/src/test/java/org/unicode/propstest/TestXUnicodeSet.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.unicode.propstest; - -import com.ibm.icu.text.UnicodeSet; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.unicode.jsp.MySymbolTable; -import org.unicode.props.IndexUnicodeProperties; -import org.unicode.props.UnicodeProperty; -import org.unicode.text.UCD.Default; -import org.unicode.unittest.TestFmwkMinusMinus; - -public class TestXUnicodeSet extends TestFmwkMinusMinus { - private static final UnicodeProperty name; - private static final UnicodeProperty age; - private static IndexUnicodeProperties IUP = IndexUnicodeProperties.make(Default.ucdVersion()); - - static { - name = IUP.getProperty("name"); - age = IUP.getProperty("age"); - for (String prop : IUP.getAvailableNames()) { - // System.out.println(prop); - UnicodeProperty property = IUP.getProperty(prop); - } - } - - @Disabled("Broken") - @Test - public void TestAge() { - try { - MySymbolTable.setDefaultXSymbolTable(IUP); - - UnicodeSet v70 = new UnicodeSet("[:age=7.0:]").complement().complement(); - UnicodeSet v63 = new UnicodeSet("[:age=6.3:]").complement().complement(); - assertNotEquals("", UnicodeSet.EMPTY, v70); - assertNotEquals("", 0, v70.size()); - assertNotEquals("", 0, v63.size()); - // for (String s : new UnicodeSet("[[:age=7.0:]-[:age=6.3:]]")) { - // System.out.println(Utility.hex(s) + "\t" + - // name.getValue(s.codePointAt(0))); - // } - // for (String s : new UnicodeSet("[:name=/MARK/:]")) { - // System.out.println(Utility.hex(s) + "\t" + age.getValue(s.codePointAt(0)) - // + "\t" + name.getValue(s.codePointAt(0))); - // } - } finally { - MySymbolTable.setDefaultXSymbolTable(null); - } - } -} From 1e0654cfe567338e29a8733a921caa826257f828 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 22 Jan 2024 23:30:57 +0100 Subject: [PATCH 07/10] Warn about DerivedAge.txt for characters not yet in the pipeline (#668) --- py/pipeline-workflow/check-draft-status.py | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/py/pipeline-workflow/check-draft-status.py b/py/pipeline-workflow/check-draft-status.py index c1bd2e091..8e37f3945 100644 --- a/py/pipeline-workflow/check-draft-status.py +++ b/py/pipeline-workflow/check-draft-status.py @@ -7,11 +7,40 @@ with open("unicodetools/data/ucd/dev/DerivedAge.txt", 'r') as f: version = f.readline().strip().replace("# DerivedAge-", "").replace(".0.txt", "") +PROVISIONALLY_ASSIGNED_AGE_NOTICE = f"""\ +While the Unicode Technical Committee has provisionally assigned these +characters, they have not been accepted for Unicode {version}, nor for any +specific version of Unicode. + +The Age property values for new characters are likely incorrect right +now. They will be recomputed after the UTC accepts their encoding and +this pull request is updated for the target version. +""".replace("\n", "%0A") + +UNREVIEWED_AGE_NOTICE = f"""\ +These characters are neither accepted for Unicode {version}, nor for any +specific version of Unicode, nor are they provisionally assigned. + + +The Age property values for new characters are likely incorrect right +now. They will be recomputed after the UTC accepts their encoding and +this pull request is updated for the target version. +""".replace("\n", "%0A") + if pipeline_label != "pipeline-" + version: with open(os.environ['GITHUB_EVENT_PATH'], 'r') as f: event = json.load(f) print(event) draft = event['pull_request']['draft'] + # Caution the reader that the Age values are placeholders. + if pipeline_label == "pipeline-provisionally-assigned": + print("::warning file=unicodetools/data/ucd/dev/DerivedAge.txt," + f"title=Not in the {version} pipeline::" + + PROVISIONALLY_ASSIGNED_AGE_NOTICE) + else: # Not even provisionally assigned. + print("::warning file=unicodetools/data/ucd/dev/DerivedAge.txt," + f"title=Not in the {version} pipeline::" + + UNREVIEWED_AGE_NOTICE) if not draft: print("::error title=PR must be draft::" "PRs for character additions must be draft unless approved for " From 51c579b1445fb9766fe3d8cab5942e90d53466a2 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 22 Jan 2024 23:44:55 +0100 Subject: [PATCH 08/10] 16.0 normalization woes (#619) --- .../ucd/dev/DerivedNormalizationProps.txt | 22 +- .../data/ucd/dev/NormalizationTest.txt | 781 +++++++++++++++++- .../data/ucd/dev/PropertyValueAliases.txt | 2 +- .../org/unicode/text/UCD/GenerateData.java | 269 +++++- .../java/org/unicode/text/UCD/Normalizer.java | 7 +- .../org/unicode/propstest/TestProperties.java | 127 +++ 6 files changed, 1193 insertions(+), 15 deletions(-) diff --git a/unicodetools/data/ucd/dev/DerivedNormalizationProps.txt b/unicodetools/data/ucd/dev/DerivedNormalizationProps.txt index 797dfb763..9f9b4f9d3 100644 --- a/unicodetools/data/ucd/dev/DerivedNormalizationProps.txt +++ b/unicodetools/data/ucd/dev/DerivedNormalizationProps.txt @@ -1,5 +1,5 @@ # DerivedNormalizationProps-16.0.0.txt -# Date: 2023-11-10, 20:57:25 GMT +# Date: 2024-01-07, 05:05:34 GMT # © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html @@ -1167,17 +1167,17 @@ FB46..FB4E ; NFC_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LET 113B8 ; NFC_QC; M # Mc TULU-TIGALARI VOWEL SIGN AA 113BB ; NFC_QC; M # Mn TULU-TIGALARI VOWEL SIGN U 113C2 ; NFC_QC; M # Mc TULU-TIGALARI VOWEL SIGN EE -113C9 ; NFC_QC; M # Mc TULU-TIGALARI AU LENGTH MARK +113C5 ; NFC_QC; M # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113C9 ; NFC_QC; M # Mc [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK 114B0 ; NFC_QC; M # Mc TIRHUTA VOWEL SIGN AA 114BA ; NFC_QC; M # Mn TIRHUTA VOWEL SIGN SHORT E 114BD ; NFC_QC; M # Mc TIRHUTA VOWEL SIGN SHORT O 115AF ; NFC_QC; M # Mc SIDDHAM VOWEL SIGN AA 11930 ; NFC_QC; M # Mc DIVES AKURU VOWEL SIGN AA -1611E..16120 ; NFC_QC; M # Mn [3] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL SIGN II -16129 ; NFC_QC; M # Mn GURUNG KHEMA VOWEL LENGTH MARK -16D67 ; NFC_QC; M # Lo KIRAT RAI VOWEL SIGN E +1611E..16129 ; NFC_QC; M # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +16D67..16D68 ; NFC_QC; M # Lo [2] KIRAT RAI VOWEL SIGN E..KIRAT RAI VOWEL SIGN AI -# Total code points: 120 +# Total code points: 132 # ================================================ @@ -2211,17 +2211,17 @@ FFED..FFEE ; NFKC_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI 113B8 ; NFKC_QC; M # Mc TULU-TIGALARI VOWEL SIGN AA 113BB ; NFKC_QC; M # Mn TULU-TIGALARI VOWEL SIGN U 113C2 ; NFKC_QC; M # Mc TULU-TIGALARI VOWEL SIGN EE -113C9 ; NFKC_QC; M # Mc TULU-TIGALARI AU LENGTH MARK +113C5 ; NFKC_QC; M # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113C9 ; NFKC_QC; M # Mc [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK 114B0 ; NFKC_QC; M # Mc TIRHUTA VOWEL SIGN AA 114BA ; NFKC_QC; M # Mn TIRHUTA VOWEL SIGN SHORT E 114BD ; NFKC_QC; M # Mc TIRHUTA VOWEL SIGN SHORT O 115AF ; NFKC_QC; M # Mc SIDDHAM VOWEL SIGN AA 11930 ; NFKC_QC; M # Mc DIVES AKURU VOWEL SIGN AA -1611E..16120 ; NFKC_QC; M # Mn [3] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL SIGN II -16129 ; NFKC_QC; M # Mn GURUNG KHEMA VOWEL LENGTH MARK -16D67 ; NFKC_QC; M # Lo KIRAT RAI VOWEL SIGN E +1611E..16129 ; NFKC_QC; M # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +16D67..16D68 ; NFKC_QC; M # Lo [2] KIRAT RAI VOWEL SIGN E..KIRAT RAI VOWEL SIGN AI -# Total code points: 120 +# Total code points: 132 # ================================================ diff --git a/unicodetools/data/ucd/dev/NormalizationTest.txt b/unicodetools/data/ucd/dev/NormalizationTest.txt index c5a85ed4a..f8445b262 100644 --- a/unicodetools/data/ucd/dev/NormalizationTest.txt +++ b/unicodetools/data/ucd/dev/NormalizationTest.txt @@ -1,5 +1,5 @@ # NormalizationTest-16.0.0.txt -# Date: 2024-01-18, 12:57:29 GMT +# Date: 2024-01-20, 01:49:31 GMT # © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html @@ -19226,4 +19226,783 @@ D750 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5;D750 0334 11B5;1112 1173 0334 16D67 0334 16D67;16D67 0334 16D67;16D67 0334 16D67;16D67 0334 16D67;16D67 0334 16D67; # (𖵧◌̴𖵧; 𖵧◌̴𖵧; 𖵧◌̴𖵧; 𖵧◌̴𖵧; 𖵧◌̴𖵧; ) KIRAT RAI VOWEL SIGN E, COMBINING TILDE OVERLAY, KIRAT RAI VOWEL SIGN E 16D69 0334 16D67;16D69 0334 16D67;16D63 16D67 0334 16D67;16D69 0334 16D67;16D63 16D67 0334 16D67; # (𖵩◌̴𖵧; 𖵩◌̴𖵧; 𖵩◌̴𖵧; 𖵩◌̴𖵧; 𖵩◌̴𖵧; ) KIRAT RAI VOWEL SIGN O, COMBINING TILDE OVERLAY, KIRAT RAI VOWEL SIGN E # +@Part4 # Canonical closures (excluding Hangul) +# +00DC 0304;01D5;0055 0308 0304;01D5;0055 0308 0304; # (Ü◌̄; Ǖ; U◌̈◌̄; Ǖ; U◌̈◌̄; ) LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON +00FC 0304;01D6;0075 0308 0304;01D6;0075 0308 0304; # (ü◌̄; ǖ; u◌̈◌̄; ǖ; u◌̈◌̄; ) LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON +0055 0344;01D7;0055 0308 0301;01D7;0055 0308 0301; # (U◌̈́; Ǘ; U◌̈◌́; Ǘ; U◌̈◌́; ) LATIN CAPITAL LETTER U, COMBINING GREEK DIALYTIKA TONOS +00DC 0301;01D7;0055 0308 0301;01D7;0055 0308 0301; # (Ü◌́; Ǘ; U◌̈◌́; Ǘ; U◌̈◌́; ) LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT +00DC 0341;01D7;0055 0308 0301;01D7;0055 0308 0301; # (Ü◌́; Ǘ; U◌̈◌́; Ǘ; U◌̈◌́; ) LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK +0075 0344;01D8;0075 0308 0301;01D8;0075 0308 0301; # (u◌̈́; ǘ; u◌̈◌́; ǘ; u◌̈◌́; ) LATIN SMALL LETTER U, COMBINING GREEK DIALYTIKA TONOS +00FC 0301;01D8;0075 0308 0301;01D8;0075 0308 0301; # (ü◌́; ǘ; u◌̈◌́; ǘ; u◌̈◌́; ) LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT +00FC 0341;01D8;0075 0308 0301;01D8;0075 0308 0301; # (ü◌́; ǘ; u◌̈◌́; ǘ; u◌̈◌́; ) LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK +00DC 030C;01D9;0055 0308 030C;01D9;0055 0308 030C; # (Ü◌̌; Ǚ; U◌̈◌̌; Ǚ; U◌̈◌̌; ) LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON +00FC 030C;01DA;0075 0308 030C;01DA;0075 0308 030C; # (ü◌̌; ǚ; u◌̈◌̌; ǚ; u◌̈◌̌; ) LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON +00DC 0300;01DB;0055 0308 0300;01DB;0055 0308 0300; # (Ü◌̀; Ǜ; U◌̈◌̀; Ǜ; U◌̈◌̀; ) LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT +00DC 0340;01DB;0055 0308 0300;01DB;0055 0308 0300; # (Ü◌̀; Ǜ; U◌̈◌̀; Ǜ; U◌̈◌̀; ) LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK +00FC 0300;01DC;0075 0308 0300;01DC;0075 0308 0300; # (ü◌̀; ǜ; u◌̈◌̀; ǜ; u◌̈◌̀; ) LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT +00FC 0340;01DC;0075 0308 0300;01DC;0075 0308 0300; # (ü◌̀; ǜ; u◌̈◌̀; ǜ; u◌̈◌̀; ) LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK +00C4 0304;01DE;0041 0308 0304;01DE;0041 0308 0304; # (Ä◌̄; Ǟ; A◌̈◌̄; Ǟ; A◌̈◌̄; ) LATIN CAPITAL LETTER A WITH DIAERESIS, COMBINING MACRON +00E4 0304;01DF;0061 0308 0304;01DF;0061 0308 0304; # (ä◌̄; ǟ; a◌̈◌̄; ǟ; a◌̈◌̄; ) LATIN SMALL LETTER A WITH DIAERESIS, COMBINING MACRON +0226 0304;01E0;0041 0307 0304;01E0;0041 0307 0304; # (Ȧ◌̄; Ǡ; A◌̇◌̄; Ǡ; A◌̇◌̄; ) LATIN CAPITAL LETTER A WITH DOT ABOVE, COMBINING MACRON +0227 0304;01E1;0061 0307 0304;01E1;0061 0307 0304; # (ȧ◌̄; ǡ; a◌̇◌̄; ǡ; a◌̇◌̄; ) LATIN SMALL LETTER A WITH DOT ABOVE, COMBINING MACRON +014C 0328;01EC;004F 0328 0304;01EC;004F 0328 0304; # (Ō◌̨; Ǭ; O◌̨◌̄; Ǭ; O◌̨◌̄; ) LATIN CAPITAL LETTER O WITH MACRON, COMBINING OGONEK +01EA 0304;01EC;004F 0328 0304;01EC;004F 0328 0304; # (Ǫ◌̄; Ǭ; O◌̨◌̄; Ǭ; O◌̨◌̄; ) LATIN CAPITAL LETTER O WITH OGONEK, COMBINING MACRON +014D 0328;01ED;006F 0328 0304;01ED;006F 0328 0304; # (ō◌̨; ǭ; o◌̨◌̄; ǭ; o◌̨◌̄; ) LATIN SMALL LETTER O WITH MACRON, COMBINING OGONEK +01EB 0304;01ED;006F 0328 0304;01ED;006F 0328 0304; # (ǫ◌̄; ǭ; o◌̨◌̄; ǭ; o◌̨◌̄; ) LATIN SMALL LETTER O WITH OGONEK, COMBINING MACRON +00C5 0301;01FA;0041 030A 0301;01FA;0041 030A 0301; # (Å◌́; Ǻ; A◌̊◌́; Ǻ; A◌̊◌́; ) LATIN CAPITAL LETTER A WITH RING ABOVE, COMBINING ACUTE ACCENT +00C5 0341;01FA;0041 030A 0301;01FA;0041 030A 0301; # (Å◌́; Ǻ; A◌̊◌́; Ǻ; A◌̊◌́; ) LATIN CAPITAL LETTER A WITH RING ABOVE, COMBINING ACUTE TONE MARK +212B 0301;01FA;0041 030A 0301;01FA;0041 030A 0301; # (Å◌́; Ǻ; A◌̊◌́; Ǻ; A◌̊◌́; ) ANGSTROM SIGN, COMBINING ACUTE ACCENT +212B 0341;01FA;0041 030A 0301;01FA;0041 030A 0301; # (Å◌́; Ǻ; A◌̊◌́; Ǻ; A◌̊◌́; ) ANGSTROM SIGN, COMBINING ACUTE TONE MARK +00E5 0301;01FB;0061 030A 0301;01FB;0061 030A 0301; # (å◌́; ǻ; a◌̊◌́; ǻ; a◌̊◌́; ) LATIN SMALL LETTER A WITH RING ABOVE, COMBINING ACUTE ACCENT +00E5 0341;01FB;0061 030A 0301;01FB;0061 030A 0301; # (å◌́; ǻ; a◌̊◌́; ǻ; a◌̊◌́; ) LATIN SMALL LETTER A WITH RING ABOVE, COMBINING ACUTE TONE MARK +00D6 0304;022A;004F 0308 0304;022A;004F 0308 0304; # (Ö◌̄; Ȫ; O◌̈◌̄; Ȫ; O◌̈◌̄; ) LATIN CAPITAL LETTER O WITH DIAERESIS, COMBINING MACRON +00F6 0304;022B;006F 0308 0304;022B;006F 0308 0304; # (ö◌̄; ȫ; o◌̈◌̄; ȫ; o◌̈◌̄; ) LATIN SMALL LETTER O WITH DIAERESIS, COMBINING MACRON +00D5 0304;022C;004F 0303 0304;022C;004F 0303 0304; # (Õ◌̄; Ȭ; O◌̃◌̄; Ȭ; O◌̃◌̄; ) LATIN CAPITAL LETTER O WITH TILDE, COMBINING MACRON +00F5 0304;022D;006F 0303 0304;022D;006F 0303 0304; # (õ◌̄; ȭ; o◌̃◌̄; ȭ; o◌̃◌̄; ) LATIN SMALL LETTER O WITH TILDE, COMBINING MACRON +022E 0304;0230;004F 0307 0304;0230;004F 0307 0304; # (Ȯ◌̄; Ȱ; O◌̇◌̄; Ȱ; O◌̇◌̄; ) LATIN CAPITAL LETTER O WITH DOT ABOVE, COMBINING MACRON +022F 0304;0231;006F 0307 0304;0231;006F 0307 0304; # (ȯ◌̄; ȱ; o◌̇◌̄; ȱ; o◌̇◌̄; ) LATIN SMALL LETTER O WITH DOT ABOVE, COMBINING MACRON +03B9 0344;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ι◌̈́; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA, COMBINING GREEK DIALYTIKA TONOS +03CA 0301;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ϊ◌́; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA, COMBINING ACUTE ACCENT +03CA 0341;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ϊ◌́; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA, COMBINING ACUTE TONE MARK +1FBE 0344;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ι◌̈́; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK PROSGEGRAMMENI, COMBINING GREEK DIALYTIKA TONOS +03C5 0344;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (υ◌̈́; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON, COMBINING GREEK DIALYTIKA TONOS +03CB 0301;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (ϋ◌́; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA, COMBINING ACUTE ACCENT +03CB 0341;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (ϋ◌́; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA, COMBINING ACUTE TONE MARK +0CCA 0CD5;0CCB;0CC6 0CC2 0CD5;0CCB;0CC6 0CC2 0CD5; # (ೋ; ೋ; ◌ೋ; ೋ; ◌ೋ; ) KANNADA VOWEL SIGN O, KANNADA LENGTH MARK +0DDC 0DCA;0DDD;0DD9 0DCF 0DCA;0DDD;0DD9 0DCF 0DCA; # (ො◌්; ෝ; ො◌්; ෝ; ො◌්; ) SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA, SINHALA SIGN AL-LAKUNA +00C7 0301;1E08;0043 0327 0301;1E08;0043 0327 0301; # (Ç◌́; Ḉ; C◌̧◌́; Ḉ; C◌̧◌́; ) LATIN CAPITAL LETTER C WITH CEDILLA, COMBINING ACUTE ACCENT +00C7 0341;1E08;0043 0327 0301;1E08;0043 0327 0301; # (Ç◌́; Ḉ; C◌̧◌́; Ḉ; C◌̧◌́; ) LATIN CAPITAL LETTER C WITH CEDILLA, COMBINING ACUTE TONE MARK +0106 0327;1E08;0043 0327 0301;1E08;0043 0327 0301; # (Ć◌̧; Ḉ; C◌̧◌́; Ḉ; C◌̧◌́; ) LATIN CAPITAL LETTER C WITH ACUTE, COMBINING CEDILLA +00E7 0301;1E09;0063 0327 0301;1E09;0063 0327 0301; # (ç◌́; ḉ; c◌̧◌́; ḉ; c◌̧◌́; ) LATIN SMALL LETTER C WITH CEDILLA, COMBINING ACUTE ACCENT +00E7 0341;1E09;0063 0327 0301;1E09;0063 0327 0301; # (ç◌́; ḉ; c◌̧◌́; ḉ; c◌̧◌́; ) LATIN SMALL LETTER C WITH CEDILLA, COMBINING ACUTE TONE MARK +0107 0327;1E09;0063 0327 0301;1E09;0063 0327 0301; # (ć◌̧; ḉ; c◌̧◌́; ḉ; c◌̧◌́; ) LATIN SMALL LETTER C WITH ACUTE, COMBINING CEDILLA +0112 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; # (Ē◌̀; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E WITH MACRON, COMBINING GRAVE ACCENT +0112 0340;1E14;0045 0304 0300;1E14;0045 0304 0300; # (Ē◌̀; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E WITH MACRON, COMBINING GRAVE TONE MARK +0113 0300;1E15;0065 0304 0300;1E15;0065 0304 0300; # (ē◌̀; ḕ; e◌̄◌̀; ḕ; e◌̄◌̀; ) LATIN SMALL LETTER E WITH MACRON, COMBINING GRAVE ACCENT +0113 0340;1E15;0065 0304 0300;1E15;0065 0304 0300; # (ē◌̀; ḕ; e◌̄◌̀; ḕ; e◌̄◌̀; ) LATIN SMALL LETTER E WITH MACRON, COMBINING GRAVE TONE MARK +0112 0301;1E16;0045 0304 0301;1E16;0045 0304 0301; # (Ē◌́; Ḗ; E◌̄◌́; Ḗ; E◌̄◌́; ) LATIN CAPITAL LETTER E WITH MACRON, COMBINING ACUTE ACCENT +0112 0341;1E16;0045 0304 0301;1E16;0045 0304 0301; # (Ē◌́; Ḗ; E◌̄◌́; Ḗ; E◌̄◌́; ) LATIN CAPITAL LETTER E WITH MACRON, COMBINING ACUTE TONE MARK +0113 0301;1E17;0065 0304 0301;1E17;0065 0304 0301; # (ē◌́; ḗ; e◌̄◌́; ḗ; e◌̄◌́; ) LATIN SMALL LETTER E WITH MACRON, COMBINING ACUTE ACCENT +0113 0341;1E17;0065 0304 0301;1E17;0065 0304 0301; # (ē◌́; ḗ; e◌̄◌́; ḗ; e◌̄◌́; ) LATIN SMALL LETTER E WITH MACRON, COMBINING ACUTE TONE MARK +0114 0327;1E1C;0045 0327 0306;1E1C;0045 0327 0306; # (Ĕ◌̧; Ḝ; E◌̧◌̆; Ḝ; E◌̧◌̆; ) LATIN CAPITAL LETTER E WITH BREVE, COMBINING CEDILLA +0228 0306;1E1C;0045 0327 0306;1E1C;0045 0327 0306; # (Ȩ◌̆; Ḝ; E◌̧◌̆; Ḝ; E◌̧◌̆; ) LATIN CAPITAL LETTER E WITH CEDILLA, COMBINING BREVE +0115 0327;1E1D;0065 0327 0306;1E1D;0065 0327 0306; # (ĕ◌̧; ḝ; e◌̧◌̆; ḝ; e◌̧◌̆; ) LATIN SMALL LETTER E WITH BREVE, COMBINING CEDILLA +0229 0306;1E1D;0065 0327 0306;1E1D;0065 0327 0306; # (ȩ◌̆; ḝ; e◌̧◌̆; ḝ; e◌̧◌̆; ) LATIN SMALL LETTER E WITH CEDILLA, COMBINING BREVE +0049 0344;1E2E;0049 0308 0301;1E2E;0049 0308 0301; # (I◌̈́; Ḯ; I◌̈◌́; Ḯ; I◌̈◌́; ) LATIN CAPITAL LETTER I, COMBINING GREEK DIALYTIKA TONOS +00CF 0301;1E2E;0049 0308 0301;1E2E;0049 0308 0301; # (Ï◌́; Ḯ; I◌̈◌́; Ḯ; I◌̈◌́; ) LATIN CAPITAL LETTER I WITH DIAERESIS, COMBINING ACUTE ACCENT +00CF 0341;1E2E;0049 0308 0301;1E2E;0049 0308 0301; # (Ï◌́; Ḯ; I◌̈◌́; Ḯ; I◌̈◌́; ) LATIN CAPITAL LETTER I WITH DIAERESIS, COMBINING ACUTE TONE MARK +0069 0344;1E2F;0069 0308 0301;1E2F;0069 0308 0301; # (i◌̈́; ḯ; i◌̈◌́; ḯ; i◌̈◌́; ) LATIN SMALL LETTER I, COMBINING GREEK DIALYTIKA TONOS +00EF 0301;1E2F;0069 0308 0301;1E2F;0069 0308 0301; # (ï◌́; ḯ; i◌̈◌́; ḯ; i◌̈◌́; ) LATIN SMALL LETTER I WITH DIAERESIS, COMBINING ACUTE ACCENT +00EF 0341;1E2F;0069 0308 0301;1E2F;0069 0308 0301; # (ï◌́; ḯ; i◌̈◌́; ḯ; i◌̈◌́; ) LATIN SMALL LETTER I WITH DIAERESIS, COMBINING ACUTE TONE MARK +1E36 0304;1E38;004C 0323 0304;1E38;004C 0323 0304; # (Ḷ◌̄; Ḹ; L◌̣◌̄; Ḹ; L◌̣◌̄; ) LATIN CAPITAL LETTER L WITH DOT BELOW, COMBINING MACRON +1E37 0304;1E39;006C 0323 0304;1E39;006C 0323 0304; # (ḷ◌̄; ḹ; l◌̣◌̄; ḹ; l◌̣◌̄; ) LATIN SMALL LETTER L WITH DOT BELOW, COMBINING MACRON +00D5 0301;1E4C;004F 0303 0301;1E4C;004F 0303 0301; # (Õ◌́; Ṍ; O◌̃◌́; Ṍ; O◌̃◌́; ) LATIN CAPITAL LETTER O WITH TILDE, COMBINING ACUTE ACCENT +00D5 0341;1E4C;004F 0303 0301;1E4C;004F 0303 0301; # (Õ◌́; Ṍ; O◌̃◌́; Ṍ; O◌̃◌́; ) LATIN CAPITAL LETTER O WITH TILDE, COMBINING ACUTE TONE MARK +00F5 0301;1E4D;006F 0303 0301;1E4D;006F 0303 0301; # (õ◌́; ṍ; o◌̃◌́; ṍ; o◌̃◌́; ) LATIN SMALL LETTER O WITH TILDE, COMBINING ACUTE ACCENT +00F5 0341;1E4D;006F 0303 0301;1E4D;006F 0303 0301; # (õ◌́; ṍ; o◌̃◌́; ṍ; o◌̃◌́; ) LATIN SMALL LETTER O WITH TILDE, COMBINING ACUTE TONE MARK +00D5 0308;1E4E;004F 0303 0308;1E4E;004F 0303 0308; # (Õ◌̈; Ṏ; O◌̃◌̈; Ṏ; O◌̃◌̈; ) LATIN CAPITAL LETTER O WITH TILDE, COMBINING DIAERESIS +00F5 0308;1E4F;006F 0303 0308;1E4F;006F 0303 0308; # (õ◌̈; ṏ; o◌̃◌̈; ṏ; o◌̃◌̈; ) LATIN SMALL LETTER O WITH TILDE, COMBINING DIAERESIS +014C 0300;1E50;004F 0304 0300;1E50;004F 0304 0300; # (Ō◌̀; Ṑ; O◌̄◌̀; Ṑ; O◌̄◌̀; ) LATIN CAPITAL LETTER O WITH MACRON, COMBINING GRAVE ACCENT +014C 0340;1E50;004F 0304 0300;1E50;004F 0304 0300; # (Ō◌̀; Ṑ; O◌̄◌̀; Ṑ; O◌̄◌̀; ) LATIN CAPITAL LETTER O WITH MACRON, COMBINING GRAVE TONE MARK +014D 0300;1E51;006F 0304 0300;1E51;006F 0304 0300; # (ō◌̀; ṑ; o◌̄◌̀; ṑ; o◌̄◌̀; ) LATIN SMALL LETTER O WITH MACRON, COMBINING GRAVE ACCENT +014D 0340;1E51;006F 0304 0300;1E51;006F 0304 0300; # (ō◌̀; ṑ; o◌̄◌̀; ṑ; o◌̄◌̀; ) LATIN SMALL LETTER O WITH MACRON, COMBINING GRAVE TONE MARK +014C 0301;1E52;004F 0304 0301;1E52;004F 0304 0301; # (Ō◌́; Ṓ; O◌̄◌́; Ṓ; O◌̄◌́; ) LATIN CAPITAL LETTER O WITH MACRON, COMBINING ACUTE ACCENT +014C 0341;1E52;004F 0304 0301;1E52;004F 0304 0301; # (Ō◌́; Ṓ; O◌̄◌́; Ṓ; O◌̄◌́; ) LATIN CAPITAL LETTER O WITH MACRON, COMBINING ACUTE TONE MARK +014D 0301;1E53;006F 0304 0301;1E53;006F 0304 0301; # (ō◌́; ṓ; o◌̄◌́; ṓ; o◌̄◌́; ) LATIN SMALL LETTER O WITH MACRON, COMBINING ACUTE ACCENT +014D 0341;1E53;006F 0304 0301;1E53;006F 0304 0301; # (ō◌́; ṓ; o◌̄◌́; ṓ; o◌̄◌́; ) LATIN SMALL LETTER O WITH MACRON, COMBINING ACUTE TONE MARK +1E5A 0304;1E5C;0052 0323 0304;1E5C;0052 0323 0304; # (Ṛ◌̄; Ṝ; R◌̣◌̄; Ṝ; R◌̣◌̄; ) LATIN CAPITAL LETTER R WITH DOT BELOW, COMBINING MACRON +1E5B 0304;1E5D;0072 0323 0304;1E5D;0072 0323 0304; # (ṛ◌̄; ṝ; r◌̣◌̄; ṝ; r◌̣◌̄; ) LATIN SMALL LETTER R WITH DOT BELOW, COMBINING MACRON +015A 0307;1E64;0053 0301 0307;1E64;0053 0301 0307; # (Ś◌̇; Ṥ; S◌́◌̇; Ṥ; S◌́◌̇; ) LATIN CAPITAL LETTER S WITH ACUTE, COMBINING DOT ABOVE +015B 0307;1E65;0073 0301 0307;1E65;0073 0301 0307; # (ś◌̇; ṥ; s◌́◌̇; ṥ; s◌́◌̇; ) LATIN SMALL LETTER S WITH ACUTE, COMBINING DOT ABOVE +0160 0307;1E66;0053 030C 0307;1E66;0053 030C 0307; # (Š◌̇; Ṧ; S◌̌◌̇; Ṧ; S◌̌◌̇; ) LATIN CAPITAL LETTER S WITH CARON, COMBINING DOT ABOVE +0161 0307;1E67;0073 030C 0307;1E67;0073 030C 0307; # (š◌̇; ṧ; s◌̌◌̇; ṧ; s◌̌◌̇; ) LATIN SMALL LETTER S WITH CARON, COMBINING DOT ABOVE +1E60 0323;1E68;0053 0323 0307;1E68;0053 0323 0307; # (Ṡ◌̣; Ṩ; S◌̣◌̇; Ṩ; S◌̣◌̇; ) LATIN CAPITAL LETTER S WITH DOT ABOVE, COMBINING DOT BELOW +1E62 0307;1E68;0053 0323 0307;1E68;0053 0323 0307; # (Ṣ◌̇; Ṩ; S◌̣◌̇; Ṩ; S◌̣◌̇; ) LATIN CAPITAL LETTER S WITH DOT BELOW, COMBINING DOT ABOVE +1E61 0323;1E69;0073 0323 0307;1E69;0073 0323 0307; # (ṡ◌̣; ṩ; s◌̣◌̇; ṩ; s◌̣◌̇; ) LATIN SMALL LETTER S WITH DOT ABOVE, COMBINING DOT BELOW +1E63 0307;1E69;0073 0323 0307;1E69;0073 0323 0307; # (ṣ◌̇; ṩ; s◌̣◌̇; ṩ; s◌̣◌̇; ) LATIN SMALL LETTER S WITH DOT BELOW, COMBINING DOT ABOVE +0168 0301;1E78;0055 0303 0301;1E78;0055 0303 0301; # (Ũ◌́; Ṹ; U◌̃◌́; Ṹ; U◌̃◌́; ) LATIN CAPITAL LETTER U WITH TILDE, COMBINING ACUTE ACCENT +0168 0341;1E78;0055 0303 0301;1E78;0055 0303 0301; # (Ũ◌́; Ṹ; U◌̃◌́; Ṹ; U◌̃◌́; ) LATIN CAPITAL LETTER U WITH TILDE, COMBINING ACUTE TONE MARK +0169 0301;1E79;0075 0303 0301;1E79;0075 0303 0301; # (ũ◌́; ṹ; u◌̃◌́; ṹ; u◌̃◌́; ) LATIN SMALL LETTER U WITH TILDE, COMBINING ACUTE ACCENT +0169 0341;1E79;0075 0303 0301;1E79;0075 0303 0301; # (ũ◌́; ṹ; u◌̃◌́; ṹ; u◌̃◌́; ) LATIN SMALL LETTER U WITH TILDE, COMBINING ACUTE TONE MARK +016A 0308;1E7A;0055 0304 0308;1E7A;0055 0304 0308; # (Ū◌̈; Ṻ; U◌̄◌̈; Ṻ; U◌̄◌̈; ) LATIN CAPITAL LETTER U WITH MACRON, COMBINING DIAERESIS +016B 0308;1E7B;0075 0304 0308;1E7B;0075 0304 0308; # (ū◌̈; ṻ; u◌̄◌̈; ṻ; u◌̄◌̈; ) LATIN SMALL LETTER U WITH MACRON, COMBINING DIAERESIS +00C2 0301;1EA4;0041 0302 0301;1EA4;0041 0302 0301; # (Â◌́; Ấ; A◌̂◌́; Ấ; A◌̂◌́; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX, COMBINING ACUTE ACCENT +00C2 0341;1EA4;0041 0302 0301;1EA4;0041 0302 0301; # (Â◌́; Ấ; A◌̂◌́; Ấ; A◌̂◌́; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK +00E2 0301;1EA5;0061 0302 0301;1EA5;0061 0302 0301; # (â◌́; ấ; a◌̂◌́; ấ; a◌̂◌́; ) LATIN SMALL LETTER A WITH CIRCUMFLEX, COMBINING ACUTE ACCENT +00E2 0341;1EA5;0061 0302 0301;1EA5;0061 0302 0301; # (â◌́; ấ; a◌̂◌́; ấ; a◌̂◌́; ) LATIN SMALL LETTER A WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK +00C2 0300;1EA6;0041 0302 0300;1EA6;0041 0302 0300; # (Â◌̀; Ầ; A◌̂◌̀; Ầ; A◌̂◌̀; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX, COMBINING GRAVE ACCENT +00C2 0340;1EA6;0041 0302 0300;1EA6;0041 0302 0300; # (Â◌̀; Ầ; A◌̂◌̀; Ầ; A◌̂◌̀; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK +00E2 0300;1EA7;0061 0302 0300;1EA7;0061 0302 0300; # (â◌̀; ầ; a◌̂◌̀; ầ; a◌̂◌̀; ) LATIN SMALL LETTER A WITH CIRCUMFLEX, COMBINING GRAVE ACCENT +00E2 0340;1EA7;0061 0302 0300;1EA7;0061 0302 0300; # (â◌̀; ầ; a◌̂◌̀; ầ; a◌̂◌̀; ) LATIN SMALL LETTER A WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK +00C2 0309;1EA8;0041 0302 0309;1EA8;0041 0302 0309; # (Â◌̉; Ẩ; A◌̂◌̉; Ẩ; A◌̂◌̉; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX, COMBINING HOOK ABOVE +00E2 0309;1EA9;0061 0302 0309;1EA9;0061 0302 0309; # (â◌̉; ẩ; a◌̂◌̉; ẩ; a◌̂◌̉; ) LATIN SMALL LETTER A WITH CIRCUMFLEX, COMBINING HOOK ABOVE +00C2 0303;1EAA;0041 0302 0303;1EAA;0041 0302 0303; # (Â◌̃; Ẫ; A◌̂◌̃; Ẫ; A◌̂◌̃; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX, COMBINING TILDE +00E2 0303;1EAB;0061 0302 0303;1EAB;0061 0302 0303; # (â◌̃; ẫ; a◌̂◌̃; ẫ; a◌̂◌̃; ) LATIN SMALL LETTER A WITH CIRCUMFLEX, COMBINING TILDE +00C2 0323;1EAC;0041 0323 0302;1EAC;0041 0323 0302; # (Â◌̣; Ậ; A◌̣◌̂; Ậ; A◌̣◌̂; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX, COMBINING DOT BELOW +1EA0 0302;1EAC;0041 0323 0302;1EAC;0041 0323 0302; # (Ạ◌̂; Ậ; A◌̣◌̂; Ậ; A◌̣◌̂; ) LATIN CAPITAL LETTER A WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT +00E2 0323;1EAD;0061 0323 0302;1EAD;0061 0323 0302; # (â◌̣; ậ; a◌̣◌̂; ậ; a◌̣◌̂; ) LATIN SMALL LETTER A WITH CIRCUMFLEX, COMBINING DOT BELOW +1EA1 0302;1EAD;0061 0323 0302;1EAD;0061 0323 0302; # (ạ◌̂; ậ; a◌̣◌̂; ậ; a◌̣◌̂; ) LATIN SMALL LETTER A WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT +0102 0301;1EAE;0041 0306 0301;1EAE;0041 0306 0301; # (Ă◌́; Ắ; A◌̆◌́; Ắ; A◌̆◌́; ) LATIN CAPITAL LETTER A WITH BREVE, COMBINING ACUTE ACCENT +0102 0341;1EAE;0041 0306 0301;1EAE;0041 0306 0301; # (Ă◌́; Ắ; A◌̆◌́; Ắ; A◌̆◌́; ) LATIN CAPITAL LETTER A WITH BREVE, COMBINING ACUTE TONE MARK +0103 0301;1EAF;0061 0306 0301;1EAF;0061 0306 0301; # (ă◌́; ắ; a◌̆◌́; ắ; a◌̆◌́; ) LATIN SMALL LETTER A WITH BREVE, COMBINING ACUTE ACCENT +0103 0341;1EAF;0061 0306 0301;1EAF;0061 0306 0301; # (ă◌́; ắ; a◌̆◌́; ắ; a◌̆◌́; ) LATIN SMALL LETTER A WITH BREVE, COMBINING ACUTE TONE MARK +0102 0300;1EB0;0041 0306 0300;1EB0;0041 0306 0300; # (Ă◌̀; Ằ; A◌̆◌̀; Ằ; A◌̆◌̀; ) LATIN CAPITAL LETTER A WITH BREVE, COMBINING GRAVE ACCENT +0102 0340;1EB0;0041 0306 0300;1EB0;0041 0306 0300; # (Ă◌̀; Ằ; A◌̆◌̀; Ằ; A◌̆◌̀; ) LATIN CAPITAL LETTER A WITH BREVE, COMBINING GRAVE TONE MARK +0103 0300;1EB1;0061 0306 0300;1EB1;0061 0306 0300; # (ă◌̀; ằ; a◌̆◌̀; ằ; a◌̆◌̀; ) LATIN SMALL LETTER A WITH BREVE, COMBINING GRAVE ACCENT +0103 0340;1EB1;0061 0306 0300;1EB1;0061 0306 0300; # (ă◌̀; ằ; a◌̆◌̀; ằ; a◌̆◌̀; ) LATIN SMALL LETTER A WITH BREVE, COMBINING GRAVE TONE MARK +0102 0309;1EB2;0041 0306 0309;1EB2;0041 0306 0309; # (Ă◌̉; Ẳ; A◌̆◌̉; Ẳ; A◌̆◌̉; ) LATIN CAPITAL LETTER A WITH BREVE, COMBINING HOOK ABOVE +0103 0309;1EB3;0061 0306 0309;1EB3;0061 0306 0309; # (ă◌̉; ẳ; a◌̆◌̉; ẳ; a◌̆◌̉; ) LATIN SMALL LETTER A WITH BREVE, COMBINING HOOK ABOVE +0102 0303;1EB4;0041 0306 0303;1EB4;0041 0306 0303; # (Ă◌̃; Ẵ; A◌̆◌̃; Ẵ; A◌̆◌̃; ) LATIN CAPITAL LETTER A WITH BREVE, COMBINING TILDE +0103 0303;1EB5;0061 0306 0303;1EB5;0061 0306 0303; # (ă◌̃; ẵ; a◌̆◌̃; ẵ; a◌̆◌̃; ) LATIN SMALL LETTER A WITH BREVE, COMBINING TILDE +0102 0323;1EB6;0041 0323 0306;1EB6;0041 0323 0306; # (Ă◌̣; Ặ; A◌̣◌̆; Ặ; A◌̣◌̆; ) LATIN CAPITAL LETTER A WITH BREVE, COMBINING DOT BELOW +1EA0 0306;1EB6;0041 0323 0306;1EB6;0041 0323 0306; # (Ạ◌̆; Ặ; A◌̣◌̆; Ặ; A◌̣◌̆; ) LATIN CAPITAL LETTER A WITH DOT BELOW, COMBINING BREVE +0103 0323;1EB7;0061 0323 0306;1EB7;0061 0323 0306; # (ă◌̣; ặ; a◌̣◌̆; ặ; a◌̣◌̆; ) LATIN SMALL LETTER A WITH BREVE, COMBINING DOT BELOW +1EA1 0306;1EB7;0061 0323 0306;1EB7;0061 0323 0306; # (ạ◌̆; ặ; a◌̣◌̆; ặ; a◌̣◌̆; ) LATIN SMALL LETTER A WITH DOT BELOW, COMBINING BREVE +00CA 0301;1EBE;0045 0302 0301;1EBE;0045 0302 0301; # (Ê◌́; Ế; E◌̂◌́; Ế; E◌̂◌́; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT +00CA 0341;1EBE;0045 0302 0301;1EBE;0045 0302 0301; # (Ê◌́; Ế; E◌̂◌́; Ế; E◌̂◌́; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK +00EA 0301;1EBF;0065 0302 0301;1EBF;0065 0302 0301; # (ê◌́; ế; e◌̂◌́; ế; e◌̂◌́; ) LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT +00EA 0341;1EBF;0065 0302 0301;1EBF;0065 0302 0301; # (ê◌́; ế; e◌̂◌́; ế; e◌̂◌́; ) LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK +00CA 0300;1EC0;0045 0302 0300;1EC0;0045 0302 0300; # (Ê◌̀; Ề; E◌̂◌̀; Ề; E◌̂◌̀; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT +00CA 0340;1EC0;0045 0302 0300;1EC0;0045 0302 0300; # (Ê◌̀; Ề; E◌̂◌̀; Ề; E◌̂◌̀; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK +00EA 0300;1EC1;0065 0302 0300;1EC1;0065 0302 0300; # (ê◌̀; ề; e◌̂◌̀; ề; e◌̂◌̀; ) LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT +00EA 0340;1EC1;0065 0302 0300;1EC1;0065 0302 0300; # (ê◌̀; ề; e◌̂◌̀; ề; e◌̂◌̀; ) LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK +00CA 0309;1EC2;0045 0302 0309;1EC2;0045 0302 0309; # (Ê◌̉; Ể; E◌̂◌̉; Ể; E◌̂◌̉; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING HOOK ABOVE +00EA 0309;1EC3;0065 0302 0309;1EC3;0065 0302 0309; # (ê◌̉; ể; e◌̂◌̉; ể; e◌̂◌̉; ) LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING HOOK ABOVE +00CA 0303;1EC4;0045 0302 0303;1EC4;0045 0302 0303; # (Ê◌̃; Ễ; E◌̂◌̃; Ễ; E◌̂◌̃; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING TILDE +00EA 0303;1EC5;0065 0302 0303;1EC5;0065 0302 0303; # (ê◌̃; ễ; e◌̂◌̃; ễ; e◌̂◌̃; ) LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING TILDE +00CA 0323;1EC6;0045 0323 0302;1EC6;0045 0323 0302; # (Ê◌̣; Ệ; E◌̣◌̂; Ệ; E◌̣◌̂; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING DOT BELOW +1EB8 0302;1EC6;0045 0323 0302;1EC6;0045 0323 0302; # (Ẹ◌̂; Ệ; E◌̣◌̂; Ệ; E◌̣◌̂; ) LATIN CAPITAL LETTER E WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT +00EA 0323;1EC7;0065 0323 0302;1EC7;0065 0323 0302; # (ê◌̣; ệ; e◌̣◌̂; ệ; e◌̣◌̂; ) LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING DOT BELOW +1EB9 0302;1EC7;0065 0323 0302;1EC7;0065 0323 0302; # (ẹ◌̂; ệ; e◌̣◌̂; ệ; e◌̣◌̂; ) LATIN SMALL LETTER E WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT +00D4 0301;1ED0;004F 0302 0301;1ED0;004F 0302 0301; # (Ô◌́; Ố; O◌̂◌́; Ố; O◌̂◌́; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX, COMBINING ACUTE ACCENT +00D4 0341;1ED0;004F 0302 0301;1ED0;004F 0302 0301; # (Ô◌́; Ố; O◌̂◌́; Ố; O◌̂◌́; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK +00F4 0301;1ED1;006F 0302 0301;1ED1;006F 0302 0301; # (ô◌́; ố; o◌̂◌́; ố; o◌̂◌́; ) LATIN SMALL LETTER O WITH CIRCUMFLEX, COMBINING ACUTE ACCENT +00F4 0341;1ED1;006F 0302 0301;1ED1;006F 0302 0301; # (ô◌́; ố; o◌̂◌́; ố; o◌̂◌́; ) LATIN SMALL LETTER O WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK +00D4 0300;1ED2;004F 0302 0300;1ED2;004F 0302 0300; # (Ô◌̀; Ồ; O◌̂◌̀; Ồ; O◌̂◌̀; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX, COMBINING GRAVE ACCENT +00D4 0340;1ED2;004F 0302 0300;1ED2;004F 0302 0300; # (Ô◌̀; Ồ; O◌̂◌̀; Ồ; O◌̂◌̀; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK +00F4 0300;1ED3;006F 0302 0300;1ED3;006F 0302 0300; # (ô◌̀; ồ; o◌̂◌̀; ồ; o◌̂◌̀; ) LATIN SMALL LETTER O WITH CIRCUMFLEX, COMBINING GRAVE ACCENT +00F4 0340;1ED3;006F 0302 0300;1ED3;006F 0302 0300; # (ô◌̀; ồ; o◌̂◌̀; ồ; o◌̂◌̀; ) LATIN SMALL LETTER O WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK +00D4 0309;1ED4;004F 0302 0309;1ED4;004F 0302 0309; # (Ô◌̉; Ổ; O◌̂◌̉; Ổ; O◌̂◌̉; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX, COMBINING HOOK ABOVE +00F4 0309;1ED5;006F 0302 0309;1ED5;006F 0302 0309; # (ô◌̉; ổ; o◌̂◌̉; ổ; o◌̂◌̉; ) LATIN SMALL LETTER O WITH CIRCUMFLEX, COMBINING HOOK ABOVE +00D4 0303;1ED6;004F 0302 0303;1ED6;004F 0302 0303; # (Ô◌̃; Ỗ; O◌̂◌̃; Ỗ; O◌̂◌̃; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX, COMBINING TILDE +00F4 0303;1ED7;006F 0302 0303;1ED7;006F 0302 0303; # (ô◌̃; ỗ; o◌̂◌̃; ỗ; o◌̂◌̃; ) LATIN SMALL LETTER O WITH CIRCUMFLEX, COMBINING TILDE +00D4 0323;1ED8;004F 0323 0302;1ED8;004F 0323 0302; # (Ô◌̣; Ộ; O◌̣◌̂; Ộ; O◌̣◌̂; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX, COMBINING DOT BELOW +1ECC 0302;1ED8;004F 0323 0302;1ED8;004F 0323 0302; # (Ọ◌̂; Ộ; O◌̣◌̂; Ộ; O◌̣◌̂; ) LATIN CAPITAL LETTER O WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT +00F4 0323;1ED9;006F 0323 0302;1ED9;006F 0323 0302; # (ô◌̣; ộ; o◌̣◌̂; ộ; o◌̣◌̂; ) LATIN SMALL LETTER O WITH CIRCUMFLEX, COMBINING DOT BELOW +1ECD 0302;1ED9;006F 0323 0302;1ED9;006F 0323 0302; # (ọ◌̂; ộ; o◌̣◌̂; ộ; o◌̣◌̂; ) LATIN SMALL LETTER O WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT +00D3 031B;1EDA;004F 031B 0301;1EDA;004F 031B 0301; # (Ó◌̛; Ớ; O◌̛◌́; Ớ; O◌̛◌́; ) LATIN CAPITAL LETTER O WITH ACUTE, COMBINING HORN +01A0 0301;1EDA;004F 031B 0301;1EDA;004F 031B 0301; # (Ơ◌́; Ớ; O◌̛◌́; Ớ; O◌̛◌́; ) LATIN CAPITAL LETTER O WITH HORN, COMBINING ACUTE ACCENT +01A0 0341;1EDA;004F 031B 0301;1EDA;004F 031B 0301; # (Ơ◌́; Ớ; O◌̛◌́; Ớ; O◌̛◌́; ) LATIN CAPITAL LETTER O WITH HORN, COMBINING ACUTE TONE MARK +00F3 031B;1EDB;006F 031B 0301;1EDB;006F 031B 0301; # (ó◌̛; ớ; o◌̛◌́; ớ; o◌̛◌́; ) LATIN SMALL LETTER O WITH ACUTE, COMBINING HORN +01A1 0301;1EDB;006F 031B 0301;1EDB;006F 031B 0301; # (ơ◌́; ớ; o◌̛◌́; ớ; o◌̛◌́; ) LATIN SMALL LETTER O WITH HORN, COMBINING ACUTE ACCENT +01A1 0341;1EDB;006F 031B 0301;1EDB;006F 031B 0301; # (ơ◌́; ớ; o◌̛◌́; ớ; o◌̛◌́; ) LATIN SMALL LETTER O WITH HORN, COMBINING ACUTE TONE MARK +00D2 031B;1EDC;004F 031B 0300;1EDC;004F 031B 0300; # (Ò◌̛; Ờ; O◌̛◌̀; Ờ; O◌̛◌̀; ) LATIN CAPITAL LETTER O WITH GRAVE, COMBINING HORN +01A0 0300;1EDC;004F 031B 0300;1EDC;004F 031B 0300; # (Ơ◌̀; Ờ; O◌̛◌̀; Ờ; O◌̛◌̀; ) LATIN CAPITAL LETTER O WITH HORN, COMBINING GRAVE ACCENT +01A0 0340;1EDC;004F 031B 0300;1EDC;004F 031B 0300; # (Ơ◌̀; Ờ; O◌̛◌̀; Ờ; O◌̛◌̀; ) LATIN CAPITAL LETTER O WITH HORN, COMBINING GRAVE TONE MARK +00F2 031B;1EDD;006F 031B 0300;1EDD;006F 031B 0300; # (ò◌̛; ờ; o◌̛◌̀; ờ; o◌̛◌̀; ) LATIN SMALL LETTER O WITH GRAVE, COMBINING HORN +01A1 0300;1EDD;006F 031B 0300;1EDD;006F 031B 0300; # (ơ◌̀; ờ; o◌̛◌̀; ờ; o◌̛◌̀; ) LATIN SMALL LETTER O WITH HORN, COMBINING GRAVE ACCENT +01A1 0340;1EDD;006F 031B 0300;1EDD;006F 031B 0300; # (ơ◌̀; ờ; o◌̛◌̀; ờ; o◌̛◌̀; ) LATIN SMALL LETTER O WITH HORN, COMBINING GRAVE TONE MARK +01A0 0309;1EDE;004F 031B 0309;1EDE;004F 031B 0309; # (Ơ◌̉; Ở; O◌̛◌̉; Ở; O◌̛◌̉; ) LATIN CAPITAL LETTER O WITH HORN, COMBINING HOOK ABOVE +1ECE 031B;1EDE;004F 031B 0309;1EDE;004F 031B 0309; # (Ỏ◌̛; Ở; O◌̛◌̉; Ở; O◌̛◌̉; ) LATIN CAPITAL LETTER O WITH HOOK ABOVE, COMBINING HORN +01A1 0309;1EDF;006F 031B 0309;1EDF;006F 031B 0309; # (ơ◌̉; ở; o◌̛◌̉; ở; o◌̛◌̉; ) LATIN SMALL LETTER O WITH HORN, COMBINING HOOK ABOVE +1ECF 031B;1EDF;006F 031B 0309;1EDF;006F 031B 0309; # (ỏ◌̛; ở; o◌̛◌̉; ở; o◌̛◌̉; ) LATIN SMALL LETTER O WITH HOOK ABOVE, COMBINING HORN +00D5 031B;1EE0;004F 031B 0303;1EE0;004F 031B 0303; # (Õ◌̛; Ỡ; O◌̛◌̃; Ỡ; O◌̛◌̃; ) LATIN CAPITAL LETTER O WITH TILDE, COMBINING HORN +01A0 0303;1EE0;004F 031B 0303;1EE0;004F 031B 0303; # (Ơ◌̃; Ỡ; O◌̛◌̃; Ỡ; O◌̛◌̃; ) LATIN CAPITAL LETTER O WITH HORN, COMBINING TILDE +00F5 031B;1EE1;006F 031B 0303;1EE1;006F 031B 0303; # (õ◌̛; ỡ; o◌̛◌̃; ỡ; o◌̛◌̃; ) LATIN SMALL LETTER O WITH TILDE, COMBINING HORN +01A1 0303;1EE1;006F 031B 0303;1EE1;006F 031B 0303; # (ơ◌̃; ỡ; o◌̛◌̃; ỡ; o◌̛◌̃; ) LATIN SMALL LETTER O WITH HORN, COMBINING TILDE +01A0 0323;1EE2;004F 031B 0323;1EE2;004F 031B 0323; # (Ơ◌̣; Ợ; O◌̛◌̣; Ợ; O◌̛◌̣; ) LATIN CAPITAL LETTER O WITH HORN, COMBINING DOT BELOW +1ECC 031B;1EE2;004F 031B 0323;1EE2;004F 031B 0323; # (Ọ◌̛; Ợ; O◌̛◌̣; Ợ; O◌̛◌̣; ) LATIN CAPITAL LETTER O WITH DOT BELOW, COMBINING HORN +01A1 0323;1EE3;006F 031B 0323;1EE3;006F 031B 0323; # (ơ◌̣; ợ; o◌̛◌̣; ợ; o◌̛◌̣; ) LATIN SMALL LETTER O WITH HORN, COMBINING DOT BELOW +1ECD 031B;1EE3;006F 031B 0323;1EE3;006F 031B 0323; # (ọ◌̛; ợ; o◌̛◌̣; ợ; o◌̛◌̣; ) LATIN SMALL LETTER O WITH DOT BELOW, COMBINING HORN +00DA 031B;1EE8;0055 031B 0301;1EE8;0055 031B 0301; # (Ú◌̛; Ứ; U◌̛◌́; Ứ; U◌̛◌́; ) LATIN CAPITAL LETTER U WITH ACUTE, COMBINING HORN +01AF 0301;1EE8;0055 031B 0301;1EE8;0055 031B 0301; # (Ư◌́; Ứ; U◌̛◌́; Ứ; U◌̛◌́; ) LATIN CAPITAL LETTER U WITH HORN, COMBINING ACUTE ACCENT +01AF 0341;1EE8;0055 031B 0301;1EE8;0055 031B 0301; # (Ư◌́; Ứ; U◌̛◌́; Ứ; U◌̛◌́; ) LATIN CAPITAL LETTER U WITH HORN, COMBINING ACUTE TONE MARK +00FA 031B;1EE9;0075 031B 0301;1EE9;0075 031B 0301; # (ú◌̛; ứ; u◌̛◌́; ứ; u◌̛◌́; ) LATIN SMALL LETTER U WITH ACUTE, COMBINING HORN +01B0 0301;1EE9;0075 031B 0301;1EE9;0075 031B 0301; # (ư◌́; ứ; u◌̛◌́; ứ; u◌̛◌́; ) LATIN SMALL LETTER U WITH HORN, COMBINING ACUTE ACCENT +01B0 0341;1EE9;0075 031B 0301;1EE9;0075 031B 0301; # (ư◌́; ứ; u◌̛◌́; ứ; u◌̛◌́; ) LATIN SMALL LETTER U WITH HORN, COMBINING ACUTE TONE MARK +00D9 031B;1EEA;0055 031B 0300;1EEA;0055 031B 0300; # (Ù◌̛; Ừ; U◌̛◌̀; Ừ; U◌̛◌̀; ) LATIN CAPITAL LETTER U WITH GRAVE, COMBINING HORN +01AF 0300;1EEA;0055 031B 0300;1EEA;0055 031B 0300; # (Ư◌̀; Ừ; U◌̛◌̀; Ừ; U◌̛◌̀; ) LATIN CAPITAL LETTER U WITH HORN, COMBINING GRAVE ACCENT +01AF 0340;1EEA;0055 031B 0300;1EEA;0055 031B 0300; # (Ư◌̀; Ừ; U◌̛◌̀; Ừ; U◌̛◌̀; ) LATIN CAPITAL LETTER U WITH HORN, COMBINING GRAVE TONE MARK +00F9 031B;1EEB;0075 031B 0300;1EEB;0075 031B 0300; # (ù◌̛; ừ; u◌̛◌̀; ừ; u◌̛◌̀; ) LATIN SMALL LETTER U WITH GRAVE, COMBINING HORN +01B0 0300;1EEB;0075 031B 0300;1EEB;0075 031B 0300; # (ư◌̀; ừ; u◌̛◌̀; ừ; u◌̛◌̀; ) LATIN SMALL LETTER U WITH HORN, COMBINING GRAVE ACCENT +01B0 0340;1EEB;0075 031B 0300;1EEB;0075 031B 0300; # (ư◌̀; ừ; u◌̛◌̀; ừ; u◌̛◌̀; ) LATIN SMALL LETTER U WITH HORN, COMBINING GRAVE TONE MARK +01AF 0309;1EEC;0055 031B 0309;1EEC;0055 031B 0309; # (Ư◌̉; Ử; U◌̛◌̉; Ử; U◌̛◌̉; ) LATIN CAPITAL LETTER U WITH HORN, COMBINING HOOK ABOVE +1EE6 031B;1EEC;0055 031B 0309;1EEC;0055 031B 0309; # (Ủ◌̛; Ử; U◌̛◌̉; Ử; U◌̛◌̉; ) LATIN CAPITAL LETTER U WITH HOOK ABOVE, COMBINING HORN +01B0 0309;1EED;0075 031B 0309;1EED;0075 031B 0309; # (ư◌̉; ử; u◌̛◌̉; ử; u◌̛◌̉; ) LATIN SMALL LETTER U WITH HORN, COMBINING HOOK ABOVE +1EE7 031B;1EED;0075 031B 0309;1EED;0075 031B 0309; # (ủ◌̛; ử; u◌̛◌̉; ử; u◌̛◌̉; ) LATIN SMALL LETTER U WITH HOOK ABOVE, COMBINING HORN +0168 031B;1EEE;0055 031B 0303;1EEE;0055 031B 0303; # (Ũ◌̛; Ữ; U◌̛◌̃; Ữ; U◌̛◌̃; ) LATIN CAPITAL LETTER U WITH TILDE, COMBINING HORN +01AF 0303;1EEE;0055 031B 0303;1EEE;0055 031B 0303; # (Ư◌̃; Ữ; U◌̛◌̃; Ữ; U◌̛◌̃; ) LATIN CAPITAL LETTER U WITH HORN, COMBINING TILDE +0169 031B;1EEF;0075 031B 0303;1EEF;0075 031B 0303; # (ũ◌̛; ữ; u◌̛◌̃; ữ; u◌̛◌̃; ) LATIN SMALL LETTER U WITH TILDE, COMBINING HORN +01B0 0303;1EEF;0075 031B 0303;1EEF;0075 031B 0303; # (ư◌̃; ữ; u◌̛◌̃; ữ; u◌̛◌̃; ) LATIN SMALL LETTER U WITH HORN, COMBINING TILDE +01AF 0323;1EF0;0055 031B 0323;1EF0;0055 031B 0323; # (Ư◌̣; Ự; U◌̛◌̣; Ự; U◌̛◌̣; ) LATIN CAPITAL LETTER U WITH HORN, COMBINING DOT BELOW +1EE4 031B;1EF0;0055 031B 0323;1EF0;0055 031B 0323; # (Ụ◌̛; Ự; U◌̛◌̣; Ự; U◌̛◌̣; ) LATIN CAPITAL LETTER U WITH DOT BELOW, COMBINING HORN +01B0 0323;1EF1;0075 031B 0323;1EF1;0075 031B 0323; # (ư◌̣; ự; u◌̛◌̣; ự; u◌̛◌̣; ) LATIN SMALL LETTER U WITH HORN, COMBINING DOT BELOW +1EE5 031B;1EF1;0075 031B 0323;1EF1;0075 031B 0323; # (ụ◌̛; ự; u◌̛◌̣; ự; u◌̛◌̣; ) LATIN SMALL LETTER U WITH DOT BELOW, COMBINING HORN +1F00 0300;1F02;03B1 0313 0300;1F02;03B1 0313 0300; # (ἀ◌̀; ἂ; α◌̓◌̀; ἂ; α◌̓◌̀; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GRAVE ACCENT +1F00 0340;1F02;03B1 0313 0300;1F02;03B1 0313 0300; # (ἀ◌̀; ἂ; α◌̓◌̀; ἂ; α◌̓◌̀; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GRAVE TONE MARK +1F01 0300;1F03;03B1 0314 0300;1F03;03B1 0314 0300; # (ἁ◌̀; ἃ; α◌̔◌̀; ἃ; α◌̔◌̀; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GRAVE ACCENT +1F01 0340;1F03;03B1 0314 0300;1F03;03B1 0314 0300; # (ἁ◌̀; ἃ; α◌̔◌̀; ἃ; α◌̔◌̀; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GRAVE TONE MARK +1F00 0301;1F04;03B1 0313 0301;1F04;03B1 0313 0301; # (ἀ◌́; ἄ; α◌̓◌́; ἄ; α◌̓◌́; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING ACUTE ACCENT +1F00 0341;1F04;03B1 0313 0301;1F04;03B1 0313 0301; # (ἀ◌́; ἄ; α◌̓◌́; ἄ; α◌̓◌́; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING ACUTE TONE MARK +1F01 0301;1F05;03B1 0314 0301;1F05;03B1 0314 0301; # (ἁ◌́; ἅ; α◌̔◌́; ἅ; α◌̔◌́; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING ACUTE ACCENT +1F01 0341;1F05;03B1 0314 0301;1F05;03B1 0314 0301; # (ἁ◌́; ἅ; α◌̔◌́; ἅ; α◌̔◌́; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING ACUTE TONE MARK +1F00 0342;1F06;03B1 0313 0342;1F06;03B1 0313 0342; # (ἀ◌͂; ἆ; α◌̓◌͂; ἆ; α◌̓◌͂; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GREEK PERISPOMENI +1F01 0342;1F07;03B1 0314 0342;1F07;03B1 0314 0342; # (ἁ◌͂; ἇ; α◌̔◌͂; ἇ; α◌̔◌͂; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GREEK PERISPOMENI +1F08 0300;1F0A;0391 0313 0300;1F0A;0391 0313 0300; # (Ἀ◌̀; Ἂ; Α◌̓◌̀; Ἂ; Α◌̓◌̀; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GRAVE ACCENT +1F08 0340;1F0A;0391 0313 0300;1F0A;0391 0313 0300; # (Ἀ◌̀; Ἂ; Α◌̓◌̀; Ἂ; Α◌̓◌̀; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GRAVE TONE MARK +1F09 0300;1F0B;0391 0314 0300;1F0B;0391 0314 0300; # (Ἁ◌̀; Ἃ; Α◌̔◌̀; Ἃ; Α◌̔◌̀; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GRAVE ACCENT +1F09 0340;1F0B;0391 0314 0300;1F0B;0391 0314 0300; # (Ἁ◌̀; Ἃ; Α◌̔◌̀; Ἃ; Α◌̔◌̀; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GRAVE TONE MARK +1F08 0301;1F0C;0391 0313 0301;1F0C;0391 0313 0301; # (Ἀ◌́; Ἄ; Α◌̓◌́; Ἄ; Α◌̓◌́; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING ACUTE ACCENT +1F08 0341;1F0C;0391 0313 0301;1F0C;0391 0313 0301; # (Ἀ◌́; Ἄ; Α◌̓◌́; Ἄ; Α◌̓◌́; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING ACUTE TONE MARK +1F09 0301;1F0D;0391 0314 0301;1F0D;0391 0314 0301; # (Ἁ◌́; Ἅ; Α◌̔◌́; Ἅ; Α◌̔◌́; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING ACUTE ACCENT +1F09 0341;1F0D;0391 0314 0301;1F0D;0391 0314 0301; # (Ἁ◌́; Ἅ; Α◌̔◌́; Ἅ; Α◌̔◌́; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING ACUTE TONE MARK +1F08 0342;1F0E;0391 0313 0342;1F0E;0391 0313 0342; # (Ἀ◌͂; Ἆ; Α◌̓◌͂; Ἆ; Α◌̓◌͂; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GREEK PERISPOMENI +1F09 0342;1F0F;0391 0314 0342;1F0F;0391 0314 0342; # (Ἁ◌͂; Ἇ; Α◌̔◌͂; Ἇ; Α◌̔◌͂; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GREEK PERISPOMENI +1F10 0300;1F12;03B5 0313 0300;1F12;03B5 0313 0300; # (ἐ◌̀; ἒ; ε◌̓◌̀; ἒ; ε◌̓◌̀; ) GREEK SMALL LETTER EPSILON WITH PSILI, COMBINING GRAVE ACCENT +1F10 0340;1F12;03B5 0313 0300;1F12;03B5 0313 0300; # (ἐ◌̀; ἒ; ε◌̓◌̀; ἒ; ε◌̓◌̀; ) GREEK SMALL LETTER EPSILON WITH PSILI, COMBINING GRAVE TONE MARK +1F11 0300;1F13;03B5 0314 0300;1F13;03B5 0314 0300; # (ἑ◌̀; ἓ; ε◌̔◌̀; ἓ; ε◌̔◌̀; ) GREEK SMALL LETTER EPSILON WITH DASIA, COMBINING GRAVE ACCENT +1F11 0340;1F13;03B5 0314 0300;1F13;03B5 0314 0300; # (ἑ◌̀; ἓ; ε◌̔◌̀; ἓ; ε◌̔◌̀; ) GREEK SMALL LETTER EPSILON WITH DASIA, COMBINING GRAVE TONE MARK +1F10 0301;1F14;03B5 0313 0301;1F14;03B5 0313 0301; # (ἐ◌́; ἔ; ε◌̓◌́; ἔ; ε◌̓◌́; ) GREEK SMALL LETTER EPSILON WITH PSILI, COMBINING ACUTE ACCENT +1F10 0341;1F14;03B5 0313 0301;1F14;03B5 0313 0301; # (ἐ◌́; ἔ; ε◌̓◌́; ἔ; ε◌̓◌́; ) GREEK SMALL LETTER EPSILON WITH PSILI, COMBINING ACUTE TONE MARK +1F11 0301;1F15;03B5 0314 0301;1F15;03B5 0314 0301; # (ἑ◌́; ἕ; ε◌̔◌́; ἕ; ε◌̔◌́; ) GREEK SMALL LETTER EPSILON WITH DASIA, COMBINING ACUTE ACCENT +1F11 0341;1F15;03B5 0314 0301;1F15;03B5 0314 0301; # (ἑ◌́; ἕ; ε◌̔◌́; ἕ; ε◌̔◌́; ) GREEK SMALL LETTER EPSILON WITH DASIA, COMBINING ACUTE TONE MARK +1F18 0300;1F1A;0395 0313 0300;1F1A;0395 0313 0300; # (Ἐ◌̀; Ἒ; Ε◌̓◌̀; Ἒ; Ε◌̓◌̀; ) GREEK CAPITAL LETTER EPSILON WITH PSILI, COMBINING GRAVE ACCENT +1F18 0340;1F1A;0395 0313 0300;1F1A;0395 0313 0300; # (Ἐ◌̀; Ἒ; Ε◌̓◌̀; Ἒ; Ε◌̓◌̀; ) GREEK CAPITAL LETTER EPSILON WITH PSILI, COMBINING GRAVE TONE MARK +1F19 0300;1F1B;0395 0314 0300;1F1B;0395 0314 0300; # (Ἑ◌̀; Ἓ; Ε◌̔◌̀; Ἓ; Ε◌̔◌̀; ) GREEK CAPITAL LETTER EPSILON WITH DASIA, COMBINING GRAVE ACCENT +1F19 0340;1F1B;0395 0314 0300;1F1B;0395 0314 0300; # (Ἑ◌̀; Ἓ; Ε◌̔◌̀; Ἓ; Ε◌̔◌̀; ) GREEK CAPITAL LETTER EPSILON WITH DASIA, COMBINING GRAVE TONE MARK +1F18 0301;1F1C;0395 0313 0301;1F1C;0395 0313 0301; # (Ἐ◌́; Ἔ; Ε◌̓◌́; Ἔ; Ε◌̓◌́; ) GREEK CAPITAL LETTER EPSILON WITH PSILI, COMBINING ACUTE ACCENT +1F18 0341;1F1C;0395 0313 0301;1F1C;0395 0313 0301; # (Ἐ◌́; Ἔ; Ε◌̓◌́; Ἔ; Ε◌̓◌́; ) GREEK CAPITAL LETTER EPSILON WITH PSILI, COMBINING ACUTE TONE MARK +1F19 0301;1F1D;0395 0314 0301;1F1D;0395 0314 0301; # (Ἑ◌́; Ἕ; Ε◌̔◌́; Ἕ; Ε◌̔◌́; ) GREEK CAPITAL LETTER EPSILON WITH DASIA, COMBINING ACUTE ACCENT +1F19 0341;1F1D;0395 0314 0301;1F1D;0395 0314 0301; # (Ἑ◌́; Ἕ; Ε◌̔◌́; Ἕ; Ε◌̔◌́; ) GREEK CAPITAL LETTER EPSILON WITH DASIA, COMBINING ACUTE TONE MARK +1F20 0300;1F22;03B7 0313 0300;1F22;03B7 0313 0300; # (ἠ◌̀; ἢ; η◌̓◌̀; ἢ; η◌̓◌̀; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GRAVE ACCENT +1F20 0340;1F22;03B7 0313 0300;1F22;03B7 0313 0300; # (ἠ◌̀; ἢ; η◌̓◌̀; ἢ; η◌̓◌̀; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GRAVE TONE MARK +1F21 0300;1F23;03B7 0314 0300;1F23;03B7 0314 0300; # (ἡ◌̀; ἣ; η◌̔◌̀; ἣ; η◌̔◌̀; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GRAVE ACCENT +1F21 0340;1F23;03B7 0314 0300;1F23;03B7 0314 0300; # (ἡ◌̀; ἣ; η◌̔◌̀; ἣ; η◌̔◌̀; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GRAVE TONE MARK +1F20 0301;1F24;03B7 0313 0301;1F24;03B7 0313 0301; # (ἠ◌́; ἤ; η◌̓◌́; ἤ; η◌̓◌́; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING ACUTE ACCENT +1F20 0341;1F24;03B7 0313 0301;1F24;03B7 0313 0301; # (ἠ◌́; ἤ; η◌̓◌́; ἤ; η◌̓◌́; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING ACUTE TONE MARK +1F21 0301;1F25;03B7 0314 0301;1F25;03B7 0314 0301; # (ἡ◌́; ἥ; η◌̔◌́; ἥ; η◌̔◌́; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING ACUTE ACCENT +1F21 0341;1F25;03B7 0314 0301;1F25;03B7 0314 0301; # (ἡ◌́; ἥ; η◌̔◌́; ἥ; η◌̔◌́; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING ACUTE TONE MARK +1F20 0342;1F26;03B7 0313 0342;1F26;03B7 0313 0342; # (ἠ◌͂; ἦ; η◌̓◌͂; ἦ; η◌̓◌͂; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GREEK PERISPOMENI +1F21 0342;1F27;03B7 0314 0342;1F27;03B7 0314 0342; # (ἡ◌͂; ἧ; η◌̔◌͂; ἧ; η◌̔◌͂; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GREEK PERISPOMENI +1F28 0300;1F2A;0397 0313 0300;1F2A;0397 0313 0300; # (Ἠ◌̀; Ἢ; Η◌̓◌̀; Ἢ; Η◌̓◌̀; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GRAVE ACCENT +1F28 0340;1F2A;0397 0313 0300;1F2A;0397 0313 0300; # (Ἠ◌̀; Ἢ; Η◌̓◌̀; Ἢ; Η◌̓◌̀; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GRAVE TONE MARK +1F29 0300;1F2B;0397 0314 0300;1F2B;0397 0314 0300; # (Ἡ◌̀; Ἣ; Η◌̔◌̀; Ἣ; Η◌̔◌̀; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GRAVE ACCENT +1F29 0340;1F2B;0397 0314 0300;1F2B;0397 0314 0300; # (Ἡ◌̀; Ἣ; Η◌̔◌̀; Ἣ; Η◌̔◌̀; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GRAVE TONE MARK +1F28 0301;1F2C;0397 0313 0301;1F2C;0397 0313 0301; # (Ἠ◌́; Ἤ; Η◌̓◌́; Ἤ; Η◌̓◌́; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING ACUTE ACCENT +1F28 0341;1F2C;0397 0313 0301;1F2C;0397 0313 0301; # (Ἠ◌́; Ἤ; Η◌̓◌́; Ἤ; Η◌̓◌́; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING ACUTE TONE MARK +1F29 0301;1F2D;0397 0314 0301;1F2D;0397 0314 0301; # (Ἡ◌́; Ἥ; Η◌̔◌́; Ἥ; Η◌̔◌́; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING ACUTE ACCENT +1F29 0341;1F2D;0397 0314 0301;1F2D;0397 0314 0301; # (Ἡ◌́; Ἥ; Η◌̔◌́; Ἥ; Η◌̔◌́; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING ACUTE TONE MARK +1F28 0342;1F2E;0397 0313 0342;1F2E;0397 0313 0342; # (Ἠ◌͂; Ἦ; Η◌̓◌͂; Ἦ; Η◌̓◌͂; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GREEK PERISPOMENI +1F29 0342;1F2F;0397 0314 0342;1F2F;0397 0314 0342; # (Ἡ◌͂; Ἧ; Η◌̔◌͂; Ἧ; Η◌̔◌͂; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GREEK PERISPOMENI +1F30 0300;1F32;03B9 0313 0300;1F32;03B9 0313 0300; # (ἰ◌̀; ἲ; ι◌̓◌̀; ἲ; ι◌̓◌̀; ) GREEK SMALL LETTER IOTA WITH PSILI, COMBINING GRAVE ACCENT +1F30 0340;1F32;03B9 0313 0300;1F32;03B9 0313 0300; # (ἰ◌̀; ἲ; ι◌̓◌̀; ἲ; ι◌̓◌̀; ) GREEK SMALL LETTER IOTA WITH PSILI, COMBINING GRAVE TONE MARK +1F31 0300;1F33;03B9 0314 0300;1F33;03B9 0314 0300; # (ἱ◌̀; ἳ; ι◌̔◌̀; ἳ; ι◌̔◌̀; ) GREEK SMALL LETTER IOTA WITH DASIA, COMBINING GRAVE ACCENT +1F31 0340;1F33;03B9 0314 0300;1F33;03B9 0314 0300; # (ἱ◌̀; ἳ; ι◌̔◌̀; ἳ; ι◌̔◌̀; ) GREEK SMALL LETTER IOTA WITH DASIA, COMBINING GRAVE TONE MARK +1F30 0301;1F34;03B9 0313 0301;1F34;03B9 0313 0301; # (ἰ◌́; ἴ; ι◌̓◌́; ἴ; ι◌̓◌́; ) GREEK SMALL LETTER IOTA WITH PSILI, COMBINING ACUTE ACCENT +1F30 0341;1F34;03B9 0313 0301;1F34;03B9 0313 0301; # (ἰ◌́; ἴ; ι◌̓◌́; ἴ; ι◌̓◌́; ) GREEK SMALL LETTER IOTA WITH PSILI, COMBINING ACUTE TONE MARK +1F31 0301;1F35;03B9 0314 0301;1F35;03B9 0314 0301; # (ἱ◌́; ἵ; ι◌̔◌́; ἵ; ι◌̔◌́; ) GREEK SMALL LETTER IOTA WITH DASIA, COMBINING ACUTE ACCENT +1F31 0341;1F35;03B9 0314 0301;1F35;03B9 0314 0301; # (ἱ◌́; ἵ; ι◌̔◌́; ἵ; ι◌̔◌́; ) GREEK SMALL LETTER IOTA WITH DASIA, COMBINING ACUTE TONE MARK +1F30 0342;1F36;03B9 0313 0342;1F36;03B9 0313 0342; # (ἰ◌͂; ἶ; ι◌̓◌͂; ἶ; ι◌̓◌͂; ) GREEK SMALL LETTER IOTA WITH PSILI, COMBINING GREEK PERISPOMENI +1F31 0342;1F37;03B9 0314 0342;1F37;03B9 0314 0342; # (ἱ◌͂; ἷ; ι◌̔◌͂; ἷ; ι◌̔◌͂; ) GREEK SMALL LETTER IOTA WITH DASIA, COMBINING GREEK PERISPOMENI +1F38 0300;1F3A;0399 0313 0300;1F3A;0399 0313 0300; # (Ἰ◌̀; Ἲ; Ι◌̓◌̀; Ἲ; Ι◌̓◌̀; ) GREEK CAPITAL LETTER IOTA WITH PSILI, COMBINING GRAVE ACCENT +1F38 0340;1F3A;0399 0313 0300;1F3A;0399 0313 0300; # (Ἰ◌̀; Ἲ; Ι◌̓◌̀; Ἲ; Ι◌̓◌̀; ) GREEK CAPITAL LETTER IOTA WITH PSILI, COMBINING GRAVE TONE MARK +1F39 0300;1F3B;0399 0314 0300;1F3B;0399 0314 0300; # (Ἱ◌̀; Ἳ; Ι◌̔◌̀; Ἳ; Ι◌̔◌̀; ) GREEK CAPITAL LETTER IOTA WITH DASIA, COMBINING GRAVE ACCENT +1F39 0340;1F3B;0399 0314 0300;1F3B;0399 0314 0300; # (Ἱ◌̀; Ἳ; Ι◌̔◌̀; Ἳ; Ι◌̔◌̀; ) GREEK CAPITAL LETTER IOTA WITH DASIA, COMBINING GRAVE TONE MARK +1F38 0301;1F3C;0399 0313 0301;1F3C;0399 0313 0301; # (Ἰ◌́; Ἴ; Ι◌̓◌́; Ἴ; Ι◌̓◌́; ) GREEK CAPITAL LETTER IOTA WITH PSILI, COMBINING ACUTE ACCENT +1F38 0341;1F3C;0399 0313 0301;1F3C;0399 0313 0301; # (Ἰ◌́; Ἴ; Ι◌̓◌́; Ἴ; Ι◌̓◌́; ) GREEK CAPITAL LETTER IOTA WITH PSILI, COMBINING ACUTE TONE MARK +1F39 0301;1F3D;0399 0314 0301;1F3D;0399 0314 0301; # (Ἱ◌́; Ἵ; Ι◌̔◌́; Ἵ; Ι◌̔◌́; ) GREEK CAPITAL LETTER IOTA WITH DASIA, COMBINING ACUTE ACCENT +1F39 0341;1F3D;0399 0314 0301;1F3D;0399 0314 0301; # (Ἱ◌́; Ἵ; Ι◌̔◌́; Ἵ; Ι◌̔◌́; ) GREEK CAPITAL LETTER IOTA WITH DASIA, COMBINING ACUTE TONE MARK +1F38 0342;1F3E;0399 0313 0342;1F3E;0399 0313 0342; # (Ἰ◌͂; Ἶ; Ι◌̓◌͂; Ἶ; Ι◌̓◌͂; ) GREEK CAPITAL LETTER IOTA WITH PSILI, COMBINING GREEK PERISPOMENI +1F39 0342;1F3F;0399 0314 0342;1F3F;0399 0314 0342; # (Ἱ◌͂; Ἷ; Ι◌̔◌͂; Ἷ; Ι◌̔◌͂; ) GREEK CAPITAL LETTER IOTA WITH DASIA, COMBINING GREEK PERISPOMENI +1F40 0300;1F42;03BF 0313 0300;1F42;03BF 0313 0300; # (ὀ◌̀; ὂ; ο◌̓◌̀; ὂ; ο◌̓◌̀; ) GREEK SMALL LETTER OMICRON WITH PSILI, COMBINING GRAVE ACCENT +1F40 0340;1F42;03BF 0313 0300;1F42;03BF 0313 0300; # (ὀ◌̀; ὂ; ο◌̓◌̀; ὂ; ο◌̓◌̀; ) GREEK SMALL LETTER OMICRON WITH PSILI, COMBINING GRAVE TONE MARK +1F41 0300;1F43;03BF 0314 0300;1F43;03BF 0314 0300; # (ὁ◌̀; ὃ; ο◌̔◌̀; ὃ; ο◌̔◌̀; ) GREEK SMALL LETTER OMICRON WITH DASIA, COMBINING GRAVE ACCENT +1F41 0340;1F43;03BF 0314 0300;1F43;03BF 0314 0300; # (ὁ◌̀; ὃ; ο◌̔◌̀; ὃ; ο◌̔◌̀; ) GREEK SMALL LETTER OMICRON WITH DASIA, COMBINING GRAVE TONE MARK +1F40 0301;1F44;03BF 0313 0301;1F44;03BF 0313 0301; # (ὀ◌́; ὄ; ο◌̓◌́; ὄ; ο◌̓◌́; ) GREEK SMALL LETTER OMICRON WITH PSILI, COMBINING ACUTE ACCENT +1F40 0341;1F44;03BF 0313 0301;1F44;03BF 0313 0301; # (ὀ◌́; ὄ; ο◌̓◌́; ὄ; ο◌̓◌́; ) GREEK SMALL LETTER OMICRON WITH PSILI, COMBINING ACUTE TONE MARK +1F41 0301;1F45;03BF 0314 0301;1F45;03BF 0314 0301; # (ὁ◌́; ὅ; ο◌̔◌́; ὅ; ο◌̔◌́; ) GREEK SMALL LETTER OMICRON WITH DASIA, COMBINING ACUTE ACCENT +1F41 0341;1F45;03BF 0314 0301;1F45;03BF 0314 0301; # (ὁ◌́; ὅ; ο◌̔◌́; ὅ; ο◌̔◌́; ) GREEK SMALL LETTER OMICRON WITH DASIA, COMBINING ACUTE TONE MARK +1F48 0300;1F4A;039F 0313 0300;1F4A;039F 0313 0300; # (Ὀ◌̀; Ὂ; Ο◌̓◌̀; Ὂ; Ο◌̓◌̀; ) GREEK CAPITAL LETTER OMICRON WITH PSILI, COMBINING GRAVE ACCENT +1F48 0340;1F4A;039F 0313 0300;1F4A;039F 0313 0300; # (Ὀ◌̀; Ὂ; Ο◌̓◌̀; Ὂ; Ο◌̓◌̀; ) GREEK CAPITAL LETTER OMICRON WITH PSILI, COMBINING GRAVE TONE MARK +1F49 0300;1F4B;039F 0314 0300;1F4B;039F 0314 0300; # (Ὁ◌̀; Ὃ; Ο◌̔◌̀; Ὃ; Ο◌̔◌̀; ) GREEK CAPITAL LETTER OMICRON WITH DASIA, COMBINING GRAVE ACCENT +1F49 0340;1F4B;039F 0314 0300;1F4B;039F 0314 0300; # (Ὁ◌̀; Ὃ; Ο◌̔◌̀; Ὃ; Ο◌̔◌̀; ) GREEK CAPITAL LETTER OMICRON WITH DASIA, COMBINING GRAVE TONE MARK +1F48 0301;1F4C;039F 0313 0301;1F4C;039F 0313 0301; # (Ὀ◌́; Ὄ; Ο◌̓◌́; Ὄ; Ο◌̓◌́; ) GREEK CAPITAL LETTER OMICRON WITH PSILI, COMBINING ACUTE ACCENT +1F48 0341;1F4C;039F 0313 0301;1F4C;039F 0313 0301; # (Ὀ◌́; Ὄ; Ο◌̓◌́; Ὄ; Ο◌̓◌́; ) GREEK CAPITAL LETTER OMICRON WITH PSILI, COMBINING ACUTE TONE MARK +1F49 0301;1F4D;039F 0314 0301;1F4D;039F 0314 0301; # (Ὁ◌́; Ὅ; Ο◌̔◌́; Ὅ; Ο◌̔◌́; ) GREEK CAPITAL LETTER OMICRON WITH DASIA, COMBINING ACUTE ACCENT +1F49 0341;1F4D;039F 0314 0301;1F4D;039F 0314 0301; # (Ὁ◌́; Ὅ; Ο◌̔◌́; Ὅ; Ο◌̔◌́; ) GREEK CAPITAL LETTER OMICRON WITH DASIA, COMBINING ACUTE TONE MARK +1F50 0300;1F52;03C5 0313 0300;1F52;03C5 0313 0300; # (ὐ◌̀; ὒ; υ◌̓◌̀; ὒ; υ◌̓◌̀; ) GREEK SMALL LETTER UPSILON WITH PSILI, COMBINING GRAVE ACCENT +1F50 0340;1F52;03C5 0313 0300;1F52;03C5 0313 0300; # (ὐ◌̀; ὒ; υ◌̓◌̀; ὒ; υ◌̓◌̀; ) GREEK SMALL LETTER UPSILON WITH PSILI, COMBINING GRAVE TONE MARK +1F51 0300;1F53;03C5 0314 0300;1F53;03C5 0314 0300; # (ὑ◌̀; ὓ; υ◌̔◌̀; ὓ; υ◌̔◌̀; ) GREEK SMALL LETTER UPSILON WITH DASIA, COMBINING GRAVE ACCENT +1F51 0340;1F53;03C5 0314 0300;1F53;03C5 0314 0300; # (ὑ◌̀; ὓ; υ◌̔◌̀; ὓ; υ◌̔◌̀; ) GREEK SMALL LETTER UPSILON WITH DASIA, COMBINING GRAVE TONE MARK +1F50 0301;1F54;03C5 0313 0301;1F54;03C5 0313 0301; # (ὐ◌́; ὔ; υ◌̓◌́; ὔ; υ◌̓◌́; ) GREEK SMALL LETTER UPSILON WITH PSILI, COMBINING ACUTE ACCENT +1F50 0341;1F54;03C5 0313 0301;1F54;03C5 0313 0301; # (ὐ◌́; ὔ; υ◌̓◌́; ὔ; υ◌̓◌́; ) GREEK SMALL LETTER UPSILON WITH PSILI, COMBINING ACUTE TONE MARK +1F51 0301;1F55;03C5 0314 0301;1F55;03C5 0314 0301; # (ὑ◌́; ὕ; υ◌̔◌́; ὕ; υ◌̔◌́; ) GREEK SMALL LETTER UPSILON WITH DASIA, COMBINING ACUTE ACCENT +1F51 0341;1F55;03C5 0314 0301;1F55;03C5 0314 0301; # (ὑ◌́; ὕ; υ◌̔◌́; ὕ; υ◌̔◌́; ) GREEK SMALL LETTER UPSILON WITH DASIA, COMBINING ACUTE TONE MARK +1F50 0342;1F56;03C5 0313 0342;1F56;03C5 0313 0342; # (ὐ◌͂; ὖ; υ◌̓◌͂; ὖ; υ◌̓◌͂; ) GREEK SMALL LETTER UPSILON WITH PSILI, COMBINING GREEK PERISPOMENI +1F51 0342;1F57;03C5 0314 0342;1F57;03C5 0314 0342; # (ὑ◌͂; ὗ; υ◌̔◌͂; ὗ; υ◌̔◌͂; ) GREEK SMALL LETTER UPSILON WITH DASIA, COMBINING GREEK PERISPOMENI +1F59 0300;1F5B;03A5 0314 0300;1F5B;03A5 0314 0300; # (Ὑ◌̀; Ὓ; Υ◌̔◌̀; Ὓ; Υ◌̔◌̀; ) GREEK CAPITAL LETTER UPSILON WITH DASIA, COMBINING GRAVE ACCENT +1F59 0340;1F5B;03A5 0314 0300;1F5B;03A5 0314 0300; # (Ὑ◌̀; Ὓ; Υ◌̔◌̀; Ὓ; Υ◌̔◌̀; ) GREEK CAPITAL LETTER UPSILON WITH DASIA, COMBINING GRAVE TONE MARK +1F59 0301;1F5D;03A5 0314 0301;1F5D;03A5 0314 0301; # (Ὑ◌́; Ὕ; Υ◌̔◌́; Ὕ; Υ◌̔◌́; ) GREEK CAPITAL LETTER UPSILON WITH DASIA, COMBINING ACUTE ACCENT +1F59 0341;1F5D;03A5 0314 0301;1F5D;03A5 0314 0301; # (Ὑ◌́; Ὕ; Υ◌̔◌́; Ὕ; Υ◌̔◌́; ) GREEK CAPITAL LETTER UPSILON WITH DASIA, COMBINING ACUTE TONE MARK +1F59 0342;1F5F;03A5 0314 0342;1F5F;03A5 0314 0342; # (Ὑ◌͂; Ὗ; Υ◌̔◌͂; Ὗ; Υ◌̔◌͂; ) GREEK CAPITAL LETTER UPSILON WITH DASIA, COMBINING GREEK PERISPOMENI +1F60 0300;1F62;03C9 0313 0300;1F62;03C9 0313 0300; # (ὠ◌̀; ὢ; ω◌̓◌̀; ὢ; ω◌̓◌̀; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GRAVE ACCENT +1F60 0340;1F62;03C9 0313 0300;1F62;03C9 0313 0300; # (ὠ◌̀; ὢ; ω◌̓◌̀; ὢ; ω◌̓◌̀; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GRAVE TONE MARK +1F61 0300;1F63;03C9 0314 0300;1F63;03C9 0314 0300; # (ὡ◌̀; ὣ; ω◌̔◌̀; ὣ; ω◌̔◌̀; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GRAVE ACCENT +1F61 0340;1F63;03C9 0314 0300;1F63;03C9 0314 0300; # (ὡ◌̀; ὣ; ω◌̔◌̀; ὣ; ω◌̔◌̀; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GRAVE TONE MARK +1F60 0301;1F64;03C9 0313 0301;1F64;03C9 0313 0301; # (ὠ◌́; ὤ; ω◌̓◌́; ὤ; ω◌̓◌́; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING ACUTE ACCENT +1F60 0341;1F64;03C9 0313 0301;1F64;03C9 0313 0301; # (ὠ◌́; ὤ; ω◌̓◌́; ὤ; ω◌̓◌́; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING ACUTE TONE MARK +1F61 0301;1F65;03C9 0314 0301;1F65;03C9 0314 0301; # (ὡ◌́; ὥ; ω◌̔◌́; ὥ; ω◌̔◌́; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING ACUTE ACCENT +1F61 0341;1F65;03C9 0314 0301;1F65;03C9 0314 0301; # (ὡ◌́; ὥ; ω◌̔◌́; ὥ; ω◌̔◌́; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING ACUTE TONE MARK +1F60 0342;1F66;03C9 0313 0342;1F66;03C9 0313 0342; # (ὠ◌͂; ὦ; ω◌̓◌͂; ὦ; ω◌̓◌͂; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GREEK PERISPOMENI +1F61 0342;1F67;03C9 0314 0342;1F67;03C9 0314 0342; # (ὡ◌͂; ὧ; ω◌̔◌͂; ὧ; ω◌̔◌͂; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GREEK PERISPOMENI +1F68 0300;1F6A;03A9 0313 0300;1F6A;03A9 0313 0300; # (Ὠ◌̀; Ὢ; Ω◌̓◌̀; Ὢ; Ω◌̓◌̀; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GRAVE ACCENT +1F68 0340;1F6A;03A9 0313 0300;1F6A;03A9 0313 0300; # (Ὠ◌̀; Ὢ; Ω◌̓◌̀; Ὢ; Ω◌̓◌̀; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GRAVE TONE MARK +1F69 0300;1F6B;03A9 0314 0300;1F6B;03A9 0314 0300; # (Ὡ◌̀; Ὣ; Ω◌̔◌̀; Ὣ; Ω◌̔◌̀; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GRAVE ACCENT +1F69 0340;1F6B;03A9 0314 0300;1F6B;03A9 0314 0300; # (Ὡ◌̀; Ὣ; Ω◌̔◌̀; Ὣ; Ω◌̔◌̀; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GRAVE TONE MARK +1F68 0301;1F6C;03A9 0313 0301;1F6C;03A9 0313 0301; # (Ὠ◌́; Ὤ; Ω◌̓◌́; Ὤ; Ω◌̓◌́; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING ACUTE ACCENT +1F68 0341;1F6C;03A9 0313 0301;1F6C;03A9 0313 0301; # (Ὠ◌́; Ὤ; Ω◌̓◌́; Ὤ; Ω◌̓◌́; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING ACUTE TONE MARK +1F69 0301;1F6D;03A9 0314 0301;1F6D;03A9 0314 0301; # (Ὡ◌́; Ὥ; Ω◌̔◌́; Ὥ; Ω◌̔◌́; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING ACUTE ACCENT +1F69 0341;1F6D;03A9 0314 0301;1F6D;03A9 0314 0301; # (Ὡ◌́; Ὥ; Ω◌̔◌́; Ὥ; Ω◌̔◌́; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING ACUTE TONE MARK +1F68 0342;1F6E;03A9 0313 0342;1F6E;03A9 0313 0342; # (Ὠ◌͂; Ὦ; Ω◌̓◌͂; Ὦ; Ω◌̓◌͂; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GREEK PERISPOMENI +1F69 0342;1F6F;03A9 0314 0342;1F6F;03A9 0314 0342; # (Ὡ◌͂; Ὧ; Ω◌̔◌͂; Ὧ; Ω◌̔◌͂; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GREEK PERISPOMENI +1F00 0345;1F80;03B1 0313 0345;1F80;03B1 0313 0345; # (ἀ◌ͅ; ᾀ; α◌̓◌ͅ; ᾀ; α◌̓◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI +1FB3 0313;1F80;03B1 0313 0345;1F80;03B1 0313 0345; # (ᾳ◌̓; ᾀ; α◌̓◌ͅ; ᾀ; α◌̓◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE +1FB3 0343;1F80;03B1 0313 0345;1F80;03B1 0313 0345; # (ᾳ◌̓; ᾀ; α◌̓◌ͅ; ᾀ; α◌̓◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS +1F01 0345;1F81;03B1 0314 0345;1F81;03B1 0314 0345; # (ἁ◌ͅ; ᾁ; α◌̔◌ͅ; ᾁ; α◌̔◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI +1FB3 0314;1F81;03B1 0314 0345;1F81;03B1 0314 0345; # (ᾳ◌̔; ᾁ; α◌̔◌ͅ; ᾁ; α◌̔◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE +1F02 0345;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ἂ◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1F80 0300;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ᾀ◌̀; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F80 0340;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ᾀ◌̀; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1F00 0300 0345;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ἀ◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F00 0340 0345;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ἀ◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F00 0345 0300;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ἀ◌ͅ◌̀; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F00 0345 0340;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ἀ◌ͅ◌̀; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FB3 0313 0300;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ᾳ◌̓◌̀; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE ACCENT +1FB3 0313 0340;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ᾳ◌̓◌̀; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE TONE MARK +1FB3 0343 0300;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ᾳ◌̓◌̀; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE ACCENT +1FB3 0343 0340;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ᾳ◌̓◌̀; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE TONE MARK +1F03 0345;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ἃ◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1F81 0300;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ᾁ◌̀; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F81 0340;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ᾁ◌̀; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1F01 0300 0345;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ἁ◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F01 0340 0345;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ἁ◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F01 0345 0300;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ἁ◌ͅ◌̀; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F01 0345 0340;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ἁ◌ͅ◌̀; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FB3 0314 0300;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ᾳ◌̔◌̀; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE ACCENT +1FB3 0314 0340;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ᾳ◌̔◌̀; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE TONE MARK +1F04 0345;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ἄ◌ͅ; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1F80 0301;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ᾀ◌́; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F80 0341;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ᾀ◌́; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1F00 0301 0345;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ἀ◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F00 0341 0345;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ἀ◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F00 0345 0301;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ἀ◌ͅ◌́; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F00 0345 0341;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ἀ◌ͅ◌́; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FB3 0313 0301;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ᾳ◌̓◌́; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE ACCENT +1FB3 0313 0341;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ᾳ◌̓◌́; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE TONE MARK +1FB3 0343 0301;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ᾳ◌̓◌́; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE ACCENT +1FB3 0343 0341;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ᾳ◌̓◌́; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE TONE MARK +1F05 0345;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ἅ◌ͅ; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1F81 0301;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ᾁ◌́; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F81 0341;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ᾁ◌́; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1F01 0301 0345;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ἁ◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F01 0341 0345;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ἁ◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F01 0345 0301;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ἁ◌ͅ◌́; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F01 0345 0341;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ἁ◌ͅ◌́; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FB3 0314 0301;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ᾳ◌̔◌́; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE ACCENT +1FB3 0314 0341;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ᾳ◌̔◌́; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE TONE MARK +1F06 0345;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; # (ἆ◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F80 0342;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; # (ᾀ◌͂; ᾆ; α◌̓◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F00 0342 0345;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; # (ἀ◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F00 0345 0342;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; # (ἀ◌ͅ◌͂; ᾆ; α◌̓◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FB3 0313 0342;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; # (ᾳ◌̓◌͂; ᾆ; α◌̓◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GREEK PERISPOMENI +1FB3 0343 0342;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; # (ᾳ◌̓◌͂; ᾆ; α◌̓◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GREEK PERISPOMENI +1F07 0345;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; # (ἇ◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F81 0342;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; # (ᾁ◌͂; ᾇ; α◌̔◌͂◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F01 0342 0345;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; # (ἁ◌͂◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F01 0345 0342;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; # (ἁ◌ͅ◌͂; ᾇ; α◌̔◌͂◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FB3 0314 0342;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; # (ᾳ◌̔◌͂; ᾇ; α◌̔◌͂◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GREEK PERISPOMENI +1F08 0345;1F88;0391 0313 0345;1F88;0391 0313 0345; # (Ἀ◌ͅ; ᾈ; Α◌̓◌ͅ; ᾈ; Α◌̓◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI +1FBC 0313;1F88;0391 0313 0345;1F88;0391 0313 0345; # (ᾼ◌̓; ᾈ; Α◌̓◌ͅ; ᾈ; Α◌̓◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE +1FBC 0343;1F88;0391 0313 0345;1F88;0391 0313 0345; # (ᾼ◌̓; ᾈ; Α◌̓◌ͅ; ᾈ; Α◌̓◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS +1F09 0345;1F89;0391 0314 0345;1F89;0391 0314 0345; # (Ἁ◌ͅ; ᾉ; Α◌̔◌ͅ; ᾉ; Α◌̔◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI +1FBC 0314;1F89;0391 0314 0345;1F89;0391 0314 0345; # (ᾼ◌̔; ᾉ; Α◌̔◌ͅ; ᾉ; Α◌̔◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE +1F0A 0345;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (Ἂ◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1F88 0300;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (ᾈ◌̀; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI, COMBINING GRAVE ACCENT +1F88 0340;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (ᾈ◌̀; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI, COMBINING GRAVE TONE MARK +1F08 0300 0345;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (Ἀ◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F08 0340 0345;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (Ἀ◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F08 0345 0300;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (Ἀ◌ͅ◌̀; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F08 0345 0340;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (Ἀ◌ͅ◌̀; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FBC 0313 0300;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (ᾼ◌̓◌̀; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE ACCENT +1FBC 0313 0340;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (ᾼ◌̓◌̀; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE TONE MARK +1FBC 0343 0300;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (ᾼ◌̓◌̀; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE ACCENT +1FBC 0343 0340;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (ᾼ◌̓◌̀; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE TONE MARK +1F0B 0345;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (Ἃ◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1F89 0300;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (ᾉ◌̀; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI, COMBINING GRAVE ACCENT +1F89 0340;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (ᾉ◌̀; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI, COMBINING GRAVE TONE MARK +1F09 0300 0345;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (Ἁ◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F09 0340 0345;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (Ἁ◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F09 0345 0300;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (Ἁ◌ͅ◌̀; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F09 0345 0340;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (Ἁ◌ͅ◌̀; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FBC 0314 0300;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (ᾼ◌̔◌̀; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE ACCENT +1FBC 0314 0340;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (ᾼ◌̔◌̀; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE TONE MARK +1F0C 0345;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (Ἄ◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1F88 0301;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (ᾈ◌́; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI, COMBINING ACUTE ACCENT +1F88 0341;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (ᾈ◌́; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI, COMBINING ACUTE TONE MARK +1F08 0301 0345;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (Ἀ◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F08 0341 0345;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (Ἀ◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F08 0345 0301;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (Ἀ◌ͅ◌́; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F08 0345 0341;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (Ἀ◌ͅ◌́; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FBC 0313 0301;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (ᾼ◌̓◌́; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE ACCENT +1FBC 0313 0341;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (ᾼ◌̓◌́; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE TONE MARK +1FBC 0343 0301;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (ᾼ◌̓◌́; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE ACCENT +1FBC 0343 0341;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (ᾼ◌̓◌́; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE TONE MARK +1F0D 0345;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (Ἅ◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1F89 0301;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (ᾉ◌́; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI, COMBINING ACUTE ACCENT +1F89 0341;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (ᾉ◌́; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI, COMBINING ACUTE TONE MARK +1F09 0301 0345;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (Ἁ◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F09 0341 0345;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (Ἁ◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F09 0345 0301;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (Ἁ◌ͅ◌́; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F09 0345 0341;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (Ἁ◌ͅ◌́; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FBC 0314 0301;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (ᾼ◌̔◌́; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE ACCENT +1FBC 0314 0341;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (ᾼ◌̔◌́; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE TONE MARK +1F0E 0345;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; # (Ἆ◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F88 0342;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; # (ᾈ◌͂; ᾎ; Α◌̓◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F08 0342 0345;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; # (Ἀ◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F08 0345 0342;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; # (Ἀ◌ͅ◌͂; ᾎ; Α◌̓◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FBC 0313 0342;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; # (ᾼ◌̓◌͂; ᾎ; Α◌̓◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GREEK PERISPOMENI +1FBC 0343 0342;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; # (ᾼ◌̓◌͂; ᾎ; Α◌̓◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GREEK PERISPOMENI +1F0F 0345;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; # (Ἇ◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F89 0342;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; # (ᾉ◌͂; ᾏ; Α◌̔◌͂◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F09 0342 0345;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; # (Ἁ◌͂◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F09 0345 0342;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; # (Ἁ◌ͅ◌͂; ᾏ; Α◌̔◌͂◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FBC 0314 0342;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; # (ᾼ◌̔◌͂; ᾏ; Α◌̔◌͂◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GREEK PERISPOMENI +1F20 0345;1F90;03B7 0313 0345;1F90;03B7 0313 0345; # (ἠ◌ͅ; ᾐ; η◌̓◌ͅ; ᾐ; η◌̓◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI +1FC3 0313;1F90;03B7 0313 0345;1F90;03B7 0313 0345; # (ῃ◌̓; ᾐ; η◌̓◌ͅ; ᾐ; η◌̓◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE +1FC3 0343;1F90;03B7 0313 0345;1F90;03B7 0313 0345; # (ῃ◌̓; ᾐ; η◌̓◌ͅ; ᾐ; η◌̓◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS +1F21 0345;1F91;03B7 0314 0345;1F91;03B7 0314 0345; # (ἡ◌ͅ; ᾑ; η◌̔◌ͅ; ᾑ; η◌̔◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI +1FC3 0314;1F91;03B7 0314 0345;1F91;03B7 0314 0345; # (ῃ◌̔; ᾑ; η◌̔◌ͅ; ᾑ; η◌̔◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE +1F22 0345;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ἢ◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1F90 0300;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ᾐ◌̀; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F90 0340;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ᾐ◌̀; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1F20 0300 0345;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ἠ◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F20 0340 0345;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ἠ◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F20 0345 0300;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ἠ◌ͅ◌̀; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F20 0345 0340;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ἠ◌ͅ◌̀; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FC3 0313 0300;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ῃ◌̓◌̀; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE ACCENT +1FC3 0313 0340;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ῃ◌̓◌̀; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE TONE MARK +1FC3 0343 0300;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ῃ◌̓◌̀; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE ACCENT +1FC3 0343 0340;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ῃ◌̓◌̀; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE TONE MARK +1F23 0345;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ἣ◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1F91 0300;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ᾑ◌̀; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F91 0340;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ᾑ◌̀; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1F21 0300 0345;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ἡ◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F21 0340 0345;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ἡ◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F21 0345 0300;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ἡ◌ͅ◌̀; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F21 0345 0340;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ἡ◌ͅ◌̀; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FC3 0314 0300;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ῃ◌̔◌̀; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE ACCENT +1FC3 0314 0340;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ῃ◌̔◌̀; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE TONE MARK +1F24 0345;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ἤ◌ͅ; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1F90 0301;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ᾐ◌́; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F90 0341;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ᾐ◌́; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1F20 0301 0345;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ἠ◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F20 0341 0345;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ἠ◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F20 0345 0301;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ἠ◌ͅ◌́; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F20 0345 0341;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ἠ◌ͅ◌́; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FC3 0313 0301;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ῃ◌̓◌́; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE ACCENT +1FC3 0313 0341;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ῃ◌̓◌́; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE TONE MARK +1FC3 0343 0301;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ῃ◌̓◌́; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE ACCENT +1FC3 0343 0341;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ῃ◌̓◌́; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE TONE MARK +1F25 0345;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ἥ◌ͅ; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1F91 0301;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ᾑ◌́; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F91 0341;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ᾑ◌́; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1F21 0301 0345;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ἡ◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F21 0341 0345;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ἡ◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F21 0345 0301;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ἡ◌ͅ◌́; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F21 0345 0341;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ἡ◌ͅ◌́; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FC3 0314 0301;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ῃ◌̔◌́; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE ACCENT +1FC3 0314 0341;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ῃ◌̔◌́; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE TONE MARK +1F26 0345;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; # (ἦ◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F90 0342;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; # (ᾐ◌͂; ᾖ; η◌̓◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F20 0342 0345;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; # (ἠ◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F20 0345 0342;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; # (ἠ◌ͅ◌͂; ᾖ; η◌̓◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FC3 0313 0342;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; # (ῃ◌̓◌͂; ᾖ; η◌̓◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GREEK PERISPOMENI +1FC3 0343 0342;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; # (ῃ◌̓◌͂; ᾖ; η◌̓◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GREEK PERISPOMENI +1F27 0345;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; # (ἧ◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F91 0342;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; # (ᾑ◌͂; ᾗ; η◌̔◌͂◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F21 0342 0345;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; # (ἡ◌͂◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F21 0345 0342;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; # (ἡ◌ͅ◌͂; ᾗ; η◌̔◌͂◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FC3 0314 0342;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; # (ῃ◌̔◌͂; ᾗ; η◌̔◌͂◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GREEK PERISPOMENI +1F28 0345;1F98;0397 0313 0345;1F98;0397 0313 0345; # (Ἠ◌ͅ; ᾘ; Η◌̓◌ͅ; ᾘ; Η◌̓◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI +1FCC 0313;1F98;0397 0313 0345;1F98;0397 0313 0345; # (ῌ◌̓; ᾘ; Η◌̓◌ͅ; ᾘ; Η◌̓◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE +1FCC 0343;1F98;0397 0313 0345;1F98;0397 0313 0345; # (ῌ◌̓; ᾘ; Η◌̓◌ͅ; ᾘ; Η◌̓◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS +1F29 0345;1F99;0397 0314 0345;1F99;0397 0314 0345; # (Ἡ◌ͅ; ᾙ; Η◌̔◌ͅ; ᾙ; Η◌̔◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI +1FCC 0314;1F99;0397 0314 0345;1F99;0397 0314 0345; # (ῌ◌̔; ᾙ; Η◌̔◌ͅ; ᾙ; Η◌̔◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE +1F2A 0345;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (Ἢ◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1F98 0300;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (ᾘ◌̀; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI, COMBINING GRAVE ACCENT +1F98 0340;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (ᾘ◌̀; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI, COMBINING GRAVE TONE MARK +1F28 0300 0345;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (Ἠ◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F28 0340 0345;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (Ἠ◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F28 0345 0300;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (Ἠ◌ͅ◌̀; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F28 0345 0340;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (Ἠ◌ͅ◌̀; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FCC 0313 0300;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (ῌ◌̓◌̀; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE ACCENT +1FCC 0313 0340;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (ῌ◌̓◌̀; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE TONE MARK +1FCC 0343 0300;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (ῌ◌̓◌̀; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE ACCENT +1FCC 0343 0340;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (ῌ◌̓◌̀; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE TONE MARK +1F2B 0345;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (Ἣ◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1F99 0300;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (ᾙ◌̀; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI, COMBINING GRAVE ACCENT +1F99 0340;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (ᾙ◌̀; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI, COMBINING GRAVE TONE MARK +1F29 0300 0345;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (Ἡ◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F29 0340 0345;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (Ἡ◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F29 0345 0300;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (Ἡ◌ͅ◌̀; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F29 0345 0340;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (Ἡ◌ͅ◌̀; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FCC 0314 0300;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (ῌ◌̔◌̀; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE ACCENT +1FCC 0314 0340;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (ῌ◌̔◌̀; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE TONE MARK +1F2C 0345;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (Ἤ◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1F98 0301;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (ᾘ◌́; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI, COMBINING ACUTE ACCENT +1F98 0341;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (ᾘ◌́; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI, COMBINING ACUTE TONE MARK +1F28 0301 0345;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (Ἠ◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F28 0341 0345;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (Ἠ◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F28 0345 0301;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (Ἠ◌ͅ◌́; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F28 0345 0341;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (Ἠ◌ͅ◌́; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FCC 0313 0301;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (ῌ◌̓◌́; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE ACCENT +1FCC 0313 0341;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (ῌ◌̓◌́; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE TONE MARK +1FCC 0343 0301;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (ῌ◌̓◌́; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE ACCENT +1FCC 0343 0341;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (ῌ◌̓◌́; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE TONE MARK +1F2D 0345;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (Ἥ◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1F99 0301;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (ᾙ◌́; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI, COMBINING ACUTE ACCENT +1F99 0341;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (ᾙ◌́; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI, COMBINING ACUTE TONE MARK +1F29 0301 0345;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (Ἡ◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F29 0341 0345;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (Ἡ◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F29 0345 0301;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (Ἡ◌ͅ◌́; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F29 0345 0341;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (Ἡ◌ͅ◌́; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FCC 0314 0301;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (ῌ◌̔◌́; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE ACCENT +1FCC 0314 0341;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (ῌ◌̔◌́; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE TONE MARK +1F2E 0345;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; # (Ἦ◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F98 0342;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; # (ᾘ◌͂; ᾞ; Η◌̓◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F28 0342 0345;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; # (Ἠ◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F28 0345 0342;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; # (Ἠ◌ͅ◌͂; ᾞ; Η◌̓◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FCC 0313 0342;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; # (ῌ◌̓◌͂; ᾞ; Η◌̓◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GREEK PERISPOMENI +1FCC 0343 0342;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; # (ῌ◌̓◌͂; ᾞ; Η◌̓◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GREEK PERISPOMENI +1F2F 0345;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; # (Ἧ◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F99 0342;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; # (ᾙ◌͂; ᾟ; Η◌̔◌͂◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F29 0342 0345;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; # (Ἡ◌͂◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F29 0345 0342;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; # (Ἡ◌ͅ◌͂; ᾟ; Η◌̔◌͂◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FCC 0314 0342;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; # (ῌ◌̔◌͂; ᾟ; Η◌̔◌͂◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GREEK PERISPOMENI +1F60 0345;1FA0;03C9 0313 0345;1FA0;03C9 0313 0345; # (ὠ◌ͅ; ᾠ; ω◌̓◌ͅ; ᾠ; ω◌̓◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI +1FF3 0313;1FA0;03C9 0313 0345;1FA0;03C9 0313 0345; # (ῳ◌̓; ᾠ; ω◌̓◌ͅ; ᾠ; ω◌̓◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE +1FF3 0343;1FA0;03C9 0313 0345;1FA0;03C9 0313 0345; # (ῳ◌̓; ᾠ; ω◌̓◌ͅ; ᾠ; ω◌̓◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS +1F61 0345;1FA1;03C9 0314 0345;1FA1;03C9 0314 0345; # (ὡ◌ͅ; ᾡ; ω◌̔◌ͅ; ᾡ; ω◌̔◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI +1FF3 0314;1FA1;03C9 0314 0345;1FA1;03C9 0314 0345; # (ῳ◌̔; ᾡ; ω◌̔◌ͅ; ᾡ; ω◌̔◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE +1F62 0345;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ὢ◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1FA0 0300;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ᾠ◌̀; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1FA0 0340;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ᾠ◌̀; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1F60 0300 0345;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ὠ◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F60 0340 0345;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ὠ◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F60 0345 0300;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ὠ◌ͅ◌̀; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F60 0345 0340;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ὠ◌ͅ◌̀; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FF3 0313 0300;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ῳ◌̓◌̀; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE ACCENT +1FF3 0313 0340;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ῳ◌̓◌̀; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE TONE MARK +1FF3 0343 0300;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ῳ◌̓◌̀; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE ACCENT +1FF3 0343 0340;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ῳ◌̓◌̀; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE TONE MARK +1F63 0345;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ὣ◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1FA1 0300;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ᾡ◌̀; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1FA1 0340;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ᾡ◌̀; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1F61 0300 0345;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ὡ◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F61 0340 0345;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ὡ◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F61 0345 0300;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ὡ◌ͅ◌̀; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F61 0345 0340;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ὡ◌ͅ◌̀; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FF3 0314 0300;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ῳ◌̔◌̀; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE ACCENT +1FF3 0314 0340;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ῳ◌̔◌̀; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE TONE MARK +1F64 0345;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ὤ◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1FA0 0301;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ᾠ◌́; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1FA0 0341;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ᾠ◌́; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1F60 0301 0345;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ὠ◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F60 0341 0345;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ὠ◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F60 0345 0301;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ὠ◌ͅ◌́; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F60 0345 0341;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ὠ◌ͅ◌́; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FF3 0313 0301;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ῳ◌̓◌́; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE ACCENT +1FF3 0313 0341;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ῳ◌̓◌́; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE TONE MARK +1FF3 0343 0301;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ῳ◌̓◌́; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE ACCENT +1FF3 0343 0341;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ῳ◌̓◌́; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE TONE MARK +1F65 0345;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ὥ◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1FA1 0301;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ᾡ◌́; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1FA1 0341;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ᾡ◌́; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1F61 0301 0345;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ὡ◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F61 0341 0345;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ὡ◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F61 0345 0301;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ὡ◌ͅ◌́; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F61 0345 0341;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ὡ◌ͅ◌́; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FF3 0314 0301;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ῳ◌̔◌́; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE ACCENT +1FF3 0314 0341;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ῳ◌̔◌́; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE TONE MARK +1F66 0345;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; # (ὦ◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1FA0 0342;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; # (ᾠ◌͂; ᾦ; ω◌̓◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F60 0342 0345;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; # (ὠ◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F60 0345 0342;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; # (ὠ◌ͅ◌͂; ᾦ; ω◌̓◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FF3 0313 0342;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; # (ῳ◌̓◌͂; ᾦ; ω◌̓◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GREEK PERISPOMENI +1FF3 0343 0342;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; # (ῳ◌̓◌͂; ᾦ; ω◌̓◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GREEK PERISPOMENI +1F67 0345;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; # (ὧ◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1FA1 0342;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; # (ᾡ◌͂; ᾧ; ω◌̔◌͂◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F61 0342 0345;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; # (ὡ◌͂◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F61 0345 0342;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; # (ὡ◌ͅ◌͂; ᾧ; ω◌̔◌͂◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FF3 0314 0342;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; # (ῳ◌̔◌͂; ᾧ; ω◌̔◌͂◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GREEK PERISPOMENI +1F68 0345;1FA8;03A9 0313 0345;1FA8;03A9 0313 0345; # (Ὠ◌ͅ; ᾨ; Ω◌̓◌ͅ; ᾨ; Ω◌̓◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI +1FFC 0313;1FA8;03A9 0313 0345;1FA8;03A9 0313 0345; # (ῼ◌̓; ᾨ; Ω◌̓◌ͅ; ᾨ; Ω◌̓◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE +1FFC 0343;1FA8;03A9 0313 0345;1FA8;03A9 0313 0345; # (ῼ◌̓; ᾨ; Ω◌̓◌ͅ; ᾨ; Ω◌̓◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS +1F69 0345;1FA9;03A9 0314 0345;1FA9;03A9 0314 0345; # (Ὡ◌ͅ; ᾩ; Ω◌̔◌ͅ; ᾩ; Ω◌̔◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI +1FFC 0314;1FA9;03A9 0314 0345;1FA9;03A9 0314 0345; # (ῼ◌̔; ᾩ; Ω◌̔◌ͅ; ᾩ; Ω◌̔◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE +1F6A 0345;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (Ὢ◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1FA8 0300;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (ᾨ◌̀; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI, COMBINING GRAVE ACCENT +1FA8 0340;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (ᾨ◌̀; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI, COMBINING GRAVE TONE MARK +1F68 0300 0345;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (Ὠ◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F68 0340 0345;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (Ὠ◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F68 0345 0300;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (Ὠ◌ͅ◌̀; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F68 0345 0340;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (Ὠ◌ͅ◌̀; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FFC 0313 0300;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (ῼ◌̓◌̀; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE ACCENT +1FFC 0313 0340;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (ῼ◌̓◌̀; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GRAVE TONE MARK +1FFC 0343 0300;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (ῼ◌̓◌̀; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE ACCENT +1FFC 0343 0340;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (ῼ◌̓◌̀; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GRAVE TONE MARK +1F6B 0345;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (Ὣ◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA, COMBINING GREEK YPOGEGRAMMENI +1FA9 0300;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (ᾩ◌̀; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI, COMBINING GRAVE ACCENT +1FA9 0340;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (ᾩ◌̀; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI, COMBINING GRAVE TONE MARK +1F69 0300 0345;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (Ὡ◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GRAVE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F69 0340 0345;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (Ὡ◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GRAVE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F69 0345 0300;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (Ὡ◌ͅ◌̀; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1F69 0345 0340;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (Ὡ◌ͅ◌̀; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +1FFC 0314 0300;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (ῼ◌̔◌̀; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE ACCENT +1FFC 0314 0340;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (ῼ◌̔◌̀; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GRAVE TONE MARK +1F6C 0345;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (Ὤ◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1FA8 0301;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (ᾨ◌́; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI, COMBINING ACUTE ACCENT +1FA8 0341;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (ᾨ◌́; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI, COMBINING ACUTE TONE MARK +1F68 0301 0345;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (Ὠ◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F68 0341 0345;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (Ὠ◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F68 0345 0301;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (Ὠ◌ͅ◌́; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F68 0345 0341;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (Ὠ◌ͅ◌́; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FFC 0313 0301;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (ῼ◌̓◌́; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE ACCENT +1FFC 0313 0341;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (ῼ◌̓◌́; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING ACUTE TONE MARK +1FFC 0343 0301;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (ῼ◌̓◌́; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE ACCENT +1FFC 0343 0341;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (ῼ◌̓◌́; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING ACUTE TONE MARK +1F6D 0345;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (Ὥ◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA, COMBINING GREEK YPOGEGRAMMENI +1FA9 0301;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (ᾩ◌́; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI, COMBINING ACUTE ACCENT +1FA9 0341;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (ᾩ◌́; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI, COMBINING ACUTE TONE MARK +1F69 0301 0345;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (Ὡ◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING ACUTE ACCENT, COMBINING GREEK YPOGEGRAMMENI +1F69 0341 0345;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (Ὡ◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING ACUTE TONE MARK, COMBINING GREEK YPOGEGRAMMENI +1F69 0345 0301;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (Ὡ◌ͅ◌́; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1F69 0345 0341;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (Ὡ◌ͅ◌́; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FFC 0314 0301;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (ῼ◌̔◌́; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE ACCENT +1FFC 0314 0341;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (ῼ◌̔◌́; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING ACUTE TONE MARK +1F6E 0345;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; # (Ὦ◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1FA8 0342;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; # (ᾨ◌͂; ᾮ; Ω◌̓◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F68 0342 0345;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; # (Ὠ◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F68 0345 0342;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; # (Ὠ◌ͅ◌͂; ᾮ; Ω◌̓◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FFC 0313 0342;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; # (ῼ◌̓◌͂; ᾮ; Ω◌̓◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING COMMA ABOVE, COMBINING GREEK PERISPOMENI +1FFC 0343 0342;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; # (ῼ◌̓◌͂; ᾮ; Ω◌̓◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING GREEK KORONIS, COMBINING GREEK PERISPOMENI +1F6F 0345;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; # (Ὧ◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1FA9 0342;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; # (ᾩ◌͂; ᾯ; Ω◌̔◌͂◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI, COMBINING GREEK PERISPOMENI +1F69 0342 0345;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; # (Ὡ◌͂◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F69 0345 0342;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; # (Ὡ◌ͅ◌͂; ᾯ; Ω◌̔◌͂◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FFC 0314 0342;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; # (ῼ◌̔◌͂; ᾯ; Ω◌̔◌͂◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, COMBINING REVERSED COMMA ABOVE, COMBINING GREEK PERISPOMENI +1F70 0345;1FB2;03B1 0300 0345;1FB2;03B1 0300 0345; # (ὰ◌ͅ; ᾲ; α◌̀◌ͅ; ᾲ; α◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH VARIA, COMBINING GREEK YPOGEGRAMMENI +1FB3 0300;1FB2;03B1 0300 0345;1FB2;03B1 0300 0345; # (ᾳ◌̀; ᾲ; α◌̀◌ͅ; ᾲ; α◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1FB3 0340;1FB2;03B1 0300 0345;1FB2;03B1 0300 0345; # (ᾳ◌̀; ᾲ; α◌̀◌ͅ; ᾲ; α◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +03AC 0345;1FB4;03B1 0301 0345;1FB4;03B1 0301 0345; # (ά◌ͅ; ᾴ; α◌́◌ͅ; ᾴ; α◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH TONOS, COMBINING GREEK YPOGEGRAMMENI +1F71 0345;1FB4;03B1 0301 0345;1FB4;03B1 0301 0345; # (ά◌ͅ; ᾴ; α◌́◌ͅ; ᾴ; α◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH OXIA, COMBINING GREEK YPOGEGRAMMENI +1FB3 0301;1FB4;03B1 0301 0345;1FB4;03B1 0301 0345; # (ᾳ◌́; ᾴ; α◌́◌ͅ; ᾴ; α◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1FB3 0341;1FB4;03B1 0301 0345;1FB4;03B1 0301 0345; # (ᾳ◌́; ᾴ; α◌́◌ͅ; ᾴ; α◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FB3 0342;1FB7;03B1 0342 0345;1FB7;03B1 0342 0345; # (ᾳ◌͂; ᾷ; α◌͂◌ͅ; ᾷ; α◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FB6 0345;1FB7;03B1 0342 0345;1FB7;03B1 0342 0345; # (ᾶ◌ͅ; ᾷ; α◌͂◌ͅ; ᾷ; α◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +1F74 0345;1FC2;03B7 0300 0345;1FC2;03B7 0300 0345; # (ὴ◌ͅ; ῂ; η◌̀◌ͅ; ῂ; η◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH VARIA, COMBINING GREEK YPOGEGRAMMENI +1FC3 0300;1FC2;03B7 0300 0345;1FC2;03B7 0300 0345; # (ῃ◌̀; ῂ; η◌̀◌ͅ; ῂ; η◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1FC3 0340;1FC2;03B7 0300 0345;1FC2;03B7 0300 0345; # (ῃ◌̀; ῂ; η◌̀◌ͅ; ῂ; η◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +03AE 0345;1FC4;03B7 0301 0345;1FC4;03B7 0301 0345; # (ή◌ͅ; ῄ; η◌́◌ͅ; ῄ; η◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH TONOS, COMBINING GREEK YPOGEGRAMMENI +1F75 0345;1FC4;03B7 0301 0345;1FC4;03B7 0301 0345; # (ή◌ͅ; ῄ; η◌́◌ͅ; ῄ; η◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH OXIA, COMBINING GREEK YPOGEGRAMMENI +1FC3 0301;1FC4;03B7 0301 0345;1FC4;03B7 0301 0345; # (ῃ◌́; ῄ; η◌́◌ͅ; ῄ; η◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1FC3 0341;1FC4;03B7 0301 0345;1FC4;03B7 0301 0345; # (ῃ◌́; ῄ; η◌́◌ͅ; ῄ; η◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FC3 0342;1FC7;03B7 0342 0345;1FC7;03B7 0342 0345; # (ῃ◌͂; ῇ; η◌͂◌ͅ; ῇ; η◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FC6 0345;1FC7;03B7 0342 0345;1FC7;03B7 0342 0345; # (ῆ◌ͅ; ῇ; η◌͂◌ͅ; ῇ; η◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +03CA 0300;1FD2;03B9 0308 0300;1FD2;03B9 0308 0300; # (ϊ◌̀; ῒ; ι◌̈◌̀; ῒ; ι◌̈◌̀; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA, COMBINING GRAVE ACCENT +03CA 0340;1FD2;03B9 0308 0300;1FD2;03B9 0308 0300; # (ϊ◌̀; ῒ; ι◌̈◌̀; ῒ; ι◌̈◌̀; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA, COMBINING GRAVE TONE MARK +03B9 0344;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ι◌̈́; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA, COMBINING GREEK DIALYTIKA TONOS +03CA 0301;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ϊ◌́; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA, COMBINING ACUTE ACCENT +03CA 0341;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ϊ◌́; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA, COMBINING ACUTE TONE MARK +1FBE 0344;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ι◌̈́; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK PROSGEGRAMMENI, COMBINING GREEK DIALYTIKA TONOS +03CA 0342;1FD7;03B9 0308 0342;1FD7;03B9 0308 0342; # (ϊ◌͂; ῗ; ι◌̈◌͂; ῗ; ι◌̈◌͂; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA, COMBINING GREEK PERISPOMENI +03CB 0300;1FE2;03C5 0308 0300;1FE2;03C5 0308 0300; # (ϋ◌̀; ῢ; υ◌̈◌̀; ῢ; υ◌̈◌̀; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA, COMBINING GRAVE ACCENT +03CB 0340;1FE2;03C5 0308 0300;1FE2;03C5 0308 0300; # (ϋ◌̀; ῢ; υ◌̈◌̀; ῢ; υ◌̈◌̀; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA, COMBINING GRAVE TONE MARK +03C5 0344;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (υ◌̈́; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON, COMBINING GREEK DIALYTIKA TONOS +03CB 0301;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (ϋ◌́; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA, COMBINING ACUTE ACCENT +03CB 0341;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (ϋ◌́; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA, COMBINING ACUTE TONE MARK +03CB 0342;1FE7;03C5 0308 0342;1FE7;03C5 0308 0342; # (ϋ◌͂; ῧ; υ◌̈◌͂; ῧ; υ◌̈◌͂; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA, COMBINING GREEK PERISPOMENI +1F7C 0345;1FF2;03C9 0300 0345;1FF2;03C9 0300 0345; # (ὼ◌ͅ; ῲ; ω◌̀◌ͅ; ῲ; ω◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH VARIA, COMBINING GREEK YPOGEGRAMMENI +1FF3 0300;1FF2;03C9 0300 0345;1FF2;03C9 0300 0345; # (ῳ◌̀; ῲ; ω◌̀◌ͅ; ῲ; ω◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GRAVE ACCENT +1FF3 0340;1FF2;03C9 0300 0345;1FF2;03C9 0300 0345; # (ῳ◌̀; ῲ; ω◌̀◌ͅ; ῲ; ω◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GRAVE TONE MARK +03CE 0345;1FF4;03C9 0301 0345;1FF4;03C9 0301 0345; # (ώ◌ͅ; ῴ; ω◌́◌ͅ; ῴ; ω◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH TONOS, COMBINING GREEK YPOGEGRAMMENI +1F7D 0345;1FF4;03C9 0301 0345;1FF4;03C9 0301 0345; # (ώ◌ͅ; ῴ; ω◌́◌ͅ; ῴ; ω◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH OXIA, COMBINING GREEK YPOGEGRAMMENI +1FF3 0301;1FF4;03C9 0301 0345;1FF4;03C9 0301 0345; # (ῳ◌́; ῴ; ω◌́◌ͅ; ῴ; ω◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING ACUTE ACCENT +1FF3 0341;1FF4;03C9 0301 0345;1FF4;03C9 0301 0345; # (ῳ◌́; ῴ; ω◌́◌ͅ; ῴ; ω◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING ACUTE TONE MARK +1FF3 0342;1FF7;03C9 0342 0345;1FF7;03C9 0342 0345; # (ῳ◌͂; ῷ; ω◌͂◌ͅ; ῷ; ω◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, COMBINING GREEK PERISPOMENI +1FF6 0345;1FF7;03C9 0342 0345;1FF7;03C9 0342 0345; # (ῶ◌ͅ; ῷ; ω◌͂◌ͅ; ῷ; ω◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI +FB2A 05BC;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1; # (שׁ◌ּ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ) HEBREW LETTER SHIN WITH SHIN DOT, HEBREW POINT DAGESH OR MAPIQ +FB49 05C1;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1; # (שּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ) HEBREW LETTER SHIN WITH DAGESH, HEBREW POINT SHIN DOT +FB2B 05BC;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2; # (שׂ◌ּ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ) HEBREW LETTER SHIN WITH SIN DOT, HEBREW POINT DAGESH OR MAPIQ +FB49 05C2;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2; # (שּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ) HEBREW LETTER SHIN WITH DAGESH, HEBREW POINT SIN DOT +1611E 16123;16126;1611E 1611E 1611F;16126;1611E 1611E 1611F; # (◌𖄞◌𖄣; ◌𖄦; ◌𖄞◌𖄞◌𖄟; ◌𖄦; ◌𖄞◌𖄞◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN E +16121 1611F;16126;1611E 1611E 1611F;16126;1611E 1611E 1611F; # (◌𖄡◌𖄟; ◌𖄦; ◌𖄞◌𖄞◌𖄟; ◌𖄦; ◌𖄞◌𖄞◌𖄟; ) GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN I +1611E 16124;16127;1611E 16129 1611F;16127;1611E 16129 1611F; # (◌𖄞◌𖄤; ◌𖄧; ◌𖄞◌𖄩◌𖄟; ◌𖄧; ◌𖄞◌𖄩◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN EE +16122 1611F;16127;1611E 16129 1611F;16127;1611E 16129 1611F; # (◌𖄢◌𖄟; ◌𖄧; ◌𖄞◌𖄩◌𖄟; ◌𖄧; ◌𖄞◌𖄩◌𖄟; ) GURUNG KHEMA VOWEL SIGN UU, GURUNG KHEMA VOWEL SIGN I +1611E 16125;16128;1611E 1611E 16120;16128;1611E 1611E 16120; # (◌𖄞◌𖄥; ◌𖄨; ◌𖄞◌𖄞◌𖄠; ◌𖄨; ◌𖄞◌𖄞◌𖄠; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN AI +16121 16120;16128;1611E 1611E 16120;16128;1611E 1611E 16120; # (◌𖄡◌𖄠; ◌𖄨; ◌𖄞◌𖄞◌𖄠; ◌𖄨; ◌𖄞◌𖄞◌𖄠; ) GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN II +16D63 16D68;16D6A;16D63 16D67 16D67;16D6A;16D63 16D67 16D67; # (𖵪; 𖵪; 𖵪; 𖵪; 𖵪; ) KIRAT RAI VOWEL SIGN AA, KIRAT RAI VOWEL SIGN AI +16D69 16D67;16D6A;16D63 16D67 16D67;16D6A;16D63 16D67 16D67; # (𖵪; 𖵪; 𖵪; 𖵪; 𖵪; ) KIRAT RAI VOWEL SIGN O, KIRAT RAI VOWEL SIGN E +1D15F 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E; # (𝅘𝅥𝅮; 𝅘𝅥𝅮; 𝅘𝅥𝅮; 𝅘𝅥𝅮; 𝅘𝅥𝅮; ) MUSICAL SYMBOL QUARTER NOTE, MUSICAL SYMBOL COMBINING FLAG-1 +1D15F 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F; # (𝅘𝅥𝅯; 𝅘𝅥𝅯; 𝅘𝅥𝅯; 𝅘𝅥𝅯; 𝅘𝅥𝅯; ) MUSICAL SYMBOL QUARTER NOTE, MUSICAL SYMBOL COMBINING FLAG-2 +1D15F 1D170;1D158 1D165 1D170;1D158 1D165 1D170;1D158 1D165 1D170;1D158 1D165 1D170; # (𝅘𝅥𝅰; 𝅘𝅥𝅰; 𝅘𝅥𝅰; 𝅘𝅥𝅰; 𝅘𝅥𝅰; ) MUSICAL SYMBOL QUARTER NOTE, MUSICAL SYMBOL COMBINING FLAG-3 +1D15F 1D171;1D158 1D165 1D171;1D158 1D165 1D171;1D158 1D165 1D171;1D158 1D165 1D171; # (𝅘𝅥𝅱; 𝅘𝅥𝅱; 𝅘𝅥𝅱; 𝅘𝅥𝅱; 𝅘𝅥𝅱; ) MUSICAL SYMBOL QUARTER NOTE, MUSICAL SYMBOL COMBINING FLAG-4 +1D15F 1D172;1D158 1D165 1D172;1D158 1D165 1D172;1D158 1D165 1D172;1D158 1D165 1D172; # (𝅘𝅥𝅲; 𝅘𝅥𝅲; 𝅘𝅥𝅲; 𝅘𝅥𝅲; 𝅘𝅥𝅲; ) MUSICAL SYMBOL QUARTER NOTE, MUSICAL SYMBOL COMBINING FLAG-5 +1D1BB 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E; # (𝆹𝅥𝅮; 𝆹𝅥𝅮; 𝆹𝅥𝅮; 𝆹𝅥𝅮; 𝆹𝅥𝅮; ) MUSICAL SYMBOL MINIMA, MUSICAL SYMBOL COMBINING FLAG-1 +1D1BC 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E; # (𝆺𝅥𝅮; 𝆺𝅥𝅮; 𝆺𝅥𝅮; 𝆺𝅥𝅮; 𝆺𝅥𝅮; ) MUSICAL SYMBOL MINIMA BLACK, MUSICAL SYMBOL COMBINING FLAG-1 +1D1BB 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F; # (𝆹𝅥𝅯; 𝆹𝅥𝅯; 𝆹𝅥𝅯; 𝆹𝅥𝅯; 𝆹𝅥𝅯; ) MUSICAL SYMBOL MINIMA, MUSICAL SYMBOL COMBINING FLAG-2 +1D1BC 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F; # (𝆺𝅥𝅯; 𝆺𝅥𝅯; 𝆺𝅥𝅯; 𝆺𝅥𝅯; 𝆺𝅥𝅯; ) MUSICAL SYMBOL MINIMA BLACK, MUSICAL SYMBOL COMBINING FLAG-2 +# +@Part5 # Chained primary composites +# +1138B 113C7;1138E 113B8;1138B 113C2 113B8;1138E 113B8;1138B 113C2 113B8; # (𑎎𑎸; 𑎎𑎸; 𑎎𑎸; 𑎎𑎸; 𑎎𑎸; ) TULU-TIGALARI LETTER EE, TULU-TIGALARI VOWEL SIGN OO +113C2 113C7;113C5 113B8;113C2 113C2 113B8;113C5 113B8;113C2 113C2 113B8; # (𑏅𑎸; 𑏅𑎸; 𑏅𑎸; 𑏅𑎸; 𑏅𑎸; ) TULU-TIGALARI VOWEL SIGN EE, TULU-TIGALARI VOWEL SIGN OO +1138B 113C5;1138E 113C2;1138B 113C2 113C2;1138E 113C2;1138B 113C2 113C2; # (𑎎𑏂; 𑎎𑏂; 𑎎𑏂; 𑎎𑏂; 𑎎𑏂; ) TULU-TIGALARI LETTER EE, TULU-TIGALARI VOWEL SIGN AI +1138B 113C5 113C2;1138E 113C5;1138B 113C2 113C2 113C2;1138E 113C5;1138B 113C2 113C2 113C2; # (𑎎𑏅; 𑎎𑏅; 𑎎𑏅; 𑎎𑏅; 𑎎𑏅; ) TULU-TIGALARI LETTER EE, TULU-TIGALARI VOWEL SIGN AI, TULU-TIGALARI VOWEL SIGN EE +1138B 113C5 113B8;1138E 113C7;1138B 113C2 113C2 113B8;1138E 113C7;1138B 113C2 113C2 113B8; # (𑎎𑏇; 𑎎𑏇; 𑎎𑏇; 𑎎𑏇; 𑎎𑏇; ) TULU-TIGALARI LETTER EE, TULU-TIGALARI VOWEL SIGN AI, TULU-TIGALARI VOWEL SIGN AA +1138B 113C5 113C9;1138E 113C8;1138B 113C2 113C2 113C9;1138E 113C8;1138B 113C2 113C2 113C9; # (𑎎𑏈; 𑎎𑏈; 𑎎𑏈; 𑎎𑏈; 𑎎𑏈; ) TULU-TIGALARI LETTER EE, TULU-TIGALARI VOWEL SIGN AI, TULU-TIGALARI AU LENGTH MARK +113C2 113C5;113C5 113C2;113C2 113C2 113C2;113C5 113C2;113C2 113C2 113C2; # (𑏅𑏂; 𑏅𑏂; 𑏅𑏂; 𑏅𑏂; 𑏅𑏂; ) TULU-TIGALARI VOWEL SIGN EE, TULU-TIGALARI VOWEL SIGN AI +113C2 113C5 113C2;113C5 113C5;113C2 113C2 113C2 113C2;113C5 113C5;113C2 113C2 113C2 113C2; # (𑏅𑏅; 𑏅𑏅; 𑏅𑏅; 𑏅𑏅; 𑏅𑏅; ) TULU-TIGALARI VOWEL SIGN EE, TULU-TIGALARI VOWEL SIGN AI, TULU-TIGALARI VOWEL SIGN EE +113C2 113C5 113B8;113C5 113C7;113C2 113C2 113C2 113B8;113C5 113C7;113C2 113C2 113C2 113B8; # (𑏅𑏇; 𑏅𑏇; 𑏅𑏇; 𑏅𑏇; 𑏅𑏇; ) TULU-TIGALARI VOWEL SIGN EE, TULU-TIGALARI VOWEL SIGN AI, TULU-TIGALARI VOWEL SIGN AA +113C2 113C5 113C9;113C5 113C8;113C2 113C2 113C2 113C9;113C5 113C8;113C2 113C2 113C2 113C9; # (𑏅𑏈; 𑏅𑏈; 𑏅𑏈; 𑏅𑏈; 𑏅𑏈; ) TULU-TIGALARI VOWEL SIGN EE, TULU-TIGALARI VOWEL SIGN AI, TULU-TIGALARI AU LENGTH MARK +1138B 113C8;1138E 113C9;1138B 113C2 113C9;1138E 113C9;1138B 113C2 113C9; # (𑎎𑏉; 𑎎𑏉; 𑎎𑏉; 𑎎𑏉; 𑎎𑏉; ) TULU-TIGALARI LETTER EE, TULU-TIGALARI VOWEL SIGN AU +113C2 113C8;113C5 113C9;113C2 113C2 113C9;113C5 113C9;113C2 113C2 113C9; # (𑏅𑏉; 𑏅𑏉; 𑏅𑏉; 𑏅𑏉; 𑏅𑏉; ) TULU-TIGALARI VOWEL SIGN EE, TULU-TIGALARI VOWEL SIGN AU +16121 1611E 1611F;16121 16123;1611E 1611E 1611E 1611F;16121 16123;1611E 1611E 1611E 1611F; # (◌𖄡◌𖄞◌𖄟; ◌𖄡◌𖄣; ◌𖄞◌𖄞◌𖄞◌𖄟; ◌𖄡◌𖄣; ◌𖄞◌𖄞◌𖄞◌𖄟; ) GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN I +16121 16129 1611F;16121 16124;1611E 1611E 16129 1611F;16121 16124;1611E 1611E 16129 1611F; # (◌𖄡◌𖄩◌𖄟; ◌𖄡◌𖄤; ◌𖄞◌𖄞◌𖄩◌𖄟; ◌𖄡◌𖄤; ◌𖄞◌𖄞◌𖄩◌𖄟; ) GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL LENGTH MARK, GURUNG KHEMA VOWEL SIGN I +16121 1611E 16120;16121 16125;1611E 1611E 1611E 16120;16121 16125;1611E 1611E 1611E 16120; # (◌𖄡◌𖄞◌𖄠; ◌𖄡◌𖄥; ◌𖄞◌𖄞◌𖄞◌𖄠; ◌𖄡◌𖄥; ◌𖄞◌𖄞◌𖄞◌𖄠; ) GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN II +1611E 16121;16121 1611E;1611E 1611E 1611E;16121 1611E;1611E 1611E 1611E; # (◌𖄞◌𖄡; ◌𖄡◌𖄞; ◌𖄞◌𖄞◌𖄞; ◌𖄡◌𖄞; ◌𖄞◌𖄞◌𖄞; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U +1611E 16121 1611E;16121 16121;1611E 1611E 1611E 1611E;16121 16121;1611E 1611E 1611E 1611E; # (◌𖄞◌𖄡◌𖄞; ◌𖄡◌𖄡; ◌𖄞◌𖄞◌𖄞◌𖄞; ◌𖄡◌𖄡; ◌𖄞◌𖄞◌𖄞◌𖄞; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN AA +1611E 16121 16129;16121 16122;1611E 1611E 1611E 16129;16121 16122;1611E 1611E 1611E 16129; # (◌𖄞◌𖄡◌𖄩; ◌𖄡◌𖄢; ◌𖄞◌𖄞◌𖄞◌𖄩; ◌𖄡◌𖄢; ◌𖄞◌𖄞◌𖄞◌𖄩; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL LENGTH MARK +1611E 16126;16121 16123;1611E 1611E 1611E 1611F;16121 16123;1611E 1611E 1611E 1611F; # (◌𖄞◌𖄦; ◌𖄡◌𖄣; ◌𖄞◌𖄞◌𖄞◌𖄟; ◌𖄡◌𖄣; ◌𖄞◌𖄞◌𖄞◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN O +1611E 16121 1611F;16121 16123;1611E 1611E 1611E 1611F;16121 16123;1611E 1611E 1611E 1611F; # (◌𖄞◌𖄡◌𖄟; ◌𖄡◌𖄣; ◌𖄞◌𖄞◌𖄞◌𖄟; ◌𖄡◌𖄣; ◌𖄞◌𖄞◌𖄞◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN I +1611E 16128;16121 16125;1611E 1611E 1611E 16120;16121 16125;1611E 1611E 1611E 16120; # (◌𖄞◌𖄨; ◌𖄡◌𖄥; ◌𖄞◌𖄞◌𖄞◌𖄠; ◌𖄡◌𖄥; ◌𖄞◌𖄞◌𖄞◌𖄠; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN AU +1611E 16121 16120;16121 16125;1611E 1611E 1611E 16120;16121 16125;1611E 1611E 1611E 16120; # (◌𖄞◌𖄡◌𖄠; ◌𖄡◌𖄥; ◌𖄞◌𖄞◌𖄞◌𖄠; ◌𖄡◌𖄥; ◌𖄞◌𖄞◌𖄞◌𖄠; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN II +1611E 16121 16123;16121 16126;1611E 1611E 1611E 1611E 1611F;16121 16126;1611E 1611E 1611E 1611E 1611F; # (◌𖄞◌𖄡◌𖄣; ◌𖄡◌𖄦; ◌𖄞◌𖄞◌𖄞◌𖄞◌𖄟; ◌𖄡◌𖄦; ◌𖄞◌𖄞◌𖄞◌𖄞◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN E +1611E 16121 1611E 1611F;16121 16126;1611E 1611E 1611E 1611E 1611F;16121 16126;1611E 1611E 1611E 1611E 1611F; # (◌𖄞◌𖄡◌𖄞◌𖄟; ◌𖄡◌𖄦; ◌𖄞◌𖄞◌𖄞◌𖄞◌𖄟; ◌𖄡◌𖄦; ◌𖄞◌𖄞◌𖄞◌𖄞◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN I +1611E 16121 16124;16121 16127;1611E 1611E 1611E 16129 1611F;16121 16127;1611E 1611E 1611E 16129 1611F; # (◌𖄞◌𖄡◌𖄤; ◌𖄡◌𖄧; ◌𖄞◌𖄞◌𖄞◌𖄩◌𖄟; ◌𖄡◌𖄧; ◌𖄞◌𖄞◌𖄞◌𖄩◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN EE +1611E 16121 16129 1611F;16121 16127;1611E 1611E 1611E 16129 1611F;16121 16127;1611E 1611E 1611E 16129 1611F; # (◌𖄞◌𖄡◌𖄩◌𖄟; ◌𖄡◌𖄧; ◌𖄞◌𖄞◌𖄞◌𖄩◌𖄟; ◌𖄡◌𖄧; ◌𖄞◌𖄞◌𖄞◌𖄩◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL LENGTH MARK, GURUNG KHEMA VOWEL SIGN I +1611E 16121 16125;16121 16128;1611E 1611E 1611E 1611E 16120;16121 16128;1611E 1611E 1611E 1611E 16120; # (◌𖄞◌𖄡◌𖄥; ◌𖄡◌𖄨; ◌𖄞◌𖄞◌𖄞◌𖄞◌𖄠; ◌𖄡◌𖄨; ◌𖄞◌𖄞◌𖄞◌𖄞◌𖄠; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN AI +1611E 16121 1611E 16120;16121 16128;1611E 1611E 1611E 1611E 16120;16121 16128;1611E 1611E 1611E 1611E 16120; # (◌𖄞◌𖄡◌𖄞◌𖄠; ◌𖄡◌𖄨; ◌𖄞◌𖄞◌𖄞◌𖄞◌𖄠; ◌𖄡◌𖄨; ◌𖄞◌𖄞◌𖄞◌𖄞◌𖄠; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN U, GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN II +1611E 16127;16121 16124;1611E 1611E 16129 1611F;16121 16124;1611E 1611E 16129 1611F; # (◌𖄞◌𖄧; ◌𖄡◌𖄤; ◌𖄞◌𖄞◌𖄩◌𖄟; ◌𖄡◌𖄤; ◌𖄞◌𖄞◌𖄩◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN OO +1611E 16122 1611F;16121 16124;1611E 1611E 16129 1611F;16121 16124;1611E 1611E 16129 1611F; # (◌𖄞◌𖄢◌𖄟; ◌𖄡◌𖄤; ◌𖄞◌𖄞◌𖄩◌𖄟; ◌𖄡◌𖄤; ◌𖄞◌𖄞◌𖄩◌𖄟; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN UU, GURUNG KHEMA VOWEL SIGN I +1611E 16122;16121 16129;1611E 1611E 16129;16121 16129;1611E 1611E 16129; # (◌𖄞◌𖄢; ◌𖄡◌𖄩; ◌𖄞◌𖄞◌𖄩; ◌𖄡◌𖄩; ◌𖄞◌𖄞◌𖄩; ) GURUNG KHEMA VOWEL SIGN AA, GURUNG KHEMA VOWEL SIGN UU +16D67 16D68;16D68 16D67;16D67 16D67 16D67;16D68 16D67;16D67 16D67 16D67; # (𖵨𖵧; 𖵨𖵧; 𖵨𖵧; 𖵨𖵧; 𖵨𖵧; ) KIRAT RAI VOWEL SIGN E, KIRAT RAI VOWEL SIGN AI +16D67 16D68 16D67;16D68 16D68;16D67 16D67 16D67 16D67;16D68 16D68;16D67 16D67 16D67 16D67; # (𖵨𖵨; 𖵨𖵨; 𖵨𖵨; 𖵨𖵨; 𖵨𖵨; ) KIRAT RAI VOWEL SIGN E, KIRAT RAI VOWEL SIGN AI, KIRAT RAI VOWEL SIGN E +16D63 16D68 16D67;16D6A 16D67;16D63 16D67 16D67 16D67;16D6A 16D67;16D63 16D67 16D67 16D67; # (𖵪𖵧; 𖵪𖵧; 𖵪𖵧; 𖵪𖵧; 𖵪𖵧; ) KIRAT RAI VOWEL SIGN AA, KIRAT RAI VOWEL SIGN AI, KIRAT RAI VOWEL SIGN E +16D69 16D68;16D6A 16D67;16D63 16D67 16D67 16D67;16D6A 16D67;16D63 16D67 16D67 16D67; # (𖵪𖵧; 𖵪𖵧; 𖵪𖵧; 𖵪𖵧; 𖵪𖵧; ) KIRAT RAI VOWEL SIGN O, KIRAT RAI VOWEL SIGN AI +16D63 16D67 16D68;16D6A 16D67;16D63 16D67 16D67 16D67;16D6A 16D67;16D63 16D67 16D67 16D67; # (𖵪𖵧; 𖵪𖵧; 𖵪𖵧; 𖵪𖵧; 𖵪𖵧; ) KIRAT RAI VOWEL SIGN AA, KIRAT RAI VOWEL SIGN E, KIRAT RAI VOWEL SIGN AI +16D69 16D68 16D67;16D6A 16D68;16D63 16D67 16D67 16D67 16D67;16D6A 16D68;16D63 16D67 16D67 16D67 16D67; # (𖵪𖵨; 𖵪𖵨; 𖵪𖵨; 𖵪𖵨; 𖵪𖵨; ) KIRAT RAI VOWEL SIGN O, KIRAT RAI VOWEL SIGN AI, KIRAT RAI VOWEL SIGN E +16D63 16D67 16D68 16D67;16D6A 16D68;16D63 16D67 16D67 16D67 16D67;16D6A 16D68;16D63 16D67 16D67 16D67 16D67; # (𖵪𖵨; 𖵪𖵨; 𖵪𖵨; 𖵪𖵨; 𖵪𖵨; ) KIRAT RAI VOWEL SIGN AA, KIRAT RAI VOWEL SIGN E, KIRAT RAI VOWEL SIGN AI, KIRAT RAI VOWEL SIGN E +# # EOF diff --git a/unicodetools/data/ucd/dev/PropertyValueAliases.txt b/unicodetools/data/ucd/dev/PropertyValueAliases.txt index 397599719..5342c81b3 100644 --- a/unicodetools/data/ucd/dev/PropertyValueAliases.txt +++ b/unicodetools/data/ucd/dev/PropertyValueAliases.txt @@ -1,5 +1,5 @@ # PropertyValueAliases-16.0.0.txt -# Date: 2023-11-10, 20:57:45 GMT +# Date: 2024-01-05, 15:44:07 GMT # © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java index c073630fc..caf581ebb 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java @@ -10,12 +10,19 @@ */ package org.unicode.text.UCD; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.ibm.icu.text.UTF16; import java.io.IOException; import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collection; import java.util.Iterator; +import java.util.Map; import java.util.Set; +import java.util.TreeMap; import java.util.TreeSet; +import java.util.function.Consumer; import org.unicode.text.utility.Settings; import org.unicode.text.utility.UTF32; import org.unicode.text.utility.UnicodeDataFile; @@ -938,11 +945,271 @@ public static void writeNormalizerTestSuite(String directory, String fileName) } Utility.fixDot(); + + System.out.println("Writing Part 4"); + log.println("#"); + log.println("@Part4 # Canonical closures (excluding Hangul)"); + log.println("#"); + for (var entry : canonicalDecompositionsByCodepoint.entrySet()) { + final int cp = entry.getKey(); + final String decomposition = entry.getValue(); + if (cp >= 0xAC00 && cp <= 0xD7A3) { + continue; + } + forAllStringsCanonicallyDecomposingTo( + decomposition, + s -> { + // Skip NFD and single code points (NFC or full + // composition exclusions), already covered in Part 1. + if (!s.equals(decomposition) && s.codePointCount(0, s.length()) != 1) { + writeLine(s, log, true); + } + }); + } + + System.out.println("Writing Part 5"); + log.println("#"); + log.println("@Part5 # Chained primary composites"); + log.println("#"); + + // Not actually Builders of ImmutableMaps because those do not have + // computeIfAbsent and because we want ImmutableSets too. + final Map> primaryCompositesByFirstNFDCodePointBuilder = + new TreeMap<>(); + final Map> primaryCompositesByLastNFDCodePointBuilder = + new TreeMap<>(); + for (var entry : canonicalDecompositionsByCodepoint.entrySet()) { + final int cp = entry.getKey(); + final String decomposition = entry.getValue(); + if (Default.nfc().normalize(cp).equals(Character.toString(cp))) { + int first = decomposition.codePointAt(0); + int last = decomposition.codePointBefore(decomposition.length()); + primaryCompositesByFirstNFDCodePointBuilder + .computeIfAbsent(first, key -> new TreeSet<>()) + .add(cp); + primaryCompositesByLastNFDCodePointBuilder + .computeIfAbsent(last, key -> new TreeSet<>()) + .add(cp); + } + } + final ImmutableMap> primaryCompositesByFirstNFDCodePoint = + primaryCompositesByFirstNFDCodePointBuilder.entrySet().stream() + .collect( + ImmutableMap.toImmutableMap( + entry -> entry.getKey(), + entry -> ImmutableSet.copyOf(entry.getValue()))); + final ImmutableMap> primaryCompositesByLastNFDCodePoint = + primaryCompositesByLastNFDCodePointBuilder.entrySet().stream() + .collect( + ImmutableMap.toImmutableMap( + entry -> entry.getKey(), + entry -> ImmutableSet.copyOf(entry.getValue()))); + + Collection skippedNFCs = new ArrayList<>(); + Set part5NFCs = new TreeSet<>(); + + // The set of all sequences of two code points appearing within a + // canonical decomposition. + Set links = new TreeSet<>(); + for (String decomposition : canonicalDecompositionsOfSingleCodepoints) { + int first = decomposition.codePointAt(0); + int second; + for (int i = Character.charCount(first); + i < decomposition.length(); + first = second, i += UTF16.getCharCount(first)) { + second = decomposition.codePointAt(i); + links.add(Character.toString(first) + Character.toString(second)); + } + } + + for (String link : links) { + int first = link.codePointAt(0); + int second = link.codePointBefore(link.length()); + // Look for primary composites firstCandidate and secondCandidate + // such that the concatenation of their canonical decompositions has + // the link at the boundary, e.g., for a link YZ, look for cases + // like firstDecomposition = XY, secondDecomposition = ZT. + // In addition to primary composites, allow the candidates to + // be a single canonically non-decomposable starters, thus + // firstDecomposition = XY, secondDecomposition = Z with ccc(Z)=0 or + // firstDecomposition = Y, secondDecomposition = ZT with ccc(Y)=0. + // We do not allow non-starters, since an initial nonstarter cannot + // do anything, and a final non-starter only exercises the CRA, + // which is not what we are looking for in Part 5. + + // Note that if both the first and second candidates are + // canonically non-decomposable starters, any linking code point + // will cover the whole string, meaning this is already covered + // in Parts 1 and 4, and we will find that out, so we do not emit + // any such test cases. + Set firstCandidates = new TreeSet<>(); + Set secondCandidates = new TreeSet<>(); + firstCandidates.addAll( + primaryCompositesByLastNFDCodePoint.getOrDefault(first, ImmutableSet.of())); + secondCandidates.addAll( + primaryCompositesByFirstNFDCodePoint.getOrDefault(second, ImmutableSet.of())); + if (Default.ucd().getCombiningClass(first) == 0) { + firstCandidates.add(first); + } + if (Default.ucd().getCombiningClass(second) == 0) { + secondCandidates.add(second); + } + for (int firstCandidate : firstCandidates) { + for (int secondCandidate : secondCandidates) { + String firstDecomposition = Default.nfd().normalize(firstCandidate); + String secondDecomposition = Default.nfd().normalize(secondCandidate); + String decomposition = firstDecomposition + secondDecomposition; + if (canonicalDecompositionsOfSingleCodepoints.contains(decomposition)) { + // Already covered in parts 1 (single code points) and 4 + // (canonical closures of single code points). + continue; + } + System.out.println( + Default.ucd().getName(firstCandidate) + + "+" + + Default.ucd().getName(secondCandidate)); + // Within the canonical closure of the concatenation of + // firstCandidate and secondCandidate, look for strings that + // cannot be split between those two characters. + // Those are our test cases for Part 5. + String nfc = Default.nfc().normalize(decomposition); + forAllStringsCanonicallyDecomposingTo( + decomposition, + s -> { + for (int j = 0; j < s.length(); ++j) { + if (Default.nfd() + .normalize(s.substring(0, j)) + .equals(firstDecomposition) + && Default.nfd() + .normalize(s.substring(j)) + .equals(secondDecomposition)) { + // The string splits into parts + // equivalent to firstCandidate and + // secondCandidate, i.e., it has no + // link. + return; + } + } + if (s.equals(nfc)) { + // If the NFC of + // firstCandidate + secondCandidate has a + // link, thus + // NFC(firstCandidate + secondCandidate) + // = f′ + l + s′, + // with f′ prefix of firstCandidate and s′ + // suffix of secondCandidate, f′ must be + // empty (otherwise the NFC would start with + // the longer first), so we should see this + // canonical equivalence class again for the + // link between l and s′. + // Since we give the NFC of all test cases + // and instruct implementers to run all + // normalizations on that column, we can + // skip this one. + // But in the spirit of “Beware of bugs in + // the above code; I have only proved it + // correct, not tried it.” (Knuth 1977), let + // us check those statements. + String linkDecomposition = + Default.nfd().normalize(nfc.codePointAt(0)); + if (!linkDecomposition.startsWith(firstDecomposition)) { + throw new AssertionError( + "The first code point of NFC(" + + Default.ucd().getName(firstDecomposition) + + " + " + + Default.ucd().getName(secondDecomposition) + + ") does not cover the first part"); + } + skippedNFCs.add(nfc); + return; + } + part5NFCs.add(nfc); + writeLine(s, log, true); + System.out.println(Default.ucd().getName(s)); + }); + } + } + } + + for (String nfc : skippedNFCs) { + if (!part5NFCs.contains(nfc)) { + throw new AssertionError( + "Candidate Part 5 test case " + + Default.ucd().getName(nfc) + + " was suppressed but did not appear as the NFC of another test" + + " case in Part 5."); + } + } + + Utility.fixDot(); + log.println("#"); log.println("# EOF"); fc.close(); // Utility.renameIdentical(mostRecent, Utility.getOutputName(newFile), batName[0]); } + + private static final ImmutableMap canonicalDecompositionsByCodepoint; + private static final ImmutableSet canonicalDecompositionsOfSingleCodepoints; + + static { + ImmutableMap.Builder builder = ImmutableMap.builder(); + for (int cp = 0; cp <= 0x10FFFF; ++cp) { + String decomposition = Default.nfd().normalize(cp); + if (!decomposition.equals(Character.toString(cp))) { + builder.put(cp, decomposition); + } + } + canonicalDecompositionsByCodepoint = builder.build(); + canonicalDecompositionsOfSingleCodepoints = + ImmutableSet.copyOf(canonicalDecompositionsByCodepoint.values()); + } + + private static void forAllStringsCanonicallyDecomposingTo( + String decomposition, Consumer consumer) { + final Set candidateCharacters = new TreeSet<>(); + decomposition.codePoints().forEach(cp -> candidateCharacters.add(cp)); + for (var entry : canonicalDecompositionsByCodepoint.entrySet()) { + int cp = entry.getKey(); + String nfd = entry.getValue(); + if (nfd.codePoints() + .allMatch( + candidateDecompositionCodePoint -> + decomposition.contains( + Character.toString(candidateDecompositionCodePoint)))) { + candidateCharacters.add(cp); + } + } + for (int length = 1; + length < decomposition.codePointCount(0, decomposition.length()); + ++length) { + forAllStrings( + candidateCharacters, + "", + length, + s -> { + if (Default.nfd().normalize(s).equals(decomposition)) { + consumer.accept(s); + } + }); + } + } + + static void forAllStrings( + Collection repertoire, + String prefix, + int suffixLength, + Consumer consumer) { + if (suffixLength == 0) { + consumer.accept(prefix); + } else { + for (int next : repertoire) { + forAllStrings( + repertoire, prefix + Character.toString(next), suffixLength - 1, consumer); + } + } + } + /* static void handleIdentical() throws IOException { @@ -977,9 +1244,9 @@ static void writeLine(String cc, PrintWriter log, boolean check) { final String dc = Default.nfd().normalize(c); final String dkc = Default.nfd().normalize(kc); if (!dc.equals(d) || !dkc.equals(kd)) { - System.out.println("Danger Will Robinson!"); Normalizer.SHOW_PROGRESS = true; d = Default.nfd().normalize(cc); + throw new AssertionError("Danger Will Robinson! " + Default.ucd().getName(cc)); } // printout diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/Normalizer.java b/unicodetools/src/main/java/org/unicode/text/UCD/Normalizer.java index 7c38dc283..77a39c308 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/Normalizer.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/Normalizer.java @@ -288,7 +288,12 @@ public void getCompositionStatus(BitSet leading, BitSet trailing, BitSet resulti } public boolean isTrailing(int cp) { - return composition ? data.isTrailing(cp) : false; + if (!composition) { + return false; + } + var buffer = new StringBuffer(); + data.getRecursiveDecomposition(cp, buffer, compatibility); + return data.isTrailing(buffer.codePointAt(0)); } public boolean isLeading(int cp) { diff --git a/unicodetools/src/test/java/org/unicode/propstest/TestProperties.java b/unicodetools/src/test/java/org/unicode/propstest/TestProperties.java index eecdd5219..f1dff00ac 100644 --- a/unicodetools/src/test/java/org/unicode/propstest/TestProperties.java +++ b/unicodetools/src/test/java/org/unicode/propstest/TestProperties.java @@ -21,6 +21,7 @@ import java.util.TreeSet; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.unicode.cldr.draft.FileUtilities; import org.unicode.cldr.util.Counter; import org.unicode.props.GenerateEnums; import org.unicode.props.IndexUnicodeProperties; @@ -37,6 +38,8 @@ import org.unicode.props.UcdPropertyValues.Numeric_Type_Values; import org.unicode.props.UcdPropertyValues.Script_Values; import org.unicode.props.ValueCardinality; +import org.unicode.text.UCD.Default; +import org.unicode.text.UCD.Normalizer; import org.unicode.tools.emoji.EmojiData; import org.unicode.unittest.TestFmwkMinusMinus; @@ -214,6 +217,130 @@ public void TestAAScripts() { } } + @Test + public void TestNFCQuickCheck() { + checkQuickCheckOnNormalizationTest(Default.nfc(), iup.load(UcdProperty.NFC_Quick_Check)); + } + + @Test + public void TestNFKCQuickCheck() { + checkQuickCheckOnNormalizationTest(Default.nfkc(), iup.load(UcdProperty.NFKC_Quick_Check)); + } + + private void checkQuickCheckOnNormalizationTest( + Normalizer normalizer, UnicodeMap isAllowed) { + String normalizationTest = + org.unicode.text.utility.Utility.getMostRecentUnicodeDataFile( + "NormalizationTest", GenerateEnums.ENUM_VERSION, true, false); + String partLine = null; + for (String line : FileUtilities.in("", normalizationTest)) { + line = line.trim(); + if (line.startsWith("#")) { + continue; + } + if (line.startsWith("@Part")) { + partLine = line; + continue; + } + String[] parts = Arrays.copyOfRange(line.split(";"), 0, 5); + for (String part : parts) { + checkQuickCheck( + normalizer, + isAllowed, + org.unicode.text.utility.Utility.fromHex(part), + partLine); + } + } + } + + private void checkQuickCheck( + Normalizer normalizer, UnicodeMap isAllowed, String testCase, String context) { + if (testCase.equals(normalizer.normalize(testCase))) { + if (quickCheck(isAllowed, testCase) == NO) { + errln( + normalizer.getName() + + " quickCheck returns NO for normalized string " + + Default.ucd().getName(testCase) + + " (" + + context + + ")"); + } + } else { + if (quickCheck(isAllowed, testCase) == YES) { + errln( + normalizer.getName() + + " quickCheck returns YES for non-normalized string " + + Default.ucd().getName(testCase) + + " (" + + context + + ")"); + } + } + } + + private static final int NO = 0, YES = 1, MAYBE = -1; + + // From UAX #15. + private static int quickCheck(UnicodeMap isAllowed, String source) { + short lastCanonicalClass = 0; + int result = YES; + for (int i = 0; i < source.length(); ++i) { + int ch = source.codePointAt(i); + if (Character.isSupplementaryCodePoint(ch)) ++i; + short canonicalClass = Default.ucd().getCombiningClass(ch); + if (lastCanonicalClass > canonicalClass && canonicalClass != 0) { + return NO; + } + String check = isAllowed.getValue(ch); + if (check.toUpperCase().equals("NO")) return NO; + if (check.toUpperCase().equals("MAYBE")) result = MAYBE; + lastCanonicalClass = canonicalClass; + } + return result; + } + + @Test + public void TestNFCQuickCheckConsistency() { + UnicodeMap nfcqc = iup.load(UcdProperty.NFC_Quick_Check); + UnicodeMap dm = iup.load(UcdProperty.Decomposition_Mapping); + UnicodeMap dt = iup.load(UcdProperty.Decomposition_Type); + for (String codepoint : nfcqc.getSet("Yes")) { + if (!dt.getValue(codepoint).equals("Canonical")) { + continue; + } + String decompositionFirst = Character.toString(dm.getValue(codepoint).codePointAt(0)); + String decompositionFirstNFCQC = nfcqc.getValue(decompositionFirst); + if (!decompositionFirstNFCQC.equals("Yes")) { + errln( + "U+" + + getCodeAndName(codepoint) + + " has NFC_QC=Yes, but its (canonical) Decomposition_Mapping starts with U+" + + getCodeAndName(decompositionFirst) + + ", which has NFC_QC=" + + decompositionFirstNFCQC); + } + } + } + + @Test + public void TestNFKCQuickCheckConsistency() { + UnicodeMap nfkcqc = iup.load(UcdProperty.NFKC_Quick_Check); + UnicodeMap dm = iup.load(UcdProperty.Decomposition_Mapping); + for (String codepoint : nfkcqc.getSet("Yes")) { + String decompositionFirst = Character.toString(dm.getValue(codepoint).codePointAt(0)); + String decompositionFirstNFKCQC = nfkcqc.getValue(decompositionFirst); + if (!decompositionFirstNFKCQC.equals("Yes")) { + errln( + "U+" + + getCodeAndName(codepoint) + + " has NFKC_QC=Yes, but its Decomposition_Mapping starts with U+" + + getCodeAndName(decompositionFirst) + + ", which has NFKC_QC=" + + decompositionFirstNFKCQC); + } + } + } + @Test public void TestScripts() { From 4e1e950b352f47ae3c431e07019d3b4968ad9043 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Tue, 23 Jan 2024 01:54:43 +0100 Subject: [PATCH 09/10] Ensure we have comprehensive coverage for the ICU4X bug (#669) --- .../data/ucd/dev/NormalizationTest.txt | 20 ++++++- .../org/unicode/text/UCD/GenerateData.java | 58 ++++++++++++++++--- 2 files changed, 70 insertions(+), 8 deletions(-) diff --git a/unicodetools/data/ucd/dev/NormalizationTest.txt b/unicodetools/data/ucd/dev/NormalizationTest.txt index f8445b262..c1021b150 100644 --- a/unicodetools/data/ucd/dev/NormalizationTest.txt +++ b/unicodetools/data/ucd/dev/NormalizationTest.txt @@ -1,5 +1,5 @@ # NormalizationTest-16.0.0.txt -# Date: 2024-01-20, 01:49:31 GMT +# Date: 2024-01-21, 18:36:20 GMT # © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html @@ -67,7 +67,25 @@ 1100 AC00 11A8;1100 AC01;1100 1100 1161 11A8;1100 AC01;1100 1100 1161 11A8; # (ᄀ각; ᄀ각; ᄀ각; ᄀ각; ᄀ각; ) HANGUL CHOSEONG KIYEOK, HANGUL SYLLABLE GA, HANGUL JONGSEONG KIYEOK 1100 AC00 11A8 11A8;1100 AC01 11A8;1100 1100 1161 11A8 11A8;1100 AC01 11A8;1100 1100 1161 11A8 11A8; # (ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ) HANGUL CHOSEONG KIYEOK, HANGUL SYLLABLE GA, HANGUL JONGSEONG KIYEOK, HANGUL JONGSEONG KIYEOK 01C4 0323;01C4 0323;01C4 0323;0044 1E92 030C;0044 005A 0323 030C; # (DŽ◌̣; DŽ◌̣; DŽ◌̣; DẒ◌̌; DZ◌̣◌̌; ) LATIN CAPITAL LETTER DZ WITH CARON, COMBINING DOT BELOW +01C5 0323;01C5 0323;01C5 0323;0044 1E93 030C;0044 007A 0323 030C; # (Dž◌̣; Dž◌̣; Dž◌̣; Dẓ◌̌; Dz◌̣◌̌; ) LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON, COMBINING DOT BELOW +01C6 0323;01C6 0323;01C6 0323;0064 1E93 030C;0064 007A 0323 030C; # (dž◌̣; dž◌̣; dž◌̣; dẓ◌̌; dz◌̣◌̌; ) LATIN SMALL LETTER DZ WITH CARON, COMBINING DOT BELOW 0DDD 0334;0DDD 0334;0DD9 0DCF 0334 0DCA;0DDD 0334;0DD9 0DCF 0334 0DCA; # (ෝ◌̴; ෝ◌̴; ො◌̴◌්; ෝ◌̴; ො◌̴◌්; ) SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA, COMBINING TILDE OVERLAY +3304 0334;3304 0334;3304 0334;30A4 30CB 30F3 30B0 0334;30A4 30CB 30F3 30AF 0334 3099; # (㌄◌̴; ㌄◌̴; ㌄◌̴; イニング◌̴; イニンク◌̴◌゙; ) SQUARE ININGU, COMBINING TILDE OVERLAY +3307 0334;3307 0334;3307 0334;30A8 30B9 30AF 30FC 30C9 0334;30A8 30B9 30AF 30FC 30C8 0334 3099; # (㌇◌̴; ㌇◌̴; ㌇◌̴; エスクード◌̴; エスクート◌̴◌゙; ) SQUARE ESUKUUDO, COMBINING TILDE OVERLAY +3310 0334;3310 0334;3310 0334;30AE 30AC 0334;30AD 3099 30AB 0334 3099; # (㌐◌̴; ㌐◌̴; ㌐◌̴; ギガ◌̴; キ◌゙カ◌̴◌゙; ) SQUARE GIGA, COMBINING TILDE OVERLAY +331E 0334;331E 0334;331E 0334;30B3 30FC 30DD 0334;30B3 30FC 30DB 0334 309A; # (㌞◌̴; ㌞◌̴; ㌞◌̴; コーポ◌̴; コーホ◌̴◌゚; ) SQUARE KOOPO, COMBINING TILDE OVERLAY +3321 0334;3321 0334;3321 0334;30B7 30EA 30F3 30B0 0334;30B7 30EA 30F3 30AF 0334 3099; # (㌡◌̴; ㌡◌̴; ㌡◌̴; シリング◌̴; シリンク◌̴◌゙; ) SQUARE SIRINGU, COMBINING TILDE OVERLAY +3332 0334;3332 0334;3332 0334;30D5 30A1 30E9 30C3 30C9 0334;30D5 30A1 30E9 30C3 30C8 0334 3099; # (㌲◌̴; ㌲◌̴; ㌲◌̴; ファラッド◌̴; ファラット◌̴◌゙; ) SQUARE HUARADDO, COMBINING TILDE OVERLAY +333B 0334;333B 0334;333B 0334;30DA 30FC 30B8 0334;30D8 309A 30FC 30B7 0334 3099; # (㌻◌̴; ㌻◌̴; ㌻◌̴; ページ◌̴; ヘ◌゚ーシ◌̴◌゙; ) SQUARE PEEZI, COMBINING TILDE OVERLAY +3340 0334;3340 0334;3340 0334;30DD 30F3 30C9 0334;30DB 309A 30F3 30C8 0334 3099; # (㍀◌̴; ㍀◌̴; ㍀◌̴; ポンド◌̴; ホ◌゚ント◌̴◌゙; ) SQUARE PONDO, COMBINING TILDE OVERLAY +334B 0334;334B 0334;334B 0334;30E1 30AC 0334;30E1 30AB 0334 3099; # (㍋◌̴; ㍋◌̴; ㍋◌̴; メガ◌̴; メカ◌̴◌゙; ) SQUARE MEGA, COMBINING TILDE OVERLAY +334E 0334;334E 0334;334E 0334;30E4 30FC 30C9 0334;30E4 30FC 30C8 0334 3099; # (㍎◌̴; ㍎◌̴; ㍎◌̴; ヤード◌̴; ヤート◌̴◌゙; ) SQUARE YAADO, COMBINING TILDE OVERLAY +FEF5 0656;FEF5 0656;FEF5 0656;0644 0622 0656;0644 0627 0656 0653; # (ﻵ◌ٖ; ﻵ◌ٖ; ﻵ◌ٖ; لآ◌ٖ; لا◌ٖ◌ٓ; ) ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM, ARABIC SUBSCRIPT ALEF +FEF6 0656;FEF6 0656;FEF6 0656;0644 0622 0656;0644 0627 0656 0653; # (ﻶ◌ٖ; ﻶ◌ٖ; ﻶ◌ٖ; لآ◌ٖ; لا◌ٖ◌ٓ; ) ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM, ARABIC SUBSCRIPT ALEF +FEF7 0656;FEF7 0656;FEF7 0656;0644 0623 0656;0644 0627 0656 0654; # (ﻷ◌ٖ; ﻷ◌ٖ; ﻷ◌ٖ; لأ◌ٖ; لا◌ٖ◌ٔ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM, ARABIC SUBSCRIPT ALEF +FEF8 0656;FEF8 0656;FEF8 0656;0644 0623 0656;0644 0627 0656 0654; # (ﻸ◌ٖ; ﻸ◌ٖ; ﻸ◌ٖ; لأ◌ٖ; لا◌ٖ◌ٔ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM, ARABIC SUBSCRIPT ALEF +FEF9 0334;FEF9 0334;FEF9 0334;0644 0625 0334;0644 0627 0334 0655; # (ﻹ◌̴; ﻹ◌̴; ﻹ◌̴; لإ◌̴; لا◌̴◌ٕ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM, COMBINING TILDE OVERLAY +FEFA 0334;FEFA 0334;FEFA 0334;0644 0625 0334;0644 0627 0334 0655; # (ﻺ◌̴; ﻺ◌̴; ﻺ◌̴; لإ◌̴; لا◌̴◌ٕ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM, COMBINING TILDE OVERLAY # @Part1 # Character by character test # All characters not explicitly occurring in c1 of Part 1 have identical NFC, D, KC, KD forms. diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java index caf581ebb..19f57e3c1 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java @@ -13,6 +13,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.ibm.icu.text.UTF16; +import com.ibm.icu.text.UnicodeSet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; @@ -23,6 +24,8 @@ import java.util.TreeMap; import java.util.TreeSet; import java.util.function.Consumer; +import org.unicode.props.IndexUnicodeProperties; +import org.unicode.props.UcdProperty; import org.unicode.text.utility.Settings; import org.unicode.text.utility.UTF32; import org.unicode.text.utility.UnicodeDataFile; @@ -811,6 +814,54 @@ public static void writeNormalizerTestSuite(String directory, String fileName) for (final String testSuiteCase : testSuiteCases) { writeLine(testSuiteCase, log, false); } + // At least one implementation (ICU4X) has an edge case when a character + // whose decomposition contains multiple starters and ends with a + // non-starter is followed by a non-starter of lower CCC. + // See https://github.com/unicode-org/unicodetools/issues/656 + // and https://github.com/unicode-org/icu4x/pull/4530. + // That implementation also has separate code paths for the BMP and + // higher planes. No such decompositions currently exist outside the + // BMP, but by generating these test cases we ensure that this would be + // covered. + // We stick them in Part 0, which is in principle for handcrafted test + // cases, because there are not many of them, and the edge case feels a + // tad too weird to describe in the title of a new part. + final org.unicode.props.UnicodeProperty sc = + IndexUnicodeProperties.make().getProperty(UcdProperty.Script); + for (final String cp : UnicodeSet.ALL_CODE_POINTS) { + final String[] decompositions = + new String[] {Default.nfd().normalize(cp), Default.nfkd().normalize(cp)}; + for (final String decomposition : decompositions) { + final int lastCCC = + Default.ucd() + .getCombiningClass( + decomposition.codePointBefore(decomposition.length())); + final long nonStarterCount = + decomposition + .codePoints() + .filter(c -> (Default.ucd().getCombiningClass(c) == 0)) + .count(); + final String script = sc.getValue(cp.codePointAt(0)); + if (lastCCC > 1 && nonStarterCount > 1) { + // Try to pick a trailing nonstarter that might have a + // chance of combining with the character if possible, + // both for æsthetic reasons and to reproduce the example + // ICU4X came across. If all else fails, use a character + // with CCC=1, as low as it gets. + if (script.equals("Arabic") && lastCCC > 220) { + // ARABIC SUBSCRIPT ALEF. + writeLine(cp + "\u0656", log, false); + } else if (lastCCC > 220) { + // COMBINING DOT BELOW. + writeLine(cp + "\u0323", log, false); + } else { + // COMBINING TILDE OVERLAY. + writeLine(cp + "\u0334", log, false); + } + break; + } + } + } System.out.println("Writing Part 2"); @@ -1318,13 +1369,6 @@ static final String comma(String s) { "\u0592\u05B7\u05BC\u05A5\u05B0\u05C0\u05C4\u05AD", "\u1100\uAC00\u11A8", "\u1100\uAC00\u11A8\u11A8", - // Some implementations have an edge case when a character whose - // decomposition contains multiple starters and ends with a non-starter - // is followed by a non-starter of lower CCC. - // See https://github.com/unicode-org/unicodetools/issues/656 - // and https://github.com/unicode-org/icu4x/pull/4530. - "\u01C4\u0323", - "\u0DDD\u0334", }; /* static final void backwardsCompat(String directory, String filename, int[] list) throws IOException { From f4ae639850e8278277898ec8a390c704eeafdcf4 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Tue, 23 Jan 2024 18:58:36 +0100 Subject: [PATCH 10/10] Clean up GenerateData.java a little bit (#670) --- .../org/unicode/text/UCD/GenerateData.java | 1169 +---------------- 1 file changed, 17 insertions(+), 1152 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java index 19f57e3c1..fa13ec9f0 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateData.java @@ -33,784 +33,21 @@ public class GenerateData implements UCD_Types { - /* static final boolean DEBUG = false; - - static final String HORIZONTAL_LINE = "# ================================================"; - - static final void genSplit () { - UnicodeSet split = new UnicodeSet(); - UnicodeSet reordrant = new UnicodeSet( - "[\u093F\u09BF\u09c7\u09c8\u0abf\u0abf\u0b47\u0bc6\u0bc7\u0bc8" - + "\u0d46\u0d47\u0d48\u0dd9\u0dda\u0ddb\u1031\u17be\u17c1\u17c2\u17c3]"); - UnicodeSet subjoined = new UnicodeSet(); - for (int i = 0; i <= 0x10FFFF; ++i) { - if (!Default.ucd().isAssigned(i)) continue; - Utility.dot(i); - int cat = Default.ucd().getCategory(i); - if (cat != Mc && cat != Mn && cat != Me) continue; - if (Default.ucd().getName(i).indexOf("SUBJOINED") >= 0) { - System.out.print('*'); - subjoined.add(i); - continue; - } - String decomp = Default.nfd().normalize(i); - //int count = countTypes(decomp, Mc); - if (UTF16.countCodePoint(decomp) > 1) split.add(i); - } - Utility.fixDot(); - System.out.println("Split: " + split.size()); - Utility.showSetNames("", split, false, Default.ucd()); - - System.out.println("Reordrant: " + reordrant.size()); - Utility.showSetNames("", reordrant, false, Default.ucd()); - - System.out.println("Subjoined: " + subjoined.size()); - Utility.showSetNames("", subjoined, false, Default.ucd()); - } - - static int countTypes(String s, int filter) { - int count = 0; - int cp; - for (int i = 0; i < s.length(); i+= UTF16.getCharCount(cp)) { - cp = UTF16.charAt(s, i); - int cat = Default.ucd().getCategory(i); - if (cat == filter) count++; - } - return count; - } - - //static UnifiedBinaryProperty ubp - - public static void checkHoffman(String test) { - String result = Default.nfkc().normalize(test); - System.out.println(Utility.hex(test) + " => " + Utility.hex(result)); - System.out.println(); - show(test, 0); - System.out.println(); - show(result, 0); - } - - public static void show(String s, int indent) { - int cp; - for (int i = 0; i < s.length(); i += UTF32.count16(cp)) { - cp = UTF32.char32At(s, i); - String cc = " " + Default.ucd().getCombiningClass(cp); - cc = Utility.repeat(" ", 4 - cc.length()) + cc; - System.out.println(Utility.repeat(" ", indent) + Default.ucd().getCode(cp) + cc + " " + Default.ucd().getName(cp)); - String decomp = Default.nfkc().normalize(cp); - if (!decomp.equals(UTF32.valueOf32(cp))) { - show(decomp, indent + 4); - } - } - } - - - static final int HEADER_EXTEND = 0, HEADER_DERIVED = 1, HEADER_SCRIPTS = 2; - - public static void doHeader(String fileName, PrintWriter output, int headerChoice) { - output.println("# " + fileName); - output.println(UnicodeDataFile.generateDateLine()); - output.println("#"); - if (headerChoice == HEADER_SCRIPTS) { - } else if (headerChoice == HEADER_EXTEND) { - output.println("# Unicode Character Database: Extended Properties"); - } else { - output.println("# Unicode Character Database: Derived Property Data"); - output.println("# Generated algorithmically from the Unicode Character Database"); - } - output.println("# For documentation, see UCD.html"); - //output.println("# Note: Unassigned and Noncharacter codepoints may be omitted"); - //output.println("# if they have default property values."); - output.println(HORIZONTAL_LINE); - output.println(); - } - - public static void checkDifferences (String targetVersion) throws IOException { - System.out.println("Checking Differences"); - UCD target = UCD.make(targetVersion); - - PrintWriter log1 = Utility.openPrintWriter("Log1.xml", Utility.LATIN1_UNIX); - log1.println(""); - - PrintWriter log2 = Utility.openPrintWriter("Log2.xml", Utility.LATIN1_UNIX); - log2.println(""); - - for (int i = 0; i <= 0x10FFFF; ++i) { - if (!target.isAllocated(i)) continue; - Utility.dot(i); - UData t = target.get(i, true); - UData current = Default.ucd().get(i, true); - if (i == 0x5E) { - System.out.println(target.getDecompositionTypeID(i) - + ", " + Utility.hex(target.getDecompositionMapping(i))); - System.out.println(Default.ucd().getDecompositionTypeID(i) - + ", " + Utility.hex(Default.ucd().getDecompositionMapping(i))); - } - if (t.equals(current)) continue; - - // print both for comparison - log1.println(t.toString(target, UData.ABBREVIATED)); - log2.println(current.toString(Default.ucd(), UData.ABBREVIATED)); - } - log1.println(""); - log2.println(""); - log1.close(); - log2.close(); - } - - public static void generateDerived (byte type, boolean checkTypeAndStandard, int headerChoice, String directory, String fileName) throws IOException { - - - String newFile = directory + fileName + UnicodeDataFile.getFileSuffix(true); - System.out.println("New File: " + newFile); - PrintWriter output = Utility.openPrintWriter(newFile, Utility.LATIN1_UNIX); - String[] batName = {""}; - org.unicode.cldr.util.Utility.generateBat(directory, fileName, UnicodeDataFile.getFileSuffix(true), batName); - - doHeader(fileName + UnicodeDataFile.getFileSuffix(false), output, headerChoice); - for (int i = 0; i < DERIVED_PROPERTY_LIMIT; ++i) { - UCDProperty up = DerivedProperty.make(i, Default.ucd()); - if (up == null) continue; - boolean keepGoing = true; - if (!up.isStandard()) keepGoing = false; - if ((up.getType() & type) == 0) keepGoing = false; - - if (checkTypeAndStandard != keepGoing) continue; - //if ((bitMask & (1L< 2; - this.type = type; - } - - public String optionalComment(int cp) { return ""; } - - public String valueName(int cp) { - return UTF32.length32(ucdData.getDecompositionMapping(cp)) + ""; - } - - public byte status(int cp) { - if (getType(cp) == type) return INCLUDE; - return EXCLUDE; - } - - public int getType(int cp) { - if (!ucdData.isAssigned(cp)) return -1; - if (ucdData.getDecompositionType(cp) != CANONICAL) return -1; - - if (oldUCD.getBinaryProperty(cp, CompositionExclusion)) return 1; - if (cp == 0xFB1D) return 1; // special - - String decomp = ucdData.getDecompositionMapping(cp); - int len = UTF32.length32(decomp); - if (len == 1) return 3; - int first = UTF32.char32At(decomp,0); - if (ucdData.getCombiningClass(first) != 0) return 4; - - if (oldUCD.getDecompositionType(cp) == CANONICAL) return -1; - if (ucdData.getDecompositionType(cp) == CANONICAL) return 2; - - return -1; - } - } - - public static void generatePropertyAliases() throws IOException { - - String prop = ""; - String propAbb = ""; - String value = ""; - String valueAbb = ""; - - Map duplicates = new TreeMap(); - Set sorted = new TreeSet(java.text.Collator.getInstance()); - Set accumulation = new TreeSet(java.text.Collator.getInstance()); - - for (int k = 0; k < UCD_Names.NON_ENUMERATED_NAMES.length; ++k) { - propAbb = Utility.getUnskeleton(UCD_Names.NON_ENUMERATED_NAMES[k][0], false); - prop = Utility.getUnskeleton(UCD_Names.NON_ENUMERATED_NAMES[k][1], true); - - byte type = STRING_PROP; - if (propAbb.equals("nv")) { - type = NUMERIC_PROP; - } else if (propAbb.equals("age")) { - type = CATALOG_PROP; - } else if (propAbb.equals("blk")) { - type = CATALOG_PROP; - } else if (propAbb.equals("na")) { - type = MISC_PROP; - } else if (propAbb.equals("na1")) { - type = MISC_PROP; - } else if (propAbb.equals("isc")) { - type = MISC_PROP; - } - addLine(sorted, UCD_Names.PROP_TYPE_NAMES[type][1], propAbb, prop, null); - checkDuplicate(duplicates, accumulation, propAbb, prop); - if (!prop.equals(propAbb)) checkDuplicate(duplicates, accumulation, prop, prop); - } - addLine(sorted, UCD_Names.PROP_TYPE_NAMES[MISC_PROP][1], "URS", "Unicode_Radical_Stroke", null); - // TODO: merge above - - for (int k = 0; k < UCD_Names.SUPER_CATEGORIES.length; ++k) { - valueAbb = Utility.getUnskeleton(UCD_Names.SUPER_CATEGORIES[k][0], false); - value = Utility.getUnskeleton(UCD_Names.SUPER_CATEGORIES[k][1], true); - String extra = Utility.getUnskeleton(UCD_Names.SUPER_CATEGORIES[k][1], true); - addLine(sorted, "gc", valueAbb, value, extra, "# " + UCD_Names.SUPER_CATEGORIES[k][2]); - checkDuplicate(duplicates, accumulation, value, "General_Category=" + value); - if (!value.equals(valueAbb)) checkDuplicate(duplicates, accumulation, valueAbb, "General_Category=" + value); - if (extra != null) checkDuplicate(duplicates, accumulation, extra, "General_Category=" + value); - } - - - addLine(sorted, "xx; T ; True"); - checkDuplicate(duplicates, accumulation, "T", "xx=True"); - addLine(sorted, "xx; F ; False"); - checkDuplicate(duplicates, accumulation, "F", "xx=False"); - - addLine(sorted, "qc", UCD_Names.YN_TABLE[1], UCD_Names.YN_TABLE_LONG[1], null); - checkDuplicate(duplicates, accumulation, UCD_Names.YN_TABLE[1], "qc=" + UCD_Names.YN_TABLE_LONG[1]); - addLine(sorted, "qc", UCD_Names.YN_TABLE[0], UCD_Names.YN_TABLE_LONG[0], null); - checkDuplicate(duplicates, accumulation, UCD_Names.YN_TABLE[0], "qc=" + UCD_Names.YN_TABLE_LONG[0]); - addLine(sorted, "qc", "M", "Maybe", null); - checkDuplicate(duplicates, accumulation, "M", "qc=Maybe"); - - addLine(sorted, "blk", "n/a", Utility.getUnskeleton("no block", true), null); - - for (int i = 0; i < LIMIT_ENUM; ++i) { - int type = i & 0xFF00; - if (type == AGE) continue; - if (i == (BINARY_PROPERTIES | CaseFoldTurkishI)) continue; - if (i == (BINARY_PROPERTIES | Non_break)) continue; - if (i == (BINARY_PROPERTIES | Case_Sensitive)) continue; - - if (type == NUMERIC_TYPE) { - //System.out.println("debug"); - } - - UCDProperty up = UnifiedBinaryProperty.make(i, Default.ucd()); - if (up == null) continue; - if (!up.isStandard()) continue; - - // System.out.println("At" + Utility.hex(i)); - - // Save the Type Name, under BB for binary - - if (type == i || type == BINARY_PROPERTIES || type == DERIVED) { - if (propAbb.equals("") || propAbb.equals(UCD_Names.YN_TABLE[1])) { - System.out.println("WHOOPS: " + Utility.hex(i)); - } - propAbb = Utility.getUnskeleton(up.getPropertyName(SHORT), false); - prop = Utility.getUnskeleton(up.getPropertyName(LONG), true); - addLine(sorted, - type == SCRIPT - ? UCD_Names.PROP_TYPE_NAMES[CATALOG_PROP][1] - : type != DERIVED && type != BINARY_PROPERTIES - ? UCD_Names.PROP_TYPE_NAMES[ENUMERATED_PROP][1] - : UCD_Names.PROP_TYPE_NAMES[up.getValueType()][1], - propAbb, prop, null); - checkDuplicate(duplicates, accumulation, propAbb, prop); - if (!prop.equals(propAbb)) checkDuplicate(duplicates, accumulation, prop, prop); - } - - if (up.getValueType() < BINARY_PROP) continue; - value = up.getValue(LONG); - if (value.length() == 0) value = "none"; - else if (value.equals(UnicodeProperty.UNUSED)) continue; - - if (type != DECOMPOSITION_TYPE) { - value = Utility.getUnskeleton(value, true); - } - - //if (type == DERIVED) { - //System.out.println("Derived " + up.getProperty()); - //} - - - if (type == SCRIPT) { - value = Default.ucd().getCase(value, FULL, TITLE); - } - - valueAbb = up.getValue(SHORT); - valueAbb = Utility.getUnskeleton(valueAbb, false); - if (valueAbb.length() == 0) valueAbb = "n/a"; - //else if (valueAbb.equals(value)) valueAbb = "n/a"; - - - if (type == COMBINING_CLASS) { - if (value.charAt(0) <= '9') { continue; } - } - - - if (type == JOINING_GROUP) { - valueAbb = "n/a"; - } - - - String elide = ""; - if (type == CATEGORY || type == SCRIPT || type == BINARY_PROPERTIES) elide = "\\p{" - + valueAbb - + "}"; - String abb = ""; - if (type != BINARY_PROPERTIES) abb = "\\p{" - + UCD_Names.ABB_UNIFIED_PROPERTIES[i>>8] - + "=" - + valueAbb - + "}"; - String norm = ""; - if (type != BINARY_PROPERTIES) norm = "\\p{" - + UCD_Names.SHORT_UNIFIED_PROPERTIES[i>>8] - + "=" - + value - + "}"; - System.out.println("" + elide + "" + abb + "" + norm + ""); - - - - if (type == BINARY_PROPERTIES || type == DERIVED) { - //if (value.equals(YN_TABLE_LONG[1])) continue; - addLine(sorted, PROP_TYPE_NAMES[BINARY][1], valueAbb, value); - checkDuplicate(duplicates, accumulation, value, value); - if (!value.equalsIgnoreCase(valueAbb)) checkDuplicate(duplicates, accumulation, valueAbb, value); - continue; - } - - - if (type == COMBINING_CLASS) { - String num = up.getValue(NUMBER); - num = "; " + Utility.repeat(" ", 3-num.length()) + num; - addLine(sorted, propAbb + num, valueAbb, value, null); - } else if (!valueAbb.equals(UCD_Names.YN_TABLE[1])) { - addLine(sorted, propAbb, valueAbb, value, null); - } - checkDuplicate(duplicates, accumulation, value, prop + "=" + value); - if (!value.equalsIgnoreCase(valueAbb) && !valueAbb.equals("n/a")) { - checkDuplicate(duplicates, accumulation, valueAbb, prop + "=" + value); - } - } - - Iterator blockIterator = Default.ucd().getBlockNames().iterator(); - while (blockIterator.hasNext()) { - addLine(sorted, "blk", "n/a", (String)blockIterator.next(), null); - } - - UCD.BlockData blockData = new UCD.BlockData(); - - int blockId = 0; - while (Default.ucd().getBlockData(blockId++, blockData)) { - addLine(sorted, "blk", "n/a", blockData.name); - } - - - String filename = "PropertyAliases"; - String newFile = "DerivedData/" + filename + UnicodeDataFile.getFileSuffix(true); - PrintWriter log = Utility.openPrintWriter(newFile, Utility.LATIN1_UNIX); - String[] batName = {""}; - String mostRecent = org.unicode.cldr.util.Utility.generateBat("DerivedData/", filename, UnicodeDataFile.getFileSuffix(true), batName); - - log.println("# " + filename + UnicodeDataFile.getFileSuffix(false)); - log.println(UnicodeDataFile.generateDateLine()); - log.println("#"); - Utility.appendFile("PropertyAliasesHeader.txt", Utility.LATIN1, log); - log.println(HORIZONTAL_LINE); - log.println(); - int count = Utility.print(log, sorted, "\n", new MyBreaker(true)); - log.println(); - log.println(); - log.println(HORIZONTAL_LINE); - log.println("# Total: \t" + count); - log.println(); - log.close(); - Utility.renameIdentical(mostRecent, Utility.getOutputName(newFile), batName[0]); - - filename = "PropertyValueAliases"; - newFile = "DerivedData/" + filename + UnicodeDataFile.getFileSuffix(true); - log = Utility.openPrintWriter(newFile, Utility.LATIN1_UNIX); - mostRecent = org.unicode.cldr.util.Utility.generateBat("DerivedData/", filename, UnicodeDataFile.getFileSuffix(true), batName); - - log.println("# " + filename + UnicodeDataFile.getFileSuffix(false)); - log.println(UnicodeDataFile.generateDateLine()); - log.println("#"); - Utility.appendFile("PropertyValueAliasesHeader.txt", Utility.LATIN1, log); - log.println(HORIZONTAL_LINE); - log.println(); - Utility.print(log, sorted, "\n", new MyBreaker(false)); - log.println(); - log.close(); - Utility.renameIdentical(mostRecent, Utility.getOutputName(newFile), batName[0]); - - filename = "PropertyAliasSummary"; - newFile = "OtherData/" + filename + UnicodeDataFile.getFileSuffix(true); - log = Utility.openPrintWriter(newFile, Utility.LATIN1_UNIX); - mostRecent = org.unicode.cldr.util.Utility.generateBat("OtherData/", filename, UnicodeDataFile.getFileSuffix(true), batName); - - log.println(); - log.println(HORIZONTAL_LINE); - log.println(); - log.println("# Non-Unique names: the same name (under either an exact or loose match)"); - log.println("# occurs as a property name or property value name"); - log.println("# Note: no two property names can be the same,"); - log.println("# nor can two property value names for the same property be the same."); - log.println(); - Utility.print(log, accumulation, "\n", new MyBreaker(false)); - log.println(); - log.close(); - Utility.renameIdentical(mostRecent, Utility.getOutputName(newFile), batName[0]); - } - - static void addLine(Set sorted, String f1, String f2, String f3, String f4) { - addLine(sorted, f1, f2, f3, f4, null); - } - - static void addLine(Set sorted, String f1, String f2, String f3, String f4, String comment) { - //System.out.println("Adding: " + line); - f1 += Utility.repeat(" ", 3 - f1.length()); - f1 += "; " + f2; - f1 += Utility.repeat(" ", 15 - f1.length()); - f1 += "; " + f3; - if (f4 != null) { - f1 += Utility.repeat(" ", 30 - f1.length()); - f1 += f4; - } - if (comment != null) { - f1 += Utility.repeat(" ", 50 - f1.length()); - f1 += comment; - } - sorted.add(f1); - } - - static class MyBreaker implements Utility.Breaker { - boolean status; - int count; - - public MyBreaker(boolean status) { - this.status = status; - } - - public byte getType (String c) { - for (byte i = 0; i <= BINARY_PROP; ++i) { - if (c.startsWith(UCD_Names.PROP_TYPE_NAMES[i][1])) return i; - } - return UNKNOWN_PROP; - } - - public boolean filter(Object current) { - String c = current.toString(); - byte type = getType(c); - if (type != UNKNOWN_PROP) return status; - return !status; - } - - public String get(Object current, Object old) { - if (old == null) { - old = " "; - } - String c = current.toString(); - String o = old.toString(); - String sep = ""; - if (!c.substring(0,2).equals(o.substring(0,2))) { - sep = "\n"; - if (status) { - byte type = getType(c); - sep = sep + HORIZONTAL_LINE + sep + "# " + UCD_Names.PROP_TYPE_NAMES[type][0] + " Properties" + sep + HORIZONTAL_LINE + sep; - } - } - if (status) { - int pos = c.indexOf(';'); - c = c.substring(pos+1).trim(); - } - return sep + c; - } - } - - static void checkDuplicate(Map m, Set accumulation, String toCheck, String originalComment) { - toCheck = Utility.getSkeleton(toCheck); - String comment = "{" + originalComment + "}"; - - Set result = (Set) m.get(toCheck); - if (result != null) { - // Warn on serious problem: two property-names collide - // or two property names & values collide. - // examples: - // if (1) "c" stood for both "General_Category" and "Combining_Class" - // or if (2) "X=cc" stood for "X=control" and "X=compatibility" - // 1: comment doesn't contain "=", and something in the results doesn't contain "=" - // 2: comment does contain "X=", and something else in results contains "X=" - - int equalPos = comment.indexOf('='); - if (equalPos < 0) { // #1 - String conflict = Utility.findSubstring("=", result, false); - if (conflict != null) { - System.out.println("Property Name Conflict " + toCheck); - System.out.println(" With " + comment); - System.out.println(" And " + conflict); - } - } else { // #2 - String trial = comment.substring(0,equalPos+1); - String conflict = Utility.findSubstring(trial, result, true); - if (conflict != null) { - System.out.println("Property Value Name Conflict " + toCheck); - System.out.println(" With " + comment); - System.out.println(" And " + conflict); - } - } - - // accumulate differences - - String acc = (String)accumulation.get(toCheck); - if (acc == null) { - acc = "# \"" + toCheck + "\":\t" + originalComment; - } - acc += ";\t" + result; - - result.add(comment); - accumulation.add("# " + result.toString() + ":\t" + toCheck); - } else { - result = new TreeSet(); - result.add(comment); - m.put(toCheck, result); - } - } - - public static void generateVerticalSlice(int startEnum, int endEnum, - int headerChoice, String directory, String file) throws IOException { - - - String newFile = directory + file + UnicodeDataFile.getFileSuffix(true); - PrintWriter output = Utility.openPrintWriter(newFile, Utility.LATIN1_UNIX); - String[] batName = {""}; - String mostRecent = org.unicode.cldr.util.Utility.generateBat(directory, file, UnicodeDataFile.getFileSuffix(true), batName); - - doHeader(file + UnicodeDataFile.getFileSuffix(false), output, headerChoice); - int last = -1; - for (int i = startEnum; i < endEnum; ++i) { - UCDProperty up = UnifiedBinaryProperty.make(i, Default.ucd()); - if (up == null) continue; - if (up.skipInDerivedListing()) continue; - - - if (i == DECOMPOSITION_TYPE || i == NUMERIC_TYPE - || i == (BINARY_PROPERTIES | Non_break) - || i == (BINARY_PROPERTIES | CaseFoldTurkishI) - || i == (HANGUL_SYLLABLE_TYPE | NA) - || i == (JOINING_TYPE | JT_U) - || i == (JOINING_GROUP | NO_SHAPING) - ) continue; // skip zero case - - if (skipSpecial == SKIP_SPECIAL - && i >= (BINARY_PROPERTIES | CompositionExclusion) - && i < (AGE + NEXT_ENUM)) continue; - - if ((last & 0xFF00) != (i & 0xFF00) && (i <= BINARY_PROPERTIES || i >= SCRIPT)) { - output.println(); - output.println(HORIZONTAL_LINE); - output.println("# " + up.getHeader()); - output.println(HORIZONTAL_LINE); - output.println(); - System.out.println(); - System.out.println(up.getHeader()); - last = i; - } else { - output.println(HORIZONTAL_LINE); - output.println(); - } - System.out.print("."); - if (DEBUG) System.out.println(i); - new MyPropertyLister(Default.ucd(), i, output).print(); - output.flush(); - } - if (endEnum == LIMIT_ENUM) { - output.println(); - output.println(HORIZONTAL_LINE); - output.println("# Numeric Values (from UnicodeData.txt, field 6/7/8)"); - output.println(HORIZONTAL_LINE); - output.println(); - System.out.println(); - System.out.println("@NUMERIC VALUES"); - - Set numericValueSet = new TreeSet(); - for (int i = 0; i < 0x10FFFF; ++i) { - double nv = Default.ucd().getNumericValue(i); - if (Double.isNaN(nv)) continue; - numericValueSet.add(new Double(nv)); - } - Iterator it = numericValueSet.iterator(); - while(it.hasNext()) { - new MyFloatLister(Default.ucd(), ((Double)it.next()).doubleValue(), output).print(); - output.println(); - System.out.print("."); - } - output.flush(); - } - output.close(); - //System.out.println("HERE"); - Utility.renameIdentical(mostRecent, Utility.getOutputName(newFile), batName[0]); - System.out.println(); - } - - */ public static void writeNormalizerTestSuite(String directory, String fileName) throws IOException { + final var nfd = Default.nfd(); + final var nfc = Default.nfc(); + final var nfkd = Default.nfkd(); final UnicodeDataFile fc = UnicodeDataFile.openAndWriteHeader(directory, fileName) .setSkipCopyright(Settings.SKIP_COPYRIGHT); final PrintWriter log = fc.out; - // final String suffix = FileInfix.getDefault().getFileSuffix(".txt"); - // final String newFile = directory + fileName + suffix; - // PrintWriter log = Utility.openPrintWriter(newFile, Utility.UTF8_UNIX); - // String[] batName = {""}; - // String mostRecent = org.unicode.cldr.util.Utility.generateBat(directory, fileName, - // UnicodeDataFile.getFileSuffix(true), batName); - final String[] example = new String[256]; - // log.println("# " + fileName + UnicodeDataFile.getFileSuffix(false)); - // log.println(UnicodeDataFile.generateDateLine()); - // log.println("#"); - // log.println("# Normalization Test Suite"); - // log.println("# Format:"); - // log.println("#"); - // log.println("# Columns (c1, c2,...) are separated by semicolons"); - // log.println("# Comments are indicated with hash marks"); - // log.println("#"); - // log.println("# CONFORMANCE:"); - // log.println("# 1. The following invariants must be true for all conformant - // implementations"); - // log.println("#"); - // log.println("# NFC"); - // log.println("# c2 == NFC(c1) == NFC(c2) == NFC(c3)"); - // log.println("# c4 == NFC(c4) == NFC(c5)"); - // log.println("#"); - // log.println("# NFD"); - // log.println("# c3 == NFD(c1) == NFD(c2) == NFD(c3)"); - // log.println("# c5 == NFD(c4) == NFD(c5)"); - // log.println("#"); - // log.println("# NFKC"); - // log.println("# c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == - // NFKC(c5)"); - // log.println("#"); - // log.println("# NFKD"); - // log.println("# c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == - // NFKD(c5)"); - // log.println("#"); - // log.println("# 2. For every code point X assigned in this version of Unicode that - // is not specifically"); - // log.println("# listed in Part 1, the following invariants must be true for all - // conformant"); - // log.println("# implementations:"); - // log.println("#"); - // log.println("# X == NFC(X) == NFD(X) == NFKC(X) == NFKD(X)"); - System.out.println("Writing Part 1"); - // log.println("#"); - // log.println("@Part0 # Specific cases"); - // log.println("#"); - for (final String testSuiteCase : testSuiteCases) { writeLine(testSuiteCase, log, false); } @@ -829,8 +66,7 @@ public static void writeNormalizerTestSuite(String directory, String fileName) final org.unicode.props.UnicodeProperty sc = IndexUnicodeProperties.make().getProperty(UcdProperty.Script); for (final String cp : UnicodeSet.ALL_CODE_POINTS) { - final String[] decompositions = - new String[] {Default.nfd().normalize(cp), Default.nfkd().normalize(cp)}; + final String[] decompositions = new String[] {nfd.normalize(cp), nfkd.normalize(cp)}; for (final String decomposition : decompositions) { final int lastCCC = Default.ucd() @@ -971,7 +207,6 @@ public static void writeNormalizerTestSuite(String directory, String fileName) if (Default.ucd().getDecompositionType(ch) != CANONICAL) { continue; } - // if (!Default.nfc().isNormalized(ch)) continue; final String s = Default.ucd().getDecompositionMapping(ch); if (UTF16.hasMoreCodePointsThan(s, 2)) { continue; @@ -1032,7 +267,7 @@ public static void writeNormalizerTestSuite(String directory, String fileName) for (var entry : canonicalDecompositionsByCodepoint.entrySet()) { final int cp = entry.getKey(); final String decomposition = entry.getValue(); - if (Default.nfc().normalize(cp).equals(Character.toString(cp))) { + if (nfc.normalize(cp).equals(Character.toString(cp))) { int first = decomposition.codePointAt(0); int last = decomposition.codePointBefore(decomposition.length()); primaryCompositesByFirstNFDCodePointBuilder @@ -1107,8 +342,8 @@ public static void writeNormalizerTestSuite(String directory, String fileName) } for (int firstCandidate : firstCandidates) { for (int secondCandidate : secondCandidates) { - String firstDecomposition = Default.nfd().normalize(firstCandidate); - String secondDecomposition = Default.nfd().normalize(secondCandidate); + String firstDecomposition = nfd.normalize(firstCandidate); + String secondDecomposition = nfd.normalize(secondCandidate); String decomposition = firstDecomposition + secondDecomposition; if (canonicalDecompositionsOfSingleCodepoints.contains(decomposition)) { // Already covered in parts 1 (single code points) and 4 @@ -1123,16 +358,13 @@ public static void writeNormalizerTestSuite(String directory, String fileName) // firstCandidate and secondCandidate, look for strings that // cannot be split between those two characters. // Those are our test cases for Part 5. - String nfc = Default.nfc().normalize(decomposition); + String normalizedFormC = nfc.normalize(decomposition); forAllStringsCanonicallyDecomposingTo( decomposition, s -> { for (int j = 0; j < s.length(); ++j) { - if (Default.nfd() - .normalize(s.substring(0, j)) - .equals(firstDecomposition) - && Default.nfd() - .normalize(s.substring(j)) + if (nfd.normalize(s.substring(0, j)).equals(firstDecomposition) + && nfd.normalize(s.substring(j)) .equals(secondDecomposition)) { // The string splits into parts // equivalent to firstCandidate and @@ -1141,7 +373,7 @@ public static void writeNormalizerTestSuite(String directory, String fileName) return; } } - if (s.equals(nfc)) { + if (s.equals(normalizedFormC)) { // If the NFC of // firstCandidate + secondCandidate has a // link, thus @@ -1162,7 +394,7 @@ public static void writeNormalizerTestSuite(String directory, String fileName) // correct, not tried it.” (Knuth 1977), let // us check those statements. String linkDecomposition = - Default.nfd().normalize(nfc.codePointAt(0)); + nfd.normalize(normalizedFormC.codePointAt(0)); if (!linkDecomposition.startsWith(firstDecomposition)) { throw new AssertionError( "The first code point of NFC(" @@ -1171,10 +403,10 @@ public static void writeNormalizerTestSuite(String directory, String fileName) + Default.ucd().getName(secondDecomposition) + ") does not cover the first part"); } - skippedNFCs.add(nfc); + skippedNFCs.add(normalizedFormC); return; } - part5NFCs.add(nfc); + part5NFCs.add(normalizedFormC); writeLine(s, log, true); System.out.println(Default.ucd().getName(s)); }); @@ -1182,11 +414,11 @@ public static void writeNormalizerTestSuite(String directory, String fileName) } } - for (String nfc : skippedNFCs) { - if (!part5NFCs.contains(nfc)) { + for (String normalizedFormC : skippedNFCs) { + if (!part5NFCs.contains(normalizedFormC)) { throw new AssertionError( "Candidate Part 5 test case " - + Default.ucd().getName(nfc) + + Default.ucd().getName(normalizedFormC) + " was suppressed but did not appear as the NFC of another test" + " case in Part 5."); } @@ -1197,7 +429,6 @@ public static void writeNormalizerTestSuite(String directory, String fileName) log.println("#"); log.println("# EOF"); fc.close(); - // Utility.renameIdentical(mostRecent, Utility.getOutputName(newFile), batName[0]); } private static final ImmutableMap canonicalDecompositionsByCodepoint; @@ -1261,27 +492,6 @@ static void forAllStrings( } } - /* - - static void handleIdentical() throws IOException { - DirectoryIterator target = new DirectoryIterator(GEN_DIR + File.separator + "DerivedData"); - DirectoryIterator.RootFileFilter filter = new DirectoryIterator.RootFileFilter(""); - DirectoryIterator recent = new DirectoryIterator(UCD_DIR, filter); - while (true) { - File targetFile = target.next(); - if (targetFile == null) break; - recent.reset(); - filter.setRoot(DirectoryIterator.getRoot(targetFile)); - File lastFile = recent.next(); - if (lastFile == null) break; - System.out.println("Target: " + targetFile); - System.out.println("Last: " + lastFile); - if (!DirectoryIterator.isAlmostIdentical(targetFile, lastFile, true)) continue; - System.out.println("Almost Identical"); - } - } - - */ static void writeLine(String cc, PrintWriter log, boolean check) { final String c = Default.nfc().normalize(cc); String d = Default.nfd().normalize(cc); @@ -1370,349 +580,4 @@ static final String comma(String s) { "\u1100\uAC00\u11A8", "\u1100\uAC00\u11A8\u11A8", }; - /* - static final void backwardsCompat(String directory, String filename, int[] list) throws IOException { - - - String newFile = directory + filename + UnicodeDataFile.getFileSuffix(true); - PrintWriter log = Utility.openPrintWriter(newFile, Utility.LATIN1_UNIX); - String[] batName = {""}; - String mostRecent = org.unicode.cldr.util.Utility.generateBat(directory, filename, UnicodeDataFile.getFileSuffix(true), batName); - DiffPropertyLister dpl; - UnicodeSet cummulative = new UnicodeSet(); - - try { - for (int i = 0; i < list.length; ++i) { - int prop = list[i]; - log.println(); - log.println(HORIZONTAL_LINE); - log.println("###### " + DerivedProperty.make(prop, Default.ucd()).getName()); - //log.println(); - //log.println(HORIZONTAL_LINE); - //new DiffPropertyLister("3.2.0", "1.1.0", log, prop).print(); - log.println(); - log.println(HORIZONTAL_LINE); - - log.println(); - dpl = new DiffPropertyLister("3.2.0", "2.0.0", log, prop); - dpl.print(); - cummulative.addAll(dpl.getSet()); - log.println(HORIZONTAL_LINE); - - log.println(); - dpl = new DiffPropertyLister("3.2.0", "2.1.2", log, prop); - dpl.print(); - cummulative.addAll(dpl.getSet()); - log.println(HORIZONTAL_LINE); - - log.println(); - dpl = new DiffPropertyLister("3.2.0", "2.1.5", log, prop); - dpl.print(); - cummulative.addAll(dpl.getSet()); - log.println(HORIZONTAL_LINE); - - log.println(); - dpl = new DiffPropertyLister("3.2.0", "2.1.8", log, prop); - dpl.print(); - cummulative.addAll(dpl.getSet()); - log.println(HORIZONTAL_LINE); - - log.println(); - dpl = new DiffPropertyLister("3.2.0", "3.0.0", log, prop); - dpl.print(); - cummulative.addAll(dpl.getSet()); - log.println(HORIZONTAL_LINE); - - log.println(); - dpl = new DiffPropertyLister("3.2.0", "3.0.1", log, prop); - dpl.print(); - cummulative.addAll(dpl.getSet()); - log.println(HORIZONTAL_LINE); - - log.println(); - dpl = new DiffPropertyLister("3.2.0", "3.1.0", log, prop); - dpl.print(); - cummulative.addAll(dpl.getSet()); - log.println(HORIZONTAL_LINE); - - log.println(); - dpl = new DiffPropertyLister("3.2.0", "3.1.1", log, prop); - dpl.print(); - cummulative.addAll(dpl.getSet()); - log.println(HORIZONTAL_LINE); - - log.println(); - log.println("Cummulative differences"); - UCDProperty up = DerivedProperty.make(prop, Default.ucd()); - UnicodeSet newProp = up.getSet(); - Utility.showSetNames(log, "", cummulative.removeAll(newProp), false, false, Default.ucd()); - } - } finally { - if (log != null) { - log.close(); - Utility.renameIdentical(mostRecent, Utility.getOutputName(newFile), batName[0]); - } - } - } - - static final void generateAge(String directory, String filename) throws IOException { - - String newFile = directory + filename + UnicodeDataFile.getFileSuffix(true); - PrintWriter log = Utility.openPrintWriter(newFile, Utility.LATIN1_UNIX); - String[] batName = {""}; - String mostRecent = org.unicode.cldr.util.Utility.generateBat(directory, filename, UnicodeDataFile.getFileSuffix(true), batName); - try { - log.println("# " + filename + UnicodeDataFile.getFileSuffix(false)); - log.println(UnicodeDataFile.generateDateLine()); - log.println("#"); - log.println("# Unicode Character Database: Derived Property Data"); - log.println("# This file shows when various code points were designated in Unicode"); - log.println("# Notes:"); - log.println("# - The term 'designated' means that a previously reserved code point was specified"); - log.println("# to be a noncharacter or surrogate, or assigned as a character,"); - log.println("# control or format code."); - log.println("# - Versions are only tracked from 1.1 onwards, since version 1.0"); - log.println("# predated changes required by the ISO 10646 merger."); - log.println("# - The Hangul Syllables that were removed from 2.0 are not included in the 1.1 listing."); - log.println("# - The supplementary private use code points and the non-character code points"); - log.println("# were designated in version 2.0, but not specifically listed in the UCD"); - log.println("# until versions 3.0 and 3.1 respectively."); - log.println("#"); - log.println("# For details on the contents of each version, see"); - log.println("# http://www.unicode.org/versions/enumeratedversions.html."); - - // http://www.unicode.org/versions/enumeratedversions.html - - log.println(HORIZONTAL_LINE); - log.println(); - new DiffPropertyLister(null, "1.1.0", log).print(); - log.println(HORIZONTAL_LINE); - log.println(); - new DiffPropertyLister("1.1.0", "2.0.0", log).print(); - log.println(HORIZONTAL_LINE); - log.println(); - new DiffPropertyLister("2.0.0", "2.1.2", log).print(); - log.println(HORIZONTAL_LINE); - log.println(); - new DiffPropertyLister("2.1.2", "3.0.0", log).print(); - log.println(HORIZONTAL_LINE); - log.println(); - new DiffPropertyLister("3.0.0", "3.1.0", log).print(); - log.println(HORIZONTAL_LINE); - log.println(); - new DiffPropertyLister("3.1.0", "3.2.0", log).print(); - log.println(HORIZONTAL_LINE); - log.println(); - new DiffPropertyLister("3.2.0", "4.0.0", log).print(); - - printDiff("110", "200"); - UnicodeSet u11 = fromFile(BASE_DIR + "UnicodeData\\Versions\\UnicodeData-1.1.txt", false); - UnicodeSet u20 = fromFile(BASE_DIR + "UnicodeData\\Versions\\UnicodeData-2.0.txt", false); - UnicodeSet u21 = fromFile(BASE_DIR + "UnicodeData\\Versions\\UnicodeData-2.1.txt", false); - UnicodeSet u30 = fromFile(BASE_DIR + "UnicodeData\\Versions\\UnicodeData-3.0.txt", false); - UnicodeSet u31 = fromFile(BASE_DIR + "UnicodeData\\Versions\\UnicodeData-3.1.txt", false); - - log.println(); - log.println("# Code points assigned in Unicode 1.1 (minus Hangul Syllables): " - + n.format(u11.count())); - log.println(); - u11.print(log, false, false, "1.1"); - - UnicodeSet u20m = new UnicodeSet(u20).remove(u11); - log.println(); - log.println("# Code points assigned in Unicode 2.0 (minus Unicode 1.1): " - + n.format(u20m.count())); - log.println(); - u20m.print(log, false, false, "2.0"); - - UnicodeSet u21m = new UnicodeSet(u21).remove(u20); - log.println(); - log.println("# Code points assigned in Unicode 2.1 (minus Unicode 2.0): " - + n.format(u21m.count())); - log.println(); - u21m.print(log, false, false, "2.1"); - - UnicodeSet u30m = new UnicodeSet(u30).remove(u21); - log.println(); - log.println("# Code points assigned in Unicode 3.0 (minus Unicode 2.1): " - + n.format(u30m.count())); - log.println(); - u30m.print(log, false, false, "3.0"); - - UnicodeSet u31m = new UnicodeSet(u31).remove(u30); - log.println(); - log.println("# Code points assigned in Unicode 3.1 (minus Unicode 3.0): " - + n.format(u31m.count())); - log.println(); - u31m.print(log, false, false, "3.1"); - - } finally { - if (log != null) { - log.close(); - Utility.renameIdentical(mostRecent, Utility.getOutputName(newFile), batName[0]); - } - } - - } - - public static void listCombiningAccents() throws IOException { - - PrintWriter log = Utility.openPrintWriter("ListAccents" + UnicodeDataFile.getFileSuffix(true), Utility.LATIN1_UNIX); - Set set = new TreeSet(); - Set set2 = new TreeSet(); - - for (int i = 0; i < 0x10FFFF; ++i) { - Utility.dot(i); - if (!Default.ucd().isRepresented(i)) continue; - - if (Default.nfd().isNormalized(i)) { - if (Default.ucd().getScript(i) == LATIN_SCRIPT) { - int cp = i; - String hex = "u" + Utility.hex(cp, 4); - set.add("# yyy $x <> \\" + hex + " ; # " + Default.ucd().getName(cp)); - } - continue; - } - - String decomp = Default.nfd().normalize(i); - int j; - for (j = 0; j < decomp.length(); j += UTF16.getCharCount(i)) { - int cp = UTF16.charAt(decomp, j); - byte cat = Default.ucd().getCategory(cp); - if (cat != Mn) continue; - String hex = "u" + Utility.hex(cp, 4); - set.add("# xxx $x <> \\" + hex + " ; # " + Default.ucd().getName(cp)); - } - } - - Iterator it = set.iterator(); - while (it.hasNext()) { - log.println(it.next()); - } - log.close(); - } - - public static void listGreekVowels() throws IOException { - - PrintWriter log = Utility.openPrintWriter("ListGreekVowels" + UnicodeDataFile.getFileSuffix(true), Utility.LATIN1_UNIX); - Set set = new TreeSet(); - Set set2 = new TreeSet(); - - String vowels = "\u03B1\u03B5\u03B7\u03B9\u03BF\u03C5\u03C9\u0391\u0395\u0397\u0399\u039F\u03A5\u03A9"; - String diphthongEnd = "\u03B9\u03C5\u0399\u03A5"; - String diphthongStart = "\u03B1\u03B5\u03B7\u03BF\u03C5\u0391\u0395\u0397\u039F\u03A5"; - String etas = "\u03B7\u0397"; - String iotas = "\u03B9\u0399"; - - for (char i = 0; i < 0xFFFF; ++i) { - Utility.dot(i); - if (!Default.ucd().isRepresented(i)) continue; - if (Default.ucd().getScript(i) != GREEK_SCRIPT) continue; - String decomp = Default.nfd().normalize(i); - - if (decomp.indexOf('\u0306') >= 0) continue; // skip breve - if (decomp.indexOf('\u0304') >= 0) continue; // skip macron - - String comp = Default.nfc().normalize(decomp); - if (!comp.equals(String.valueOf(i))) continue; // skip compats - - char first = decomp.charAt(0); - - if (vowels.indexOf(first) < 0) continue; - - String h = ""; - if (decomp.indexOf('\u0314') >= 0) h = "\uFFFF"; - - if (diphthongEnd.indexOf(first) >= 0) { - for (int j = 0; j < diphthongStart.length(); ++j) { - String v = diphthongStart.substring(j, j+1); - char vc = v.charAt(0); - if (Default.ucd().getCategory(vc) == Ll && Default.ucd().getCategory(first) == Lu) continue; - if (etas.indexOf(vc) >= 0 && iotas.indexOf(first) >= 0) continue; - set.add(new Pair(h + v + first, new Pair(v + decomp, v + i))); - } - } - set.add(new Pair(h+first, new Pair(decomp, String.valueOf(i)))); - } - - Iterator it = set.iterator(); - Object last = ""; - while (it.hasNext()) { - Pair p = (Pair) it.next(); - if (!last.equals(p.first)) { - log.println(); - last = p.first; - } else { - log.print(", "); - } - p = (Pair) p.second; - log.print(p.second); - } - log.close(); - } - - public static void listKatakana() throws IOException { - - - for (char i = 'a'; i <= 'z'; ++i) { - doKana(String.valueOf(i)); - if (i == 'c') doKana("ch"); - if (i == 's') doKana("sh"); - if (i == 'd') { - doKana("dz"); - doKana("dj"); - } - } - - System.out.println(); - } - - public static void doKana(String i) { - - String vowels = "aeiou"; - System.out.println(); - System.out.print(i + " " + i + i); - System.out.println(); - for (int j = 0; j < vowels.length(); ++j) { - char c = vowels.charAt(j); - System.out.print(" " + i + c); - } - - System.out.println(); - for (int j = 0; j < vowels.length(); ++j) { - char c = vowels.charAt(j); - System.out.print(" " + i + "y" + c); - } - } - - public static void genTrailingZeros() { - - UnicodeSet result = new UnicodeSet(); - for (int i = 0; i < 0x10FFFF; ++i) { - if ((i & 0xFFF) == 0) System.out.println("# " + i); - if (!Default.ucd().isAssigned(i)) continue; - if (Default.nfd().isNormalized(i)) continue; - String decomp = Default.nfd().normalize(i); - int cp; - for (int j = 0; j < decomp.length(); j += UTF16.getCharCount(cp)) { - cp = UTF16.charAt(decomp,j); - if (j == 0) continue; // skip first - if (Default.ucd().getCombiningClass(cp) == 0) { - result.add(cp); - } - } - } - int rangeCount = result.getRangeCount(); - for (int k = 0; k < rangeCount; ++k) { - int start = result.getRangeStart(k); - int end = result.getRangeEnd(k); - System.out.println( - Utility.hex(start) - + (start != end ? ".." + Utility.hex(end) : "") - + "; " - + Default.ucd().getName(start) - + (start != end ? ".." + Default.ucd().getName(end) : "")); - } - System.out.println("TrailingZero count: " + result.size()); - }*/ }