12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340 |
- /* pr29.h --- Detect strings that are non-idempotent under NFKC in Unicode 3.2.
- Copyright (C) 2004-2024 Simon Josefsson
- This file is part of GNU Libidn.
- GNU Libidn is free software: you can redistribute it and/or
- modify it under the terms of either:
- * the GNU Lesser General Public License as published by the Free
- Software Foundation; either version 3 of the License, or (at
- your option) any later version.
- or
- * the GNU General Public License as published by the Free
- Software Foundation; either version 2 of the License, or (at
- your option) any later version.
- or both in parallel, as here.
- GNU Libidn is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
- You should have received copies of the GNU General Public License and
- the GNU Lesser General Public License along with this program. If
- not, see <https://www.gnu.org/licenses/>. */
- #include <config.h>
- #include "pr29.h"
- /* Get stringprep_utf8_to_ucs4. */
- #include <stringprep.h>
- /*
- * The tables used in this file was extracted by Simon Josefsson from
- * pr-29.html and DerivedCombiningClass-3.2.0.txt, as published by
- * Unicode Inc., for the GNU Libidn project.
- *
- */
- /* These are the characters with non-zero combination class, extracted
- from DerivedCombiningClass-3.2.0.txt. */
- static uint32_t nzcc[] = {
- /* 1 # Mn [5] COMBINING TILDE OVERLAY..
- * ..COMBINING LONG SOLIDUS OVERLAY */
- 0x0334,
- 0x0335,
- 0x0336,
- 0x0337,
- 0x0338,
- /* 1 # Mn [2] COMBINING LONG VERTICAL LINE OVERLAY..
- * ..COMBINING SHORT VERTICAL LINE OVERLAY */
- 0x20D2,
- 0x20D3,
- /* 1 # Mn [3] COMBINING RING OVERLAY..
- * ..COMBINING ANTICLOCKWISE RING OVERLAY */
- 0x20D8,
- 0x20D9,
- 0x20DA,
- /* 1 # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY..
- * ..COMBINING DOUBLE VERTICAL STROKE OVERLAY */
- 0x20E5,
- 0x20E6,
- /* 1 # Mn COMBINING LEFTWARDS ARROW OVERLAY */
- 0x20EA,
- /* 1 # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..
- * ..MUSICAL SYMBOL COMBINING TREMOLO-3 */
- 0x1D167,
- 0x1D168,
- 0x1D169,
- /* 7 # Mn DEVANAGARI SIGN NUKTA */
- 0x093C,
- /* 7 # Mn BENGALI SIGN NUKTA */
- 0x09BC,
- /* 7 # Mn GURMUKHI SIGN NUKTA */
- 0x0A3C,
- /* 7 # Mn GUJARATI SIGN NUKTA */
- 0x0ABC,
- /* 7 # Mn ORIYA SIGN NUKTA */
- 0x0B3C,
- /* 7 # Mn MYANMAR SIGN DOT BELOW */
- 0x1037,
- /* 8 # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..
- * ..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
- 0x3099,
- 0x309A,
- /* 9 # Mn DEVANAGARI SIGN VIRAMA */
- 0x094D,
- /* 9 # Mn BENGALI SIGN VIRAMA */
- 0x09CD,
- /* 9 # Mn GURMUKHI SIGN VIRAMA */
- 0x0A4D,
- /* 9 # Mn GUJARATI SIGN VIRAMA */
- 0x0ACD,
- /* 9 # Mn ORIYA SIGN VIRAMA */
- 0x0B4D,
- /* 9 # Mn TAMIL SIGN VIRAMA */
- 0x0BCD,
- /* 9 # Mn TELUGU SIGN VIRAMA */
- 0x0C4D,
- /* 9 # Mn KANNADA SIGN VIRAMA */
- 0x0CCD,
- /* 9 # Mn MALAYALAM SIGN VIRAMA */
- 0x0D4D,
- /* 9 # Mn SINHALA SIGN AL-LAKUNA */
- 0x0DCA,
- /* 9 # Mn THAI CHARACTER PHINTHU */
- 0x0E3A,
- /* 9 # Mn TIBETAN MARK HALANTA */
- 0x0F84,
- /* 9 # Mn MYANMAR SIGN VIRAMA */
- 0x1039,
- /* 9 # Mn TAGALOG SIGN VIRAMA */
- 0x1714,
- /* 9 # Mn HANUNOO SIGN PAMUDPOD */
- 0x1734,
- /* 9 # Mn KHMER SIGN COENG */
- 0x17D2,
- /* 10 # Mn HEBREW POINT SHEVA */
- 0x05B0,
- /* 11 # Mn HEBREW POINT HATAF SEGOL */
- 0x05B1,
- /* 12 # Mn HEBREW POINT HATAF PATAH */
- 0x05B2,
- /* 13 # Mn HEBREW POINT HATAF QAMATS */
- 0x05B3,
- /* 14 # Mn HEBREW POINT HIRIQ */
- 0x05B4,
- /* 15 # Mn HEBREW POINT TSERE */
- 0x05B5,
- /* 16 # Mn HEBREW POINT SEGOL */
- 0x05B6,
- /* 17 # Mn HEBREW POINT PATAH */
- 0x05B7,
- /* 18 # Mn HEBREW POINT QAMATS */
- 0x05B8,
- /* 19 # Mn HEBREW POINT HOLAM */
- 0x05B9,
- /* 20 # Mn HEBREW POINT QUBUTS */
- 0x05BB,
- /* 21 # Mn HEBREW POINT DAGESH OR MAPIQ */
- 0x05BC,
- /* 22 # Mn HEBREW POINT METEG */
- 0x05BD,
- /* 23 # Mn HEBREW POINT RAFE */
- 0x05BF,
- /* 24 # Mn HEBREW POINT SHIN DOT */
- 0x05C1,
- /* 25 # Mn HEBREW POINT SIN DOT */
- 0x05C2,
- /* 26 # Mn HEBREW POINT JUDEO-SPANISH VARIKA */
- 0xFB1E,
- /* 27 # Mn ARABIC FATHATAN */
- 0x064B,
- /* 28 # Mn ARABIC DAMMATAN */
- 0x064C,
- /* 29 # Mn ARABIC KASRATAN */
- 0x064D,
- /* 30 # Mn ARABIC FATHA */
- 0x064E,
- /* 31 # Mn ARABIC DAMMA */
- 0x064F,
- /* 32 # Mn ARABIC KASRA */
- 0x0650,
- /* 33 # Mn ARABIC SHADDA */
- 0x0651,
- /* 34 # Mn ARABIC SUKUN */
- 0x0652,
- /* 35 # Mn ARABIC LETTER SUPERSCRIPT ALEF */
- 0x0670,
- /* 36 # Mn SYRIAC LETTER SUPERSCRIPT ALAPH */
- 0x0711,
- /* 84 # Mn TELUGU LENGTH MARK */
- 0x0C55,
- /* 91 # Mn TELUGU AI LENGTH MARK */
- 0x0C56,
- /* 103 # Mn [2] THAI CHARACTER SARA U..
- * ..THAI CHARACTER SARA UU */
- 0x0E38,
- 0x0E39,
- /* 107 # Mn [4] THAI CHARACTER MAI EK..
- * ..THAI CHARACTER MAI CHATTAWA */
- 0x0E48,
- 0x0E49,
- 0x0E4A,
- 0x04EB,
- /* 118 # Mn [2] LAO VOWEL SIGN U..
- * ..LAO VOWEL SIGN UU */
- 0x0EB8,
- 0x0EB9,
- /* 122 # Mn [4] LAO TONE MAI EK..
- * ..LAO TONE MAI CATAWA */
- 0x0EC8,
- 0x0EC9,
- 0x0ECA,
- 0x0ECB,
- /* 129 # Mn TIBETAN VOWEL SIGN AA */
- 0x0F71,
- /* 130 # Mn TIBETAN VOWEL SIGN I */
- 0x0F72,
- /* 130 # Mn [4] TIBETAN VOWEL SIGN E..
- * ..TIBETAN VOWEL SIGN OO */
- 0x0F7A,
- 0x0F7B,
- 0x0F7C,
- 0x0F7D,
- /* 130 # Mn TIBETAN VOWEL SIGN REVERSED I */
- 0x0F80,
- /* 132 # Mn TIBETAN VOWEL SIGN U */
- 0x0F74,
- /* 202 # Mn [2] COMBINING PALATALIZED HOOK BELOW..
- * ..COMBINING RETROFLEX HOOK BELOW */
- 0x0321,
- 0x0322,
- /* 202 # Mn [2] COMBINING CEDILLA..
- * ..COMBINING OGONEK */
- 0x0327,
- 0x0328,
- /* 216 # Mn COMBINING HORN */
- 0x031B,
- /* 216 # Mn TIBETAN MARK TSA -PHRU */
- 0x0F39,
- /* 216 # Mc [2] MUSICAL SYMBOL COMBINING STEM..
- * ..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM */
- 0x1D165,
- 0x1D166,
- /* 216 # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..
- * ..MUSICAL SYMBOL COMBINING FLAG-5 */
- 0x1D16E,
- 0x1D16F,
- 0x1D170,
- 0x1D171,
- 0x1D172,
- /* 218 # Mn IDEOGRAPHIC LEVEL TONE MARK */
- 0x302A,
- /* 220 # Mn [4] COMBINING GRAVE ACCENT BELOW..
- * ..COMBINING RIGHT TACK BELOW */
- 0x0316,
- 0x0317,
- 0x0318,
- 0x0319,
- /* 220 # Mn [5] COMBINING LEFT HALF RING BELOW..
- * ..COMBINING MINUS SIGN BELOW */
- 0x031C,
- 0x031D,
- 0x031E,
- 0x031F,
- 0x0320,
- /* 220 # Mn [4] COMBINING DOT BELOW..
- * ..COMBINING COMMA BELOW */
- 0x0323,
- 0x0324,
- 0x0325,
- 0x0326,
- /* 220 # Mn [11] COMBINING VERTICAL LINE BELOW..
- * ..COMBINING DOUBLE LOW LINE */
- 0x0329,
- 0x032A,
- 0x032B,
- 0x032C,
- 0x032D,
- 0x032E,
- 0x032F,
- 0x0330,
- 0x0331,
- 0x0332,
- 0x0333,
- /* 220 # Mn [4] COMBINING RIGHT HALF RING BELOW..
- * ..COMBINING SEAGULL BELOW */
- 0x0339,
- 0x033A,
- 0x033B,
- 0x033C,
- /* 220 # Mn [3] COMBINING EQUALS SIGN BELOW..
- * ..COMBINING LEFT ANGLE BELOW */
- 0x0347,
- 0x0348,
- 0x0349,
- /* 220 # Mn [2] COMBINING LEFT RIGHT ARROW BELOW..
- * ..COMBINING UPWARDS ARROW BELOW */
- 0x034D,
- 0x034E,
- /* 220 # Mn HEBREW ACCENT ETNAHTA */
- 0x0591,
- /* 220 # Mn HEBREW ACCENT TIPEHA */
- 0x0596,
- /* 220 # Mn HEBREW ACCENT TEVIR */
- 0x059B,
- /* 220 # Mn [5] HEBREW ACCENT MUNAH..
- * ..HEBREW ACCENT DARGA */
- 0x05A3,
- 0x05A4,
- 0x05A5,
- 0x05A6,
- 0x05A7,
- /* 220 # Mn HEBREW ACCENT YERAH BEN YOMO */
- 0x05AA,
- /* 220 # Mn ARABIC HAMZA BELOW */
- 0x0655,
- /* 220 # Mn ARABIC SMALL LOW SEEN */
- 0x06E3,
- /* 220 # Mn ARABIC EMPTY CENTRE LOW STOP */
- 0x06EA,
- /* 220 # Mn ARABIC SMALL LOW MEEM */
- 0x06ED,
- /* 220 # Mn SYRIAC PTHAHA BELOW */
- 0x0731,
- /* 220 # Mn SYRIAC ZQAPHA BELOW */
- 0x0734,
- /* 220 # Mn [3] SYRIAC RBASA BELOW..
- * ..SYRIAC DOTTED ZLAMA ANGULAR */
- 0x0737,
- 0x0738,
- 0x0739,
- /* 220 # Mn [2] SYRIAC HBASA BELOW..
- * ..SYRIAC HBASA-ESASA DOTTED */
- 0x073B,
- 0x073C,
- /* 220 # Mn SYRIAC ESASA BELOW */
- 0x073E,
- /* 220 # Mn SYRIAC RUKKAKHA */
- 0x0742,
- /* 220 # Mn SYRIAC TWO VERTICAL DOTS BELOW */
- 0x0744,
- /* 220 # Mn SYRIAC THREE DOTS BELOW */
- 0x0746,
- /* 220 # Mn SYRIAC OBLIQUE LINE BELOW */
- 0x0748,
- /* 220 # Mn DEVANAGARI STRESS SIGN ANUDATTA */
- 0x0952,
- /* 220 # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..
- * ..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS */
- 0x0F18,
- 0x0F19,
- /* 220 # Mn TIBETAN MARK NGAS BZUNG NYI ZLA */
- 0x0F35,
- /* 220 # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS */
- 0x0F37,
- /* 220 # Mn TIBETAN SYMBOL PADMA GDAN */
- 0x0FC6,
- /* 220 # Mn COMBINING TRIPLE UNDERDOT */
- 0x20E8,
- /* 220 # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..
- * ..MUSICAL SYMBOL COMBINING LOURE */
- 0x1D17B,
- 0x1D17C,
- 0x1D17D,
- 0x1D17E,
- 0x1D17F,
- 0x1D180,
- 0x1D181,
- 0x1D182,
- /* 220 # Mn [2] MUSICAL SYMBOL COMBINING DOUBLE TONGUE..
- * ..MUSICAL SYMBOL COMBINING TRIPLE TONGUE */
- 0x1D18A,
- 0x1D18B,
- /* 222 # Mn HEBREW ACCENT YETIV */
- 0x059A,
- /* 222 # Mn HEBREW ACCENT DEHI */
- 0x05AD,
- /* 222 # Mn IDEOGRAPHIC ENTERING TONE MARK */
- 0x302D,
- /* 224 # Mn [2] HANGUL SINGLE DOT TONE MARK..
- * ..HANGUL DOUBLE DOT TONE MARK */
- 0x302E,
- 0x302F,
- /* 226 # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT */
- 0x1D16D,
- /* 228 # Mn HEBREW ACCENT ZINOR */
- 0x05AE,
- /* 228 # Mn MONGOLIAN LETTER ALI GALI DAGALGA */
- 0x18A9,
- /* 228 # Mn IDEOGRAPHIC RISING TONE MARK */
- 0x302B,
- /* 230 # Mn [21] COMBINING GRAVE ACCENT..
- * ..COMBINING REVERSED COMMA ABOVE */
- 0x0300,
- 0x0301,
- 0x0302,
- 0x0303,
- 0x0304,
- 0x0305,
- 0x0306,
- 0x0307,
- 0x0308,
- 0x0309,
- 0x030A,
- 0x030B,
- 0x030C,
- 0x030D,
- 0x030E,
- 0x030F,
- 0x0310,
- 0x0311,
- 0x0312,
- 0x0313,
- 0x0314,
- /* 230 # Mn [8] COMBINING X ABOVE..
- * ..COMBINING GREEK DIALYTIKA TONOS */
- 0x033D,
- 0x033E,
- 0x033F,
- 0x0340,
- 0x0341,
- 0x0342,
- 0x0343,
- 0x0344,
- /* 230 # Mn COMBINING BRIDGE ABOVE */
- 0x0346,
- /* 230 # Mn [3] COMBINING NOT TILDE ABOVE..
- * ..COMBINING ALMOST EQUAL TO ABOVE */
- 0x034A,
- 0x034B,
- 0x034C,
- /* 230 # Mn [13] COMBINING LATIN SMALL LETTER A..
- * ..COMBINING LATIN SMALL LETTER X */
- 0x0363,
- 0x0364,
- 0x0365,
- 0x0366,
- 0x0367,
- 0x0368,
- 0x0369,
- 0x036A,
- 0x036B,
- 0x036C,
- 0x036D,
- 0x036E,
- 0x036F,
- /* 230 # Mn [4] COMBINING CYRILLIC TITLO..
- * ..COMBINING CYRILLIC PSILI PNEUMATA */
- 0x0483,
- 0x0484,
- 0x0485,
- 0x0486,
- /* 230 # Mn [4] HEBREW ACCENT SEGOL..
- * ..HEBREW ACCENT ZAQEF GADOL */
- 0x0592,
- 0x0593,
- 0x0594,
- 0x0595,
- /* 230 # Mn [3] HEBREW ACCENT REVIA..
- * ..HEBREW ACCENT PASHTA */
- 0x0597,
- 0x0598,
- 0x0599,
- /* 230 # Mn [6] HEBREW ACCENT GERESH..
- * ..HEBREW ACCENT PAZER */
- 0x059C,
- 0x059D,
- 0x059E,
- 0x059F,
- 0x05A0,
- 0x05A1,
- /* 230 # Mn [2] HEBREW ACCENT QADMA..
- * ..HEBREW ACCENT TELISHA QETANA */
- 0x05A8,
- 0x05A9,
- /* 230 # Mn [2] HEBREW ACCENT OLE..
- * ..HEBREW ACCENT ILUY */
- 0x05AB,
- 0x05AC,
- /* 230 # Mn HEBREW MARK MASORA CIRCLE */
- 0x05AF,
- /* 230 # Mn HEBREW MARK UPPER DOT */
- 0x05C4,
- /* 230 # Mn [2] ARABIC MADDAH ABOVE..
- * ..ARABIC HAMZA ABOVE */
- 0x0653,
- 0x0654,
- /* 230 # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..
- * ..ARABIC SMALL HIGH SEEN */
- 0x06D6,
- 0x06D7,
- 0x06D8,
- 0x06D9,
- 0x06DA,
- 0x06DB,
- 0x06DC,
- /* 230 # Mn [4] ARABIC SMALL HIGH ROUNDED ZERO..
- * ..ARABIC SMALL HIGH MEEM ISOLATED FORM */
- 0x06DF,
- 0x06E0,
- 0x06E1,
- 0x06E2,
- /* 230 # Mn ARABIC SMALL HIGH MADDA */
- 0x06E4,
- /* 230 # Mn [2] ARABIC SMALL HIGH YEH..
- * ..ARABIC SMALL HIGH NOON */
- 0x06E7,
- 0x06E8,
- /* 230 # Mn [2] ARABIC EMPTY CENTRE HIGH STOP..
- * ..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE */
- 0x06EB,
- 0x06EC,
- /* 230 # Mn SYRIAC PTHAHA ABOVE */
- 0x0730,
- /* 230 # Mn [2] SYRIAC PTHAHA DOTTED..
- * ..SYRIAC ZQAPHA ABOVE */
- 0x0732,
- 0x0733,
- /* 230 # Mn [2] SYRIAC ZQAPHA DOTTED..
- * ..SYRIAC RBASA ABOVE */
- 0x0735,
- 0x0736,
- /* 230 # Mn SYRIAC HBASA ABOVE */
- 0x073A,
- /* 230 # Mn SYRIAC ESASA ABOVE */
- 0x073D,
- /* 230 # Mn [3] SYRIAC RWAHA..
- * ..SYRIAC QUSHSHAYA */
- 0x073F,
- 0x0740,
- 0x0741,
- /* 230 # Mn SYRIAC TWO VERTICAL DOTS ABOVE */
- 0x0743,
- /* 230 # Mn SYRIAC THREE DOTS ABOVE */
- 0x0745,
- /* 230 # Mn SYRIAC OBLIQUE LINE ABOVE */
- 0x0747,
- /* 230 # Mn [2] SYRIAC MUSIC..
- * ..SYRIAC BARREKH */
- 0x0749,
- 0x074A,
- /* 230 # Mn DEVANAGARI STRESS SIGN UDATTA */
- 0x0951,
- /* 230 # Mn [2] DEVANAGARI GRAVE ACCENT..
- * ..DEVANAGARI ACUTE ACCENT */
- 0x0953,
- 0x0954,
- /* 230 # Mn [2] TIBETAN SIGN NYI ZLA NAA DA..
- * ..TIBETAN SIGN SNA LDAN */
- 0x0F82,
- 0x0F83,
- /* 230 # Mn [2] TIBETAN SIGN LCI RTAGS..
- * ..TIBETAN SIGN YANG RTAGS */
- 0x0F86,
- 0x0F87,
- /* 230 # Mn [2] COMBINING LEFT HARPOON ABOVE..
- * ..COMBINING RIGHT HARPOON ABOVE */
- 0x20D0,
- 0x20D1,
- /* 230 # Mn [4] COMBINING ANTICLOCKWISE ARROW ABOVE..
- * ..COMBINING RIGHT ARROW ABOVE */
- 0x20D4,
- 0x20D5,
- 0x20D6,
- 0x20D7,
- /* 230 # Mn [2] COMBINING THREE DOTS ABOVE..
- * ..COMBINING FOUR DOTS ABOVE */
- 0x20DB,
- 0x20DC,
- /* 230 # Mn COMBINING LEFT RIGHT ARROW ABOVE */
- 0x20E1,
- /* 230 # Mn COMBINING ANNUITY SYMBOL */
- 0x20E7,
- /* 230 # Mn COMBINING WIDE BRIDGE ABOVE */
- 0x20E9,
- /* 230 # Mn [4] COMBINING LIGATURE LEFT HALF..
- * ..COMBINING DOUBLE TILDE RIGHT HALF */
- 0xFE20,
- 0xFE21,
- 0xFE22,
- 0xFE23,
- /* 230 # Mn [5] MUSICAL SYMBOL COMBINING DOIT..
- * ..MUSICAL SYMBOL COMBINING BEND */
- 0x1D185,
- 0x1D186,
- 0x1D187,
- 0x1D188,
- 0x1D189,
- /* 230 # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..
- * ..MUSICAL SYMBOL COMBINING SNAP PIZZICATO */
- 0x1D1AA,
- 0x1D1AB,
- 0x1D1AC,
- 0x1D1AD,
- /* 232 # Mn COMBINING COMMA ABOVE RIGHT */
- 0x0315,
- /* 232 # Mn COMBINING LEFT ANGLE ABOVE */
- 0x031A,
- /* 232 # Mn IDEOGRAPHIC DEPARTING TONE MARK */
- 0x302C,
- /* 233 # Mn COMBINING DOUBLE RIGHTWARDS ARROW BELOW */
- 0x0362,
- /* 234 # Mn [2] COMBINING DOUBLE TILDE..
- * ..COMBINING DOUBLE INVERTED BREVE */
- 0x0360,
- 0x0361,
- /* 240 # Mn COMBINING GREEK YPOGEGRAMMENI */
- 0x0345,
- 0
- };
- /*
- * 09C7 BENGALI VOWEL SIGN E 09BE BENGALI VOWEL SIGN AA or
- * 09D7 BENGALI AU LENGTH MARK
- */
- static const uint32_t pr29_1_1[] = {
- 0x09C7, 0
- };
- static const uint32_t pr29_1_2[] = {
- 0x09BE, 0x09D7, 0
- };
- /*
- * 0B47 ORIYA VOWEL SIGN E 0B3E ORIYA VOWEL SIGN AA or
- * 0B56 ORIYA AI LENGTH MARK or
- * 0B57 ORIYA AU LENGTH MARK
- */
- static const uint32_t pr29_2_1[] = {
- 0x0B47, 0
- };
- static const uint32_t pr29_2_2[] = {
- 0x0B3E, 0x0B56, 0x0B57, 0
- };
- /*
- * 0BC6 TAMIL VOWEL SIGN E 0BBE TAMIL VOWEL SIGN AA or
- * 0BD7 TAMIL AU LENGTH MARK
- */
- static const uint32_t pr29_3_1[] = {
- 0x0BC6, 0
- };
- static const uint32_t pr29_3_2[] = {
- 0x0BBE, 0x0BD7, 0
- };
- /*
- * 0BC7 TAMIL VOWEL SIGN EE 0BBE TAMIL VOWEL SIGN AA
- */
- static const uint32_t pr29_4_1[] = {
- 0x0BC7, 0
- };
- static const uint32_t pr29_4_2[] = {
- 0x0BBE, 0
- };
- /*
- * 0B92 TAMIL LETTER O 0BD7 TAMIL AU LENGTH MARK
- */
- static const uint32_t pr29_5_1[] = {
- 0x0B92, 0
- };
- static const uint32_t pr29_5_2[] = {
- 0x0BD7, 0
- };
- /*
- * 0CC6 KANNADA VOWEL SIGN E 0CC2 KANNADA VOWEL SIGN UU or
- * 0CD5 KANNADA LENGTH MARK or
- * 0CD6 KANNADA AI LENGTH MARK
- */
- static const uint32_t pr29_6_1[] = {
- 0x0CC6, 0
- };
- static const uint32_t pr29_6_2[] = {
- 0x0CC2, 0xCD5, 0xCD6, 0
- };
- /*
- * 0CBF KANNADA VOWEL SIGN I or
- * 0CCA KANNADA VOWEL SIGN O 0CD5 KANNADA LENGTH MARK
- */
- static const uint32_t pr29_7_1[] = {
- 0x0CBF, 0xCCA, 0
- };
- static const uint32_t pr29_7_2[] = {
- 0x0CD5, 0
- };
- /*
- * 0D47 MALAYALAM VOWEL SIGN EE 0D3E MALAYALAM VOWEL SIGN AA
- */
- static const uint32_t pr29_8_1[] = {
- 0x0D47, 0
- };
- static const uint32_t pr29_8_2[] = {
- 0x0D3E, 0
- };
- /*
- * 0D46 MALAYALAM VOWEL SIGN E 0D3E MALAYALAM VOWEL SIGN AA or
- * 0D57 MALAYALAM AU LENGTH MARK
- */
- static const uint32_t pr29_9_1[] = {
- 0x0D46, 0
- };
- static const uint32_t pr29_9_2[] = {
- 0x0D3E, 0x0D57, 0
- };
- /*
- * 1025 MYANMAR LETTER U 102E MYANMAR VOWEL SIGN II
- */
- static const uint32_t pr29_10_1[] = {
- 0x1025, 0
- };
- static const uint32_t pr29_10_2[] = {
- 0x102E, 0
- };
- /*
- * 0DD9 SINHALA VOWEL SIGN KOMBUVA 0DCF SINHALA VOWEL SIGN AELA-PILLA or
- * 0DDF SINHALA VOWEL SIGN GAYANUKITTA
- */
- static const uint32_t pr29_11_1[] = {
- 0x0DD9, 0
- };
- static const uint32_t pr29_11_2[] = {
- 0x0DCF, 0x0DDF, 0
- };
- /*
- * 1100..1112 HANGUL CHOSEONG KIYEOK..HIEUH [19 instances]
- * 1161..1175 HANGUL JUNGSEONG A..I [21 instances]
- */
- static const uint32_t pr29_12_1[] = {
- 0x1100, 0x1101, 0x1102, 0x1103, 0x1104, 0x1105, 0x1106, 0x1107,
- 0x1108, 0x1109, 0x110A, 0x110B, 0x110C, 0x110D, 0x110E, 0x110F,
- 0x1110, 0x1111, 0x1112, 0
- };
- static const uint32_t pr29_12_2[] = {
- 0x1161, 0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168,
- 0x1169, 0x116A, 0x116B, 0x116C, 0x116D, 0x116E, 0x116F, 0x1170,
- 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0
- };
- /*
- * [:HangulSyllableType=LV:]
- * 11A8..11C2 HANGUL JONGSEONG KIYEOK..HIEUH [27 instances]
- */
- static const uint32_t pr29_13_1[] = {
- 0xAC00, /* LV # Lo HANGUL SYLLABLE GA */
- 0xAC1C, /* LV # Lo HANGUL SYLLABLE GAE */
- 0xAC38, /* LV # Lo HANGUL SYLLABLE GYA */
- 0xAC54, /* LV # Lo HANGUL SYLLABLE GYAE */
- 0xAC70, /* LV # Lo HANGUL SYLLABLE GEO */
- 0xAC8C, /* LV # Lo HANGUL SYLLABLE GE */
- 0xACA8, /* LV # Lo HANGUL SYLLABLE GYEO */
- 0xACC4, /* LV # Lo HANGUL SYLLABLE GYE */
- 0xACE0, /* LV # Lo HANGUL SYLLABLE GO */
- 0xACFC, /* LV # Lo HANGUL SYLLABLE GWA */
- 0xAD18, /* LV # Lo HANGUL SYLLABLE GWAE */
- 0xAD34, /* LV # Lo HANGUL SYLLABLE GOE */
- 0xAD50, /* LV # Lo HANGUL SYLLABLE GYO */
- 0xAD6C, /* LV # Lo HANGUL SYLLABLE GU */
- 0xAD88, /* LV # Lo HANGUL SYLLABLE GWEO */
- 0xADA4, /* LV # Lo HANGUL SYLLABLE GWE */
- 0xADC0, /* LV # Lo HANGUL SYLLABLE GWI */
- 0xADDC, /* LV # Lo HANGUL SYLLABLE GYU */
- 0xADF8, /* LV # Lo HANGUL SYLLABLE GEU */
- 0xAE14, /* LV # Lo HANGUL SYLLABLE GYI */
- 0xAE30, /* LV # Lo HANGUL SYLLABLE GI */
- 0xAE4C, /* LV # Lo HANGUL SYLLABLE GGA */
- 0xAE68, /* LV # Lo HANGUL SYLLABLE GGAE */
- 0xAE84, /* LV # Lo HANGUL SYLLABLE GGYA */
- 0xAEA0, /* LV # Lo HANGUL SYLLABLE GGYAE */
- 0xAEBC, /* LV # Lo HANGUL SYLLABLE GGEO */
- 0xAED8, /* LV # Lo HANGUL SYLLABLE GGE */
- 0xAEF4, /* LV # Lo HANGUL SYLLABLE GGYEO */
- 0xAF10, /* LV # Lo HANGUL SYLLABLE GGYE */
- 0xAF2C, /* LV # Lo HANGUL SYLLABLE GGO */
- 0xAF48, /* LV # Lo HANGUL SYLLABLE GGWA */
- 0xAF64, /* LV # Lo HANGUL SYLLABLE GGWAE */
- 0xAF80, /* LV # Lo HANGUL SYLLABLE GGOE */
- 0xAF9C, /* LV # Lo HANGUL SYLLABLE GGYO */
- 0xAFB8, /* LV # Lo HANGUL SYLLABLE GGU */
- 0xAFD4, /* LV # Lo HANGUL SYLLABLE GGWEO */
- 0xAFF0, /* LV # Lo HANGUL SYLLABLE GGWE */
- 0xB00C, /* LV # Lo HANGUL SYLLABLE GGWI */
- 0xB028, /* LV # Lo HANGUL SYLLABLE GGYU */
- 0xB044, /* LV # Lo HANGUL SYLLABLE GGEU */
- 0xB060, /* LV # Lo HANGUL SYLLABLE GGYI */
- 0xB07C, /* LV # Lo HANGUL SYLLABLE GGI */
- 0xB098, /* LV # Lo HANGUL SYLLABLE NA */
- 0xB0B4, /* LV # Lo HANGUL SYLLABLE NAE */
- 0xB0D0, /* LV # Lo HANGUL SYLLABLE NYA */
- 0xB0EC, /* LV # Lo HANGUL SYLLABLE NYAE */
- 0xB108, /* LV # Lo HANGUL SYLLABLE NEO */
- 0xB124, /* LV # Lo HANGUL SYLLABLE NE */
- 0xB140, /* LV # Lo HANGUL SYLLABLE NYEO */
- 0xB15C, /* LV # Lo HANGUL SYLLABLE NYE */
- 0xB178, /* LV # Lo HANGUL SYLLABLE NO */
- 0xB194, /* LV # Lo HANGUL SYLLABLE NWA */
- 0xB1B0, /* LV # Lo HANGUL SYLLABLE NWAE */
- 0xB1CC, /* LV # Lo HANGUL SYLLABLE NOE */
- 0xB1E8, /* LV # Lo HANGUL SYLLABLE NYO */
- 0xB204, /* LV # Lo HANGUL SYLLABLE NU */
- 0xB220, /* LV # Lo HANGUL SYLLABLE NWEO */
- 0xB23C, /* LV # Lo HANGUL SYLLABLE NWE */
- 0xB258, /* LV # Lo HANGUL SYLLABLE NWI */
- 0xB274, /* LV # Lo HANGUL SYLLABLE NYU */
- 0xB290, /* LV # Lo HANGUL SYLLABLE NEU */
- 0xB2AC, /* LV # Lo HANGUL SYLLABLE NYI */
- 0xB2C8, /* LV # Lo HANGUL SYLLABLE NI */
- 0xB2E4, /* LV # Lo HANGUL SYLLABLE DA */
- 0xB300, /* LV # Lo HANGUL SYLLABLE DAE */
- 0xB31C, /* LV # Lo HANGUL SYLLABLE DYA */
- 0xB338, /* LV # Lo HANGUL SYLLABLE DYAE */
- 0xB354, /* LV # Lo HANGUL SYLLABLE DEO */
- 0xB370, /* LV # Lo HANGUL SYLLABLE DE */
- 0xB38C, /* LV # Lo HANGUL SYLLABLE DYEO */
- 0xB3A8, /* LV # Lo HANGUL SYLLABLE DYE */
- 0xB3C4, /* LV # Lo HANGUL SYLLABLE DO */
- 0xB3E0, /* LV # Lo HANGUL SYLLABLE DWA */
- 0xB3FC, /* LV # Lo HANGUL SYLLABLE DWAE */
- 0xB418, /* LV # Lo HANGUL SYLLABLE DOE */
- 0xB434, /* LV # Lo HANGUL SYLLABLE DYO */
- 0xB450, /* LV # Lo HANGUL SYLLABLE DU */
- 0xB46C, /* LV # Lo HANGUL SYLLABLE DWEO */
- 0xB488, /* LV # Lo HANGUL SYLLABLE DWE */
- 0xB4A4, /* LV # Lo HANGUL SYLLABLE DWI */
- 0xB4C0, /* LV # Lo HANGUL SYLLABLE DYU */
- 0xB4DC, /* LV # Lo HANGUL SYLLABLE DEU */
- 0xB4F8, /* LV # Lo HANGUL SYLLABLE DYI */
- 0xB514, /* LV # Lo HANGUL SYLLABLE DI */
- 0xB530, /* LV # Lo HANGUL SYLLABLE DDA */
- 0xB54C, /* LV # Lo HANGUL SYLLABLE DDAE */
- 0xB568, /* LV # Lo HANGUL SYLLABLE DDYA */
- 0xB584, /* LV # Lo HANGUL SYLLABLE DDYAE */
- 0xB5A0, /* LV # Lo HANGUL SYLLABLE DDEO */
- 0xB5BC, /* LV # Lo HANGUL SYLLABLE DDE */
- 0xB5D8, /* LV # Lo HANGUL SYLLABLE DDYEO */
- 0xB5F4, /* LV # Lo HANGUL SYLLABLE DDYE */
- 0xB610, /* LV # Lo HANGUL SYLLABLE DDO */
- 0xB62C, /* LV # Lo HANGUL SYLLABLE DDWA */
- 0xB648, /* LV # Lo HANGUL SYLLABLE DDWAE */
- 0xB664, /* LV # Lo HANGUL SYLLABLE DDOE */
- 0xB680, /* LV # Lo HANGUL SYLLABLE DDYO */
- 0xB69C, /* LV # Lo HANGUL SYLLABLE DDU */
- 0xB6B8, /* LV # Lo HANGUL SYLLABLE DDWEO */
- 0xB6D4, /* LV # Lo HANGUL SYLLABLE DDWE */
- 0xB6F0, /* LV # Lo HANGUL SYLLABLE DDWI */
- 0xB70C, /* LV # Lo HANGUL SYLLABLE DDYU */
- 0xB728, /* LV # Lo HANGUL SYLLABLE DDEU */
- 0xB744, /* LV # Lo HANGUL SYLLABLE DDYI */
- 0xB760, /* LV # Lo HANGUL SYLLABLE DDI */
- 0xB77C, /* LV # Lo HANGUL SYLLABLE RA */
- 0xB798, /* LV # Lo HANGUL SYLLABLE RAE */
- 0xB7B4, /* LV # Lo HANGUL SYLLABLE RYA */
- 0xB7D0, /* LV # Lo HANGUL SYLLABLE RYAE */
- 0xB7EC, /* LV # Lo HANGUL SYLLABLE REO */
- 0xB808, /* LV # Lo HANGUL SYLLABLE RE */
- 0xB824, /* LV # Lo HANGUL SYLLABLE RYEO */
- 0xB840, /* LV # Lo HANGUL SYLLABLE RYE */
- 0xB85C, /* LV # Lo HANGUL SYLLABLE RO */
- 0xB878, /* LV # Lo HANGUL SYLLABLE RWA */
- 0xB894, /* LV # Lo HANGUL SYLLABLE RWAE */
- 0xB8B0, /* LV # Lo HANGUL SYLLABLE ROE */
- 0xB8CC, /* LV # Lo HANGUL SYLLABLE RYO */
- 0xB8E8, /* LV # Lo HANGUL SYLLABLE RU */
- 0xB904, /* LV # Lo HANGUL SYLLABLE RWEO */
- 0xB920, /* LV # Lo HANGUL SYLLABLE RWE */
- 0xB93C, /* LV # Lo HANGUL SYLLABLE RWI */
- 0xB958, /* LV # Lo HANGUL SYLLABLE RYU */
- 0xB974, /* LV # Lo HANGUL SYLLABLE REU */
- 0xB990, /* LV # Lo HANGUL SYLLABLE RYI */
- 0xB9AC, /* LV # Lo HANGUL SYLLABLE RI */
- 0xB9C8, /* LV # Lo HANGUL SYLLABLE MA */
- 0xB9E4, /* LV # Lo HANGUL SYLLABLE MAE */
- 0xBA00, /* LV # Lo HANGUL SYLLABLE MYA */
- 0xBA1C, /* LV # Lo HANGUL SYLLABLE MYAE */
- 0xBA38, /* LV # Lo HANGUL SYLLABLE MEO */
- 0xBA54, /* LV # Lo HANGUL SYLLABLE ME */
- 0xBA70, /* LV # Lo HANGUL SYLLABLE MYEO */
- 0xBA8C, /* LV # Lo HANGUL SYLLABLE MYE */
- 0xBAA8, /* LV # Lo HANGUL SYLLABLE MO */
- 0xBAC4, /* LV # Lo HANGUL SYLLABLE MWA */
- 0xBAE0, /* LV # Lo HANGUL SYLLABLE MWAE */
- 0xBAFC, /* LV # Lo HANGUL SYLLABLE MOE */
- 0xBB18, /* LV # Lo HANGUL SYLLABLE MYO */
- 0xBB34, /* LV # Lo HANGUL SYLLABLE MU */
- 0xBB50, /* LV # Lo HANGUL SYLLABLE MWEO */
- 0xBB6C, /* LV # Lo HANGUL SYLLABLE MWE */
- 0xBB88, /* LV # Lo HANGUL SYLLABLE MWI */
- 0xBBA4, /* LV # Lo HANGUL SYLLABLE MYU */
- 0xBBC0, /* LV # Lo HANGUL SYLLABLE MEU */
- 0xBBDC, /* LV # Lo HANGUL SYLLABLE MYI */
- 0xBBF8, /* LV # Lo HANGUL SYLLABLE MI */
- 0xBC14, /* LV # Lo HANGUL SYLLABLE BA */
- 0xBC30, /* LV # Lo HANGUL SYLLABLE BAE */
- 0xBC4C, /* LV # Lo HANGUL SYLLABLE BYA */
- 0xBC68, /* LV # Lo HANGUL SYLLABLE BYAE */
- 0xBC84, /* LV # Lo HANGUL SYLLABLE BEO */
- 0xBCA0, /* LV # Lo HANGUL SYLLABLE BE */
- 0xBCBC, /* LV # Lo HANGUL SYLLABLE BYEO */
- 0xBCD8, /* LV # Lo HANGUL SYLLABLE BYE */
- 0xBCF4, /* LV # Lo HANGUL SYLLABLE BO */
- 0xBD10, /* LV # Lo HANGUL SYLLABLE BWA */
- 0xBD2C, /* LV # Lo HANGUL SYLLABLE BWAE */
- 0xBD48, /* LV # Lo HANGUL SYLLABLE BOE */
- 0xBD64, /* LV # Lo HANGUL SYLLABLE BYO */
- 0xBD80, /* LV # Lo HANGUL SYLLABLE BU */
- 0xBD9C, /* LV # Lo HANGUL SYLLABLE BWEO */
- 0xBDB8, /* LV # Lo HANGUL SYLLABLE BWE */
- 0xBDD4, /* LV # Lo HANGUL SYLLABLE BWI */
- 0xBDF0, /* LV # Lo HANGUL SYLLABLE BYU */
- 0xBE0C, /* LV # Lo HANGUL SYLLABLE BEU */
- 0xBE28, /* LV # Lo HANGUL SYLLABLE BYI */
- 0xBE44, /* LV # Lo HANGUL SYLLABLE BI */
- 0xBE60, /* LV # Lo HANGUL SYLLABLE BBA */
- 0xBE7C, /* LV # Lo HANGUL SYLLABLE BBAE */
- 0xBE98, /* LV # Lo HANGUL SYLLABLE BBYA */
- 0xBEB4, /* LV # Lo HANGUL SYLLABLE BBYAE */
- 0xBED0, /* LV # Lo HANGUL SYLLABLE BBEO */
- 0xBEEC, /* LV # Lo HANGUL SYLLABLE BBE */
- 0xBF08, /* LV # Lo HANGUL SYLLABLE BBYEO */
- 0xBF24, /* LV # Lo HANGUL SYLLABLE BBYE */
- 0xBF40, /* LV # Lo HANGUL SYLLABLE BBO */
- 0xBF5C, /* LV # Lo HANGUL SYLLABLE BBWA */
- 0xBF78, /* LV # Lo HANGUL SYLLABLE BBWAE */
- 0xBF94, /* LV # Lo HANGUL SYLLABLE BBOE */
- 0xBFB0, /* LV # Lo HANGUL SYLLABLE BBYO */
- 0xBFCC, /* LV # Lo HANGUL SYLLABLE BBU */
- 0xBFE8, /* LV # Lo HANGUL SYLLABLE BBWEO */
- 0xC004, /* LV # Lo HANGUL SYLLABLE BBWE */
- 0xC020, /* LV # Lo HANGUL SYLLABLE BBWI */
- 0xC03C, /* LV # Lo HANGUL SYLLABLE BBYU */
- 0xC058, /* LV # Lo HANGUL SYLLABLE BBEU */
- 0xC074, /* LV # Lo HANGUL SYLLABLE BBYI */
- 0xC090, /* LV # Lo HANGUL SYLLABLE BBI */
- 0xC0AC, /* LV # Lo HANGUL SYLLABLE SA */
- 0xC0C8, /* LV # Lo HANGUL SYLLABLE SAE */
- 0xC0E4, /* LV # Lo HANGUL SYLLABLE SYA */
- 0xC100, /* LV # Lo HANGUL SYLLABLE SYAE */
- 0xC11C, /* LV # Lo HANGUL SYLLABLE SEO */
- 0xC138, /* LV # Lo HANGUL SYLLABLE SE */
- 0xC154, /* LV # Lo HANGUL SYLLABLE SYEO */
- 0xC170, /* LV # Lo HANGUL SYLLABLE SYE */
- 0xC18C, /* LV # Lo HANGUL SYLLABLE SO */
- 0xC1A8, /* LV # Lo HANGUL SYLLABLE SWA */
- 0xC1C4, /* LV # Lo HANGUL SYLLABLE SWAE */
- 0xC1E0, /* LV # Lo HANGUL SYLLABLE SOE */
- 0xC1FC, /* LV # Lo HANGUL SYLLABLE SYO */
- 0xC218, /* LV # Lo HANGUL SYLLABLE SU */
- 0xC234, /* LV # Lo HANGUL SYLLABLE SWEO */
- 0xC250, /* LV # Lo HANGUL SYLLABLE SWE */
- 0xC26C, /* LV # Lo HANGUL SYLLABLE SWI */
- 0xC288, /* LV # Lo HANGUL SYLLABLE SYU */
- 0xC2A4, /* LV # Lo HANGUL SYLLABLE SEU */
- 0xC2C0, /* LV # Lo HANGUL SYLLABLE SYI */
- 0xC2DC, /* LV # Lo HANGUL SYLLABLE SI */
- 0xC2F8, /* LV # Lo HANGUL SYLLABLE SSA */
- 0xC314, /* LV # Lo HANGUL SYLLABLE SSAE */
- 0xC330, /* LV # Lo HANGUL SYLLABLE SSYA */
- 0xC34C, /* LV # Lo HANGUL SYLLABLE SSYAE */
- 0xC368, /* LV # Lo HANGUL SYLLABLE SSEO */
- 0xC384, /* LV # Lo HANGUL SYLLABLE SSE */
- 0xC3A0, /* LV # Lo HANGUL SYLLABLE SSYEO */
- 0xC3BC, /* LV # Lo HANGUL SYLLABLE SSYE */
- 0xC3D8, /* LV # Lo HANGUL SYLLABLE SSO */
- 0xC3F4, /* LV # Lo HANGUL SYLLABLE SSWA */
- 0xC410, /* LV # Lo HANGUL SYLLABLE SSWAE */
- 0xC42C, /* LV # Lo HANGUL SYLLABLE SSOE */
- 0xC448, /* LV # Lo HANGUL SYLLABLE SSYO */
- 0xC464, /* LV # Lo HANGUL SYLLABLE SSU */
- 0xC480, /* LV # Lo HANGUL SYLLABLE SSWEO */
- 0xC49C, /* LV # Lo HANGUL SYLLABLE SSWE */
- 0xC4B8, /* LV # Lo HANGUL SYLLABLE SSWI */
- 0xC4D4, /* LV # Lo HANGUL SYLLABLE SSYU */
- 0xC4F0, /* LV # Lo HANGUL SYLLABLE SSEU */
- 0xC50C, /* LV # Lo HANGUL SYLLABLE SSYI */
- 0xC528, /* LV # Lo HANGUL SYLLABLE SSI */
- 0xC544, /* LV # Lo HANGUL SYLLABLE A */
- 0xC560, /* LV # Lo HANGUL SYLLABLE AE */
- 0xC57C, /* LV # Lo HANGUL SYLLABLE YA */
- 0xC598, /* LV # Lo HANGUL SYLLABLE YAE */
- 0xC5B4, /* LV # Lo HANGUL SYLLABLE EO */
- 0xC5D0, /* LV # Lo HANGUL SYLLABLE E */
- 0xC5EC, /* LV # Lo HANGUL SYLLABLE YEO */
- 0xC608, /* LV # Lo HANGUL SYLLABLE YE */
- 0xC624, /* LV # Lo HANGUL SYLLABLE O */
- 0xC640, /* LV # Lo HANGUL SYLLABLE WA */
- 0xC65C, /* LV # Lo HANGUL SYLLABLE WAE */
- 0xC678, /* LV # Lo HANGUL SYLLABLE OE */
- 0xC694, /* LV # Lo HANGUL SYLLABLE YO */
- 0xC6B0, /* LV # Lo HANGUL SYLLABLE U */
- 0xC6CC, /* LV # Lo HANGUL SYLLABLE WEO */
- 0xC6E8, /* LV # Lo HANGUL SYLLABLE WE */
- 0xC704, /* LV # Lo HANGUL SYLLABLE WI */
- 0xC720, /* LV # Lo HANGUL SYLLABLE YU */
- 0xC73C, /* LV # Lo HANGUL SYLLABLE EU */
- 0xC758, /* LV # Lo HANGUL SYLLABLE YI */
- 0xC774, /* LV # Lo HANGUL SYLLABLE I */
- 0xC790, /* LV # Lo HANGUL SYLLABLE JA */
- 0xC7AC, /* LV # Lo HANGUL SYLLABLE JAE */
- 0xC7C8, /* LV # Lo HANGUL SYLLABLE JYA */
- 0xC7E4, /* LV # Lo HANGUL SYLLABLE JYAE */
- 0xC800, /* LV # Lo HANGUL SYLLABLE JEO */
- 0xC81C, /* LV # Lo HANGUL SYLLABLE JE */
- 0xC838, /* LV # Lo HANGUL SYLLABLE JYEO */
- 0xC854, /* LV # Lo HANGUL SYLLABLE JYE */
- 0xC870, /* LV # Lo HANGUL SYLLABLE JO */
- 0xC88C, /* LV # Lo HANGUL SYLLABLE JWA */
- 0xC8A8, /* LV # Lo HANGUL SYLLABLE JWAE */
- 0xC8C4, /* LV # Lo HANGUL SYLLABLE JOE */
- 0xC8E0, /* LV # Lo HANGUL SYLLABLE JYO */
- 0xC8FC, /* LV # Lo HANGUL SYLLABLE JU */
- 0xC918, /* LV # Lo HANGUL SYLLABLE JWEO */
- 0xC934, /* LV # Lo HANGUL SYLLABLE JWE */
- 0xC950, /* LV # Lo HANGUL SYLLABLE JWI */
- 0xC96C, /* LV # Lo HANGUL SYLLABLE JYU */
- 0xC988, /* LV # Lo HANGUL SYLLABLE JEU */
- 0xC9A4, /* LV # Lo HANGUL SYLLABLE JYI */
- 0xC9C0, /* LV # Lo HANGUL SYLLABLE JI */
- 0xC9DC, /* LV # Lo HANGUL SYLLABLE JJA */
- 0xC9F8, /* LV # Lo HANGUL SYLLABLE JJAE */
- 0xCA14, /* LV # Lo HANGUL SYLLABLE JJYA */
- 0xCA30, /* LV # Lo HANGUL SYLLABLE JJYAE */
- 0xCA4C, /* LV # Lo HANGUL SYLLABLE JJEO */
- 0xCA68, /* LV # Lo HANGUL SYLLABLE JJE */
- 0xCA84, /* LV # Lo HANGUL SYLLABLE JJYEO */
- 0xCAA0, /* LV # Lo HANGUL SYLLABLE JJYE */
- 0xCABC, /* LV # Lo HANGUL SYLLABLE JJO */
- 0xCAD8, /* LV # Lo HANGUL SYLLABLE JJWA */
- 0xCAF4, /* LV # Lo HANGUL SYLLABLE JJWAE */
- 0xCB10, /* LV # Lo HANGUL SYLLABLE JJOE */
- 0xCB2C, /* LV # Lo HANGUL SYLLABLE JJYO */
- 0xCB48, /* LV # Lo HANGUL SYLLABLE JJU */
- 0xCB64, /* LV # Lo HANGUL SYLLABLE JJWEO */
- 0xCB80, /* LV # Lo HANGUL SYLLABLE JJWE */
- 0xCB9C, /* LV # Lo HANGUL SYLLABLE JJWI */
- 0xCBB8, /* LV # Lo HANGUL SYLLABLE JJYU */
- 0xCBD4, /* LV # Lo HANGUL SYLLABLE JJEU */
- 0xCBF0, /* LV # Lo HANGUL SYLLABLE JJYI */
- 0xCC0C, /* LV # Lo HANGUL SYLLABLE JJI */
- 0xCC28, /* LV # Lo HANGUL SYLLABLE CA */
- 0xCC44, /* LV # Lo HANGUL SYLLABLE CAE */
- 0xCC60, /* LV # Lo HANGUL SYLLABLE CYA */
- 0xCC7C, /* LV # Lo HANGUL SYLLABLE CYAE */
- 0xCC98, /* LV # Lo HANGUL SYLLABLE CEO */
- 0xCCB4, /* LV # Lo HANGUL SYLLABLE CE */
- 0xCCD0, /* LV # Lo HANGUL SYLLABLE CYEO */
- 0xCCEC, /* LV # Lo HANGUL SYLLABLE CYE */
- 0xCD08, /* LV # Lo HANGUL SYLLABLE CO */
- 0xCD24, /* LV # Lo HANGUL SYLLABLE CWA */
- 0xCD40, /* LV # Lo HANGUL SYLLABLE CWAE */
- 0xCD5C, /* LV # Lo HANGUL SYLLABLE COE */
- 0xCD78, /* LV # Lo HANGUL SYLLABLE CYO */
- 0xCD94, /* LV # Lo HANGUL SYLLABLE CU */
- 0xCDB0, /* LV # Lo HANGUL SYLLABLE CWEO */
- 0xCDCC, /* LV # Lo HANGUL SYLLABLE CWE */
- 0xCDE8, /* LV # Lo HANGUL SYLLABLE CWI */
- 0xCE04, /* LV # Lo HANGUL SYLLABLE CYU */
- 0xCE20, /* LV # Lo HANGUL SYLLABLE CEU */
- 0xCE3C, /* LV # Lo HANGUL SYLLABLE CYI */
- 0xCE58, /* LV # Lo HANGUL SYLLABLE CI */
- 0xCE74, /* LV # Lo HANGUL SYLLABLE KA */
- 0xCE90, /* LV # Lo HANGUL SYLLABLE KAE */
- 0xCEAC, /* LV # Lo HANGUL SYLLABLE KYA */
- 0xCEC8, /* LV # Lo HANGUL SYLLABLE KYAE */
- 0xCEE4, /* LV # Lo HANGUL SYLLABLE KEO */
- 0xCF00, /* LV # Lo HANGUL SYLLABLE KE */
- 0xCF1C, /* LV # Lo HANGUL SYLLABLE KYEO */
- 0xCF38, /* LV # Lo HANGUL SYLLABLE KYE */
- 0xCF54, /* LV # Lo HANGUL SYLLABLE KO */
- 0xCF70, /* LV # Lo HANGUL SYLLABLE KWA */
- 0xCF8C, /* LV # Lo HANGUL SYLLABLE KWAE */
- 0xCFA8, /* LV # Lo HANGUL SYLLABLE KOE */
- 0xCFC4, /* LV # Lo HANGUL SYLLABLE KYO */
- 0xCFE0, /* LV # Lo HANGUL SYLLABLE KU */
- 0xCFFC, /* LV # Lo HANGUL SYLLABLE KWEO */
- 0xD018, /* LV # Lo HANGUL SYLLABLE KWE */
- 0xD034, /* LV # Lo HANGUL SYLLABLE KWI */
- 0xD050, /* LV # Lo HANGUL SYLLABLE KYU */
- 0xD06C, /* LV # Lo HANGUL SYLLABLE KEU */
- 0xD088, /* LV # Lo HANGUL SYLLABLE KYI */
- 0xD0A4, /* LV # Lo HANGUL SYLLABLE KI */
- 0xD0C0, /* LV # Lo HANGUL SYLLABLE TA */
- 0xD0DC, /* LV # Lo HANGUL SYLLABLE TAE */
- 0xD0F8, /* LV # Lo HANGUL SYLLABLE TYA */
- 0xD114, /* LV # Lo HANGUL SYLLABLE TYAE */
- 0xD130, /* LV # Lo HANGUL SYLLABLE TEO */
- 0xD14C, /* LV # Lo HANGUL SYLLABLE TE */
- 0xD168, /* LV # Lo HANGUL SYLLABLE TYEO */
- 0xD184, /* LV # Lo HANGUL SYLLABLE TYE */
- 0xD1A0, /* LV # Lo HANGUL SYLLABLE TO */
- 0xD1BC, /* LV # Lo HANGUL SYLLABLE TWA */
- 0xD1D8, /* LV # Lo HANGUL SYLLABLE TWAE */
- 0xD1F4, /* LV # Lo HANGUL SYLLABLE TOE */
- 0xD210, /* LV # Lo HANGUL SYLLABLE TYO */
- 0xD22C, /* LV # Lo HANGUL SYLLABLE TU */
- 0xD248, /* LV # Lo HANGUL SYLLABLE TWEO */
- 0xD264, /* LV # Lo HANGUL SYLLABLE TWE */
- 0xD280, /* LV # Lo HANGUL SYLLABLE TWI */
- 0xD29C, /* LV # Lo HANGUL SYLLABLE TYU */
- 0xD2B8, /* LV # Lo HANGUL SYLLABLE TEU */
- 0xD2D4, /* LV # Lo HANGUL SYLLABLE TYI */
- 0xD2F0, /* LV # Lo HANGUL SYLLABLE TI */
- 0xD30C, /* LV # Lo HANGUL SYLLABLE PA */
- 0xD328, /* LV # Lo HANGUL SYLLABLE PAE */
- 0xD344, /* LV # Lo HANGUL SYLLABLE PYA */
- 0xD360, /* LV # Lo HANGUL SYLLABLE PYAE */
- 0xD37C, /* LV # Lo HANGUL SYLLABLE PEO */
- 0xD398, /* LV # Lo HANGUL SYLLABLE PE */
- 0xD3B4, /* LV # Lo HANGUL SYLLABLE PYEO */
- 0xD3D0, /* LV # Lo HANGUL SYLLABLE PYE */
- 0xD3EC, /* LV # Lo HANGUL SYLLABLE PO */
- 0xD408, /* LV # Lo HANGUL SYLLABLE PWA */
- 0xD424, /* LV # Lo HANGUL SYLLABLE PWAE */
- 0xD440, /* LV # Lo HANGUL SYLLABLE POE */
- 0xD45C, /* LV # Lo HANGUL SYLLABLE PYO */
- 0xD478, /* LV # Lo HANGUL SYLLABLE PU */
- 0xD494, /* LV # Lo HANGUL SYLLABLE PWEO */
- 0xD4B0, /* LV # Lo HANGUL SYLLABLE PWE */
- 0xD4CC, /* LV # Lo HANGUL SYLLABLE PWI */
- 0xD4E8, /* LV # Lo HANGUL SYLLABLE PYU */
- 0xD504, /* LV # Lo HANGUL SYLLABLE PEU */
- 0xD520, /* LV # Lo HANGUL SYLLABLE PYI */
- 0xD53C, /* LV # Lo HANGUL SYLLABLE PI */
- 0xD558, /* LV # Lo HANGUL SYLLABLE HA */
- 0xD574, /* LV # Lo HANGUL SYLLABLE HAE */
- 0xD590, /* LV # Lo HANGUL SYLLABLE HYA */
- 0xD5AC, /* LV # Lo HANGUL SYLLABLE HYAE */
- 0xD5C8, /* LV # Lo HANGUL SYLLABLE HEO */
- 0xD5E4, /* LV # Lo HANGUL SYLLABLE HE */
- 0xD600, /* LV # Lo HANGUL SYLLABLE HYEO */
- 0xD61C, /* LV # Lo HANGUL SYLLABLE HYE */
- 0xD638, /* LV # Lo HANGUL SYLLABLE HO */
- 0xD654, /* LV # Lo HANGUL SYLLABLE HWA */
- 0xD670, /* LV # Lo HANGUL SYLLABLE HWAE */
- 0xD68C, /* LV # Lo HANGUL SYLLABLE HOE */
- 0xD6A8, /* LV # Lo HANGUL SYLLABLE HYO */
- 0xD6C4, /* LV # Lo HANGUL SYLLABLE HU */
- 0xD6E0, /* LV # Lo HANGUL SYLLABLE HWEO */
- 0xD6FC, /* LV # Lo HANGUL SYLLABLE HWE */
- 0xD718, /* LV # Lo HANGUL SYLLABLE HWI */
- 0xD734, /* LV # Lo HANGUL SYLLABLE HYU */
- 0xD750, /* LV # Lo HANGUL SYLLABLE HEU */
- 0xD76C, /* LV # Lo HANGUL SYLLABLE HYI */
- 0xD788, /* LV # Lo HANGUL SYLLABLE HI */
- 0
- };
- static const uint32_t pr29_13_2[] = {
- 0x11A8, 0x11A9, 0x11AA, 0x11AB, 0x11AC, 0x11AD, 0x11AE, 0x11AF,
- 0x11B0, 0x11B1, 0x11B2, 0x11B3, 0x11B4, 0x11B5, 0x11B6, 0x11B7,
- 0x11B8, 0x11B9, 0x11BA, 0x11BB, 0x11BC, 0x11BD, 0x11BE, 0x11BF,
- 0x11C0, 0x11C1, 0x11C2, 0
- };
- typedef struct
- {
- const uint32_t *first;
- const uint32_t *last;
- } Pr29;
- static const Pr29 pr29[] = {
- {&pr29_1_1[0], &pr29_1_2[0]},
- {&pr29_2_1[0], &pr29_2_2[0]},
- {&pr29_3_1[0], &pr29_3_2[0]},
- {&pr29_4_1[0], &pr29_4_2[0]},
- {&pr29_5_1[0], &pr29_5_2[0]},
- {&pr29_6_1[0], &pr29_6_2[0]},
- {&pr29_7_1[0], &pr29_7_2[0]},
- {&pr29_8_1[0], &pr29_8_2[0]},
- {&pr29_9_1[0], &pr29_9_2[0]},
- {&pr29_10_1[0], &pr29_10_2[0]},
- {&pr29_11_1[0], &pr29_11_2[0]},
- {&pr29_12_1[0], &pr29_12_2[0]},
- {&pr29_13_1[0], &pr29_13_2[0]},
- {NULL, NULL}
- };
- static size_t
- first_column (uint32_t c)
- {
- size_t i, j;
- for (i = 0; pr29[i].first; i++)
- for (j = 0; pr29[i].first[j]; j++)
- if (c == pr29[i].first[j])
- return i + 1;
- return 0;
- }
- static int
- in_last_column_row (uint32_t c, size_t row)
- {
- size_t i;
- for (i = 0; pr29[row - 1].last[i]; i++)
- if (c == pr29[row - 1].last[i])
- return 1;
- return 0;
- }
- static size_t
- combinationclass (uint32_t c)
- {
- size_t i;
- for (i = 0; nzcc[i]; i++)
- if (c == nzcc[i])
- return i + 1;
- return 0;
- }
- /**
- * pr29_4:
- * @in: input array with unicode code points.
- * @len: length of input array with unicode code points.
- *
- * Check the input to see if it may be normalized into different
- * strings by different NFKC implementations, due to an anomaly in the
- * NFKC specifications.
- *
- * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success,
- * and %PR29_PROBLEM if the input sequence is a "problem sequence"
- * (i.e., may be normalized into different strings by different
- * implementations).
- **/
- int
- pr29_4 (const uint32_t *in, size_t len)
- {
- size_t i, j, k, row;
- /*
- * The problem sequence are of the form:
- *
- * first_character intervening_character+ last_character
- *
- * where the first_character and last_character come from the same
- * row in the following table, and there is at least one
- * intervening_character with non-zero Canonical Combining
- * Class. (The '+' above means one or more occurrences.)
- *
- */
- for (i = 0; i < len; i++)
- if ((row = first_column (in[i])) > 0)
- for (j = i + 1; j < len; j++)
- if (combinationclass (in[j]))
- for (k = j + 1; k < len; k++)
- if (in_last_column_row (in[k], row))
- return PR29_PROBLEM;
- return PR29_SUCCESS;
- }
- /**
- * pr29_4z:
- * @in: zero terminated array of Unicode code points.
- *
- * Check the input to see if it may be normalized into different
- * strings by different NFKC implementations, due to an anomaly in the
- * NFKC specifications.
- *
- * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success,
- * and %PR29_PROBLEM if the input sequence is a "problem sequence"
- * (i.e., may be normalized into different strings by different
- * implementations).
- **/
- int
- pr29_4z (const uint32_t *in)
- {
- size_t len;
- for (len = 0; in[len]; len++)
- ;
- return pr29_4 (in, len);
- }
- /**
- * pr29_8z:
- * @in: zero terminated input UTF-8 string.
- *
- * Check the input to see if it may be normalized into different
- * strings by different NFKC implementations, due to an anomaly in the
- * NFKC specifications.
- *
- * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success,
- * and %PR29_PROBLEM if the input sequence is a "problem sequence"
- * (i.e., may be normalized into different strings by different
- * implementations), or %PR29_STRINGPREP_ERROR if there was a
- * problem converting the string from UTF-8 to UCS-4.
- **/
- int
- pr29_8z (const char *in)
- {
- uint32_t *p;
- int rc;
- p = stringprep_utf8_to_ucs4 (in, -1, NULL);
- if (!p)
- return PR29_STRINGPREP_ERROR;
- rc = pr29_4z (p);
- free (p);
- return rc;
- }
- /**
- * Pr29_rc:
- * @PR29_SUCCESS: Successful operation. This value is guaranteed to
- * always be zero, the remaining ones are only guaranteed to hold
- * non-zero values, for logical comparison purposes.
- * @PR29_PROBLEM: A problem sequence was encountered.
- * @PR29_STRINGPREP_ERROR: The character set conversion failed (only
- * for pr29_8z()).
- *
- * Enumerated return codes for pr29_4(), pr29_4z(), pr29_8z(). The
- * value 0 is guaranteed to always correspond to success.
- */
|