From 22457d74b2614d6056c56e73c8db2b82b8010a2d Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 8 Jul 2018 15:59:00 +0100 Subject: [PATCH] Unicode Emoji 11.0.0 --- CHANGELOG.md | 2 ++ README.md | 4 ++-- configure.ac | 4 ++-- src/proplist.c | 41 ++++++++++++++++++++++------------------- 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbfb22de..cf87dcbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## (In Development) * Make the ispunct ctype compatibility implementation conformant. +* Update to Unicode Character Data 11.0.0. +* Update to Unicode Emoji 11.0. ## 10.0.0 - 2017-06-25 diff --git a/README.md b/README.md index 40ae1793..ca5d02e9 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ this information within a C or C++ program. The project uses and supports the following sources of Unicode codepoint data: -* [Unicode Character Database](http://www.unicode.org/Public/10.0.0/ucd/) 10.0.0 -* [Unicode Emoji](http://www.unicode.org/Public/emoji/5.0/) 5.0 (UTR #51) +* [Unicode Character Database](http://www.unicode.org/Public/11.0.0/ucd/) 11.0.0 +* [Unicode Emoji](http://www.unicode.org/Public/emoji/11.0/) 11.0 (UTR #51) * [ConScript Unicode Registry](http://www.evertype.com/standards/csur/) ## Build Dependencies diff --git a/configure.ac b/configure.ac index dd84cd75..b7efccf5 100644 --- a/configure.ac +++ b/configure.ac @@ -42,10 +42,10 @@ AC_ARG_WITH([unicode-version], AC_SUBST(UCD_VERSION) AC_ARG_WITH([emoji-version], - [AS_HELP_STRING([--with-emoji-version], [Unicode emoji version to support @<:@default=5.0@:>@])], + [AS_HELP_STRING([--with-emoji-version], [Unicode emoji version to support @<:@default=11.0@:>@])], [AS_IF([test x"$withval" != x], [EMOJI_VERSION="$withval"])], - [EMOJI_VERSION="5.0"]) + [EMOJI_VERSION="11.0"]) AC_SUBST(EMOJI_VERSION) diff --git a/src/proplist.c b/src/proplist.c index e13abaaa..13834443 100644 --- a/src/proplist.c +++ b/src/proplist.c @@ -47,7 +47,7 @@ static ucd_property properties_Cf(codepoint_t c) break; case 0x2000: if (c == 0x200C) return UCD_PROPERTY_JOIN_CONTROL | UCD_PROPERTY_OTHER_GRAPHEME_EXTEND; - if (c == 0x200D) return UCD_PROPERTY_JOIN_CONTROL; + if (c == 0x200D) return UCD_PROPERTY_JOIN_CONTROL | UCD_PROPERTY_EMOJI_COMPONENT; if (c >= 0x200E && c <= 0x200F) return UCD_PROPERTY_BIDI_CONTROL | UCD_PROPERTY_PATTERN_WHITE_SPACE; if (c >= 0x202A && c <= 0x202E) return UCD_PROPERTY_BIDI_CONTROL; if (c >= 0x2061 && c <= 0x2064) return UCD_PROPERTY_OTHER_MATH; @@ -60,7 +60,7 @@ static ucd_property properties_Cf(codepoint_t c) break; case 0x0E0000: if (c == 0x0E0001) return UCD_PROPERTY_DEPRECATED; - if (c >= 0x0E0020 && c <= 0x0E007F) return UCD_PROPERTY_OTHER_GRAPHEME_EXTEND; + if (c >= 0x0E0020 && c <= 0x0E007F) return UCD_PROPERTY_OTHER_GRAPHEME_EXTEND | UCD_PROPERTY_EMOJI_COMPONENT; break; } return 0; @@ -596,6 +596,12 @@ static ucd_property properties_Mc(codepoint_t c) return UCD_PROPERTY_OTHER_ALPHABETIC; } +static ucd_property properties_Me(codepoint_t c) +{ + if (c == 0x20E3) return UCD_PROPERTY_EMOJI_COMPONENT; + return 0; +} + static ucd_property properties_Mn(codepoint_t c) { switch (c & 0xFFFFFF00) @@ -902,7 +908,8 @@ static ucd_property properties_Mn(codepoint_t c) if (c == 0xFB1E) return UCD_PROPERTY_DIACRITIC | UCD_PROPERTY_OTHER_ALPHABETIC; break; case 0xFE00: - if (c >= 0xFE00 && c <= 0xFE0F) return UCD_PROPERTY_VARIATION_SELECTOR; + if (c >= 0xFE00 && c <= 0xFE0E) return UCD_PROPERTY_VARIATION_SELECTOR; + if (c == 0xFE0F) return UCD_PROPERTY_VARIATION_SELECTOR | UCD_PROPERTY_EMOJI_COMPONENT; if (c >= 0xFE20 && c <= 0xFE2F) return UCD_PROPERTY_DIACRITIC; break; case 0x010200: @@ -1682,6 +1689,7 @@ static ucd_property properties_So_002600(codepoint_t c) break; case 0x2650: if (c <= 0x2653) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c == 0x265F) return UCD_PROPERTY_EMOJI; break; case 0x2660: if (c == 0x2606) return UCD_PROPERTY_OTHER_MATH; @@ -1694,6 +1702,7 @@ static ucd_property properties_So_002600(codepoint_t c) break; case 0x2670: if (c == 0x267B) return UCD_PROPERTY_EMOJI; + if (c == 0x267E) return UCD_PROPERTY_EMOJI; if (c == 0x267F) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; break; case 0x2690: @@ -1998,29 +2007,22 @@ static ucd_property properties_So(codepoint_t c) if (c >= 0x01F6EB && c <= 0x01F6EC) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c == 0x01F6F0) return UCD_PROPERTY_EMOJI; if (c == 0x01F6F3) return UCD_PROPERTY_EMOJI; - if (c >= 0x01F6F4 && c <= 0x01F6F8) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c >= 0x01F6F4 && c <= 0x01F6F9) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; break; case 0x01F900: + if (c <= 0x01F90B) return 0; if (c >= 0x01F918 && c <= 0x01F91C) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; - if (c >= 0x01F910 && c <= 0x01F91D) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; if (c >= 0x01F91E && c <= 0x01F91F) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c == 0x01F926) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; - if (c >= 0x01F920 && c <= 0x01F92F) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F930 && c <= 0x01F932) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; + if (c >= 0x01F930 && c <= 0x01F939) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c == 0x01F93B) return 0; - if (c >= 0x01F93A && c <= 0x01F93C) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F933 && c <= 0x01F93E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; + if (c >= 0x01F93D && c <= 0x01F93E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c == 0x01F946) return 0; - if (c >= 0x01F940 && c <= 0x01F94B) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c == 0x01F94C) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F950 && c <= 0x01F95E) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F95F && c <= 0x01F96B) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F980 && c <= 0x01F991) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c >= 0x01F992 && c <= 0x01F997) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - if (c == 0x01F9C0) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; + if (c >= 0x01F9B0 && c <= 0x01F9B3) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_COMPONENT; + if (c >= 0x01F9B5 && c <= 0x01F9B6) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; + if (c >= 0x01F9B8 && c <= 0x01F9B9) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; if (c >= 0x01F9D1 && c <= 0x01F9DD) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION | UCD_PROPERTY_EMOJI_MODIFIER_BASE; - if (c >= 0x01F9D0 && c <= 0x01F9E6) return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; - return 0; + return UCD_PROPERTY_EMOJI | UCD_PROPERTY_EMOJI_PRESENTATION; } return 0; } @@ -2043,6 +2045,7 @@ ucd_property ucd_properties(codepoint_t c, ucd_category category) case UCD_CATEGORY_Lo: return properties_Lo(c) | properties_Lo_ideographic(c); case UCD_CATEGORY_Lu: return properties_Lu(c); case UCD_CATEGORY_Mc: return properties_Mc(c); + case UCD_CATEGORY_Me: return properties_Me(c); case UCD_CATEGORY_Mn: return properties_Mn(c); case UCD_CATEGORY_Nd: return properties_Nd(c); case UCD_CATEGORY_Nl: return properties_Nl(c); @@ -2061,6 +2064,6 @@ ucd_property ucd_properties(codepoint_t c, ucd_category category) case UCD_CATEGORY_Zl: return UCD_PROPERTY_WHITE_SPACE | UCD_PROPERTY_PATTERN_WHITE_SPACE; case UCD_CATEGORY_Zp: return UCD_PROPERTY_WHITE_SPACE | UCD_PROPERTY_PATTERN_WHITE_SPACE; case UCD_CATEGORY_Zs: return properties_Zs(c); - default: return 0; /* Co Cs Ii Lt Me */ + default: return 0; /* Co Cs Ii Lt */ }; }