aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/EquivalentUnifiedIdeograph408
-rwxr-xr-xgen/data-files1
-rwxr-xr-xgen/prop/equideo51
-rw-r--r--include/unicode/prop.h1
-rw-r--r--lib/unicode/prop/uprop_get_equideo.c369
5 files changed, 830 insertions, 0 deletions
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 <none>, 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; <none>
+
+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);
+}