aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-04-16 16:31:12 +0200
committerThomas Voss <mail@thomasvoss.com> 2024-04-16 16:32:25 +0200
commit2bdff13305d08e8b6bdb582fdf064b7ca7860202 (patch)
tree6185fd8cea64e5fdbdc8de02610901a35e728b1d
parent478059db9c632e4e628bc5cd80a5ecfdcfe07606 (diff)
Add uprop_get_inpc()
-rw-r--r--data/IndicPositionalCategory808
-rwxr-xr-xgen/data-files1
-rwxr-xr-xgen/prop/inpc55
-rw-r--r--include/unicode/prop.h20
-rw-r--r--lib/unicode/prop/uprop_get_inpc.c641
5 files changed, 1525 insertions, 0 deletions
diff --git a/data/IndicPositionalCategory b/data/IndicPositionalCategory
new file mode 100644
index 0000000..a7c5aef
--- /dev/null
+++ b/data/IndicPositionalCategory
@@ -0,0 +1,808 @@
+# IndicPositionalCategory-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:
+#
+# Indic_Positional_Category enumerated property
+#
+# Scope: This property is aimed at the problem of
+# the specification of syllabic structure for Indic scripts.
+# Because dependent vowels (matras), visible viramas, and other
+# characters are placed in notional slots around the consonant (or
+# consonant cluster) core of an Indic syllable, there may be
+# cooccurrence constraints or other interactions. Also, it may be
+# desirable, in cases where more than one such character may occur in
+# sequence, as for example, in a top slot and a bottom slot, to
+# specify preferred orders for spelling. As such, this property
+# is designed primarily to supplement the Indic_Syllabic_Category
+# property.
+#
+# In addition to combining marks associated with Indic scripts, the
+# Indic_Positional_Category has non-trivial values for special signs
+# associated with Indic_Syllabic_Category=Consonant_Prefixed
+# or Indic_Syllabic_Category=Consonant_Preceding_Repha. Those signs
+# have General_Category=Lo, rather than being combining marks.
+# They occur in initial position in syllabic structure. However, when
+# rendered, they appear as marks positioned with respect to another
+# base letter (usually above it). Hence, having an explicit value for
+# Indic_Positional_Category for those signs can be helpful.
+#
+# Note that this property is *not* intended as
+# a prescriptive property regarding display or font design,
+# for a number of reasons. Good font design requires information
+# that is outside the context of a character encoding standard,
+# and is best handled in other venues. For Indic dependent
+# vowels and similar characters, in particular:
+#
+# 1. Matra placement may vary somewhat based on typeface design.
+# 2. Matra placement, even within a single script, may vary
+# somewhat according to historic period or local conventions.
+# 3. Matra placement may be changed by explicit orthographic reform
+# decisions.
+# 4. Matras may ligate in various ways with a consonant (or even
+# other elements of a syllable) instead of occurring in a
+# discrete location.
+# 5. Matra display may be contextually determined. This is
+# notable, for example, in the Tamil script, where the shape
+# and placement of -u and -uu vowels depends strongly on
+# which consonant they adjoin.
+#
+# Format:
+# Field 0 Unicode code point value or range of code point values
+# Field 1 Indic_Positional_Category property value
+#
+# Field 1 is followed by a comment field, starting with the number sign '#',
+# which shows the General_Category property value, the Unicode character name
+# or names, and, in lines with ranges of code points, the code point count in
+# square brackets.
+#
+# The scripts assessed as containing dependent vowels or similar characters
+# in the structural sense used for the Indic_Positional_Category are the
+# following:
+#
+# Ahom, Balinese, Batak, Bengali, Bhaiksuki, Brahmi, Buginese, Buhid,
+# Chakma, Cham, Devanagari, Dives Akuru, Dogra, Grantha, Gujarati,
+# Gunjala Gondi, Gurmukhi, Hanunoo, Javanese, Kaithi, Kannada, Kawi,
+# Kayah Li, Kharoshthi, Khmer, Khojki, Khudawadi, Lao, Lepcha, Limbu,
+# Makasar, Malayalam, Marchen, Masaram Gondi, Meetei Mayek, Modi,
+# Myanmar, Nandinagari, Newa, New Tai Lue, Oriya, Rejang, Saurashtra,
+# Sharada, Siddham, Sinhala, Soyombo, Sundanese, Syloti Nagri,
+# Tagalog, Tagbanwa, Tai Tham, Tai Viet, Takri, Tamil, Telugu, Thai,
+# Tibetan, Tirhuta, and Zanabazar Square.
+#
+# All characters for all other scripts not in that list
+# take the default value for this property.
+#
+# See IndicSyllabicCategory.txt for a slightly more extended
+# list of Indic scripts, including those which do not have
+# positional characters. Currently, those additional
+# Indic scripts without positional characters are
+# Multani, Phags-pa, and Tai Le.
+#
+# Notes:
+#
+# 1. The following characters are all assigned the positional category Right,
+# but may have different positions in some cases:
+# * U+0BC1 TAMIL VOWEL SIGN U and U+0BC2 TAMIL VOWEL SIGN UU have
+# contextually variable placement in Tamil.
+# * U+0D41 MALAYALAM VOWEL SIGN U and U+0D42 MALAYALAM VOWEL SIGN UU form
+# complex ligatures with consonants in older Malayalam orthography.
+# * U+11341 GRANTHA VOWEL SIGN U and U+11342 GRANTHA VOWEL SIGN UU have
+# contextually variable placement in Grantha.
+# * U+11440 NEWA VOWEL SIGN O and U+11441 NEWA VOWEL SIGN AU have contextually
+# variable placement in Newa.
+#
+# 2. The following characters are all assigned the positional category Top,
+# but may have different positions in some cases:
+# * U+1143E NEWA VOWEL SIGN E and U+1143F NEWA VOWEL SIGN AI have contextually
+# variable placement in Newa.
+#
+# 3. The following characters are all assigned the positional category Bottom,
+# but may have different positions in some cases:
+# * U+102F MYANMAR VOWEL SIGN U and U+1030 MYANMAR VOWEL SIGN UU have
+# contextually variable placement in Myanmar.
+# * U+1A69 TAI THAM VOWEL SIGN U and U+1A6A TAI THAM VOWEL SIGN UU have
+# contextually variable placement in Tai Tham.
+#
+# 4. The following character is assigned the positional category Left, but
+# may have different positions in different styles:
+# * U+119D2 NANDINAGARI VOWEL SIGN I has stylistically variable placement
+# in Nandinagari.
+
+
+# ================================================
+
+# Property: Indic_Positional_Category
+#
+# All code points not explicitly listed for Indic_Positional_Category
+# have the value NA (not applicable).
+#
+# @missing: 0000..10FFFF; NA
+
+# ------------------------------------------------
+
+# Indic_Positional_Category=Right
+
+0903 ; Right # Mc DEVANAGARI SIGN VISARGA
+093B ; Right # Mc DEVANAGARI VOWEL SIGN OOE
+093E ; Right # Mc DEVANAGARI VOWEL SIGN AA
+0940 ; Right # Mc DEVANAGARI VOWEL SIGN II
+0949..094C ; Right # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094F ; Right # Mc DEVANAGARI VOWEL SIGN AW
+0982..0983 ; Right # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+09BE ; Right # Mc BENGALI VOWEL SIGN AA
+09C0 ; Right # Mc BENGALI VOWEL SIGN II
+09D7 ; Right # Mc BENGALI AU LENGTH MARK
+0A03 ; Right # Mc GURMUKHI SIGN VISARGA
+0A3E ; Right # Mc GURMUKHI VOWEL SIGN AA
+0A40 ; Right # Mc GURMUKHI VOWEL SIGN II
+0A83 ; Right # Mc GUJARATI SIGN VISARGA
+0ABE ; Right # Mc GUJARATI VOWEL SIGN AA
+0AC0 ; Right # Mc GUJARATI VOWEL SIGN II
+0ACB..0ACC ; Right # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0B02..0B03 ; Right # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B3E ; Right # Mc ORIYA VOWEL SIGN AA
+0B40 ; Right # Mc ORIYA VOWEL SIGN II
+0BBE..0BBF ; Right # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC1..0BC2 ; Right # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BD7 ; Right # Mc TAMIL AU LENGTH MARK
+0C01..0C03 ; Right # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C41..0C44 ; Right # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C82..0C83 ; Right # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0CBE ; Right # Mc KANNADA VOWEL SIGN AA
+0CC1..0CC4 ; Right # Mc [4] KANNADA VOWEL SIGN U..KANNADA VOWEL SIGN VOCALIC RR
+0CD5..0CD6 ; Right # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CF3 ; Right # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
+0D02..0D03 ; Right # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D3E..0D40 ; Right # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D42 ; Right # Mn [2] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN UU
+0D57 ; Right # Mc MALAYALAM AU LENGTH MARK
+0D82..0D83 ; Right # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0DCF..0DD1 ; Right # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD8 ; Right # Mc SINHALA VOWEL SIGN GAETTA-PILLA
+0DDF ; Right # Mc SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3 ; Right # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E30 ; Right # Lo THAI CHARACTER SARA A
+0E32..0E33 ; Right # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E45 ; Right # Lo THAI CHARACTER LAKKHANGYAO
+0EB0 ; Right # Lo LAO VOWEL SIGN A
+0EB2..0EB3 ; Right # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0F3E ; Right # Mc TIBETAN SIGN YAR TSHES
+0F7F ; Right # Mc TIBETAN SIGN RNAM BCAD
+102B..102C ; Right # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+1038 ; Right # Mc MYANMAR SIGN VISARGA
+103B ; Right # Mc MYANMAR CONSONANT SIGN MEDIAL YA
+1056..1057 ; Right # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1062..1064 ; Right # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1067..106D ; Right # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+1083 ; Right # Mc MYANMAR VOWEL SIGN SHAN AA
+1087..108C ; Right # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108F ; Right # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+109A..109C ; Right # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+1715 ; Right # Mc TAGALOG SIGN PAMUDPOD
+1734 ; Right # Mc HANUNOO SIGN PAMUDPOD
+17B6 ; Right # Mc KHMER VOWEL SIGN AA
+17C7..17C8 ; Right # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+1923..1924 ; Right # Mc [2] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AI
+1929..192B ; Right # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; Right # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1933..1938 ; Right # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+19B0..19B4 ; Right # Lo [5] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN UU
+19B8..19B9 ; Right # Lo [2] NEW TAI LUE VOWEL SIGN OA..NEW TAI LUE VOWEL SIGN UE
+19BB..19C0 ; Right # Lo [6] NEW TAI LUE VOWEL SIGN AAY..NEW TAI LUE VOWEL SIGN IY
+19C8..19C9 ; Right # Lo [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+1A1A ; Right # Mc BUGINESE VOWEL SIGN O
+1A57 ; Right # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A61 ; Right # Mc TAI THAM VOWEL SIGN A
+1A63..1A64 ; Right # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A6D ; Right # Mc TAI THAM VOWEL SIGN OY
+1B04 ; Right # Mc BALINESE SIGN BISAH
+1B35 ; Right # Mc BALINESE VOWEL SIGN TEDUNG
+1B44 ; Right # Mc BALINESE ADEG ADEG
+1B82 ; Right # Mc SUNDANESE SIGN PANGWISAD
+1BA1 ; Right # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA7 ; Right # Mc SUNDANESE VOWEL SIGN PANOLONG
+1BAA ; Right # Mc SUNDANESE SIGN PAMAAEH
+1BE7 ; Right # Mc BATAK VOWEL SIGN E
+1BEA..1BEC ; Right # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BEE ; Right # Mc BATAK VOWEL SIGN U
+1BF2..1BF3 ; Right # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+1C24..1C26 ; Right # Mc [3] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN AA
+1C2A..1C2B ; Right # Mc [2] LEPCHA VOWEL SIGN U..LEPCHA VOWEL SIGN UU
+1CE1 ; Right # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CF7 ; Right # Mc VEDIC SIGN ATIKRAMA
+A823..A824 ; Right # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A827 ; Right # Mc SYLOTI NAGRI VOWEL SIGN OO
+A880..A881 ; Right # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A8B4..A8C3 ; Right # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A952..A953 ; Right # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A983 ; Right # Mc JAVANESE SIGN WIGNYAN
+A9B4..A9B5 ; Right # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+AA33 ; Right # Mc CHAM CONSONANT SIGN YA
+AA4D ; Right # Mc CHAM CONSONANT SIGN FINAL H
+AA7B ; Right # Mc MYANMAR SIGN PAO KAREN TONE
+AA7D ; Right # Mc MYANMAR SIGN TAI LAING TONE-5
+AAB1 ; Right # Lo TAI VIET VOWEL AA
+AABA ; Right # Lo TAI VIET VOWEL UA
+AABD ; Right # Lo TAI VIET VOWEL AN
+AAEF ; Right # Mc MEETEI MAYEK VOWEL SIGN AAU
+AAF5 ; Right # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+ABE3..ABE4 ; Right # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE6..ABE7 ; Right # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE9..ABEA ; Right # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEC ; Right # Mc MEETEI MAYEK LUM IYEK
+11000 ; Right # Mc BRAHMI SIGN CANDRABINDU
+11002 ; Right # Mc BRAHMI SIGN VISARGA
+11082 ; Right # Mc KAITHI SIGN VISARGA
+110B0 ; Right # Mc KAITHI VOWEL SIGN AA
+110B2 ; Right # Mc KAITHI VOWEL SIGN II
+110B7..110B8 ; Right # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+11145..11146 ; Right # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11182 ; Right # Mc SHARADA SIGN VISARGA
+111B3 ; Right # Mc SHARADA VOWEL SIGN AA
+111B5 ; Right # Mc SHARADA VOWEL SIGN II
+111C0 ; Right # Mc SHARADA SIGN VIRAMA
+1122C..1122E ; Right # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+11235 ; Right # Mc KHOJKI SIGN VIRAMA
+112E0 ; Right # Mc KHUDAWADI VOWEL SIGN AA
+112E2 ; Right # Mc KHUDAWADI VOWEL SIGN II
+11302..11303 ; Right # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+1133E..1133F ; Right # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+11341..11344 ; Right # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+1134D ; Right # Mc GRANTHA SIGN VIRAMA
+11357 ; Right # Mc GRANTHA AU LENGTH MARK
+11362..11363 ; Right # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11435 ; Right # Mc NEWA VOWEL SIGN AA
+11437 ; Right # Mc NEWA VOWEL SIGN II
+11440..11441 ; Right # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11445 ; Right # Mc NEWA SIGN VISARGA
+114B0 ; Right # Mc TIRHUTA VOWEL SIGN AA
+114B2 ; Right # Mc TIRHUTA VOWEL SIGN II
+114BD ; Right # Mc TIRHUTA VOWEL SIGN SHORT O
+114C1 ; Right # Mc TIRHUTA SIGN VISARGA
+115AF ; Right # Mc SIDDHAM VOWEL SIGN AA
+115B1 ; Right # Mc SIDDHAM VOWEL SIGN II
+115BE ; Right # Mc SIDDHAM SIGN VISARGA
+11630..11632 ; Right # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+1163B..1163C ; Right # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163E ; Right # Mc MODI SIGN VISARGA
+116AC ; Right # Mc TAKRI SIGN VISARGA
+116AF ; Right # Mc TAKRI VOWEL SIGN II
+116B6 ; Right # Mc TAKRI SIGN VIRAMA
+11720..11721 ; Right # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+1182C ; Right # Mc DOGRA VOWEL SIGN AA
+1182E ; Right # Mc DOGRA VOWEL SIGN II
+11838 ; Right # Mc DOGRA SIGN VISARGA
+11930..11934 ; Right # Mc [5] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN UU
+1193D ; Right # Mc DIVES AKURU SIGN HALANTA
+11940 ; Right # Mc DIVES AKURU MEDIAL YA
+119D1 ; Right # Mc NANDINAGARI VOWEL SIGN AA
+119D3 ; Right # Mc NANDINAGARI VOWEL SIGN II
+119DC..119DF ; Right # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+11A39 ; Right # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A57..11A58 ; Right # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A97 ; Right # Mc SOYOMBO SIGN VISARGA
+11C2F ; Right # Mc BHAIKSUKI VOWEL SIGN AA
+11C3E ; Right # Mc BHAIKSUKI SIGN VISARGA
+11CA9 ; Right # Mc MARCHEN SUBJOINED LETTER YA
+11CB4 ; Right # Mc MARCHEN VOWEL SIGN O
+11D46 ; Right # Lo MASARAM GONDI REPHA
+11D8A..11D8E ; Right # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D93..11D94 ; Right # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D96 ; Right # Mc GUNJALA GONDI SIGN VISARGA
+11EF6 ; Right # Mc MAKASAR VOWEL SIGN O
+11F03 ; Right # Mc KAWI SIGN VISARGA
+11F34..11F35 ; Right # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA
+11F41 ; Right # Mc KAWI SIGN KILLER
+
+# Indic_Positional_Category=Left
+
+093F ; Left # Mc DEVANAGARI VOWEL SIGN I
+094E ; Left # Mc DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+09BF ; Left # Mc BENGALI VOWEL SIGN I
+09C7..09C8 ; Left # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+0A3F ; Left # Mc GURMUKHI VOWEL SIGN I
+0ABF ; Left # Mc GUJARATI VOWEL SIGN I
+0B47 ; Left # Mc ORIYA VOWEL SIGN E
+0BC6..0BC8 ; Left # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0D46..0D48 ; Left # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0DD9 ; Left # Mc SINHALA VOWEL SIGN KOMBUVA
+0DDB ; Left # Mc SINHALA VOWEL SIGN KOMBU DEKA
+0F3F ; Left # Mc TIBETAN SIGN MAR TSHES
+1031 ; Left # Mc MYANMAR VOWEL SIGN E
+1084 ; Left # Mc MYANMAR VOWEL SIGN SHAN E
+17C1..17C3 ; Left # Mc [3] KHMER VOWEL SIGN E..KHMER VOWEL SIGN AI
+1A19 ; Left # Mc BUGINESE VOWEL SIGN E
+1A55 ; Left # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A6E..1A72 ; Left # Mc [5] TAI THAM VOWEL SIGN E..TAI THAM VOWEL SIGN THAM AI
+1B3E..1B3F ; Left # Mc [2] BALINESE VOWEL SIGN TALING..BALINESE VOWEL SIGN TALING REPA
+1BA6 ; Left # Mc SUNDANESE VOWEL SIGN PANAELAENG
+1C27..1C28 ; Left # Mc [2] LEPCHA VOWEL SIGN I..LEPCHA VOWEL SIGN O
+1C34..1C35 ; Left # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+A9BA..A9BB ; Left # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+AA2F..AA30 ; Left # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA34 ; Left # Mc CHAM CONSONANT SIGN RA
+AAEB ; Left # Mc MEETEI MAYEK VOWEL SIGN II
+AAEE ; Left # Mc MEETEI MAYEK VOWEL SIGN AU
+110B1 ; Left # Mc KAITHI VOWEL SIGN I
+1112C ; Left # Mc CHAKMA VOWEL SIGN E
+111B4 ; Left # Mc SHARADA VOWEL SIGN I
+111CE ; Left # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+112E1 ; Left # Mc KHUDAWADI VOWEL SIGN I
+11347..11348 ; Left # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+11436 ; Left # Mc NEWA VOWEL SIGN I
+114B1 ; Left # Mc TIRHUTA VOWEL SIGN I
+114B9 ; Left # Mc TIRHUTA VOWEL SIGN E
+115B0 ; Left # Mc SIDDHAM VOWEL SIGN I
+115B8 ; Left # Mc SIDDHAM VOWEL SIGN E
+116AE ; Left # Mc TAKRI VOWEL SIGN I
+11726 ; Left # Mc AHOM VOWEL SIGN E
+1182D ; Left # Mc DOGRA VOWEL SIGN I
+11935 ; Left # Mc DIVES AKURU VOWEL SIGN E
+11937 ; Left # Mc DIVES AKURU VOWEL SIGN AI
+119D2 ; Left # Mc NANDINAGARI VOWEL SIGN I
+119E4 ; Left # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11CB1 ; Left # Mc MARCHEN VOWEL SIGN I
+11EF5 ; Left # Mc MAKASAR VOWEL SIGN E
+11F3E..11F3F ; Left # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI
+
+# Indic_Positional_Category=Visual_Order_Left
+
+# These are dependent vowels that occur to the left of the consonant
+# letter in a syllable, but which occur in scripts using the visual order
+# model, instead of the logical order model. Because of the different
+# model, these left-side vowels occur first in the backing store (before
+# the consonant letter) and are not reordered during text rendering.
+#
+# [Derivation: Logical_Order_Exception=Yes]
+
+0E40..0E44 ; Visual_Order_Left # Lo [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI
+0EC0..0EC4 ; Visual_Order_Left # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+19B5..19B7 ; Visual_Order_Left # Lo [3] NEW TAI LUE VOWEL SIGN E..NEW TAI LUE VOWEL SIGN O
+19BA ; Visual_Order_Left # Lo NEW TAI LUE VOWEL SIGN AY
+AAB5..AAB6 ; Visual_Order_Left # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9 ; Visual_Order_Left # Lo TAI VIET VOWEL UEA
+AABB..AABC ; Visual_Order_Left # Lo [2] TAI VIET VOWEL AUE..TAI VIET VOWEL AY
+
+# Indic_Positional_Category=Left_And_Right
+
+09CB..09CC ; Left_And_Right # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+0B4B ; Left_And_Right # Mc ORIYA VOWEL SIGN O
+0BCA..0BCC ; Left_And_Right # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0D4A..0D4C ; Left_And_Right # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0DDC ; Left_And_Right # Mc SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DDE ; Left_And_Right # Mc SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+17C0 ; Left_And_Right # Mc KHMER VOWEL SIGN IE
+17C4..17C5 ; Left_And_Right # Mc [2] KHMER VOWEL SIGN OO..KHMER VOWEL SIGN AU
+1B40..1B41 ; Left_And_Right # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1134B..1134C ; Left_And_Right # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU
+114BC ; Left_And_Right # Mc TIRHUTA VOWEL SIGN O
+114BE ; Left_And_Right # Mc TIRHUTA VOWEL SIGN AU
+115BA ; Left_And_Right # Mc SIDDHAM VOWEL SIGN O
+11938 ; Left_And_Right # Mc DIVES AKURU VOWEL SIGN O
+
+# Indic_Positional_Category=Top
+
+0900..0902 ; Top # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+093A ; Top # Mn DEVANAGARI VOWEL SIGN OE
+0945..0948 ; Top # Mn [4] DEVANAGARI VOWEL SIGN CANDRA E..DEVANAGARI VOWEL SIGN AI
+0951 ; Top # Mn DEVANAGARI STRESS SIGN UDATTA
+0955 ; Top # Mn DEVANAGARI VOWEL SIGN CANDRA LONG E
+0981 ; Top # Mn BENGALI SIGN CANDRABINDU
+09FE ; Top # Mn BENGALI SANDHI MARK
+0A01..0A02 ; Top # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A47..0A48 ; Top # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4C ; Top # Mn [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU
+0A70..0A71 ; Top # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A81..0A82 ; Top # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0AC5 ; Top # Mn GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Top # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AFA..0AFF ; Top # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01 ; Top # Mn ORIYA SIGN CANDRABINDU
+0B3F ; Top # Mn ORIYA VOWEL SIGN I
+0B55..0B56 ; Top # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
+0B82 ; Top # Mn TAMIL SIGN ANUSVARA
+0BC0 ; Top # Mn TAMIL VOWEL SIGN II
+0BCD ; Top # Mn TAMIL SIGN VIRAMA
+0C00 ; Top # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C04 ; Top # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C3E..0C40 ; Top # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C46..0C47 ; Top # Mn [2] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN EE
+0C4A..0C4D ; Top # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55 ; Top # Mn TELUGU LENGTH MARK
+0C81 ; Top # Mn KANNADA SIGN CANDRABINDU
+0CBF ; Top # Mn KANNADA VOWEL SIGN I
+0CC6 ; Top # Mn KANNADA VOWEL SIGN E
+0CCC..0CCD ; Top # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0D00..0D01 ; Top # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D3B..0D3C ; Top # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D4D ; Top # Mn MALAYALAM SIGN VIRAMA
+0D4E ; Top # Lo MALAYALAM LETTER DOT REPH
+0D81 ; Top # Mn SINHALA SIGN CANDRABINDU
+0DCA ; Top # Mn SINHALA SIGN AL-LAKUNA
+0DD2..0DD3 ; Top # Mn [2] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN DIGA IS-PILLA
+0E31 ; Top # Mn THAI CHARACTER MAI HAN-AKAT
+0E34..0E37 ; Top # Mn [4] THAI CHARACTER SARA I..THAI CHARACTER SARA UEE
+0E47..0E4E ; Top # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0EB1 ; Top # Mn LAO VOWEL SIGN MAI KAN
+0EB4..0EB7 ; Top # Mn [4] LAO VOWEL SIGN I..LAO VOWEL SIGN YY
+0EBB ; Top # Mn LAO VOWEL SIGN MAI KON
+0EC8..0ECE ; Top # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN
+0F39 ; Top # Mn TIBETAN MARK TSA -PHRU
+0F72 ; Top # Mn TIBETAN VOWEL SIGN I
+0F7A..0F7E ; Top # Mn [5] TIBETAN VOWEL SIGN E..TIBETAN SIGN RJES SU NGA RO
+0F80 ; Top # Mn TIBETAN VOWEL SIGN REVERSED I
+0F82..0F83 ; Top # Mn [2] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN SIGN SNA LDAN
+0F86..0F87 ; Top # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+102D..102E ; Top # Mn [2] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN II
+1032..1036 ; Top # Mn [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA
+103A ; Top # Mn MYANMAR SIGN ASAT
+1071..1074 ; Top # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1085..1086 ; Top # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+109D ; Top # Mn MYANMAR VOWEL SIGN AITON AI
+1712 ; Top # Mn TAGALOG VOWEL SIGN I
+1732 ; Top # Mn HANUNOO VOWEL SIGN I
+1752 ; Top # Mn BUHID VOWEL SIGN I
+1772 ; Top # Mn TAGBANWA VOWEL SIGN I
+17B7..17BA ; Top # Mn [4] KHMER VOWEL SIGN I..KHMER VOWEL SIGN YY
+17C6 ; Top # Mn KHMER SIGN NIKAHIT
+17C9..17D1 ; Top # Mn [9] KHMER SIGN MUUSIKATOAN..KHMER SIGN VIRIAM
+17D3 ; Top # Mn KHMER SIGN BATHAMASAT
+17DD ; Top # Mn KHMER SIGN ATTHACAN
+1920..1921 ; Top # Mn [2] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN I
+1927..1928 ; Top # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+193A ; Top # Mn LIMBU SIGN KEMPHRENG
+1A17 ; Top # Mn BUGINESE VOWEL SIGN I
+1A1B ; Top # Mn BUGINESE VOWEL SIGN AE
+1A58..1A5A ; Top # Mn [3] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN LOW PA
+1A62 ; Top # Mn TAI THAM VOWEL SIGN MAI SAT
+1A65..1A68 ; Top # Mn [4] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN UUE
+1A6B ; Top # Mn TAI THAM VOWEL SIGN O
+1A73..1A7C ; Top # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1B00..1B03 ; Top # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B34 ; Top # Mn BALINESE SIGN REREKAN
+1B36..1B37 ; Top # Mn [2] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN ULU SARI
+1B42 ; Top # Mn BALINESE VOWEL SIGN PEPET
+1B6B ; Top # Mn BALINESE MUSICAL SYMBOL COMBINING TEGEH
+1B6D..1B73 ; Top # Mn [7] BALINESE MUSICAL SYMBOL COMBINING KEMPUL..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81 ; Top # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1BA4 ; Top # Mn SUNDANESE VOWEL SIGN PANGHULU
+1BA8..1BA9 ; Top # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BE6 ; Top # Mn BATAK SIGN TOMPI
+1BE8..1BE9 ; Top # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BED ; Top # Mn BATAK VOWEL SIGN KARO O
+1BEF..1BF1 ; Top # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1C2D..1C33 ; Top # Mn [7] LEPCHA CONSONANT SIGN K..LEPCHA CONSONANT SIGN T
+1C36 ; Top # Mn LEPCHA SIGN RAN
+1CD0..1CD2 ; Top # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CDA..1CDB ; Top # Mn [2] VEDIC TONE DOUBLE SVARITA..VEDIC TONE TRIPLE SVARITA
+1CE0 ; Top # Mn VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CF4 ; Top # Mn VEDIC TONE CANDRA ABOVE
+1DFB ; Top # Mn COMBINING DELETION MARK
+20F0 ; Top # Mn COMBINING ASTERISK ABOVE
+A802 ; Top # Mn SYLOTI NAGRI SIGN DVISVARA
+A806 ; Top # Mn SYLOTI NAGRI SIGN HASANTA
+A80B ; Top # Mn SYLOTI NAGRI SIGN ANUSVARA
+A826 ; Top # Mn SYLOTI NAGRI VOWEL SIGN E
+A8C5 ; Top # Mn SAURASHTRA SIGN CANDRABINDU
+A8E0..A8F1 ; Top # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8FF ; Top # Mn DEVANAGARI VOWEL SIGN AY
+A926..A92A ; Top # Mn [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O
+A94A ; Top # Mn REJANG VOWEL SIGN AI
+A94F..A951 ; Top # Mn [3] REJANG CONSONANT SIGN NG..REJANG CONSONANT SIGN R
+A980..A982 ; Top # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A9B3 ; Top # Mn JAVANESE SIGN CECAK TELU
+A9B6..A9B7 ; Top # Mn [2] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN WULU MELIK
+A9BC ; Top # Mn JAVANESE VOWEL SIGN PEPET
+A9E5 ; Top # Mn MYANMAR SIGN SHAN SAW
+AA29..AA2C ; Top # Mn [4] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN EI
+AA2E ; Top # Mn CHAM VOWEL SIGN OE
+AA31 ; Top # Mn CHAM VOWEL SIGN AU
+AA43 ; Top # Mn CHAM CONSONANT SIGN FINAL NG
+AA4C ; Top # Mn CHAM CONSONANT SIGN FINAL M
+AA7C ; Top # Mn MYANMAR SIGN TAI LAING TONE-2
+AAB0 ; Top # Mn TAI VIET MAI KANG
+AAB2..AAB3 ; Top # Mn [2] TAI VIET VOWEL I..TAI VIET VOWEL UE
+AAB7..AAB8 ; Top # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AABE..AABF ; Top # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC1 ; Top # Mn TAI VIET TONE MAI THO
+AAED ; Top # Mn MEETEI MAYEK VOWEL SIGN AAI
+ABE5 ; Top # Mn MEETEI MAYEK VOWEL SIGN ANAP
+10A05 ; Top # Mn KHAROSHTHI VOWEL SIGN E
+10A0F ; Top # Mn KHAROSHTHI SIGN VISARGA
+10A38 ; Top # Mn KHAROSHTHI SIGN BAR ABOVE
+11001 ; Top # Mn BRAHMI SIGN ANUSVARA
+11038..1103B ; Top # Mn [4] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN II
+11042..11046 ; Top # Mn [5] BRAHMI VOWEL SIGN E..BRAHMI VIRAMA
+11070 ; Top # Mn BRAHMI SIGN OLD TAMIL VIRAMA
+11073..11074 ; Top # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+11080..11081 ; Top # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+110B5..110B6 ; Top # Mn [2] KAITHI VOWEL SIGN E..KAITHI VOWEL SIGN AI
+11100..11102 ; Top # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11127..11129 ; Top # Mn [3] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN II
+1112D ; Top # Mn CHAKMA VOWEL SIGN AI
+11130 ; Top # Mn CHAKMA VOWEL SIGN OI
+11134 ; Top # Mn CHAKMA MAAYYAA
+11180..11181 ; Top # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+111BC..111BE ; Top # Mn [3] SHARADA VOWEL SIGN E..SHARADA VOWEL SIGN O
+111C2..111C3 ; Top # Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA
+111CB ; Top # Mn SHARADA VOWEL MODIFIER MARK
+111CF ; Top # Mn SHARADA SIGN INVERTED CANDRABINDU
+11230..11231 ; Top # Mn [2] KHOJKI VOWEL SIGN E..KHOJKI VOWEL SIGN AI
+11234 ; Top # Mn KHOJKI SIGN ANUSVARA
+11236..11237 ; Top # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+1123E ; Top # Mn KHOJKI SIGN SUKUN
+112DF ; Top # Mn KHUDAWADI SIGN ANUSVARA
+112E5..112E8 ; Top # Mn [4] KHUDAWADI VOWEL SIGN E..KHUDAWADI VOWEL SIGN AU
+11300..11301 ; Top # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+11340 ; Top # Mn GRANTHA VOWEL SIGN II
+11366..1136C ; Top # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374 ; Top # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+1143E..1143F ; Top # Mn [2] NEWA VOWEL SIGN E..NEWA VOWEL SIGN AI
+11443..11444 ; Top # Mn [2] NEWA SIGN CANDRABINDU..NEWA SIGN ANUSVARA
+1145E ; Top # Mn NEWA SANDHI MARK
+114BA ; Top # Mn TIRHUTA VOWEL SIGN SHORT E
+114BF..114C0 ; Top # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+115BC..115BD ; Top # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+11639..1163A ; Top # Mn [2] MODI VOWEL SIGN E..MODI VOWEL SIGN AI
+1163D ; Top # Mn MODI SIGN ANUSVARA
+11640 ; Top # Mn MODI SIGN ARDHACANDRA
+116AB ; Top # Mn TAKRI SIGN ANUSVARA
+116AD ; Top # Mn TAKRI VOWEL SIGN AA
+116B2..116B5 ; Top # Mn [4] TAKRI VOWEL SIGN E..TAKRI VOWEL SIGN AU
+1171F ; Top # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11722..11723 ; Top # Mn [2] AHOM VOWEL SIGN I..AHOM VOWEL SIGN II
+11727 ; Top # Mn AHOM VOWEL SIGN AW
+11729..1172B ; Top # Mn [3] AHOM VOWEL SIGN AI..AHOM SIGN KILLER
+11833..11837 ; Top # Mn [5] DOGRA VOWEL SIGN E..DOGRA SIGN ANUSVARA
+1193B..1193C ; Top # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193F ; Top # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; Top # Lo DIVES AKURU INITIAL RA
+119DA..119DB ; Top # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+11A01 ; Top # Mn ZANABAZAR SQUARE VOWEL SIGN I
+11A04..11A09 ; Top # Mn [6] ZANABAZAR SQUARE VOWEL SIGN E..ZANABAZAR SQUARE VOWEL SIGN REVERSED I
+11A35..11A38 ; Top # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA
+11A3A ; Top # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A51 ; Top # Mn SOYOMBO VOWEL SIGN I
+11A54..11A56 ; Top # Mn [3] SOYOMBO VOWEL SIGN E..SOYOMBO VOWEL SIGN OE
+11A84..11A89 ; Top # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A96 ; Top # Mn SOYOMBO SIGN ANUSVARA
+11A98 ; Top # Mn SOYOMBO GEMINATION MARK
+11C30..11C31 ; Top # Mn [2] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN II
+11C38..11C3D ; Top # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11CB3 ; Top # Mn MARCHEN VOWEL SIGN E
+11CB5..11CB6 ; Top # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D31..11D35 ; Top # Mn [5] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN UU
+11D3A ; Top # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Top # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D41 ; Top # Mn [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA
+11D43 ; Top # Mn MASARAM GONDI SIGN CANDRA
+11D90..11D91 ; Top # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D95 ; Top # Mn GUNJALA GONDI SIGN ANUSVARA
+11EF3 ; Top # Mn MAKASAR VOWEL SIGN I
+11F00..11F01 ; Top # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA
+11F02 ; Top # Lo KAWI SIGN REPHA
+11F36..11F37 ; Top # Mn [2] KAWI VOWEL SIGN I..KAWI VOWEL SIGN II
+11F40 ; Top # Mn KAWI VOWEL SIGN EU
+
+# Indic_Positional_Category=Bottom
+
+093C ; Bottom # Mn DEVANAGARI SIGN NUKTA
+0941..0944 ; Bottom # Mn [4] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN VOCALIC RR
+094D ; Bottom # Mn DEVANAGARI SIGN VIRAMA
+0952 ; Bottom # Mn DEVANAGARI STRESS SIGN ANUDATTA
+0956..0957 ; Bottom # Mn [2] DEVANAGARI VOWEL SIGN UE..DEVANAGARI VOWEL SIGN UUE
+0962..0963 ; Bottom # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+09BC ; Bottom # Mn BENGALI SIGN NUKTA
+09C1..09C4 ; Bottom # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09CD ; Bottom # Mn BENGALI SIGN VIRAMA
+09E2..09E3 ; Bottom # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A3C ; Bottom # Mn GURMUKHI SIGN NUKTA
+0A41..0A42 ; Bottom # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A4D ; Bottom # Mn GURMUKHI SIGN VIRAMA
+0A51 ; Bottom # Mn GURMUKHI SIGN UDAAT
+0A75 ; Bottom # Mn GURMUKHI SIGN YAKASH
+0ABC ; Bottom # Mn GUJARATI SIGN NUKTA
+0AC1..0AC4 ; Bottom # Mn [4] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN VOCALIC RR
+0ACD ; Bottom # Mn GUJARATI SIGN VIRAMA
+0AE2..0AE3 ; Bottom # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B3C ; Bottom # Mn ORIYA SIGN NUKTA
+0B41..0B44 ; Bottom # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B4D ; Bottom # Mn ORIYA SIGN VIRAMA
+0B62..0B63 ; Bottom # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0C3C ; Bottom # Mn TELUGU SIGN NUKTA
+0C56 ; Bottom # Mn TELUGU AI LENGTH MARK
+0C62..0C63 ; Bottom # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0CBC ; Bottom # Mn KANNADA SIGN NUKTA
+0CE2..0CE3 ; Bottom # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D43..0D44 ; Bottom # Mn [2] MALAYALAM VOWEL SIGN VOCALIC R..MALAYALAM VOWEL SIGN VOCALIC RR
+0D62..0D63 ; Bottom # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0DD4 ; Bottom # Mn SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Bottom # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0E38..0E3A ; Bottom # Mn [3] THAI CHARACTER SARA U..THAI CHARACTER PHINTHU
+0EB8..0EBA ; Bottom # Mn [3] LAO VOWEL SIGN U..LAO SIGN PALI VIRAMA
+0EBC ; Bottom # Mn LAO SEMIVOWEL SIGN LO
+0F18..0F19 ; Bottom # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35 ; Bottom # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; Bottom # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F71 ; Bottom # Mn TIBETAN VOWEL SIGN AA
+0F74..0F75 ; Bottom # Mn [2] TIBETAN VOWEL SIGN U..TIBETAN VOWEL SIGN UU
+0F84 ; Bottom # Mn TIBETAN MARK HALANTA
+0F8D..0F97 ; Bottom # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Bottom # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6 ; Bottom # Mn TIBETAN SYMBOL PADMA GDAN
+102F..1030 ; Bottom # Mn [2] MYANMAR VOWEL SIGN U..MYANMAR VOWEL SIGN UU
+1037 ; Bottom # Mn MYANMAR SIGN DOT BELOW
+103D..103E ; Bottom # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+1058..1059 ; Bottom # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105E..1060 ; Bottom # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1082 ; Bottom # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+108D ; Bottom # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+1713..1714 ; Bottom # Mn [2] TAGALOG VOWEL SIGN U..TAGALOG SIGN VIRAMA
+1733 ; Bottom # Mn HANUNOO VOWEL SIGN U
+1753 ; Bottom # Mn BUHID VOWEL SIGN U
+1773 ; Bottom # Mn TAGBANWA VOWEL SIGN U
+17BB..17BD ; Bottom # Mn [3] KHMER VOWEL SIGN U..KHMER VOWEL SIGN UA
+1922 ; Bottom # Mn LIMBU VOWEL SIGN U
+1932 ; Bottom # Mn LIMBU SMALL LETTER ANUSVARA
+1939 ; Bottom # Mn LIMBU SIGN MUKPHRENG
+193B ; Bottom # Mn LIMBU SIGN SA-I
+1A18 ; Bottom # Mn BUGINESE VOWEL SIGN U
+1A56 ; Bottom # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A5B..1A5E ; Bottom # Mn [4] TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA..TAI THAM CONSONANT SIGN SA
+1A69..1A6A ; Bottom # Mn [2] TAI THAM VOWEL SIGN U..TAI THAM VOWEL SIGN UU
+1A6C ; Bottom # Mn TAI THAM VOWEL SIGN OA BELOW
+1A7F ; Bottom # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1B38..1B3A ; Bottom # Mn [3] BALINESE VOWEL SIGN SUKU..BALINESE VOWEL SIGN RA REPA
+1B6C ; Bottom # Mn BALINESE MUSICAL SYMBOL COMBINING ENDEP
+1BA2..1BA3 ; Bottom # Mn [2] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE CONSONANT SIGN PANYIKU
+1BA5 ; Bottom # Mn SUNDANESE VOWEL SIGN PANYUKU
+1BAC..1BAD ; Bottom # Mn [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1C2C ; Bottom # Mn LEPCHA VOWEL SIGN E
+1C37 ; Bottom # Mn LEPCHA SIGN NUKTA
+1CD5..1CD9 ; Bottom # Mn [5] VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA..VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
+1CDC..1CDF ; Bottom # Mn [4] VEDIC TONE KATHAKA ANUDATTA..VEDIC TONE THREE DOTS BELOW
+1CED ; Bottom # Mn VEDIC SIGN TIRYAK
+A825 ; Bottom # Mn SYLOTI NAGRI VOWEL SIGN U
+A82C ; Bottom # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A8C4 ; Bottom # Mn SAURASHTRA SIGN VIRAMA
+A92B..A92D ; Bottom # Mn [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU
+A947..A949 ; Bottom # Mn [3] REJANG VOWEL SIGN I..REJANG VOWEL SIGN E
+A94B..A94E ; Bottom # Mn [4] REJANG VOWEL SIGN O..REJANG VOWEL SIGN EA
+A9B8..A9B9 ; Bottom # Mn [2] JAVANESE VOWEL SIGN SUKU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BD ; Bottom # Mn JAVANESE CONSONANT SIGN KERET
+AA2D ; Bottom # Mn CHAM VOWEL SIGN U
+AA32 ; Bottom # Mn CHAM VOWEL SIGN UE
+AA35..AA36 ; Bottom # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AAB4 ; Bottom # Mn TAI VIET VOWEL U
+AAEC ; Bottom # Mn MEETEI MAYEK VOWEL SIGN UU
+ABE8 ; Bottom # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABED ; Bottom # Mn MEETEI MAYEK APUN IYEK
+10A02..10A03 ; Bottom # Mn [2] KHAROSHTHI VOWEL SIGN U..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A0C..10A0E ; Bottom # Mn [3] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN ANUSVARA
+10A39..10A3A ; Bottom # Mn [2] KHAROSHTHI SIGN CAUDA..KHAROSHTHI SIGN DOT BELOW
+1103C..11041 ; Bottom # Mn [6] BRAHMI VOWEL SIGN U..BRAHMI VOWEL SIGN VOCALIC LL
+110B3..110B4 ; Bottom # Mn [2] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN UU
+110B9..110BA ; Bottom # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110C2 ; Bottom # Mn KAITHI VOWEL SIGN VOCALIC R
+1112A..1112B ; Bottom # Mn [2] CHAKMA VOWEL SIGN U..CHAKMA VOWEL SIGN UU
+11131..11132 ; Bottom # Mn [2] CHAKMA O MARK..CHAKMA AU MARK
+11173 ; Bottom # Mn MAHAJANI SIGN NUKTA
+111B6..111BB ; Bottom # Mn [6] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN VOCALIC LL
+111C9..111CA ; Bottom # Mn [2] SHARADA SANDHI MARK..SHARADA SIGN NUKTA
+111CC ; Bottom # Mn SHARADA EXTRA SHORT VOWEL MARK
+1122F ; Bottom # Mn KHOJKI VOWEL SIGN U
+11241 ; Bottom # Mn KHOJKI VOWEL SIGN VOCALIC R
+112E3..112E4 ; Bottom # Mn [2] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN UU
+112E9..112EA ; Bottom # Mn [2] KHUDAWADI SIGN NUKTA..KHUDAWADI SIGN VIRAMA
+1133B..1133C ; Bottom # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+11438..1143D ; Bottom # Mn [6] NEWA VOWEL SIGN U..NEWA VOWEL SIGN VOCALIC LL
+11442 ; Bottom # Mn NEWA SIGN VIRAMA
+11446 ; Bottom # Mn NEWA SIGN NUKTA
+114B3..114B8 ; Bottom # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114C2..114C3 ; Bottom # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+115B2..115B5 ; Bottom # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115BF..115C0 ; Bottom # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115DC..115DD ; Bottom # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11633..11638 ; Bottom # Mn [6] MODI VOWEL SIGN U..MODI VOWEL SIGN VOCALIC LL
+1163F ; Bottom # Mn MODI SIGN VIRAMA
+116B0..116B1 ; Bottom # Mn [2] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN UU
+116B7 ; Bottom # Mn TAKRI SIGN NUKTA
+1171D ; Bottom # Mn AHOM CONSONANT SIGN MEDIAL LA
+11724..11725 ; Bottom # Mn [2] AHOM VOWEL SIGN U..AHOM VOWEL SIGN UU
+11728 ; Bottom # Mn AHOM VOWEL SIGN O
+1182F..11832 ; Bottom # Mn [4] DOGRA VOWEL SIGN U..DOGRA VOWEL SIGN VOCALIC RR
+11839..1183A ; Bottom # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+11943 ; Bottom # Mn DIVES AKURU SIGN NUKTA
+119D4..119D7 ; Bottom # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119E0 ; Bottom # Mn NANDINAGARI SIGN VIRAMA
+11A02..11A03 ; Bottom # Mn [2] ZANABAZAR SQUARE VOWEL SIGN UE..ZANABAZAR SQUARE VOWEL SIGN U
+11A0A ; Bottom # Mn ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A33..11A34 ; Bottom # Mn [2] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN VIRAMA
+11A3B..11A3E ; Bottom # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A52..11A53 ; Bottom # Mn [2] SOYOMBO VOWEL SIGN UE..SOYOMBO VOWEL SIGN U
+11A59..11A5B ; Bottom # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A8A..11A95 ; Bottom # Mn [12] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO FINAL CONSONANT SIGN -A
+11C32..11C36 ; Bottom # Mn [5] BHAIKSUKI VOWEL SIGN U..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C3F ; Bottom # Mn BHAIKSUKI SIGN VIRAMA
+11C92..11CA7 ; Bottom # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CAA..11CB0 ; Bottom # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB2 ; Bottom # Mn MARCHEN VOWEL SIGN U
+11D36 ; Bottom # Mn MASARAM GONDI VOWEL SIGN VOCALIC R
+11D42 ; Bottom # Mn MASARAM GONDI SIGN NUKTA
+11D44 ; Bottom # Mn MASARAM GONDI SIGN HALANTA
+11D47 ; Bottom # Mn MASARAM GONDI RA-KARA
+11EF4 ; Bottom # Mn MAKASAR VOWEL SIGN U
+11F38..11F3A ; Bottom # Mn [3] KAWI VOWEL SIGN U..KAWI VOWEL SIGN VOCALIC R
+
+# Indic_Positional_Category=Top_And_Bottom
+
+0C48 ; Top_And_Bottom # Mn TELUGU VOWEL SIGN AI
+0F73 ; Top_And_Bottom # Mn TIBETAN VOWEL SIGN II
+0F76..0F79 ; Top_And_Bottom # Mn [4] TIBETAN VOWEL SIGN VOCALIC R..TIBETAN VOWEL SIGN VOCALIC LL
+0F81 ; Top_And_Bottom # Mn TIBETAN VOWEL SIGN REVERSED II
+1B3C ; Top_And_Bottom # Mn BALINESE VOWEL SIGN LA LENGA
+1112E..1112F ; Top_And_Bottom # Mn [2] CHAKMA VOWEL SIGN O..CHAKMA VOWEL SIGN AU
+
+# Indic_Positional_Category=Top_And_Right
+
+0AC9 ; Top_And_Right # Mc GUJARATI VOWEL SIGN CANDRA O
+0B57 ; Top_And_Right # Mc ORIYA AU LENGTH MARK
+0CC0 ; Top_And_Right # Mc KANNADA VOWEL SIGN II
+0CC7..0CC8 ; Top_And_Right # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Top_And_Right # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+1925..1926 ; Top_And_Right # Mc [2] LIMBU VOWEL SIGN OO..LIMBU VOWEL SIGN AU
+1B43 ; Top_And_Right # Mc BALINESE VOWEL SIGN PEPET TEDUNG
+111BF ; Top_And_Right # Mc SHARADA VOWEL SIGN AU
+11232..11233 ; Top_And_Right # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+
+# Indic_Positional_Category=Top_And_Left
+
+0B48 ; Top_And_Left # Mc ORIYA VOWEL SIGN AI
+0DDA ; Top_And_Left # Mc SINHALA VOWEL SIGN DIGA KOMBUVA
+17BE ; Top_And_Left # Mc KHMER VOWEL SIGN OE
+1C29 ; Top_And_Left # Mc LEPCHA VOWEL SIGN OO
+114BB ; Top_And_Left # Mc TIRHUTA VOWEL SIGN AI
+115B9 ; Top_And_Left # Mc SIDDHAM VOWEL SIGN AI
+
+# Indic_Positional_Category=Top_And_Left_And_Right
+
+0B4C ; Top_And_Left_And_Right # Mc ORIYA VOWEL SIGN AU
+0DDD ; Top_And_Left_And_Right # Mc SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+17BF ; Top_And_Left_And_Right # Mc KHMER VOWEL SIGN YA
+115BB ; Top_And_Left_And_Right # Mc SIDDHAM VOWEL SIGN AU
+
+# Indic_Positional_Category=Bottom_And_Right
+
+1B3B ; Bottom_And_Right # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+A9BE ; Bottom_And_Right # Mc JAVANESE CONSONANT SIGN PENGKAL
+A9C0 ; Bottom_And_Right # Mc JAVANESE PANGKON
+11942 ; Bottom_And_Right # Mc DIVES AKURU MEDIAL RA
+
+# Indic_Positional_Category=Bottom_And_Left
+
+A9BF ; Bottom_And_Left # Mc JAVANESE CONSONANT SIGN CAKRA
+
+# Indic_Positional_Category=Top_And_Bottom_And_Right
+
+1B3D ; Top_And_Bottom_And_Right # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG
+
+# Indic_Positional_Category=Top_And_Bottom_And_Left
+
+103C ; Top_And_Bottom_And_Left # Mc MYANMAR CONSONANT SIGN MEDIAL RA
+1171E ; Top_And_Bottom_And_Left # Mn AHOM CONSONANT SIGN MEDIAL RA
+
+# Indic_Positional_Category=Overstruck
+
+1CD4 ; Overstruck # Mn VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
+1CE2..1CE8 ; Overstruck # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+10A01 ; Overstruck # Mn KHAROSHTHI VOWEL SIGN I
+10A06 ; Overstruck # Mn KHAROSHTHI VOWEL SIGN O
+
+# EOF
diff --git a/gen/data-files b/gen/data-files
index 323b358..63e0e76 100755
--- a/gen/data-files
+++ b/gen/data-files
@@ -24,6 +24,7 @@ readonly PATHS='
extracted/DerivedNumericType
extracted/DerivedNumericValues
HangulSyllableType
+ IndicPositionalCategory
PropList
Scripts
SpecialCasing
diff --git a/gen/prop/inpc b/gen/prop/inpc
new file mode 100755
index 0000000..b4bd85c
--- /dev/null
+++ b/gen/prop/inpc
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+set -e
+cd "${0%/*}/../.."
+exec >lib/unicode/prop/uprop_get_inpc.c
+
+gawk '
+BEGIN {
+ FS = "( *#.*| +; +)"
+
+ print "/* This file is autogenerated by gen/prop/inpc; DO NOT EDIT. */"
+ print ""
+ print "#include \"_bsearch.h\""
+ print "#include \"rune.h\""
+ print "#include \"unicode/prop.h\""
+ print ""
+}
+
+/^[^#]/ {
+ n = split($1, a, /\.\./)
+ lo = strtonum("0X" a[1])
+ hi = strtonum("0X" a[n])
+
+ for (i = lo; i <= hi; i++) {
+ gsub(/^; /, "", $2)
+ props[i] = "INPC_" toupper($2)
+ }
+}
+
+END {
+ print "static const struct {"
+ print "\trune lo, hi;"
+ print "\tenum uprop_inpc val;"
+ print "} lookup[] = {"
+
+ for (i = 0x900; i <= 0x10FFFF; i++) {
+ if (!props[i])
+ continue
+ lo = i
+ while (props[lo] == props[i + 1])
+ i++
+ printf "\t{RUNE_C(0x%06X), RUNE_C(0x%06X), %s},\n", lo, i, props[i]
+ }
+
+ print "};"
+ print ""
+ print "_MLIB_DEFINE_BSEARCH(enum uprop_inpc, lookup, INPC_NA)"
+ print ""
+ print "enum uprop_inpc"
+ print "uprop_get_inpc(rune ch)"
+ print "{"
+ print "\treturn ch < lookup[0].lo ? INPC_NA : mlib_lookup(ch);"
+ print "}"
+}
+' data/IndicPositionalCategory | sed 's/\s*$//'
diff --git a/include/unicode/prop.h b/include/unicode/prop.h
index e6c53ea..b7d7756 100644
--- a/include/unicode/prop.h
+++ b/include/unicode/prop.h
@@ -534,6 +534,25 @@ enum uprop_hst {
HST_V, /* Vowel Jamo */
};
+enum uprop_inpc {
+ INPC_NA = 0, /* Not Applicable */
+ INPC_BOTTOM,
+ INPC_BOTTOM_AND_LEFT,
+ INPC_BOTTOM_AND_RIGHT,
+ INPC_LEFT,
+ INPC_LEFT_AND_RIGHT,
+ INPC_OVERSTRUCK,
+ INPC_RIGHT,
+ INPC_TOP,
+ INPC_TOP_AND_BOTTOM,
+ INPC_TOP_AND_BOTTOM_AND_LEFT,
+ INPC_TOP_AND_BOTTOM_AND_RIGHT,
+ INPC_TOP_AND_LEFT,
+ INPC_TOP_AND_LEFT_AND_RIGHT,
+ INPC_TOP_AND_RIGHT,
+ INPC_VISUAL_ORDER_LEFT,
+};
+
enum uprop_lb {
LB_XX, /* Unknown */
LB_AI, /* Ambiguous */
@@ -779,6 +798,7 @@ enum uprop_vo {
[[_mlib_pure]] enum uprop_ea uprop_get_ea(rune);
[[_mlib_pure]] enum uprop_gc uprop_get_gc(rune);
[[_mlib_pure]] enum uprop_hst uprop_get_hst(rune);
+[[_mlib_pure]] enum uprop_inpc uprop_get_inpc(rune);
[[_mlib_pure]] enum uprop_lb uprop_get_lb(rune);
[[_mlib_pure]] enum uprop_nt uprop_get_nt(rune);
[[_mlib_pure]] enum uprop_sc uprop_get_sc(rune);
diff --git a/lib/unicode/prop/uprop_get_inpc.c b/lib/unicode/prop/uprop_get_inpc.c
new file mode 100644
index 0000000..af97ca3
--- /dev/null
+++ b/lib/unicode/prop/uprop_get_inpc.c
@@ -0,0 +1,641 @@
+/* This file is autogenerated by gen/prop/inpc; DO NOT EDIT. */
+
+#include "_bsearch.h"
+#include "rune.h"
+#include "unicode/prop.h"
+
+static const struct {
+ rune lo, hi;
+ enum uprop_inpc val;
+} lookup[] = {
+ {RUNE_C(0x000900), RUNE_C(0x000902), INPC_TOP},
+ {RUNE_C(0x000903), RUNE_C(0x000903), INPC_RIGHT},
+ {RUNE_C(0x00093A), RUNE_C(0x00093A), INPC_TOP},
+ {RUNE_C(0x00093B), RUNE_C(0x00093B), INPC_RIGHT},
+ {RUNE_C(0x00093C), RUNE_C(0x00093C), INPC_BOTTOM},
+ {RUNE_C(0x00093E), RUNE_C(0x00093E), INPC_RIGHT},
+ {RUNE_C(0x00093F), RUNE_C(0x00093F), INPC_LEFT},
+ {RUNE_C(0x000940), RUNE_C(0x000940), INPC_RIGHT},
+ {RUNE_C(0x000941), RUNE_C(0x000944), INPC_BOTTOM},
+ {RUNE_C(0x000945), RUNE_C(0x000948), INPC_TOP},
+ {RUNE_C(0x000949), RUNE_C(0x00094C), INPC_RIGHT},
+ {RUNE_C(0x00094D), RUNE_C(0x00094D), INPC_BOTTOM},
+ {RUNE_C(0x00094E), RUNE_C(0x00094E), INPC_LEFT},
+ {RUNE_C(0x00094F), RUNE_C(0x00094F), INPC_RIGHT},
+ {RUNE_C(0x000951), RUNE_C(0x000951), INPC_TOP},
+ {RUNE_C(0x000952), RUNE_C(0x000952), INPC_BOTTOM},
+ {RUNE_C(0x000955), RUNE_C(0x000955), INPC_TOP},
+ {RUNE_C(0x000956), RUNE_C(0x000957), INPC_BOTTOM},
+ {RUNE_C(0x000962), RUNE_C(0x000963), INPC_BOTTOM},
+ {RUNE_C(0x000981), RUNE_C(0x000981), INPC_TOP},
+ {RUNE_C(0x000982), RUNE_C(0x000983), INPC_RIGHT},
+ {RUNE_C(0x0009BC), RUNE_C(0x0009BC), INPC_BOTTOM},
+ {RUNE_C(0x0009BE), RUNE_C(0x0009BE), INPC_RIGHT},
+ {RUNE_C(0x0009BF), RUNE_C(0x0009BF), INPC_LEFT},
+ {RUNE_C(0x0009C0), RUNE_C(0x0009C0), INPC_RIGHT},
+ {RUNE_C(0x0009C1), RUNE_C(0x0009C4), INPC_BOTTOM},
+ {RUNE_C(0x0009C7), RUNE_C(0x0009C8), INPC_LEFT},
+ {RUNE_C(0x0009CB), RUNE_C(0x0009CC), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x0009CD), RUNE_C(0x0009CD), INPC_BOTTOM},
+ {RUNE_C(0x0009D7), RUNE_C(0x0009D7), INPC_RIGHT},
+ {RUNE_C(0x0009E2), RUNE_C(0x0009E3), INPC_BOTTOM},
+ {RUNE_C(0x0009FE), RUNE_C(0x0009FE), INPC_TOP},
+ {RUNE_C(0x000A01), RUNE_C(0x000A02), INPC_TOP},
+ {RUNE_C(0x000A03), RUNE_C(0x000A03), INPC_RIGHT},
+ {RUNE_C(0x000A3C), RUNE_C(0x000A3C), INPC_BOTTOM},
+ {RUNE_C(0x000A3E), RUNE_C(0x000A3E), INPC_RIGHT},
+ {RUNE_C(0x000A3F), RUNE_C(0x000A3F), INPC_LEFT},
+ {RUNE_C(0x000A40), RUNE_C(0x000A40), INPC_RIGHT},
+ {RUNE_C(0x000A41), RUNE_C(0x000A42), INPC_BOTTOM},
+ {RUNE_C(0x000A47), RUNE_C(0x000A48), INPC_TOP},
+ {RUNE_C(0x000A4B), RUNE_C(0x000A4C), INPC_TOP},
+ {RUNE_C(0x000A4D), RUNE_C(0x000A4D), INPC_BOTTOM},
+ {RUNE_C(0x000A51), RUNE_C(0x000A51), INPC_BOTTOM},
+ {RUNE_C(0x000A70), RUNE_C(0x000A71), INPC_TOP},
+ {RUNE_C(0x000A75), RUNE_C(0x000A75), INPC_BOTTOM},
+ {RUNE_C(0x000A81), RUNE_C(0x000A82), INPC_TOP},
+ {RUNE_C(0x000A83), RUNE_C(0x000A83), INPC_RIGHT},
+ {RUNE_C(0x000ABC), RUNE_C(0x000ABC), INPC_BOTTOM},
+ {RUNE_C(0x000ABE), RUNE_C(0x000ABE), INPC_RIGHT},
+ {RUNE_C(0x000ABF), RUNE_C(0x000ABF), INPC_LEFT},
+ {RUNE_C(0x000AC0), RUNE_C(0x000AC0), INPC_RIGHT},
+ {RUNE_C(0x000AC1), RUNE_C(0x000AC4), INPC_BOTTOM},
+ {RUNE_C(0x000AC5), RUNE_C(0x000AC5), INPC_TOP},
+ {RUNE_C(0x000AC7), RUNE_C(0x000AC8), INPC_TOP},
+ {RUNE_C(0x000AC9), RUNE_C(0x000AC9), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x000ACB), RUNE_C(0x000ACC), INPC_RIGHT},
+ {RUNE_C(0x000ACD), RUNE_C(0x000ACD), INPC_BOTTOM},
+ {RUNE_C(0x000AE2), RUNE_C(0x000AE3), INPC_BOTTOM},
+ {RUNE_C(0x000AFA), RUNE_C(0x000AFF), INPC_TOP},
+ {RUNE_C(0x000B01), RUNE_C(0x000B01), INPC_TOP},
+ {RUNE_C(0x000B02), RUNE_C(0x000B03), INPC_RIGHT},
+ {RUNE_C(0x000B3C), RUNE_C(0x000B3C), INPC_BOTTOM},
+ {RUNE_C(0x000B3E), RUNE_C(0x000B3E), INPC_RIGHT},
+ {RUNE_C(0x000B3F), RUNE_C(0x000B3F), INPC_TOP},
+ {RUNE_C(0x000B40), RUNE_C(0x000B40), INPC_RIGHT},
+ {RUNE_C(0x000B41), RUNE_C(0x000B44), INPC_BOTTOM},
+ {RUNE_C(0x000B47), RUNE_C(0x000B47), INPC_LEFT},
+ {RUNE_C(0x000B48), RUNE_C(0x000B48), INPC_TOP_AND_LEFT},
+ {RUNE_C(0x000B4B), RUNE_C(0x000B4B), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x000B4C), RUNE_C(0x000B4C), INPC_TOP_AND_LEFT_AND_RIGHT},
+ {RUNE_C(0x000B4D), RUNE_C(0x000B4D), INPC_BOTTOM},
+ {RUNE_C(0x000B55), RUNE_C(0x000B56), INPC_TOP},
+ {RUNE_C(0x000B57), RUNE_C(0x000B57), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x000B62), RUNE_C(0x000B63), INPC_BOTTOM},
+ {RUNE_C(0x000B82), RUNE_C(0x000B82), INPC_TOP},
+ {RUNE_C(0x000BBE), RUNE_C(0x000BBF), INPC_RIGHT},
+ {RUNE_C(0x000BC0), RUNE_C(0x000BC0), INPC_TOP},
+ {RUNE_C(0x000BC1), RUNE_C(0x000BC2), INPC_RIGHT},
+ {RUNE_C(0x000BC6), RUNE_C(0x000BC8), INPC_LEFT},
+ {RUNE_C(0x000BCA), RUNE_C(0x000BCC), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x000BCD), RUNE_C(0x000BCD), INPC_TOP},
+ {RUNE_C(0x000BD7), RUNE_C(0x000BD7), INPC_RIGHT},
+ {RUNE_C(0x000C00), RUNE_C(0x000C00), INPC_TOP},
+ {RUNE_C(0x000C01), RUNE_C(0x000C03), INPC_RIGHT},
+ {RUNE_C(0x000C04), RUNE_C(0x000C04), INPC_TOP},
+ {RUNE_C(0x000C3C), RUNE_C(0x000C3C), INPC_BOTTOM},
+ {RUNE_C(0x000C3E), RUNE_C(0x000C40), INPC_TOP},
+ {RUNE_C(0x000C41), RUNE_C(0x000C44), INPC_RIGHT},
+ {RUNE_C(0x000C46), RUNE_C(0x000C47), INPC_TOP},
+ {RUNE_C(0x000C48), RUNE_C(0x000C48), INPC_TOP_AND_BOTTOM},
+ {RUNE_C(0x000C4A), RUNE_C(0x000C4D), INPC_TOP},
+ {RUNE_C(0x000C55), RUNE_C(0x000C55), INPC_TOP},
+ {RUNE_C(0x000C56), RUNE_C(0x000C56), INPC_BOTTOM},
+ {RUNE_C(0x000C62), RUNE_C(0x000C63), INPC_BOTTOM},
+ {RUNE_C(0x000C81), RUNE_C(0x000C81), INPC_TOP},
+ {RUNE_C(0x000C82), RUNE_C(0x000C83), INPC_RIGHT},
+ {RUNE_C(0x000CBC), RUNE_C(0x000CBC), INPC_BOTTOM},
+ {RUNE_C(0x000CBE), RUNE_C(0x000CBE), INPC_RIGHT},
+ {RUNE_C(0x000CBF), RUNE_C(0x000CBF), INPC_TOP},
+ {RUNE_C(0x000CC0), RUNE_C(0x000CC0), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x000CC1), RUNE_C(0x000CC4), INPC_RIGHT},
+ {RUNE_C(0x000CC6), RUNE_C(0x000CC6), INPC_TOP},
+ {RUNE_C(0x000CC7), RUNE_C(0x000CC8), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x000CCA), RUNE_C(0x000CCB), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x000CCC), RUNE_C(0x000CCD), INPC_TOP},
+ {RUNE_C(0x000CD5), RUNE_C(0x000CD6), INPC_RIGHT},
+ {RUNE_C(0x000CE2), RUNE_C(0x000CE3), INPC_BOTTOM},
+ {RUNE_C(0x000CF3), RUNE_C(0x000CF3), INPC_RIGHT},
+ {RUNE_C(0x000D00), RUNE_C(0x000D01), INPC_TOP},
+ {RUNE_C(0x000D02), RUNE_C(0x000D03), INPC_RIGHT},
+ {RUNE_C(0x000D3B), RUNE_C(0x000D3C), INPC_TOP},
+ {RUNE_C(0x000D3E), RUNE_C(0x000D42), INPC_RIGHT},
+ {RUNE_C(0x000D43), RUNE_C(0x000D44), INPC_BOTTOM},
+ {RUNE_C(0x000D46), RUNE_C(0x000D48), INPC_LEFT},
+ {RUNE_C(0x000D4A), RUNE_C(0x000D4C), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x000D4D), RUNE_C(0x000D4E), INPC_TOP},
+ {RUNE_C(0x000D57), RUNE_C(0x000D57), INPC_RIGHT},
+ {RUNE_C(0x000D62), RUNE_C(0x000D63), INPC_BOTTOM},
+ {RUNE_C(0x000D81), RUNE_C(0x000D81), INPC_TOP},
+ {RUNE_C(0x000D82), RUNE_C(0x000D83), INPC_RIGHT},
+ {RUNE_C(0x000DCA), RUNE_C(0x000DCA), INPC_TOP},
+ {RUNE_C(0x000DCF), RUNE_C(0x000DD1), INPC_RIGHT},
+ {RUNE_C(0x000DD2), RUNE_C(0x000DD3), INPC_TOP},
+ {RUNE_C(0x000DD4), RUNE_C(0x000DD4), INPC_BOTTOM},
+ {RUNE_C(0x000DD6), RUNE_C(0x000DD6), INPC_BOTTOM},
+ {RUNE_C(0x000DD8), RUNE_C(0x000DD8), INPC_RIGHT},
+ {RUNE_C(0x000DD9), RUNE_C(0x000DD9), INPC_LEFT},
+ {RUNE_C(0x000DDA), RUNE_C(0x000DDA), INPC_TOP_AND_LEFT},
+ {RUNE_C(0x000DDB), RUNE_C(0x000DDB), INPC_LEFT},
+ {RUNE_C(0x000DDC), RUNE_C(0x000DDC), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x000DDD), RUNE_C(0x000DDD), INPC_TOP_AND_LEFT_AND_RIGHT},
+ {RUNE_C(0x000DDE), RUNE_C(0x000DDE), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x000DDF), RUNE_C(0x000DDF), INPC_RIGHT},
+ {RUNE_C(0x000DF2), RUNE_C(0x000DF3), INPC_RIGHT},
+ {RUNE_C(0x000E30), RUNE_C(0x000E30), INPC_RIGHT},
+ {RUNE_C(0x000E31), RUNE_C(0x000E31), INPC_TOP},
+ {RUNE_C(0x000E32), RUNE_C(0x000E33), INPC_RIGHT},
+ {RUNE_C(0x000E34), RUNE_C(0x000E37), INPC_TOP},
+ {RUNE_C(0x000E38), RUNE_C(0x000E3A), INPC_BOTTOM},
+ {RUNE_C(0x000E40), RUNE_C(0x000E44), INPC_VISUAL_ORDER_LEFT},
+ {RUNE_C(0x000E45), RUNE_C(0x000E45), INPC_RIGHT},
+ {RUNE_C(0x000E47), RUNE_C(0x000E4E), INPC_TOP},
+ {RUNE_C(0x000EB0), RUNE_C(0x000EB0), INPC_RIGHT},
+ {RUNE_C(0x000EB1), RUNE_C(0x000EB1), INPC_TOP},
+ {RUNE_C(0x000EB2), RUNE_C(0x000EB3), INPC_RIGHT},
+ {RUNE_C(0x000EB4), RUNE_C(0x000EB7), INPC_TOP},
+ {RUNE_C(0x000EB8), RUNE_C(0x000EBA), INPC_BOTTOM},
+ {RUNE_C(0x000EBB), RUNE_C(0x000EBB), INPC_TOP},
+ {RUNE_C(0x000EBC), RUNE_C(0x000EBC), INPC_BOTTOM},
+ {RUNE_C(0x000EC0), RUNE_C(0x000EC4), INPC_VISUAL_ORDER_LEFT},
+ {RUNE_C(0x000EC8), RUNE_C(0x000ECE), INPC_TOP},
+ {RUNE_C(0x000F18), RUNE_C(0x000F19), INPC_BOTTOM},
+ {RUNE_C(0x000F35), RUNE_C(0x000F35), INPC_BOTTOM},
+ {RUNE_C(0x000F37), RUNE_C(0x000F37), INPC_BOTTOM},
+ {RUNE_C(0x000F39), RUNE_C(0x000F39), INPC_TOP},
+ {RUNE_C(0x000F3E), RUNE_C(0x000F3E), INPC_RIGHT},
+ {RUNE_C(0x000F3F), RUNE_C(0x000F3F), INPC_LEFT},
+ {RUNE_C(0x000F71), RUNE_C(0x000F71), INPC_BOTTOM},
+ {RUNE_C(0x000F72), RUNE_C(0x000F72), INPC_TOP},
+ {RUNE_C(0x000F73), RUNE_C(0x000F73), INPC_TOP_AND_BOTTOM},
+ {RUNE_C(0x000F74), RUNE_C(0x000F75), INPC_BOTTOM},
+ {RUNE_C(0x000F76), RUNE_C(0x000F79), INPC_TOP_AND_BOTTOM},
+ {RUNE_C(0x000F7A), RUNE_C(0x000F7E), INPC_TOP},
+ {RUNE_C(0x000F7F), RUNE_C(0x000F7F), INPC_RIGHT},
+ {RUNE_C(0x000F80), RUNE_C(0x000F80), INPC_TOP},
+ {RUNE_C(0x000F81), RUNE_C(0x000F81), INPC_TOP_AND_BOTTOM},
+ {RUNE_C(0x000F82), RUNE_C(0x000F83), INPC_TOP},
+ {RUNE_C(0x000F84), RUNE_C(0x000F84), INPC_BOTTOM},
+ {RUNE_C(0x000F86), RUNE_C(0x000F87), INPC_TOP},
+ {RUNE_C(0x000F8D), RUNE_C(0x000F97), INPC_BOTTOM},
+ {RUNE_C(0x000F99), RUNE_C(0x000FBC), INPC_BOTTOM},
+ {RUNE_C(0x000FC6), RUNE_C(0x000FC6), INPC_BOTTOM},
+ {RUNE_C(0x00102B), RUNE_C(0x00102C), INPC_RIGHT},
+ {RUNE_C(0x00102D), RUNE_C(0x00102E), INPC_TOP},
+ {RUNE_C(0x00102F), RUNE_C(0x001030), INPC_BOTTOM},
+ {RUNE_C(0x001031), RUNE_C(0x001031), INPC_LEFT},
+ {RUNE_C(0x001032), RUNE_C(0x001036), INPC_TOP},
+ {RUNE_C(0x001037), RUNE_C(0x001037), INPC_BOTTOM},
+ {RUNE_C(0x001038), RUNE_C(0x001038), INPC_RIGHT},
+ {RUNE_C(0x00103A), RUNE_C(0x00103A), INPC_TOP},
+ {RUNE_C(0x00103B), RUNE_C(0x00103B), INPC_RIGHT},
+ {RUNE_C(0x00103C), RUNE_C(0x00103C), INPC_TOP_AND_BOTTOM_AND_LEFT},
+ {RUNE_C(0x00103D), RUNE_C(0x00103E), INPC_BOTTOM},
+ {RUNE_C(0x001056), RUNE_C(0x001057), INPC_RIGHT},
+ {RUNE_C(0x001058), RUNE_C(0x001059), INPC_BOTTOM},
+ {RUNE_C(0x00105E), RUNE_C(0x001060), INPC_BOTTOM},
+ {RUNE_C(0x001062), RUNE_C(0x001064), INPC_RIGHT},
+ {RUNE_C(0x001067), RUNE_C(0x00106D), INPC_RIGHT},
+ {RUNE_C(0x001071), RUNE_C(0x001074), INPC_TOP},
+ {RUNE_C(0x001082), RUNE_C(0x001082), INPC_BOTTOM},
+ {RUNE_C(0x001083), RUNE_C(0x001083), INPC_RIGHT},
+ {RUNE_C(0x001084), RUNE_C(0x001084), INPC_LEFT},
+ {RUNE_C(0x001085), RUNE_C(0x001086), INPC_TOP},
+ {RUNE_C(0x001087), RUNE_C(0x00108C), INPC_RIGHT},
+ {RUNE_C(0x00108D), RUNE_C(0x00108D), INPC_BOTTOM},
+ {RUNE_C(0x00108F), RUNE_C(0x00108F), INPC_RIGHT},
+ {RUNE_C(0x00109A), RUNE_C(0x00109C), INPC_RIGHT},
+ {RUNE_C(0x00109D), RUNE_C(0x00109D), INPC_TOP},
+ {RUNE_C(0x001712), RUNE_C(0x001712), INPC_TOP},
+ {RUNE_C(0x001713), RUNE_C(0x001714), INPC_BOTTOM},
+ {RUNE_C(0x001715), RUNE_C(0x001715), INPC_RIGHT},
+ {RUNE_C(0x001732), RUNE_C(0x001732), INPC_TOP},
+ {RUNE_C(0x001733), RUNE_C(0x001733), INPC_BOTTOM},
+ {RUNE_C(0x001734), RUNE_C(0x001734), INPC_RIGHT},
+ {RUNE_C(0x001752), RUNE_C(0x001752), INPC_TOP},
+ {RUNE_C(0x001753), RUNE_C(0x001753), INPC_BOTTOM},
+ {RUNE_C(0x001772), RUNE_C(0x001772), INPC_TOP},
+ {RUNE_C(0x001773), RUNE_C(0x001773), INPC_BOTTOM},
+ {RUNE_C(0x0017B6), RUNE_C(0x0017B6), INPC_RIGHT},
+ {RUNE_C(0x0017B7), RUNE_C(0x0017BA), INPC_TOP},
+ {RUNE_C(0x0017BB), RUNE_C(0x0017BD), INPC_BOTTOM},
+ {RUNE_C(0x0017BE), RUNE_C(0x0017BE), INPC_TOP_AND_LEFT},
+ {RUNE_C(0x0017BF), RUNE_C(0x0017BF), INPC_TOP_AND_LEFT_AND_RIGHT},
+ {RUNE_C(0x0017C0), RUNE_C(0x0017C0), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x0017C1), RUNE_C(0x0017C3), INPC_LEFT},
+ {RUNE_C(0x0017C4), RUNE_C(0x0017C5), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x0017C6), RUNE_C(0x0017C6), INPC_TOP},
+ {RUNE_C(0x0017C7), RUNE_C(0x0017C8), INPC_RIGHT},
+ {RUNE_C(0x0017C9), RUNE_C(0x0017D1), INPC_TOP},
+ {RUNE_C(0x0017D3), RUNE_C(0x0017D3), INPC_TOP},
+ {RUNE_C(0x0017DD), RUNE_C(0x0017DD), INPC_TOP},
+ {RUNE_C(0x001920), RUNE_C(0x001921), INPC_TOP},
+ {RUNE_C(0x001922), RUNE_C(0x001922), INPC_BOTTOM},
+ {RUNE_C(0x001923), RUNE_C(0x001924), INPC_RIGHT},
+ {RUNE_C(0x001925), RUNE_C(0x001926), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x001927), RUNE_C(0x001928), INPC_TOP},
+ {RUNE_C(0x001929), RUNE_C(0x00192B), INPC_RIGHT},
+ {RUNE_C(0x001930), RUNE_C(0x001931), INPC_RIGHT},
+ {RUNE_C(0x001932), RUNE_C(0x001932), INPC_BOTTOM},
+ {RUNE_C(0x001933), RUNE_C(0x001938), INPC_RIGHT},
+ {RUNE_C(0x001939), RUNE_C(0x001939), INPC_BOTTOM},
+ {RUNE_C(0x00193A), RUNE_C(0x00193A), INPC_TOP},
+ {RUNE_C(0x00193B), RUNE_C(0x00193B), INPC_BOTTOM},
+ {RUNE_C(0x0019B0), RUNE_C(0x0019B4), INPC_RIGHT},
+ {RUNE_C(0x0019B5), RUNE_C(0x0019B7), INPC_VISUAL_ORDER_LEFT},
+ {RUNE_C(0x0019B8), RUNE_C(0x0019B9), INPC_RIGHT},
+ {RUNE_C(0x0019BA), RUNE_C(0x0019BA), INPC_VISUAL_ORDER_LEFT},
+ {RUNE_C(0x0019BB), RUNE_C(0x0019C0), INPC_RIGHT},
+ {RUNE_C(0x0019C8), RUNE_C(0x0019C9), INPC_RIGHT},
+ {RUNE_C(0x001A17), RUNE_C(0x001A17), INPC_TOP},
+ {RUNE_C(0x001A18), RUNE_C(0x001A18), INPC_BOTTOM},
+ {RUNE_C(0x001A19), RUNE_C(0x001A19), INPC_LEFT},
+ {RUNE_C(0x001A1A), RUNE_C(0x001A1A), INPC_RIGHT},
+ {RUNE_C(0x001A1B), RUNE_C(0x001A1B), INPC_TOP},
+ {RUNE_C(0x001A55), RUNE_C(0x001A55), INPC_LEFT},
+ {RUNE_C(0x001A56), RUNE_C(0x001A56), INPC_BOTTOM},
+ {RUNE_C(0x001A57), RUNE_C(0x001A57), INPC_RIGHT},
+ {RUNE_C(0x001A58), RUNE_C(0x001A5A), INPC_TOP},
+ {RUNE_C(0x001A5B), RUNE_C(0x001A5E), INPC_BOTTOM},
+ {RUNE_C(0x001A61), RUNE_C(0x001A61), INPC_RIGHT},
+ {RUNE_C(0x001A62), RUNE_C(0x001A62), INPC_TOP},
+ {RUNE_C(0x001A63), RUNE_C(0x001A64), INPC_RIGHT},
+ {RUNE_C(0x001A65), RUNE_C(0x001A68), INPC_TOP},
+ {RUNE_C(0x001A69), RUNE_C(0x001A6A), INPC_BOTTOM},
+ {RUNE_C(0x001A6B), RUNE_C(0x001A6B), INPC_TOP},
+ {RUNE_C(0x001A6C), RUNE_C(0x001A6C), INPC_BOTTOM},
+ {RUNE_C(0x001A6D), RUNE_C(0x001A6D), INPC_RIGHT},
+ {RUNE_C(0x001A6E), RUNE_C(0x001A72), INPC_LEFT},
+ {RUNE_C(0x001A73), RUNE_C(0x001A7C), INPC_TOP},
+ {RUNE_C(0x001A7F), RUNE_C(0x001A7F), INPC_BOTTOM},
+ {RUNE_C(0x001B00), RUNE_C(0x001B03), INPC_TOP},
+ {RUNE_C(0x001B04), RUNE_C(0x001B04), INPC_RIGHT},
+ {RUNE_C(0x001B34), RUNE_C(0x001B34), INPC_TOP},
+ {RUNE_C(0x001B35), RUNE_C(0x001B35), INPC_RIGHT},
+ {RUNE_C(0x001B36), RUNE_C(0x001B37), INPC_TOP},
+ {RUNE_C(0x001B38), RUNE_C(0x001B3A), INPC_BOTTOM},
+ {RUNE_C(0x001B3B), RUNE_C(0x001B3B), INPC_BOTTOM_AND_RIGHT},
+ {RUNE_C(0x001B3C), RUNE_C(0x001B3C), INPC_TOP_AND_BOTTOM},
+ {RUNE_C(0x001B3D), RUNE_C(0x001B3D), INPC_TOP_AND_BOTTOM_AND_RIGHT},
+ {RUNE_C(0x001B3E), RUNE_C(0x001B3F), INPC_LEFT},
+ {RUNE_C(0x001B40), RUNE_C(0x001B41), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x001B42), RUNE_C(0x001B42), INPC_TOP},
+ {RUNE_C(0x001B43), RUNE_C(0x001B43), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x001B44), RUNE_C(0x001B44), INPC_RIGHT},
+ {RUNE_C(0x001B6B), RUNE_C(0x001B6B), INPC_TOP},
+ {RUNE_C(0x001B6C), RUNE_C(0x001B6C), INPC_BOTTOM},
+ {RUNE_C(0x001B6D), RUNE_C(0x001B73), INPC_TOP},
+ {RUNE_C(0x001B80), RUNE_C(0x001B81), INPC_TOP},
+ {RUNE_C(0x001B82), RUNE_C(0x001B82), INPC_RIGHT},
+ {RUNE_C(0x001BA1), RUNE_C(0x001BA1), INPC_RIGHT},
+ {RUNE_C(0x001BA2), RUNE_C(0x001BA3), INPC_BOTTOM},
+ {RUNE_C(0x001BA4), RUNE_C(0x001BA4), INPC_TOP},
+ {RUNE_C(0x001BA5), RUNE_C(0x001BA5), INPC_BOTTOM},
+ {RUNE_C(0x001BA6), RUNE_C(0x001BA6), INPC_LEFT},
+ {RUNE_C(0x001BA7), RUNE_C(0x001BA7), INPC_RIGHT},
+ {RUNE_C(0x001BA8), RUNE_C(0x001BA9), INPC_TOP},
+ {RUNE_C(0x001BAA), RUNE_C(0x001BAA), INPC_RIGHT},
+ {RUNE_C(0x001BAC), RUNE_C(0x001BAD), INPC_BOTTOM},
+ {RUNE_C(0x001BE6), RUNE_C(0x001BE6), INPC_TOP},
+ {RUNE_C(0x001BE7), RUNE_C(0x001BE7), INPC_RIGHT},
+ {RUNE_C(0x001BE8), RUNE_C(0x001BE9), INPC_TOP},
+ {RUNE_C(0x001BEA), RUNE_C(0x001BEC), INPC_RIGHT},
+ {RUNE_C(0x001BED), RUNE_C(0x001BED), INPC_TOP},
+ {RUNE_C(0x001BEE), RUNE_C(0x001BEE), INPC_RIGHT},
+ {RUNE_C(0x001BEF), RUNE_C(0x001BF1), INPC_TOP},
+ {RUNE_C(0x001BF2), RUNE_C(0x001BF3), INPC_RIGHT},
+ {RUNE_C(0x001C24), RUNE_C(0x001C26), INPC_RIGHT},
+ {RUNE_C(0x001C27), RUNE_C(0x001C28), INPC_LEFT},
+ {RUNE_C(0x001C29), RUNE_C(0x001C29), INPC_TOP_AND_LEFT},
+ {RUNE_C(0x001C2A), RUNE_C(0x001C2B), INPC_RIGHT},
+ {RUNE_C(0x001C2C), RUNE_C(0x001C2C), INPC_BOTTOM},
+ {RUNE_C(0x001C2D), RUNE_C(0x001C33), INPC_TOP},
+ {RUNE_C(0x001C34), RUNE_C(0x001C35), INPC_LEFT},
+ {RUNE_C(0x001C36), RUNE_C(0x001C36), INPC_TOP},
+ {RUNE_C(0x001C37), RUNE_C(0x001C37), INPC_BOTTOM},
+ {RUNE_C(0x001CD0), RUNE_C(0x001CD2), INPC_TOP},
+ {RUNE_C(0x001CD4), RUNE_C(0x001CD4), INPC_OVERSTRUCK},
+ {RUNE_C(0x001CD5), RUNE_C(0x001CD9), INPC_BOTTOM},
+ {RUNE_C(0x001CDA), RUNE_C(0x001CDB), INPC_TOP},
+ {RUNE_C(0x001CDC), RUNE_C(0x001CDF), INPC_BOTTOM},
+ {RUNE_C(0x001CE0), RUNE_C(0x001CE0), INPC_TOP},
+ {RUNE_C(0x001CE1), RUNE_C(0x001CE1), INPC_RIGHT},
+ {RUNE_C(0x001CE2), RUNE_C(0x001CE8), INPC_OVERSTRUCK},
+ {RUNE_C(0x001CED), RUNE_C(0x001CED), INPC_BOTTOM},
+ {RUNE_C(0x001CF4), RUNE_C(0x001CF4), INPC_TOP},
+ {RUNE_C(0x001CF7), RUNE_C(0x001CF7), INPC_RIGHT},
+ {RUNE_C(0x001DFB), RUNE_C(0x001DFB), INPC_TOP},
+ {RUNE_C(0x0020F0), RUNE_C(0x0020F0), INPC_TOP},
+ {RUNE_C(0x00A802), RUNE_C(0x00A802), INPC_TOP},
+ {RUNE_C(0x00A806), RUNE_C(0x00A806), INPC_TOP},
+ {RUNE_C(0x00A80B), RUNE_C(0x00A80B), INPC_TOP},
+ {RUNE_C(0x00A823), RUNE_C(0x00A824), INPC_RIGHT},
+ {RUNE_C(0x00A825), RUNE_C(0x00A825), INPC_BOTTOM},
+ {RUNE_C(0x00A826), RUNE_C(0x00A826), INPC_TOP},
+ {RUNE_C(0x00A827), RUNE_C(0x00A827), INPC_RIGHT},
+ {RUNE_C(0x00A82C), RUNE_C(0x00A82C), INPC_BOTTOM},
+ {RUNE_C(0x00A880), RUNE_C(0x00A881), INPC_RIGHT},
+ {RUNE_C(0x00A8B4), RUNE_C(0x00A8C3), INPC_RIGHT},
+ {RUNE_C(0x00A8C4), RUNE_C(0x00A8C4), INPC_BOTTOM},
+ {RUNE_C(0x00A8C5), RUNE_C(0x00A8C5), INPC_TOP},
+ {RUNE_C(0x00A8E0), RUNE_C(0x00A8F1), INPC_TOP},
+ {RUNE_C(0x00A8FF), RUNE_C(0x00A8FF), INPC_TOP},
+ {RUNE_C(0x00A926), RUNE_C(0x00A92A), INPC_TOP},
+ {RUNE_C(0x00A92B), RUNE_C(0x00A92D), INPC_BOTTOM},
+ {RUNE_C(0x00A947), RUNE_C(0x00A949), INPC_BOTTOM},
+ {RUNE_C(0x00A94A), RUNE_C(0x00A94A), INPC_TOP},
+ {RUNE_C(0x00A94B), RUNE_C(0x00A94E), INPC_BOTTOM},
+ {RUNE_C(0x00A94F), RUNE_C(0x00A951), INPC_TOP},
+ {RUNE_C(0x00A952), RUNE_C(0x00A953), INPC_RIGHT},
+ {RUNE_C(0x00A980), RUNE_C(0x00A982), INPC_TOP},
+ {RUNE_C(0x00A983), RUNE_C(0x00A983), INPC_RIGHT},
+ {RUNE_C(0x00A9B3), RUNE_C(0x00A9B3), INPC_TOP},
+ {RUNE_C(0x00A9B4), RUNE_C(0x00A9B5), INPC_RIGHT},
+ {RUNE_C(0x00A9B6), RUNE_C(0x00A9B7), INPC_TOP},
+ {RUNE_C(0x00A9B8), RUNE_C(0x00A9B9), INPC_BOTTOM},
+ {RUNE_C(0x00A9BA), RUNE_C(0x00A9BB), INPC_LEFT},
+ {RUNE_C(0x00A9BC), RUNE_C(0x00A9BC), INPC_TOP},
+ {RUNE_C(0x00A9BD), RUNE_C(0x00A9BD), INPC_BOTTOM},
+ {RUNE_C(0x00A9BE), RUNE_C(0x00A9BE), INPC_BOTTOM_AND_RIGHT},
+ {RUNE_C(0x00A9BF), RUNE_C(0x00A9BF), INPC_BOTTOM_AND_LEFT},
+ {RUNE_C(0x00A9C0), RUNE_C(0x00A9C0), INPC_BOTTOM_AND_RIGHT},
+ {RUNE_C(0x00A9E5), RUNE_C(0x00A9E5), INPC_TOP},
+ {RUNE_C(0x00AA29), RUNE_C(0x00AA2C), INPC_TOP},
+ {RUNE_C(0x00AA2D), RUNE_C(0x00AA2D), INPC_BOTTOM},
+ {RUNE_C(0x00AA2E), RUNE_C(0x00AA2E), INPC_TOP},
+ {RUNE_C(0x00AA2F), RUNE_C(0x00AA30), INPC_LEFT},
+ {RUNE_C(0x00AA31), RUNE_C(0x00AA31), INPC_TOP},
+ {RUNE_C(0x00AA32), RUNE_C(0x00AA32), INPC_BOTTOM},
+ {RUNE_C(0x00AA33), RUNE_C(0x00AA33), INPC_RIGHT},
+ {RUNE_C(0x00AA34), RUNE_C(0x00AA34), INPC_LEFT},
+ {RUNE_C(0x00AA35), RUNE_C(0x00AA36), INPC_BOTTOM},
+ {RUNE_C(0x00AA43), RUNE_C(0x00AA43), INPC_TOP},
+ {RUNE_C(0x00AA4C), RUNE_C(0x00AA4C), INPC_TOP},
+ {RUNE_C(0x00AA4D), RUNE_C(0x00AA4D), INPC_RIGHT},
+ {RUNE_C(0x00AA7B), RUNE_C(0x00AA7B), INPC_RIGHT},
+ {RUNE_C(0x00AA7C), RUNE_C(0x00AA7C), INPC_TOP},
+ {RUNE_C(0x00AA7D), RUNE_C(0x00AA7D), INPC_RIGHT},
+ {RUNE_C(0x00AAB0), RUNE_C(0x00AAB0), INPC_TOP},
+ {RUNE_C(0x00AAB1), RUNE_C(0x00AAB1), INPC_RIGHT},
+ {RUNE_C(0x00AAB2), RUNE_C(0x00AAB3), INPC_TOP},
+ {RUNE_C(0x00AAB4), RUNE_C(0x00AAB4), INPC_BOTTOM},
+ {RUNE_C(0x00AAB5), RUNE_C(0x00AAB6), INPC_VISUAL_ORDER_LEFT},
+ {RUNE_C(0x00AAB7), RUNE_C(0x00AAB8), INPC_TOP},
+ {RUNE_C(0x00AAB9), RUNE_C(0x00AAB9), INPC_VISUAL_ORDER_LEFT},
+ {RUNE_C(0x00AABA), RUNE_C(0x00AABA), INPC_RIGHT},
+ {RUNE_C(0x00AABB), RUNE_C(0x00AABC), INPC_VISUAL_ORDER_LEFT},
+ {RUNE_C(0x00AABD), RUNE_C(0x00AABD), INPC_RIGHT},
+ {RUNE_C(0x00AABE), RUNE_C(0x00AABF), INPC_TOP},
+ {RUNE_C(0x00AAC1), RUNE_C(0x00AAC1), INPC_TOP},
+ {RUNE_C(0x00AAEB), RUNE_C(0x00AAEB), INPC_LEFT},
+ {RUNE_C(0x00AAEC), RUNE_C(0x00AAEC), INPC_BOTTOM},
+ {RUNE_C(0x00AAED), RUNE_C(0x00AAED), INPC_TOP},
+ {RUNE_C(0x00AAEE), RUNE_C(0x00AAEE), INPC_LEFT},
+ {RUNE_C(0x00AAEF), RUNE_C(0x00AAEF), INPC_RIGHT},
+ {RUNE_C(0x00AAF5), RUNE_C(0x00AAF5), INPC_RIGHT},
+ {RUNE_C(0x00ABE3), RUNE_C(0x00ABE4), INPC_RIGHT},
+ {RUNE_C(0x00ABE5), RUNE_C(0x00ABE5), INPC_TOP},
+ {RUNE_C(0x00ABE6), RUNE_C(0x00ABE7), INPC_RIGHT},
+ {RUNE_C(0x00ABE8), RUNE_C(0x00ABE8), INPC_BOTTOM},
+ {RUNE_C(0x00ABE9), RUNE_C(0x00ABEA), INPC_RIGHT},
+ {RUNE_C(0x00ABEC), RUNE_C(0x00ABEC), INPC_RIGHT},
+ {RUNE_C(0x00ABED), RUNE_C(0x00ABED), INPC_BOTTOM},
+ {RUNE_C(0x010A01), RUNE_C(0x010A01), INPC_OVERSTRUCK},
+ {RUNE_C(0x010A02), RUNE_C(0x010A03), INPC_BOTTOM},
+ {RUNE_C(0x010A05), RUNE_C(0x010A05), INPC_TOP},
+ {RUNE_C(0x010A06), RUNE_C(0x010A06), INPC_OVERSTRUCK},
+ {RUNE_C(0x010A0C), RUNE_C(0x010A0E), INPC_BOTTOM},
+ {RUNE_C(0x010A0F), RUNE_C(0x010A0F), INPC_TOP},
+ {RUNE_C(0x010A38), RUNE_C(0x010A38), INPC_TOP},
+ {RUNE_C(0x010A39), RUNE_C(0x010A3A), INPC_BOTTOM},
+ {RUNE_C(0x011000), RUNE_C(0x011000), INPC_RIGHT},
+ {RUNE_C(0x011001), RUNE_C(0x011001), INPC_TOP},
+ {RUNE_C(0x011002), RUNE_C(0x011002), INPC_RIGHT},
+ {RUNE_C(0x011038), RUNE_C(0x01103B), INPC_TOP},
+ {RUNE_C(0x01103C), RUNE_C(0x011041), INPC_BOTTOM},
+ {RUNE_C(0x011042), RUNE_C(0x011046), INPC_TOP},
+ {RUNE_C(0x011070), RUNE_C(0x011070), INPC_TOP},
+ {RUNE_C(0x011073), RUNE_C(0x011074), INPC_TOP},
+ {RUNE_C(0x011080), RUNE_C(0x011081), INPC_TOP},
+ {RUNE_C(0x011082), RUNE_C(0x011082), INPC_RIGHT},
+ {RUNE_C(0x0110B0), RUNE_C(0x0110B0), INPC_RIGHT},
+ {RUNE_C(0x0110B1), RUNE_C(0x0110B1), INPC_LEFT},
+ {RUNE_C(0x0110B2), RUNE_C(0x0110B2), INPC_RIGHT},
+ {RUNE_C(0x0110B3), RUNE_C(0x0110B4), INPC_BOTTOM},
+ {RUNE_C(0x0110B5), RUNE_C(0x0110B6), INPC_TOP},
+ {RUNE_C(0x0110B7), RUNE_C(0x0110B8), INPC_RIGHT},
+ {RUNE_C(0x0110B9), RUNE_C(0x0110BA), INPC_BOTTOM},
+ {RUNE_C(0x0110C2), RUNE_C(0x0110C2), INPC_BOTTOM},
+ {RUNE_C(0x011100), RUNE_C(0x011102), INPC_TOP},
+ {RUNE_C(0x011127), RUNE_C(0x011129), INPC_TOP},
+ {RUNE_C(0x01112A), RUNE_C(0x01112B), INPC_BOTTOM},
+ {RUNE_C(0x01112C), RUNE_C(0x01112C), INPC_LEFT},
+ {RUNE_C(0x01112D), RUNE_C(0x01112D), INPC_TOP},
+ {RUNE_C(0x01112E), RUNE_C(0x01112F), INPC_TOP_AND_BOTTOM},
+ {RUNE_C(0x011130), RUNE_C(0x011130), INPC_TOP},
+ {RUNE_C(0x011131), RUNE_C(0x011132), INPC_BOTTOM},
+ {RUNE_C(0x011134), RUNE_C(0x011134), INPC_TOP},
+ {RUNE_C(0x011145), RUNE_C(0x011146), INPC_RIGHT},
+ {RUNE_C(0x011173), RUNE_C(0x011173), INPC_BOTTOM},
+ {RUNE_C(0x011180), RUNE_C(0x011181), INPC_TOP},
+ {RUNE_C(0x011182), RUNE_C(0x011182), INPC_RIGHT},
+ {RUNE_C(0x0111B3), RUNE_C(0x0111B3), INPC_RIGHT},
+ {RUNE_C(0x0111B4), RUNE_C(0x0111B4), INPC_LEFT},
+ {RUNE_C(0x0111B5), RUNE_C(0x0111B5), INPC_RIGHT},
+ {RUNE_C(0x0111B6), RUNE_C(0x0111BB), INPC_BOTTOM},
+ {RUNE_C(0x0111BC), RUNE_C(0x0111BE), INPC_TOP},
+ {RUNE_C(0x0111BF), RUNE_C(0x0111BF), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x0111C0), RUNE_C(0x0111C0), INPC_RIGHT},
+ {RUNE_C(0x0111C2), RUNE_C(0x0111C3), INPC_TOP},
+ {RUNE_C(0x0111C9), RUNE_C(0x0111CA), INPC_BOTTOM},
+ {RUNE_C(0x0111CB), RUNE_C(0x0111CB), INPC_TOP},
+ {RUNE_C(0x0111CC), RUNE_C(0x0111CC), INPC_BOTTOM},
+ {RUNE_C(0x0111CE), RUNE_C(0x0111CE), INPC_LEFT},
+ {RUNE_C(0x0111CF), RUNE_C(0x0111CF), INPC_TOP},
+ {RUNE_C(0x01122C), RUNE_C(0x01122E), INPC_RIGHT},
+ {RUNE_C(0x01122F), RUNE_C(0x01122F), INPC_BOTTOM},
+ {RUNE_C(0x011230), RUNE_C(0x011231), INPC_TOP},
+ {RUNE_C(0x011232), RUNE_C(0x011233), INPC_TOP_AND_RIGHT},
+ {RUNE_C(0x011234), RUNE_C(0x011234), INPC_TOP},
+ {RUNE_C(0x011235), RUNE_C(0x011235), INPC_RIGHT},
+ {RUNE_C(0x011236), RUNE_C(0x011237), INPC_TOP},
+ {RUNE_C(0x01123E), RUNE_C(0x01123E), INPC_TOP},
+ {RUNE_C(0x011241), RUNE_C(0x011241), INPC_BOTTOM},
+ {RUNE_C(0x0112DF), RUNE_C(0x0112DF), INPC_TOP},
+ {RUNE_C(0x0112E0), RUNE_C(0x0112E0), INPC_RIGHT},
+ {RUNE_C(0x0112E1), RUNE_C(0x0112E1), INPC_LEFT},
+ {RUNE_C(0x0112E2), RUNE_C(0x0112E2), INPC_RIGHT},
+ {RUNE_C(0x0112E3), RUNE_C(0x0112E4), INPC_BOTTOM},
+ {RUNE_C(0x0112E5), RUNE_C(0x0112E8), INPC_TOP},
+ {RUNE_C(0x0112E9), RUNE_C(0x0112EA), INPC_BOTTOM},
+ {RUNE_C(0x011300), RUNE_C(0x011301), INPC_TOP},
+ {RUNE_C(0x011302), RUNE_C(0x011303), INPC_RIGHT},
+ {RUNE_C(0x01133B), RUNE_C(0x01133C), INPC_BOTTOM},
+ {RUNE_C(0x01133E), RUNE_C(0x01133F), INPC_RIGHT},
+ {RUNE_C(0x011340), RUNE_C(0x011340), INPC_TOP},
+ {RUNE_C(0x011341), RUNE_C(0x011344), INPC_RIGHT},
+ {RUNE_C(0x011347), RUNE_C(0x011348), INPC_LEFT},
+ {RUNE_C(0x01134B), RUNE_C(0x01134C), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x01134D), RUNE_C(0x01134D), INPC_RIGHT},
+ {RUNE_C(0x011357), RUNE_C(0x011357), INPC_RIGHT},
+ {RUNE_C(0x011362), RUNE_C(0x011363), INPC_RIGHT},
+ {RUNE_C(0x011366), RUNE_C(0x01136C), INPC_TOP},
+ {RUNE_C(0x011370), RUNE_C(0x011374), INPC_TOP},
+ {RUNE_C(0x011435), RUNE_C(0x011435), INPC_RIGHT},
+ {RUNE_C(0x011436), RUNE_C(0x011436), INPC_LEFT},
+ {RUNE_C(0x011437), RUNE_C(0x011437), INPC_RIGHT},
+ {RUNE_C(0x011438), RUNE_C(0x01143D), INPC_BOTTOM},
+ {RUNE_C(0x01143E), RUNE_C(0x01143F), INPC_TOP},
+ {RUNE_C(0x011440), RUNE_C(0x011441), INPC_RIGHT},
+ {RUNE_C(0x011442), RUNE_C(0x011442), INPC_BOTTOM},
+ {RUNE_C(0x011443), RUNE_C(0x011444), INPC_TOP},
+ {RUNE_C(0x011445), RUNE_C(0x011445), INPC_RIGHT},
+ {RUNE_C(0x011446), RUNE_C(0x011446), INPC_BOTTOM},
+ {RUNE_C(0x01145E), RUNE_C(0x01145E), INPC_TOP},
+ {RUNE_C(0x0114B0), RUNE_C(0x0114B0), INPC_RIGHT},
+ {RUNE_C(0x0114B1), RUNE_C(0x0114B1), INPC_LEFT},
+ {RUNE_C(0x0114B2), RUNE_C(0x0114B2), INPC_RIGHT},
+ {RUNE_C(0x0114B3), RUNE_C(0x0114B8), INPC_BOTTOM},
+ {RUNE_C(0x0114B9), RUNE_C(0x0114B9), INPC_LEFT},
+ {RUNE_C(0x0114BA), RUNE_C(0x0114BA), INPC_TOP},
+ {RUNE_C(0x0114BB), RUNE_C(0x0114BB), INPC_TOP_AND_LEFT},
+ {RUNE_C(0x0114BC), RUNE_C(0x0114BC), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x0114BD), RUNE_C(0x0114BD), INPC_RIGHT},
+ {RUNE_C(0x0114BE), RUNE_C(0x0114BE), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x0114BF), RUNE_C(0x0114C0), INPC_TOP},
+ {RUNE_C(0x0114C1), RUNE_C(0x0114C1), INPC_RIGHT},
+ {RUNE_C(0x0114C2), RUNE_C(0x0114C3), INPC_BOTTOM},
+ {RUNE_C(0x0115AF), RUNE_C(0x0115AF), INPC_RIGHT},
+ {RUNE_C(0x0115B0), RUNE_C(0x0115B0), INPC_LEFT},
+ {RUNE_C(0x0115B1), RUNE_C(0x0115B1), INPC_RIGHT},
+ {RUNE_C(0x0115B2), RUNE_C(0x0115B5), INPC_BOTTOM},
+ {RUNE_C(0x0115B8), RUNE_C(0x0115B8), INPC_LEFT},
+ {RUNE_C(0x0115B9), RUNE_C(0x0115B9), INPC_TOP_AND_LEFT},
+ {RUNE_C(0x0115BA), RUNE_C(0x0115BA), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x0115BB), RUNE_C(0x0115BB), INPC_TOP_AND_LEFT_AND_RIGHT},
+ {RUNE_C(0x0115BC), RUNE_C(0x0115BD), INPC_TOP},
+ {RUNE_C(0x0115BE), RUNE_C(0x0115BE), INPC_RIGHT},
+ {RUNE_C(0x0115BF), RUNE_C(0x0115C0), INPC_BOTTOM},
+ {RUNE_C(0x0115DC), RUNE_C(0x0115DD), INPC_BOTTOM},
+ {RUNE_C(0x011630), RUNE_C(0x011632), INPC_RIGHT},
+ {RUNE_C(0x011633), RUNE_C(0x011638), INPC_BOTTOM},
+ {RUNE_C(0x011639), RUNE_C(0x01163A), INPC_TOP},
+ {RUNE_C(0x01163B), RUNE_C(0x01163C), INPC_RIGHT},
+ {RUNE_C(0x01163D), RUNE_C(0x01163D), INPC_TOP},
+ {RUNE_C(0x01163E), RUNE_C(0x01163E), INPC_RIGHT},
+ {RUNE_C(0x01163F), RUNE_C(0x01163F), INPC_BOTTOM},
+ {RUNE_C(0x011640), RUNE_C(0x011640), INPC_TOP},
+ {RUNE_C(0x0116AB), RUNE_C(0x0116AB), INPC_TOP},
+ {RUNE_C(0x0116AC), RUNE_C(0x0116AC), INPC_RIGHT},
+ {RUNE_C(0x0116AD), RUNE_C(0x0116AD), INPC_TOP},
+ {RUNE_C(0x0116AE), RUNE_C(0x0116AE), INPC_LEFT},
+ {RUNE_C(0x0116AF), RUNE_C(0x0116AF), INPC_RIGHT},
+ {RUNE_C(0x0116B0), RUNE_C(0x0116B1), INPC_BOTTOM},
+ {RUNE_C(0x0116B2), RUNE_C(0x0116B5), INPC_TOP},
+ {RUNE_C(0x0116B6), RUNE_C(0x0116B6), INPC_RIGHT},
+ {RUNE_C(0x0116B7), RUNE_C(0x0116B7), INPC_BOTTOM},
+ {RUNE_C(0x01171D), RUNE_C(0x01171D), INPC_BOTTOM},
+ {RUNE_C(0x01171E), RUNE_C(0x01171E), INPC_TOP_AND_BOTTOM_AND_LEFT},
+ {RUNE_C(0x01171F), RUNE_C(0x01171F), INPC_TOP},
+ {RUNE_C(0x011720), RUNE_C(0x011721), INPC_RIGHT},
+ {RUNE_C(0x011722), RUNE_C(0x011723), INPC_TOP},
+ {RUNE_C(0x011724), RUNE_C(0x011725), INPC_BOTTOM},
+ {RUNE_C(0x011726), RUNE_C(0x011726), INPC_LEFT},
+ {RUNE_C(0x011727), RUNE_C(0x011727), INPC_TOP},
+ {RUNE_C(0x011728), RUNE_C(0x011728), INPC_BOTTOM},
+ {RUNE_C(0x011729), RUNE_C(0x01172B), INPC_TOP},
+ {RUNE_C(0x01182C), RUNE_C(0x01182C), INPC_RIGHT},
+ {RUNE_C(0x01182D), RUNE_C(0x01182D), INPC_LEFT},
+ {RUNE_C(0x01182E), RUNE_C(0x01182E), INPC_RIGHT},
+ {RUNE_C(0x01182F), RUNE_C(0x011832), INPC_BOTTOM},
+ {RUNE_C(0x011833), RUNE_C(0x011837), INPC_TOP},
+ {RUNE_C(0x011838), RUNE_C(0x011838), INPC_RIGHT},
+ {RUNE_C(0x011839), RUNE_C(0x01183A), INPC_BOTTOM},
+ {RUNE_C(0x011930), RUNE_C(0x011934), INPC_RIGHT},
+ {RUNE_C(0x011935), RUNE_C(0x011935), INPC_LEFT},
+ {RUNE_C(0x011937), RUNE_C(0x011937), INPC_LEFT},
+ {RUNE_C(0x011938), RUNE_C(0x011938), INPC_LEFT_AND_RIGHT},
+ {RUNE_C(0x01193B), RUNE_C(0x01193C), INPC_TOP},
+ {RUNE_C(0x01193D), RUNE_C(0x01193D), INPC_RIGHT},
+ {RUNE_C(0x01193F), RUNE_C(0x01193F), INPC_TOP},
+ {RUNE_C(0x011940), RUNE_C(0x011940), INPC_RIGHT},
+ {RUNE_C(0x011941), RUNE_C(0x011941), INPC_TOP},
+ {RUNE_C(0x011942), RUNE_C(0x011942), INPC_BOTTOM_AND_RIGHT},
+ {RUNE_C(0x011943), RUNE_C(0x011943), INPC_BOTTOM},
+ {RUNE_C(0x0119D1), RUNE_C(0x0119D1), INPC_RIGHT},
+ {RUNE_C(0x0119D2), RUNE_C(0x0119D2), INPC_LEFT},
+ {RUNE_C(0x0119D3), RUNE_C(0x0119D3), INPC_RIGHT},
+ {RUNE_C(0x0119D4), RUNE_C(0x0119D7), INPC_BOTTOM},
+ {RUNE_C(0x0119DA), RUNE_C(0x0119DB), INPC_TOP},
+ {RUNE_C(0x0119DC), RUNE_C(0x0119DF), INPC_RIGHT},
+ {RUNE_C(0x0119E0), RUNE_C(0x0119E0), INPC_BOTTOM},
+ {RUNE_C(0x0119E4), RUNE_C(0x0119E4), INPC_LEFT},
+ {RUNE_C(0x011A01), RUNE_C(0x011A01), INPC_TOP},
+ {RUNE_C(0x011A02), RUNE_C(0x011A03), INPC_BOTTOM},
+ {RUNE_C(0x011A04), RUNE_C(0x011A09), INPC_TOP},
+ {RUNE_C(0x011A0A), RUNE_C(0x011A0A), INPC_BOTTOM},
+ {RUNE_C(0x011A33), RUNE_C(0x011A34), INPC_BOTTOM},
+ {RUNE_C(0x011A35), RUNE_C(0x011A38), INPC_TOP},
+ {RUNE_C(0x011A39), RUNE_C(0x011A39), INPC_RIGHT},
+ {RUNE_C(0x011A3A), RUNE_C(0x011A3A), INPC_TOP},
+ {RUNE_C(0x011A3B), RUNE_C(0x011A3E), INPC_BOTTOM},
+ {RUNE_C(0x011A51), RUNE_C(0x011A51), INPC_TOP},
+ {RUNE_C(0x011A52), RUNE_C(0x011A53), INPC_BOTTOM},
+ {RUNE_C(0x011A54), RUNE_C(0x011A56), INPC_TOP},
+ {RUNE_C(0x011A57), RUNE_C(0x011A58), INPC_RIGHT},
+ {RUNE_C(0x011A59), RUNE_C(0x011A5B), INPC_BOTTOM},
+ {RUNE_C(0x011A84), RUNE_C(0x011A89), INPC_TOP},
+ {RUNE_C(0x011A8A), RUNE_C(0x011A95), INPC_BOTTOM},
+ {RUNE_C(0x011A96), RUNE_C(0x011A96), INPC_TOP},
+ {RUNE_C(0x011A97), RUNE_C(0x011A97), INPC_RIGHT},
+ {RUNE_C(0x011A98), RUNE_C(0x011A98), INPC_TOP},
+ {RUNE_C(0x011C2F), RUNE_C(0x011C2F), INPC_RIGHT},
+ {RUNE_C(0x011C30), RUNE_C(0x011C31), INPC_TOP},
+ {RUNE_C(0x011C32), RUNE_C(0x011C36), INPC_BOTTOM},
+ {RUNE_C(0x011C38), RUNE_C(0x011C3D), INPC_TOP},
+ {RUNE_C(0x011C3E), RUNE_C(0x011C3E), INPC_RIGHT},
+ {RUNE_C(0x011C3F), RUNE_C(0x011C3F), INPC_BOTTOM},
+ {RUNE_C(0x011C92), RUNE_C(0x011CA7), INPC_BOTTOM},
+ {RUNE_C(0x011CA9), RUNE_C(0x011CA9), INPC_RIGHT},
+ {RUNE_C(0x011CAA), RUNE_C(0x011CB0), INPC_BOTTOM},
+ {RUNE_C(0x011CB1), RUNE_C(0x011CB1), INPC_LEFT},
+ {RUNE_C(0x011CB2), RUNE_C(0x011CB2), INPC_BOTTOM},
+ {RUNE_C(0x011CB3), RUNE_C(0x011CB3), INPC_TOP},
+ {RUNE_C(0x011CB4), RUNE_C(0x011CB4), INPC_RIGHT},
+ {RUNE_C(0x011CB5), RUNE_C(0x011CB6), INPC_TOP},
+ {RUNE_C(0x011D31), RUNE_C(0x011D35), INPC_TOP},
+ {RUNE_C(0x011D36), RUNE_C(0x011D36), INPC_BOTTOM},
+ {RUNE_C(0x011D3A), RUNE_C(0x011D3A), INPC_TOP},
+ {RUNE_C(0x011D3C), RUNE_C(0x011D3D), INPC_TOP},
+ {RUNE_C(0x011D3F), RUNE_C(0x011D41), INPC_TOP},
+ {RUNE_C(0x011D42), RUNE_C(0x011D42), INPC_BOTTOM},
+ {RUNE_C(0x011D43), RUNE_C(0x011D43), INPC_TOP},
+ {RUNE_C(0x011D44), RUNE_C(0x011D44), INPC_BOTTOM},
+ {RUNE_C(0x011D46), RUNE_C(0x011D46), INPC_RIGHT},
+ {RUNE_C(0x011D47), RUNE_C(0x011D47), INPC_BOTTOM},
+ {RUNE_C(0x011D8A), RUNE_C(0x011D8E), INPC_RIGHT},
+ {RUNE_C(0x011D90), RUNE_C(0x011D91), INPC_TOP},
+ {RUNE_C(0x011D93), RUNE_C(0x011D94), INPC_RIGHT},
+ {RUNE_C(0x011D95), RUNE_C(0x011D95), INPC_TOP},
+ {RUNE_C(0x011D96), RUNE_C(0x011D96), INPC_RIGHT},
+ {RUNE_C(0x011EF3), RUNE_C(0x011EF3), INPC_TOP},
+ {RUNE_C(0x011EF4), RUNE_C(0x011EF4), INPC_BOTTOM},
+ {RUNE_C(0x011EF5), RUNE_C(0x011EF5), INPC_LEFT},
+ {RUNE_C(0x011EF6), RUNE_C(0x011EF6), INPC_RIGHT},
+ {RUNE_C(0x011F00), RUNE_C(0x011F02), INPC_TOP},
+ {RUNE_C(0x011F03), RUNE_C(0x011F03), INPC_RIGHT},
+ {RUNE_C(0x011F34), RUNE_C(0x011F35), INPC_RIGHT},
+ {RUNE_C(0x011F36), RUNE_C(0x011F37), INPC_TOP},
+ {RUNE_C(0x011F38), RUNE_C(0x011F3A), INPC_BOTTOM},
+ {RUNE_C(0x011F3E), RUNE_C(0x011F3F), INPC_LEFT},
+ {RUNE_C(0x011F40), RUNE_C(0x011F40), INPC_TOP},
+ {RUNE_C(0x011F41), RUNE_C(0x011F41), INPC_RIGHT},
+};
+
+_MLIB_DEFINE_BSEARCH(enum uprop_inpc, lookup, INPC_NA)
+
+enum uprop_inpc
+uprop_get_inpc(rune ch)
+{
+ return ch < lookup[0].lo ? INPC_NA : mlib_lookup(ch);
+}