From 5180ce98cfd8f6d235a71e555712d62044572871 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Tue, 16 Apr 2024 23:24:05 +0200 Subject: Add uprop_get_equideo() --- data/EquivalentUnifiedIdeograph | 408 +++++++++++++++++++++++++++++++++++ gen/data-files | 1 + gen/prop/equideo | 51 +++++ include/unicode/prop.h | 1 + lib/unicode/prop/uprop_get_equideo.c | 369 +++++++++++++++++++++++++++++++ 5 files changed, 830 insertions(+) create mode 100644 data/EquivalentUnifiedIdeograph create mode 100755 gen/prop/equideo create mode 100644 lib/unicode/prop/uprop_get_equideo.c diff --git a/data/EquivalentUnifiedIdeograph b/data/EquivalentUnifiedIdeograph new file mode 100644 index 0000000..d0fea92 --- /dev/null +++ b/data/EquivalentUnifiedIdeograph @@ -0,0 +1,408 @@ +# EquivalentUnifiedIdeograph-15.1.0.txt +# Date: 2023-01-05 +# © 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 +# +# For documentation, see UAX #44: Unicode Character Database, +# at https://www.unicode.org/reports/tr44/ +# +# This file defines the following property: +# +# Equivalent_Unified_Ideograph +# +# This data file lists CJK radicals and CJK strokes (aka characters +# that have the Radical=Yes property or are in the CJK Strokes block) +# for which there are reasonably equivalent CJK unified ideographs in +# that they are visually identical or near-identical. +# +# The file contains a list of lines with mappings from one code point +# or code point range to an equivalent CJK unified ideograph. +# +# Each mapping line contains two fields, separated by a semicolon (';'). +# The first field contains a code point or code point range represented +# as a variable-length hexadecimal value with 4 to 6 digits. The second +# field contains a code point represented as a variable-length +# hexadecimal value with 4 to 6 digits. +# +# CJK radicals and CJK strokes for which no reasonably equivalent CJK +# unified ideographs exist are listed as comments at the end of the file. +# +# Formally, the default value of the Equivalent_Unified_Ideograph +# property for each code point is , unless a mapping to some +# other character is specified in this data file. When a code point +# has the default value for the Equivalent_Unified_Ideograph property, +# that means that no other character exists whose representative glyph +# is a reasonably equivalent CJK unified ideograph. +# +# This file was originally created by Ken Lunde. +# +# ############################################################ +# +# Property: Equivalent_Unified_Ideograph +# +# @missing: 0000..10FFFF; + +2E81 ; 5382 # CJK RADICAL CLIFF +2E82 ; 4E5B # CJK RADICAL SECOND ONE +2E83 ; 4E5A # CJK RADICAL SECOND TWO +2E84 ; 4E59 # CJK RADICAL SECOND THREE +2E85 ; 4EBB # CJK RADICAL PERSON +2E86 ; 5182 # CJK RADICAL BOX +2E87 ; 20628 # CJK RADICAL TABLE +2E88 ; 5200 # CJK RADICAL KNIFE ONE +2E89 ; 5202 # CJK RADICAL KNIFE TWO +2E8A ; 535C # CJK RADICAL DIVINATION +2E8B ; 353E # CJK RADICAL SEAL +2E8C..2E8D ; 5C0F # [2] CJK RADICAL SMALL ONE..CJK RADICAL SMALL TWO +2E8E ; 5140 # CJK RADICAL LAME ONE +2E8F ; 5C23 # CJK RADICAL LAME TWO +2E90 ; 5C22 # CJK RADICAL LAME THREE +2E91 ; 21BC2 # CJK RADICAL LAME FOUR +2E92 ; 5DF3 # CJK RADICAL SNAKE +2E93 ; 5E7A # CJK RADICAL THREAD +2E94 ; 5F51 # CJK RADICAL SNOUT ONE +2E95 ; 2B739 # CJK RADICAL SNOUT TWO +2E96 ; 5FC4 # CJK RADICAL HEART ONE +2E97 ; 5FC3 # CJK RADICAL HEART TWO +2E98 ; 624C # CJK RADICAL HAND +2E99 ; 6535 # CJK RADICAL RAP +2E9B ; 65E1 # CJK RADICAL CHOKE +2E9C ; 65E5 # CJK RADICAL SUN +2E9D ; 6708 # CJK RADICAL MOON +2E9E ; 6B7A # CJK RADICAL DEATH +2E9F ; 6BCD # CJK RADICAL MOTHER +2EA0 ; 6C11 # CJK RADICAL CIVILIAN +2EA1 ; 6C35 # CJK RADICAL WATER ONE +2EA2 ; 6C3A # CJK RADICAL WATER TWO +2EA3 ; 706C # CJK RADICAL FIRE +2EA4..2EA5 ; 722B # [2] CJK RADICAL PAW ONE..CJK RADICAL PAW TWO +2EA6 ; 4E2C # CJK RADICAL SIMPLIFIED HALF TREE TRUNK +2EA7 ; 725B # CJK RADICAL COW +2EA8 ; 72AD # CJK RADICAL DOG +2EA9 ; 738B # CJK RADICAL JADE +2EAA ; 24D14 # CJK RADICAL BOLT OF CLOTH +2EAB ; 76EE # CJK RADICAL EYE +2EAC ; 793A # CJK RADICAL SPIRIT ONE +2EAD ; 793B # CJK RADICAL SPIRIT TWO +2EAE ; 25AD7 # CJK RADICAL BAMBOO +2EAF ; 7CF9 # CJK RADICAL SILK +2EB0 ; 7E9F # CJK RADICAL C-SIMPLIFIED SILK +2EB1 ; 7F53 # CJK RADICAL NET ONE +2EB2 ; 7F52 # CJK RADICAL NET TWO +2EB3 ; 34C1 # CJK RADICAL NET THREE +2EB4 ; 5197 # CJK RADICAL NET FOUR +2EB5 ; 2626B # CJK RADICAL MESH +2EB6 ; 7F8A # CJK RADICAL SHEEP +2EB7 ; 2634C # CJK RADICAL RAM +2EB8 ; 2634B # CJK RADICAL EWE +2EB9 ; 8002 # CJK RADICAL OLD +2EBA ; 8080 # CJK RADICAL BRUSH ONE +2EBB ; 807F # CJK RADICAL BRUSH TWO +2EBC ; 8089 # CJK RADICAL MEAT +2EBD ; 26951 # CJK RADICAL MORTAR +2EBE..2EC0 ; 8279 # [3] CJK RADICAL GRASS ONE..CJK RADICAL GRASS THREE +2EC1 ; 864E # CJK RADICAL TIGER +2EC2 ; 8864 # CJK RADICAL CLOTHES +2EC3 ; 8980 # CJK RADICAL WEST ONE +2EC4 ; 897F # CJK RADICAL WEST TWO +2EC5 ; 89C1 # CJK RADICAL C-SIMPLIFIED SEE +2EC6 ; 89D2 # CJK RADICAL SIMPLIFIED HORN +2EC7 ; 278B2 # CJK RADICAL HORN +2EC8 ; 8BA0 # CJK RADICAL C-SIMPLIFIED SPEECH +2EC9 ; 8D1D # CJK RADICAL C-SIMPLIFIED SHELL +2ECA ; 27FB7 # CJK RADICAL FOOT +2ECB ; 8F66 # CJK RADICAL C-SIMPLIFIED CART +2ECC..2ECE ; 8FB6 # [3] CJK RADICAL SIMPLIFIED WALK..CJK RADICAL WALK TWO +2ECF ; 9091 # CJK RADICAL CITY +2ED0 ; 9485 # CJK RADICAL C-SIMPLIFIED GOLD +2ED1 ; 9577 # CJK RADICAL LONG ONE +2ED2 ; 9578 # CJK RADICAL LONG TWO +2ED3 ; 957F # CJK RADICAL C-SIMPLIFIED LONG +2ED4 ; 95E8 # CJK RADICAL C-SIMPLIFIED GATE +2ED5 ; 28E0F # CJK RADICAL MOUND ONE +2ED6 ; 961D # CJK RADICAL MOUND TWO +2ED7 ; 96E8 # CJK RADICAL RAIN +2ED8 ; 9752 # CJK RADICAL BLUE +2ED9 ; 97E6 # CJK RADICAL C-SIMPLIFIED TANNED LEATHER +2EDA ; 9875 # CJK RADICAL C-SIMPLIFIED LEAF +2EDB ; 98CE # CJK RADICAL C-SIMPLIFIED WIND +2EDC ; 98DE # CJK RADICAL C-SIMPLIFIED FLY +2EDD ; 98DF # CJK RADICAL EAT ONE +2EDE ; 2967F # CJK RADICAL EAT TWO +2EDF ; 98E0 # CJK RADICAL EAT THREE +2EE0 ; 9963 # CJK RADICAL C-SIMPLIFIED EAT +2EE1 ; 29810 # CJK RADICAL HEAD +2EE2 ; 9A6C # CJK RADICAL C-SIMPLIFIED HORSE +2EE3 ; 9AA8 # CJK RADICAL BONE +2EE4 ; 9B3C # CJK RADICAL GHOST +2EE5 ; 9C7C # CJK RADICAL C-SIMPLIFIED FISH +2EE6 ; 9E1F # CJK RADICAL C-SIMPLIFIED BIRD +2EE7 ; 5364 # CJK RADICAL C-SIMPLIFIED SALT +2EE8 ; 9EA6 # CJK RADICAL SIMPLIFIED WHEAT +2EE9 ; 9EC4 # CJK RADICAL SIMPLIFIED YELLOW +2EEA ; 9EFE # CJK RADICAL C-SIMPLIFIED FROG +2EEB ; 6589 # CJK RADICAL J-SIMPLIFIED EVEN +2EEC ; 9F50 # CJK RADICAL C-SIMPLIFIED EVEN +2EED ; 6B6F # CJK RADICAL J-SIMPLIFIED TOOTH +2EEE ; 9F7F # CJK RADICAL C-SIMPLIFIED TOOTH +2EEF ; 7ADC # CJK RADICAL J-SIMPLIFIED DRAGON +2EF0 ; 9F99 # CJK RADICAL C-SIMPLIFIED DRAGON +2EF1 ; 9F9C # CJK RADICAL TURTLE +2EF2 ; 4E80 # CJK RADICAL J-SIMPLIFIED TURTLE +2EF3 ; 9F9F # CJK RADICAL C-SIMPLIFIED TURTLE +2F00 ; 4E00 # KANGXI RADICAL ONE +2F01 ; 4E28 # KANGXI RADICAL LINE +2F02 ; 4E36 # KANGXI RADICAL DOT +2F03 ; 4E3F # KANGXI RADICAL SLASH +2F04 ; 4E59 # KANGXI RADICAL SECOND +2F05 ; 4E85 # KANGXI RADICAL HOOK +2F06 ; 4E8C # KANGXI RADICAL TWO +2F07 ; 4EA0 # KANGXI RADICAL LID +2F08 ; 4EBA # KANGXI RADICAL MAN +2F09 ; 513F # KANGXI RADICAL LEGS +2F0A ; 5165 # KANGXI RADICAL ENTER +2F0B ; 516B # KANGXI RADICAL EIGHT +2F0C ; 5182 # KANGXI RADICAL DOWN BOX +2F0D ; 5196 # KANGXI RADICAL COVER +2F0E ; 51AB # KANGXI RADICAL ICE +2F0F ; 51E0 # KANGXI RADICAL TABLE +2F10 ; 51F5 # KANGXI RADICAL OPEN BOX +2F11 ; 5200 # KANGXI RADICAL KNIFE +2F12 ; 529B # KANGXI RADICAL POWER +2F13 ; 52F9 # KANGXI RADICAL WRAP +2F14 ; 5315 # KANGXI RADICAL SPOON +2F15 ; 531A # KANGXI RADICAL RIGHT OPEN BOX +2F16 ; 5338 # KANGXI RADICAL HIDING ENCLOSURE +2F17 ; 5341 # KANGXI RADICAL TEN +2F18 ; 535C # KANGXI RADICAL DIVINATION +2F19 ; 5369 # KANGXI RADICAL SEAL +2F1A ; 5382 # KANGXI RADICAL CLIFF +2F1B ; 53B6 # KANGXI RADICAL PRIVATE +2F1C ; 53C8 # KANGXI RADICAL AGAIN +2F1D ; 53E3 # KANGXI RADICAL MOUTH +2F1E ; 56D7 # KANGXI RADICAL ENCLOSURE +2F1F ; 571F # KANGXI RADICAL EARTH +2F20 ; 58EB # KANGXI RADICAL SCHOLAR +2F21 ; 5902 # KANGXI RADICAL GO +2F22 ; 590A # KANGXI RADICAL GO SLOWLY +2F23 ; 5915 # KANGXI RADICAL EVENING +2F24 ; 5927 # KANGXI RADICAL BIG +2F25 ; 5973 # KANGXI RADICAL WOMAN +2F26 ; 5B50 # KANGXI RADICAL CHILD +2F27 ; 5B80 # KANGXI RADICAL ROOF +2F28 ; 5BF8 # KANGXI RADICAL INCH +2F29 ; 5C0F # KANGXI RADICAL SMALL +2F2A ; 5C22 # KANGXI RADICAL LAME +2F2B ; 5C38 # KANGXI RADICAL CORPSE +2F2C ; 5C6E # KANGXI RADICAL SPROUT +2F2D ; 5C71 # KANGXI RADICAL MOUNTAIN +2F2E ; 5DDB # KANGXI RADICAL RIVER +2F2F ; 5DE5 # KANGXI RADICAL WORK +2F30 ; 5DF1 # KANGXI RADICAL ONESELF +2F31 ; 5DFE # KANGXI RADICAL TURBAN +2F32 ; 5E72 # KANGXI RADICAL DRY +2F33 ; 5E7A # KANGXI RADICAL SHORT THREAD +2F34 ; 5E7F # KANGXI RADICAL DOTTED CLIFF +2F35 ; 5EF4 # KANGXI RADICAL LONG STRIDE +2F36 ; 5EFE # KANGXI RADICAL TWO HANDS +2F37 ; 5F0B # KANGXI RADICAL SHOOT +2F38 ; 5F13 # KANGXI RADICAL BOW +2F39 ; 5F50 # KANGXI RADICAL SNOUT +2F3A ; 5F61 # KANGXI RADICAL BRISTLE +2F3B ; 5F73 # KANGXI RADICAL STEP +2F3C ; 5FC3 # KANGXI RADICAL HEART +2F3D ; 6208 # KANGXI RADICAL HALBERD +2F3E ; 6236 # KANGXI RADICAL DOOR +2F3F ; 624B # KANGXI RADICAL HAND +2F40 ; 652F # KANGXI RADICAL BRANCH +2F41 ; 6534 # KANGXI RADICAL RAP +2F42 ; 6587 # KANGXI RADICAL SCRIPT +2F43 ; 6597 # KANGXI RADICAL DIPPER +2F44 ; 65A4 # KANGXI RADICAL AXE +2F45 ; 65B9 # KANGXI RADICAL SQUARE +2F46 ; 65E0 # KANGXI RADICAL NOT +2F47 ; 65E5 # KANGXI RADICAL SUN +2F48 ; 66F0 # KANGXI RADICAL SAY +2F49 ; 6708 # KANGXI RADICAL MOON +2F4A ; 6728 # KANGXI RADICAL TREE +2F4B ; 6B20 # KANGXI RADICAL LACK +2F4C ; 6B62 # KANGXI RADICAL STOP +2F4D ; 6B79 # KANGXI RADICAL DEATH +2F4E ; 6BB3 # KANGXI RADICAL WEAPON +2F4F ; 6BCB # KANGXI RADICAL DO NOT +2F50 ; 6BD4 # KANGXI RADICAL COMPARE +2F51 ; 6BDB # KANGXI RADICAL FUR +2F52 ; 6C0F # KANGXI RADICAL CLAN +2F53 ; 6C14 # KANGXI RADICAL STEAM +2F54 ; 6C34 # KANGXI RADICAL WATER +2F55 ; 706B # KANGXI RADICAL FIRE +2F56 ; 722A # KANGXI RADICAL CLAW +2F57 ; 7236 # KANGXI RADICAL FATHER +2F58 ; 723B # KANGXI RADICAL DOUBLE X +2F59 ; 723F # KANGXI RADICAL HALF TREE TRUNK +2F5A ; 7247 # KANGXI RADICAL SLICE +2F5B ; 7259 # KANGXI RADICAL FANG +2F5C ; 725B # KANGXI RADICAL COW +2F5D ; 72AC # KANGXI RADICAL DOG +2F5E ; 7384 # KANGXI RADICAL PROFOUND +2F5F ; 7389 # KANGXI RADICAL JADE +2F60 ; 74DC # KANGXI RADICAL MELON +2F61 ; 74E6 # KANGXI RADICAL TILE +2F62 ; 7518 # KANGXI RADICAL SWEET +2F63 ; 751F # KANGXI RADICAL LIFE +2F64 ; 7528 # KANGXI RADICAL USE +2F65 ; 7530 # KANGXI RADICAL FIELD +2F66 ; 758B # KANGXI RADICAL BOLT OF CLOTH +2F67 ; 7592 # KANGXI RADICAL SICKNESS +2F68 ; 7676 # KANGXI RADICAL DOTTED TENT +2F69 ; 767D # KANGXI RADICAL WHITE +2F6A ; 76AE # KANGXI RADICAL SKIN +2F6B ; 76BF # KANGXI RADICAL DISH +2F6C ; 76EE # KANGXI RADICAL EYE +2F6D ; 77DB # KANGXI RADICAL SPEAR +2F6E ; 77E2 # KANGXI RADICAL ARROW +2F6F ; 77F3 # KANGXI RADICAL STONE +2F70 ; 793A # KANGXI RADICAL SPIRIT +2F71 ; 79B8 # KANGXI RADICAL TRACK +2F72 ; 79BE # KANGXI RADICAL GRAIN +2F73 ; 7A74 # KANGXI RADICAL CAVE +2F74 ; 7ACB # KANGXI RADICAL STAND +2F75 ; 7AF9 # KANGXI RADICAL BAMBOO +2F76 ; 7C73 # KANGXI RADICAL RICE +2F77 ; 7CF8 # KANGXI RADICAL SILK +2F78 ; 7F36 # KANGXI RADICAL JAR +2F79 ; 7F51 # KANGXI RADICAL NET +2F7A ; 7F8A # KANGXI RADICAL SHEEP +2F7B ; 7FBD # KANGXI RADICAL FEATHER +2F7C ; 8001 # KANGXI RADICAL OLD +2F7D ; 800C # KANGXI RADICAL AND +2F7E ; 8012 # KANGXI RADICAL PLOW +2F7F ; 8033 # KANGXI RADICAL EAR +2F80 ; 807F # KANGXI RADICAL BRUSH +2F81 ; 8089 # KANGXI RADICAL MEAT +2F82 ; 81E3 # KANGXI RADICAL MINISTER +2F83 ; 81EA # KANGXI RADICAL SELF +2F84 ; 81F3 # KANGXI RADICAL ARRIVE +2F85 ; 81FC # KANGXI RADICAL MORTAR +2F86 ; 820C # KANGXI RADICAL TONGUE +2F87 ; 821B # KANGXI RADICAL OPPOSE +2F88 ; 821F # KANGXI RADICAL BOAT +2F89 ; 826E # KANGXI RADICAL STOPPING +2F8A ; 8272 # KANGXI RADICAL COLOR +2F8B ; 8278 # KANGXI RADICAL GRASS +2F8C ; 864D # KANGXI RADICAL TIGER +2F8D ; 866B # KANGXI RADICAL INSECT +2F8E ; 8840 # KANGXI RADICAL BLOOD +2F8F ; 884C # KANGXI RADICAL WALK ENCLOSURE +2F90 ; 8863 # KANGXI RADICAL CLOTHES +2F91 ; 897E # KANGXI RADICAL WEST +2F92 ; 898B # KANGXI RADICAL SEE +2F93 ; 89D2 # KANGXI RADICAL HORN +2F94 ; 8A00 # KANGXI RADICAL SPEECH +2F95 ; 8C37 # KANGXI RADICAL VALLEY +2F96 ; 8C46 # KANGXI RADICAL BEAN +2F97 ; 8C55 # KANGXI RADICAL PIG +2F98 ; 8C78 # KANGXI RADICAL BADGER +2F99 ; 8C9D # KANGXI RADICAL SHELL +2F9A ; 8D64 # KANGXI RADICAL RED +2F9B ; 8D70 # KANGXI RADICAL RUN +2F9C ; 8DB3 # KANGXI RADICAL FOOT +2F9D ; 8EAB # KANGXI RADICAL BODY +2F9E ; 8ECA # KANGXI RADICAL CART +2F9F ; 8F9B # KANGXI RADICAL BITTER +2FA0 ; 8FB0 # KANGXI RADICAL MORNING +2FA1 ; 8FB5 # KANGXI RADICAL WALK +2FA2 ; 9091 # KANGXI RADICAL CITY +2FA3 ; 9149 # KANGXI RADICAL WINE +2FA4 ; 91C6 # KANGXI RADICAL DISTINGUISH +2FA5 ; 91CC # KANGXI RADICAL VILLAGE +2FA6 ; 91D1 # KANGXI RADICAL GOLD +2FA7 ; 9577 # KANGXI RADICAL LONG +2FA8 ; 9580 # KANGXI RADICAL GATE +2FA9 ; 961C # KANGXI RADICAL MOUND +2FAA ; 96B6 # KANGXI RADICAL SLAVE +2FAB ; 96B9 # KANGXI RADICAL SHORT TAILED BIRD +2FAC ; 96E8 # KANGXI RADICAL RAIN +2FAD ; 9751 # KANGXI RADICAL BLUE +2FAE ; 975E # KANGXI RADICAL WRONG +2FAF ; 9762 # KANGXI RADICAL FACE +2FB0 ; 9769 # KANGXI RADICAL LEATHER +2FB1 ; 97CB # KANGXI RADICAL TANNED LEATHER +2FB2 ; 97ED # KANGXI RADICAL LEEK +2FB3 ; 97F3 # KANGXI RADICAL SOUND +2FB4 ; 9801 # KANGXI RADICAL LEAF +2FB5 ; 98A8 # KANGXI RADICAL WIND +2FB6 ; 98DB # KANGXI RADICAL FLY +2FB7 ; 98DF # KANGXI RADICAL EAT +2FB8 ; 9996 # KANGXI RADICAL HEAD +2FB9 ; 9999 # KANGXI RADICAL FRAGRANT +2FBA ; 99AC # KANGXI RADICAL HORSE +2FBB ; 9AA8 # KANGXI RADICAL BONE +2FBC ; 9AD8 # KANGXI RADICAL TALL +2FBD ; 9ADF # KANGXI RADICAL HAIR +2FBE ; 9B25 # KANGXI RADICAL FIGHT +2FBF ; 9B2F # KANGXI RADICAL SACRIFICIAL WINE +2FC0 ; 9B32 # KANGXI RADICAL CAULDRON +2FC1 ; 9B3C # KANGXI RADICAL GHOST +2FC2 ; 9B5A # KANGXI RADICAL FISH +2FC3 ; 9CE5 # KANGXI RADICAL BIRD +2FC4 ; 9E75 # KANGXI RADICAL SALT +2FC5 ; 9E7F # KANGXI RADICAL DEER +2FC6 ; 9EA5 # KANGXI RADICAL WHEAT +2FC7 ; 9EBB # KANGXI RADICAL HEMP +2FC8 ; 9EC3 # KANGXI RADICAL YELLOW +2FC9 ; 9ECD # KANGXI RADICAL MILLET +2FCA ; 9ED1 # KANGXI RADICAL BLACK +2FCB ; 9EF9 # KANGXI RADICAL EMBROIDERY +2FCC ; 9EFD # KANGXI RADICAL FROG +2FCD ; 9F0E # KANGXI RADICAL TRIPOD +2FCE ; 9F13 # KANGXI RADICAL DRUM +2FCF ; 9F20 # KANGXI RADICAL RAT +2FD0 ; 9F3B # KANGXI RADICAL NOSE +2FD1 ; 9F4A # KANGXI RADICAL EVEN +2FD2 ; 9F52 # KANGXI RADICAL TOOTH +2FD3 ; 9F8D # KANGXI RADICAL DRAGON +2FD4 ; 9F9C # KANGXI RADICAL TURTLE +2FD5 ; 9FA0 # KANGXI RADICAL FLUTE +31C6 ; 200CC # CJK STROKE HZG +31CF ; 4E40 # CJK STROKE N +31D0 ; 4E00 # CJK STROKE H +31D1 ; 4E28 # CJK STROKE S +31D2..31D3 ; 4E3F # [2] CJK STROKE P..CJK STROKE SP +31D4 ; 4E36 # CJK STROKE D +31D5 ; 200CD # CJK STROKE HZ +31D6 ; 4E5B # CJK STROKE HG +31D7 ; 200CA # CJK STROKE SZ +31D8 ; 200CE # CJK STROKE SWZ +31D9 ; 2010C # CJK STROKE ST +31DA ; 4E85 # CJK STROKE SG +31DB ; 21FE8 # CJK STROKE PD +31DC ; 200CB # CJK STROKE PZ +31DD ; 4E40 # CJK STROKE TN +31DE ; 200D1 # CJK STROKE SZZ +31DF ; 4E5A # CJK STROKE SWG +31E0 ; 4E59 # CJK STROKE HXWG +31E1 ; 2010E # CJK STROKE HZZZG + +# The following characters have no equivalent CJK unified ideograph. + +# 2E80; CJK RADICAL REPEAT +# 31C0; CJK STROKE T +# 31C1; CJK STROKE WG +# 31C2; CJK STROKE XG +# 31C3; CJK STROKE BXG +# 31C4; CJK STROKE SW +# 31C5; CJK STROKE HZZ +# 31C7; CJK STROKE HP +# 31C8; CJK STROKE HZWG +# 31C9; CJK STROKE SZWG +# 31CA; CJK STROKE HZT +# 31CB; CJK STROKE HZZP +# 31CC; CJK STROKE HPWG +# 31CD; CJK STROKE HZW +# 31CE; CJK STROKE HZZZ +# 31E2; CJK STROKE PG +# 31E3; CJK STROKE Q + +# EOF diff --git a/gen/data-files b/gen/data-files index de118c5..947b042 100755 --- a/gen/data-files +++ b/gen/data-files @@ -16,6 +16,7 @@ readonly PATHS=' DerivedCoreProperties DerivedNormalizationProps emoji/emoji-data + EquivalentUnifiedIdeograph extracted/DerivedBidiClass extracted/DerivedBinaryProperties extracted/DerivedDecompositionType diff --git a/gen/prop/equideo b/gen/prop/equideo new file mode 100755 index 0000000..4f3ad2a --- /dev/null +++ b/gen/prop/equideo @@ -0,0 +1,51 @@ +#!/bin/sh + +set -e +cd "${0%/*}/../.." +exec >lib/unicode/prop/uprop_get_equideo.c + +gawk ' +BEGIN { + FS = "[ ;]+" + + print "/* This file is autogenerated by gen/prop/equideo; DO NOT EDIT. */" + print "" + print "#include \"_bsearch.h\"" + print "#include \"macros.h\"" + print "#include \"rune.h\"" + print "#include \"unicode/prop.h\"" + print "" +} + +/^[A-F0-9]{4}/ { + n = split($1, a, /\.\./) + lo = strtonum("0X" a[1]) + hi = strtonum("0X" a[n]) + + for (i = lo; i <= hi; i++) + props[i] = strtonum("0X" $2) +} + +END { + print "static const struct {" + print "\trune k, v;" + print "} lookup[] = {" + + for (i = 0; i <= 0x10FFFF; i++) { + if (props[i]) + printf "\t{RUNE_C(0x%06X), RUNE_C(0x%06X)},\n", i, props[i] + } + + print "};" + print "" + print "_MLIB_DEFINE_BSEARCH_KV(rune, lookup, \x27\\0\x27)" + print "" + print "rune" + print "uprop_get_equideo(rune ch)" + print "{" + print "\treturn ch < lookup[0].k || ch > lookup[lengthof(lookup) - 1].k" + print "\t\t? \x27\\0\x27" + print "\t\t: mlib_lookup_kv(ch);" + print "}" +} +' data/EquivalentUnifiedIdeograph diff --git a/include/unicode/prop.h b/include/unicode/prop.h index 55c40b5..cc74337 100644 --- a/include/unicode/prop.h +++ b/include/unicode/prop.h @@ -907,6 +907,7 @@ enum uprop_vo { [[_mlib_pure]] enum uprop_vo uprop_get_vo(rune); [[_mlib_pure]] rune uprop_get_bmg(rune); [[_mlib_pure]] rune uprop_get_bpb(rune); +[[_mlib_pure]] rune uprop_get_equideo(rune); [[_mlib_pure]] rune uprop_get_scf(rune, bool); [[_mlib_pure]] rune uprop_get_slc(rune); [[_mlib_pure]] rune uprop_get_stc(rune); diff --git a/lib/unicode/prop/uprop_get_equideo.c b/lib/unicode/prop/uprop_get_equideo.c new file mode 100644 index 0000000..17d147b --- /dev/null +++ b/lib/unicode/prop/uprop_get_equideo.c @@ -0,0 +1,369 @@ +/* This file is autogenerated by gen/prop/equideo; DO NOT EDIT. */ + +#include "_bsearch.h" +#include "macros.h" +#include "rune.h" +#include "unicode/prop.h" + +static const struct { + rune k, v; +} lookup[] = { + {RUNE_C(0x002E81), RUNE_C(0x005382)}, + {RUNE_C(0x002E82), RUNE_C(0x004E5B)}, + {RUNE_C(0x002E83), RUNE_C(0x004E5A)}, + {RUNE_C(0x002E84), RUNE_C(0x004E59)}, + {RUNE_C(0x002E85), RUNE_C(0x004EBB)}, + {RUNE_C(0x002E86), RUNE_C(0x005182)}, + {RUNE_C(0x002E87), RUNE_C(0x020628)}, + {RUNE_C(0x002E88), RUNE_C(0x005200)}, + {RUNE_C(0x002E89), RUNE_C(0x005202)}, + {RUNE_C(0x002E8A), RUNE_C(0x00535C)}, + {RUNE_C(0x002E8B), RUNE_C(0x00353E)}, + {RUNE_C(0x002E8C), RUNE_C(0x005C0F)}, + {RUNE_C(0x002E8D), RUNE_C(0x005C0F)}, + {RUNE_C(0x002E8E), RUNE_C(0x005140)}, + {RUNE_C(0x002E8F), RUNE_C(0x005C23)}, + {RUNE_C(0x002E90), RUNE_C(0x005C22)}, + {RUNE_C(0x002E91), RUNE_C(0x021BC2)}, + {RUNE_C(0x002E92), RUNE_C(0x005DF3)}, + {RUNE_C(0x002E93), RUNE_C(0x005E7A)}, + {RUNE_C(0x002E94), RUNE_C(0x005F51)}, + {RUNE_C(0x002E95), RUNE_C(0x02B739)}, + {RUNE_C(0x002E96), RUNE_C(0x005FC4)}, + {RUNE_C(0x002E97), RUNE_C(0x005FC3)}, + {RUNE_C(0x002E98), RUNE_C(0x00624C)}, + {RUNE_C(0x002E99), RUNE_C(0x006535)}, + {RUNE_C(0x002E9B), RUNE_C(0x0065E1)}, + {RUNE_C(0x002E9C), RUNE_C(0x0065E5)}, + {RUNE_C(0x002E9D), RUNE_C(0x006708)}, + {RUNE_C(0x002E9E), RUNE_C(0x006B7A)}, + {RUNE_C(0x002E9F), RUNE_C(0x006BCD)}, + {RUNE_C(0x002EA0), RUNE_C(0x006C11)}, + {RUNE_C(0x002EA1), RUNE_C(0x006C35)}, + {RUNE_C(0x002EA2), RUNE_C(0x006C3A)}, + {RUNE_C(0x002EA3), RUNE_C(0x00706C)}, + {RUNE_C(0x002EA4), RUNE_C(0x00722B)}, + {RUNE_C(0x002EA5), RUNE_C(0x00722B)}, + {RUNE_C(0x002EA6), RUNE_C(0x004E2C)}, + {RUNE_C(0x002EA7), RUNE_C(0x00725B)}, + {RUNE_C(0x002EA8), RUNE_C(0x0072AD)}, + {RUNE_C(0x002EA9), RUNE_C(0x00738B)}, + {RUNE_C(0x002EAA), RUNE_C(0x024D14)}, + {RUNE_C(0x002EAB), RUNE_C(0x0076EE)}, + {RUNE_C(0x002EAC), RUNE_C(0x00793A)}, + {RUNE_C(0x002EAD), RUNE_C(0x00793B)}, + {RUNE_C(0x002EAE), RUNE_C(0x025AD7)}, + {RUNE_C(0x002EAF), RUNE_C(0x007CF9)}, + {RUNE_C(0x002EB0), RUNE_C(0x007E9F)}, + {RUNE_C(0x002EB1), RUNE_C(0x007F53)}, + {RUNE_C(0x002EB2), RUNE_C(0x007F52)}, + {RUNE_C(0x002EB3), RUNE_C(0x0034C1)}, + {RUNE_C(0x002EB4), RUNE_C(0x005197)}, + {RUNE_C(0x002EB5), RUNE_C(0x02626B)}, + {RUNE_C(0x002EB6), RUNE_C(0x007F8A)}, + {RUNE_C(0x002EB7), RUNE_C(0x02634C)}, + {RUNE_C(0x002EB8), RUNE_C(0x02634B)}, + {RUNE_C(0x002EB9), RUNE_C(0x008002)}, + {RUNE_C(0x002EBA), RUNE_C(0x008080)}, + {RUNE_C(0x002EBB), RUNE_C(0x00807F)}, + {RUNE_C(0x002EBC), RUNE_C(0x008089)}, + {RUNE_C(0x002EBD), RUNE_C(0x026951)}, + {RUNE_C(0x002EBE), RUNE_C(0x008279)}, + {RUNE_C(0x002EBF), RUNE_C(0x008279)}, + {RUNE_C(0x002EC0), RUNE_C(0x008279)}, + {RUNE_C(0x002EC1), RUNE_C(0x00864E)}, + {RUNE_C(0x002EC2), RUNE_C(0x008864)}, + {RUNE_C(0x002EC3), RUNE_C(0x008980)}, + {RUNE_C(0x002EC4), RUNE_C(0x00897F)}, + {RUNE_C(0x002EC5), RUNE_C(0x0089C1)}, + {RUNE_C(0x002EC6), RUNE_C(0x0089D2)}, + {RUNE_C(0x002EC7), RUNE_C(0x0278B2)}, + {RUNE_C(0x002EC8), RUNE_C(0x008BA0)}, + {RUNE_C(0x002EC9), RUNE_C(0x008D1D)}, + {RUNE_C(0x002ECA), RUNE_C(0x027FB7)}, + {RUNE_C(0x002ECB), RUNE_C(0x008F66)}, + {RUNE_C(0x002ECC), RUNE_C(0x008FB6)}, + {RUNE_C(0x002ECD), RUNE_C(0x008FB6)}, + {RUNE_C(0x002ECE), RUNE_C(0x008FB6)}, + {RUNE_C(0x002ECF), RUNE_C(0x009091)}, + {RUNE_C(0x002ED0), RUNE_C(0x009485)}, + {RUNE_C(0x002ED1), RUNE_C(0x009577)}, + {RUNE_C(0x002ED2), RUNE_C(0x009578)}, + {RUNE_C(0x002ED3), RUNE_C(0x00957F)}, + {RUNE_C(0x002ED4), RUNE_C(0x0095E8)}, + {RUNE_C(0x002ED5), RUNE_C(0x028E0F)}, + {RUNE_C(0x002ED6), RUNE_C(0x00961D)}, + {RUNE_C(0x002ED7), RUNE_C(0x0096E8)}, + {RUNE_C(0x002ED8), RUNE_C(0x009752)}, + {RUNE_C(0x002ED9), RUNE_C(0x0097E6)}, + {RUNE_C(0x002EDA), RUNE_C(0x009875)}, + {RUNE_C(0x002EDB), RUNE_C(0x0098CE)}, + {RUNE_C(0x002EDC), RUNE_C(0x0098DE)}, + {RUNE_C(0x002EDD), RUNE_C(0x0098DF)}, + {RUNE_C(0x002EDE), RUNE_C(0x02967F)}, + {RUNE_C(0x002EDF), RUNE_C(0x0098E0)}, + {RUNE_C(0x002EE0), RUNE_C(0x009963)}, + {RUNE_C(0x002EE1), RUNE_C(0x029810)}, + {RUNE_C(0x002EE2), RUNE_C(0x009A6C)}, + {RUNE_C(0x002EE3), RUNE_C(0x009AA8)}, + {RUNE_C(0x002EE4), RUNE_C(0x009B3C)}, + {RUNE_C(0x002EE5), RUNE_C(0x009C7C)}, + {RUNE_C(0x002EE6), RUNE_C(0x009E1F)}, + {RUNE_C(0x002EE7), RUNE_C(0x005364)}, + {RUNE_C(0x002EE8), RUNE_C(0x009EA6)}, + {RUNE_C(0x002EE9), RUNE_C(0x009EC4)}, + {RUNE_C(0x002EEA), RUNE_C(0x009EFE)}, + {RUNE_C(0x002EEB), RUNE_C(0x006589)}, + {RUNE_C(0x002EEC), RUNE_C(0x009F50)}, + {RUNE_C(0x002EED), RUNE_C(0x006B6F)}, + {RUNE_C(0x002EEE), RUNE_C(0x009F7F)}, + {RUNE_C(0x002EEF), RUNE_C(0x007ADC)}, + {RUNE_C(0x002EF0), RUNE_C(0x009F99)}, + {RUNE_C(0x002EF1), RUNE_C(0x009F9C)}, + {RUNE_C(0x002EF2), RUNE_C(0x004E80)}, + {RUNE_C(0x002EF3), RUNE_C(0x009F9F)}, + {RUNE_C(0x002F00), RUNE_C(0x004E00)}, + {RUNE_C(0x002F01), RUNE_C(0x004E28)}, + {RUNE_C(0x002F02), RUNE_C(0x004E36)}, + {RUNE_C(0x002F03), RUNE_C(0x004E3F)}, + {RUNE_C(0x002F04), RUNE_C(0x004E59)}, + {RUNE_C(0x002F05), RUNE_C(0x004E85)}, + {RUNE_C(0x002F06), RUNE_C(0x004E8C)}, + {RUNE_C(0x002F07), RUNE_C(0x004EA0)}, + {RUNE_C(0x002F08), RUNE_C(0x004EBA)}, + {RUNE_C(0x002F09), RUNE_C(0x00513F)}, + {RUNE_C(0x002F0A), RUNE_C(0x005165)}, + {RUNE_C(0x002F0B), RUNE_C(0x00516B)}, + {RUNE_C(0x002F0C), RUNE_C(0x005182)}, + {RUNE_C(0x002F0D), RUNE_C(0x005196)}, + {RUNE_C(0x002F0E), RUNE_C(0x0051AB)}, + {RUNE_C(0x002F0F), RUNE_C(0x0051E0)}, + {RUNE_C(0x002F10), RUNE_C(0x0051F5)}, + {RUNE_C(0x002F11), RUNE_C(0x005200)}, + {RUNE_C(0x002F12), RUNE_C(0x00529B)}, + {RUNE_C(0x002F13), RUNE_C(0x0052F9)}, + {RUNE_C(0x002F14), RUNE_C(0x005315)}, + {RUNE_C(0x002F15), RUNE_C(0x00531A)}, + {RUNE_C(0x002F16), RUNE_C(0x005338)}, + {RUNE_C(0x002F17), RUNE_C(0x005341)}, + {RUNE_C(0x002F18), RUNE_C(0x00535C)}, + {RUNE_C(0x002F19), RUNE_C(0x005369)}, + {RUNE_C(0x002F1A), RUNE_C(0x005382)}, + {RUNE_C(0x002F1B), RUNE_C(0x0053B6)}, + {RUNE_C(0x002F1C), RUNE_C(0x0053C8)}, + {RUNE_C(0x002F1D), RUNE_C(0x0053E3)}, + {RUNE_C(0x002F1E), RUNE_C(0x0056D7)}, + {RUNE_C(0x002F1F), RUNE_C(0x00571F)}, + {RUNE_C(0x002F20), RUNE_C(0x0058EB)}, + {RUNE_C(0x002F21), RUNE_C(0x005902)}, + {RUNE_C(0x002F22), RUNE_C(0x00590A)}, + {RUNE_C(0x002F23), RUNE_C(0x005915)}, + {RUNE_C(0x002F24), RUNE_C(0x005927)}, + {RUNE_C(0x002F25), RUNE_C(0x005973)}, + {RUNE_C(0x002F26), RUNE_C(0x005B50)}, + {RUNE_C(0x002F27), RUNE_C(0x005B80)}, + {RUNE_C(0x002F28), RUNE_C(0x005BF8)}, + {RUNE_C(0x002F29), RUNE_C(0x005C0F)}, + {RUNE_C(0x002F2A), RUNE_C(0x005C22)}, + {RUNE_C(0x002F2B), RUNE_C(0x005C38)}, + {RUNE_C(0x002F2C), RUNE_C(0x005C6E)}, + {RUNE_C(0x002F2D), RUNE_C(0x005C71)}, + {RUNE_C(0x002F2E), RUNE_C(0x005DDB)}, + {RUNE_C(0x002F2F), RUNE_C(0x005DE5)}, + {RUNE_C(0x002F30), RUNE_C(0x005DF1)}, + {RUNE_C(0x002F31), RUNE_C(0x005DFE)}, + {RUNE_C(0x002F32), RUNE_C(0x005E72)}, + {RUNE_C(0x002F33), RUNE_C(0x005E7A)}, + {RUNE_C(0x002F34), RUNE_C(0x005E7F)}, + {RUNE_C(0x002F35), RUNE_C(0x005EF4)}, + {RUNE_C(0x002F36), RUNE_C(0x005EFE)}, + {RUNE_C(0x002F37), RUNE_C(0x005F0B)}, + {RUNE_C(0x002F38), RUNE_C(0x005F13)}, + {RUNE_C(0x002F39), RUNE_C(0x005F50)}, + {RUNE_C(0x002F3A), RUNE_C(0x005F61)}, + {RUNE_C(0x002F3B), RUNE_C(0x005F73)}, + {RUNE_C(0x002F3C), RUNE_C(0x005FC3)}, + {RUNE_C(0x002F3D), RUNE_C(0x006208)}, + {RUNE_C(0x002F3E), RUNE_C(0x006236)}, + {RUNE_C(0x002F3F), RUNE_C(0x00624B)}, + {RUNE_C(0x002F40), RUNE_C(0x00652F)}, + {RUNE_C(0x002F41), RUNE_C(0x006534)}, + {RUNE_C(0x002F42), RUNE_C(0x006587)}, + {RUNE_C(0x002F43), RUNE_C(0x006597)}, + {RUNE_C(0x002F44), RUNE_C(0x0065A4)}, + {RUNE_C(0x002F45), RUNE_C(0x0065B9)}, + {RUNE_C(0x002F46), RUNE_C(0x0065E0)}, + {RUNE_C(0x002F47), RUNE_C(0x0065E5)}, + {RUNE_C(0x002F48), RUNE_C(0x0066F0)}, + {RUNE_C(0x002F49), RUNE_C(0x006708)}, + {RUNE_C(0x002F4A), RUNE_C(0x006728)}, + {RUNE_C(0x002F4B), RUNE_C(0x006B20)}, + {RUNE_C(0x002F4C), RUNE_C(0x006B62)}, + {RUNE_C(0x002F4D), RUNE_C(0x006B79)}, + {RUNE_C(0x002F4E), RUNE_C(0x006BB3)}, + {RUNE_C(0x002F4F), RUNE_C(0x006BCB)}, + {RUNE_C(0x002F50), RUNE_C(0x006BD4)}, + {RUNE_C(0x002F51), RUNE_C(0x006BDB)}, + {RUNE_C(0x002F52), RUNE_C(0x006C0F)}, + {RUNE_C(0x002F53), RUNE_C(0x006C14)}, + {RUNE_C(0x002F54), RUNE_C(0x006C34)}, + {RUNE_C(0x002F55), RUNE_C(0x00706B)}, + {RUNE_C(0x002F56), RUNE_C(0x00722A)}, + {RUNE_C(0x002F57), RUNE_C(0x007236)}, + {RUNE_C(0x002F58), RUNE_C(0x00723B)}, + {RUNE_C(0x002F59), RUNE_C(0x00723F)}, + {RUNE_C(0x002F5A), RUNE_C(0x007247)}, + {RUNE_C(0x002F5B), RUNE_C(0x007259)}, + {RUNE_C(0x002F5C), RUNE_C(0x00725B)}, + {RUNE_C(0x002F5D), RUNE_C(0x0072AC)}, + {RUNE_C(0x002F5E), RUNE_C(0x007384)}, + {RUNE_C(0x002F5F), RUNE_C(0x007389)}, + {RUNE_C(0x002F60), RUNE_C(0x0074DC)}, + {RUNE_C(0x002F61), RUNE_C(0x0074E6)}, + {RUNE_C(0x002F62), RUNE_C(0x007518)}, + {RUNE_C(0x002F63), RUNE_C(0x00751F)}, + {RUNE_C(0x002F64), RUNE_C(0x007528)}, + {RUNE_C(0x002F65), RUNE_C(0x007530)}, + {RUNE_C(0x002F66), RUNE_C(0x00758B)}, + {RUNE_C(0x002F67), RUNE_C(0x007592)}, + {RUNE_C(0x002F68), RUNE_C(0x007676)}, + {RUNE_C(0x002F69), RUNE_C(0x00767D)}, + {RUNE_C(0x002F6A), RUNE_C(0x0076AE)}, + {RUNE_C(0x002F6B), RUNE_C(0x0076BF)}, + {RUNE_C(0x002F6C), RUNE_C(0x0076EE)}, + {RUNE_C(0x002F6D), RUNE_C(0x0077DB)}, + {RUNE_C(0x002F6E), RUNE_C(0x0077E2)}, + {RUNE_C(0x002F6F), RUNE_C(0x0077F3)}, + {RUNE_C(0x002F70), RUNE_C(0x00793A)}, + {RUNE_C(0x002F71), RUNE_C(0x0079B8)}, + {RUNE_C(0x002F72), RUNE_C(0x0079BE)}, + {RUNE_C(0x002F73), RUNE_C(0x007A74)}, + {RUNE_C(0x002F74), RUNE_C(0x007ACB)}, + {RUNE_C(0x002F75), RUNE_C(0x007AF9)}, + {RUNE_C(0x002F76), RUNE_C(0x007C73)}, + {RUNE_C(0x002F77), RUNE_C(0x007CF8)}, + {RUNE_C(0x002F78), RUNE_C(0x007F36)}, + {RUNE_C(0x002F79), RUNE_C(0x007F51)}, + {RUNE_C(0x002F7A), RUNE_C(0x007F8A)}, + {RUNE_C(0x002F7B), RUNE_C(0x007FBD)}, + {RUNE_C(0x002F7C), RUNE_C(0x008001)}, + {RUNE_C(0x002F7D), RUNE_C(0x00800C)}, + {RUNE_C(0x002F7E), RUNE_C(0x008012)}, + {RUNE_C(0x002F7F), RUNE_C(0x008033)}, + {RUNE_C(0x002F80), RUNE_C(0x00807F)}, + {RUNE_C(0x002F81), RUNE_C(0x008089)}, + {RUNE_C(0x002F82), RUNE_C(0x0081E3)}, + {RUNE_C(0x002F83), RUNE_C(0x0081EA)}, + {RUNE_C(0x002F84), RUNE_C(0x0081F3)}, + {RUNE_C(0x002F85), RUNE_C(0x0081FC)}, + {RUNE_C(0x002F86), RUNE_C(0x00820C)}, + {RUNE_C(0x002F87), RUNE_C(0x00821B)}, + {RUNE_C(0x002F88), RUNE_C(0x00821F)}, + {RUNE_C(0x002F89), RUNE_C(0x00826E)}, + {RUNE_C(0x002F8A), RUNE_C(0x008272)}, + {RUNE_C(0x002F8B), RUNE_C(0x008278)}, + {RUNE_C(0x002F8C), RUNE_C(0x00864D)}, + {RUNE_C(0x002F8D), RUNE_C(0x00866B)}, + {RUNE_C(0x002F8E), RUNE_C(0x008840)}, + {RUNE_C(0x002F8F), RUNE_C(0x00884C)}, + {RUNE_C(0x002F90), RUNE_C(0x008863)}, + {RUNE_C(0x002F91), RUNE_C(0x00897E)}, + {RUNE_C(0x002F92), RUNE_C(0x00898B)}, + {RUNE_C(0x002F93), RUNE_C(0x0089D2)}, + {RUNE_C(0x002F94), RUNE_C(0x008A00)}, + {RUNE_C(0x002F95), RUNE_C(0x008C37)}, + {RUNE_C(0x002F96), RUNE_C(0x008C46)}, + {RUNE_C(0x002F97), RUNE_C(0x008C55)}, + {RUNE_C(0x002F98), RUNE_C(0x008C78)}, + {RUNE_C(0x002F99), RUNE_C(0x008C9D)}, + {RUNE_C(0x002F9A), RUNE_C(0x008D64)}, + {RUNE_C(0x002F9B), RUNE_C(0x008D70)}, + {RUNE_C(0x002F9C), RUNE_C(0x008DB3)}, + {RUNE_C(0x002F9D), RUNE_C(0x008EAB)}, + {RUNE_C(0x002F9E), RUNE_C(0x008ECA)}, + {RUNE_C(0x002F9F), RUNE_C(0x008F9B)}, + {RUNE_C(0x002FA0), RUNE_C(0x008FB0)}, + {RUNE_C(0x002FA1), RUNE_C(0x008FB5)}, + {RUNE_C(0x002FA2), RUNE_C(0x009091)}, + {RUNE_C(0x002FA3), RUNE_C(0x009149)}, + {RUNE_C(0x002FA4), RUNE_C(0x0091C6)}, + {RUNE_C(0x002FA5), RUNE_C(0x0091CC)}, + {RUNE_C(0x002FA6), RUNE_C(0x0091D1)}, + {RUNE_C(0x002FA7), RUNE_C(0x009577)}, + {RUNE_C(0x002FA8), RUNE_C(0x009580)}, + {RUNE_C(0x002FA9), RUNE_C(0x00961C)}, + {RUNE_C(0x002FAA), RUNE_C(0x0096B6)}, + {RUNE_C(0x002FAB), RUNE_C(0x0096B9)}, + {RUNE_C(0x002FAC), RUNE_C(0x0096E8)}, + {RUNE_C(0x002FAD), RUNE_C(0x009751)}, + {RUNE_C(0x002FAE), RUNE_C(0x00975E)}, + {RUNE_C(0x002FAF), RUNE_C(0x009762)}, + {RUNE_C(0x002FB0), RUNE_C(0x009769)}, + {RUNE_C(0x002FB1), RUNE_C(0x0097CB)}, + {RUNE_C(0x002FB2), RUNE_C(0x0097ED)}, + {RUNE_C(0x002FB3), RUNE_C(0x0097F3)}, + {RUNE_C(0x002FB4), RUNE_C(0x009801)}, + {RUNE_C(0x002FB5), RUNE_C(0x0098A8)}, + {RUNE_C(0x002FB6), RUNE_C(0x0098DB)}, + {RUNE_C(0x002FB7), RUNE_C(0x0098DF)}, + {RUNE_C(0x002FB8), RUNE_C(0x009996)}, + {RUNE_C(0x002FB9), RUNE_C(0x009999)}, + {RUNE_C(0x002FBA), RUNE_C(0x0099AC)}, + {RUNE_C(0x002FBB), RUNE_C(0x009AA8)}, + {RUNE_C(0x002FBC), RUNE_C(0x009AD8)}, + {RUNE_C(0x002FBD), RUNE_C(0x009ADF)}, + {RUNE_C(0x002FBE), RUNE_C(0x009B25)}, + {RUNE_C(0x002FBF), RUNE_C(0x009B2F)}, + {RUNE_C(0x002FC0), RUNE_C(0x009B32)}, + {RUNE_C(0x002FC1), RUNE_C(0x009B3C)}, + {RUNE_C(0x002FC2), RUNE_C(0x009B5A)}, + {RUNE_C(0x002FC3), RUNE_C(0x009CE5)}, + {RUNE_C(0x002FC4), RUNE_C(0x009E75)}, + {RUNE_C(0x002FC5), RUNE_C(0x009E7F)}, + {RUNE_C(0x002FC6), RUNE_C(0x009EA5)}, + {RUNE_C(0x002FC7), RUNE_C(0x009EBB)}, + {RUNE_C(0x002FC8), RUNE_C(0x009EC3)}, + {RUNE_C(0x002FC9), RUNE_C(0x009ECD)}, + {RUNE_C(0x002FCA), RUNE_C(0x009ED1)}, + {RUNE_C(0x002FCB), RUNE_C(0x009EF9)}, + {RUNE_C(0x002FCC), RUNE_C(0x009EFD)}, + {RUNE_C(0x002FCD), RUNE_C(0x009F0E)}, + {RUNE_C(0x002FCE), RUNE_C(0x009F13)}, + {RUNE_C(0x002FCF), RUNE_C(0x009F20)}, + {RUNE_C(0x002FD0), RUNE_C(0x009F3B)}, + {RUNE_C(0x002FD1), RUNE_C(0x009F4A)}, + {RUNE_C(0x002FD2), RUNE_C(0x009F52)}, + {RUNE_C(0x002FD3), RUNE_C(0x009F8D)}, + {RUNE_C(0x002FD4), RUNE_C(0x009F9C)}, + {RUNE_C(0x002FD5), RUNE_C(0x009FA0)}, + {RUNE_C(0x0031C6), RUNE_C(0x0200CC)}, + {RUNE_C(0x0031CF), RUNE_C(0x004E40)}, + {RUNE_C(0x0031D0), RUNE_C(0x004E00)}, + {RUNE_C(0x0031D1), RUNE_C(0x004E28)}, + {RUNE_C(0x0031D2), RUNE_C(0x004E3F)}, + {RUNE_C(0x0031D3), RUNE_C(0x004E3F)}, + {RUNE_C(0x0031D4), RUNE_C(0x004E36)}, + {RUNE_C(0x0031D5), RUNE_C(0x0200CD)}, + {RUNE_C(0x0031D6), RUNE_C(0x004E5B)}, + {RUNE_C(0x0031D7), RUNE_C(0x0200CA)}, + {RUNE_C(0x0031D8), RUNE_C(0x0200CE)}, + {RUNE_C(0x0031D9), RUNE_C(0x02010C)}, + {RUNE_C(0x0031DA), RUNE_C(0x004E85)}, + {RUNE_C(0x0031DB), RUNE_C(0x021FE8)}, + {RUNE_C(0x0031DC), RUNE_C(0x0200CB)}, + {RUNE_C(0x0031DD), RUNE_C(0x004E40)}, + {RUNE_C(0x0031DE), RUNE_C(0x0200D1)}, + {RUNE_C(0x0031DF), RUNE_C(0x004E5A)}, + {RUNE_C(0x0031E0), RUNE_C(0x004E59)}, + {RUNE_C(0x0031E1), RUNE_C(0x02010E)}, +}; + +_MLIB_DEFINE_BSEARCH_KV(rune, lookup, '\0') + +rune +uprop_get_equideo(rune ch) +{ + return ch < lookup[0].k || ch > lookup[lengthof(lookup) - 1].k + ? '\0' + : mlib_lookup_kv(ch); +} -- cgit v1.2.3