From: simonmar Date: Mon, 14 Mar 2005 12:18:08 +0000 (+0000) Subject: [project @ 2005-03-14 12:18:05 by simonmar] X-Git-Tag: arity-anal-branch-point~34 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=1e076454862442966918e6b1b9095e43eab7c770;hp=69b2983d1ef10fefe155db9f777b9201e4c5b447;p=ghc-base.git [project @ 2005-03-14 12:18:05 by simonmar] Add Dimitry Golubovsky 's Unicode character class implementation. This will remove the dependency on libc's locale code and give us much more consistent support for Unicode across platforms. --- diff --git a/GHC/Unicode.hs b/GHC/Unicode.hs index 52d14f3..8aefad5 100644 --- a/GHC/Unicode.hs +++ b/GHC/Unicode.hs @@ -1,4 +1,5 @@ -{-# OPTIONS_GHC -fno-implicit-prelude #-} +{-# OPTIONS -fno-implicit-prelude #-} +{-# OPTIONS -#include "WCsubst.h" #-} ----------------------------------------------------------------------------- -- | -- Module : GHC.Unicde @@ -15,14 +16,21 @@ -- ----------------------------------------------------------------------------- --- #hide module GHC.Unicode ( + GeneralCategory (..), + generalCategory, isAscii, isLatin1, isControl, isAsciiUpper, isAsciiLower, isPrint, isSpace, isUpper, isLower, isAlpha, isDigit, isOctDigit, isHexDigit, isAlphaNum, - toUpper, toLower, + toUpper, toLower, toTitle, + isLetter, -- :: Char -> Bool + isMark, -- :: Char -> Bool + isNumber, -- :: Char -> Bool + isPunctuation, -- :: Char -> Bool + isSymbol, -- :: Char -> Bool + isSeparator, -- :: Char -> Bool ) where import GHC.Base @@ -30,9 +38,106 @@ import GHC.Real (fromIntegral) import GHC.Int import GHC.Word import GHC.Num (fromInteger) +import GHC.Read +import GHC.Show +import GHC.Enum #include "HsBaseConfig.h" +-- | Unicode General Categories (column 2 of the UnicodeData table) +-- in the order they are listed in the Unicode standard. + +data GeneralCategory + = UppercaseLetter -- Lu Letter, Uppercase + | LowercaseLetter -- Ll Letter, Lowercase + | TitlecaseLetter -- Lt Letter, Titlecase + | ModifierLetter -- Lm Letter, Modifier + | OtherLetter -- Lo Letter, Other + | NonSpacingMark -- Mn Mark, Non-Spacing + | SpacingCombiningMark -- Mc Mark, Spacing Combining + | EnclosingMark -- Me Mark, Enclosing + | DecimalNumber -- Nd Number, Decimal + | LetterNumber -- Nl Number, Letter + | OtherNumber -- No Number, Other + | ConnectorPunctuation -- Pc Punctuation, Connector + | DashPunctuation -- Pd Punctuation, Dash + | OpenPunctuation -- Ps Punctuation, Open + | ClosePunctuation -- Pe Punctuation, Close + | InitialQuote -- Pi Punctuation, Initial quote + | FinalQuote -- Pf Punctuation, Final quote + | OtherPunctuation -- Po Punctuation, Other + | MathSymbol -- Sm Symbol, Math + | CurrencySymbol -- Sc Symbol, Currency + | ModifierSymbol -- Sk Symbol, Modifier + | OtherSymbol -- So Symbol, Other + | Space -- Zs Separator, Space + | LineSeparator -- Zl Separator, Line + | ParagraphSeparator -- Zp Separator, Paragraph + | Control -- Cc Other, Control + | Format -- Cf Other, Format + | Surrogate -- Cs Other, Surrogate + | PrivateUse -- Co Other, Private Use + | NotAssigned -- Cn Other, Not Assigned + deriving (Eq, Ord, Enum, Read, Show, Bounded) + +-- | Retrieves the general Unicode category of the character. +generalCategory :: Char -> GeneralCategory +generalCategory c = toEnum (wgencat (fromIntegral (ord c))) + +-- ------------------------------------------------------------------------ +-- These are copied from Hugs Unicode.hs + +-- derived character classifiers + +isLetter :: Char -> Bool +isLetter c = case generalCategory c of + UppercaseLetter -> True + LowercaseLetter -> True + TitlecaseLetter -> True + ModifierLetter -> True + OtherLetter -> True + _ -> False + +isMark :: Char -> Bool +isMark c = case generalCategory c of + NonSpacingMark -> True + SpacingCombiningMark -> True + EnclosingMark -> True + _ -> False + +isNumber :: Char -> Bool +isNumber c = case generalCategory c of + DecimalNumber -> True + LetterNumber -> True + OtherNumber -> True + _ -> False + +isPunctuation :: Char -> Bool +isPunctuation c = case generalCategory c of + ConnectorPunctuation -> True + DashPunctuation -> True + OpenPunctuation -> True + ClosePunctuation -> True + InitialQuote -> True + FinalQuote -> True + OtherPunctuation -> True + _ -> False + +isSymbol :: Char -> Bool +isSymbol c = case generalCategory c of + MathSymbol -> True + CurrencySymbol -> True + ModifierSymbol -> True + OtherSymbol -> True + _ -> False + +isSeparator :: Char -> Bool +isSeparator c = case generalCategory c of + Space -> True + LineSeparator -> True + ParagraphSeparator -> True + _ -> False + -- | Selects the first 128 characters of the Unicode character set, -- corresponding to the ASCII character set. isAscii :: Char -> Bool @@ -67,7 +172,8 @@ isSpace c = c == ' ' || c == '\r' || c == '\f' || c == '\v' || - c == '\xa0' + c == '\xa0' || + iswspace (fromIntegral (ord c)) /= 0 -- | Selects alphabetic Unicode characters (letters) that are not lower-case. -- (In Unicode terms, this includes letters in upper and title cases, @@ -78,15 +184,6 @@ isUpper :: Char -> Bool isLower :: Char -> Bool -- | Selects alphabetic Unicode characters (letters). --- --- Note: the Haskell 98 definition of 'isAlpha' is: --- --- > isAlpha c = isUpper c || isLower c --- --- the implementation here diverges from the Haskell 98 --- definition in the sense that Unicode alphabetic characters which --- are neither upper nor lower case will still be identified as --- alphabetic by 'isAlpha'. isAlpha :: Char -> Bool -- | Selects alphabetic or numeric digit Unicode characters. @@ -120,21 +217,14 @@ toUpper :: Char -> Char toLower :: Char -> Char -- ----------------------------------------------------------------------------- --- Win32 implementation +-- Implementation with the supplied auto-generated Unicode character properties +-- table (default) -#if (defined(HAVE_WCTYPE_H) && HAVE_ISWSPACE && defined(HTYPE_WINT_T)) || mingw32_HOST_OS +#if 1 --- Use the wide-char classification functions if available. Glibc --- seems to implement these properly, even for chars > 0xffff, as long --- as you call setlocale() to set the locale to something other than --- "C". Therefore, we call setlocale() in hs_init(). - --- Win32 uses UTF-16, so presumably the system-supplied iswlower() and --- friends won't work properly with characters > 0xffff. These --- characters are represented as surrogate pairs in UTF-16. +-- Regardless of the O/S and Library, use the functions contained in WCsubst.c type WInt = HTYPE_WINT_T -type CInt = HTYPE_INT isDigit c = iswdigit (fromIntegral (ord c)) /= 0 isAlpha c = iswalpha (fromIntegral (ord c)) /= 0 @@ -147,39 +237,46 @@ isLower c = iswlower (fromIntegral (ord c)) /= 0 toLower c = chr (fromIntegral (towlower (fromIntegral (ord c)))) toUpper c = chr (fromIntegral (towupper (fromIntegral (ord c)))) +toTitle c = chr (fromIntegral (towtitle (fromIntegral (ord c)))) + +foreign import ccall unsafe "u_iswdigit" + iswdigit :: CInt -> CInt + +foreign import ccall unsafe "u_iswalpha" + iswalpha :: CInt -> CInt -foreign import ccall unsafe "iswdigit" - iswdigit :: WInt -> CInt +foreign import ccall unsafe "u_iswalnum" + iswalnum :: CInt -> CInt -foreign import ccall unsafe "iswalpha" - iswalpha :: WInt -> CInt +foreign import ccall unsafe "u_iswcntrl" + iswcntrl :: CInt -> CInt -foreign import ccall unsafe "iswalnum" - iswalnum :: WInt -> CInt +foreign import ccall unsafe "u_iswspace" + iswspace :: CInt -> CInt -foreign import ccall unsafe "iswcntrl" - iswcntrl :: WInt -> CInt +foreign import ccall unsafe "u_iswprint" + iswprint :: CInt -> CInt -foreign import ccall unsafe "iswspace" - iswspace :: WInt -> CInt +foreign import ccall unsafe "u_iswlower" + iswlower :: CInt -> CInt -foreign import ccall unsafe "iswprint" - iswprint :: WInt -> CInt +foreign import ccall unsafe "u_iswupper" + iswupper :: CInt -> CInt -foreign import ccall unsafe "iswlower" - iswlower :: WInt -> CInt +foreign import ccall unsafe "u_towlower" + towlower :: CInt -> CInt -foreign import ccall unsafe "iswupper" - iswupper :: WInt -> CInt +foreign import ccall unsafe "u_towupper" + towupper :: CInt -> CInt -foreign import ccall unsafe "towlower" - towlower :: WInt -> WInt +foreign import ccall unsafe "u_towtitle" + towtitle :: CInt -> CInt -foreign import ccall unsafe "towupper" - towupper :: WInt -> WInt +foreign import ccall unsafe "u_gencat" + wgencat :: CInt -> Int -- ----------------------------------------------------------------------------- --- No libunicode, so fall back to the ASCII-only implementation +-- No libunicode, so fall back to the ASCII-only implementation (never used, indeed) #else diff --git a/cbits/WCsubst.c b/cbits/WCsubst.c new file mode 100644 index 0000000..18752b9 --- /dev/null +++ b/cbits/WCsubst.c @@ -0,0 +1,3095 @@ +/*------------------------------------------------------------------------- +This is an automatically generated file: do not edit +Generated by udconfc at Mon Jan 31 23:37:36 EST 2005 +-------------------------------------------------------------------------*/ + +#include "WCsubst.h" + +/* Unicode general categories, listed in the same order as in the Unicode + * standard -- this must be the same order as in GHC.Unicode. + */ + +enum { + NUMCAT_LU, /* Letter, Uppercase */ + NUMCAT_LL, /* Letter, Lowercase */ + NUMCAT_LT, /* Letter, Titlecase */ + NUMCAT_LM, /* Letter, Modifier */ + NUMCAT_LO, /* Letter, Other */ + NUMCAT_MN, /* Mark, Non-Spacing */ + NUMCAT_MC, /* Mark, Spacing Combining */ + NUMCAT_ME, /* Mark, Enclosing */ + NUMCAT_ND, /* Number, Decimal */ + NUMCAT_NL, /* Number, Letter */ + NUMCAT_NO, /* Number, Other */ + NUMCAT_PC, /* Punctuation, Connector */ + NUMCAT_PD, /* Punctuation, Dash */ + NUMCAT_PS, /* Punctuation, Open */ + NUMCAT_PE, /* Punctuation, Close */ + NUMCAT_PI, /* Punctuation, Initial quote */ + NUMCAT_PF, /* Punctuation, Final quote */ + NUMCAT_PO, /* Punctuation, Other */ + NUMCAT_SM, /* Symbol, Math */ + NUMCAT_SC, /* Symbol, Currency */ + NUMCAT_SK, /* Symbol, Modifier */ + NUMCAT_SO, /* Symbol, Other */ + NUMCAT_ZS, /* Separator, Space */ + NUMCAT_ZL, /* Separator, Line */ + NUMCAT_ZP, /* Separator, Paragraph */ + NUMCAT_CC, /* Other, Control */ + NUMCAT_CF, /* Other, Format */ + NUMCAT_CS, /* Other, Surrogate */ + NUMCAT_CO, /* Other, Private Use */ + NUMCAT_CN /* Other, Not Assigned */ +}; + +struct _convrule_ +{ + unsigned int category; + unsigned int catnumber; + int possible; + int updist; + int lowdist; + int titledist; +}; + +struct _charblock_ +{ + int start; + int length; + const struct _convrule_ *rule; +}; + +#define GENCAT_ZP 67108864 +#define GENCAT_MC 8388608 +#define GENCAT_NO 65536 +#define GENCAT_SK 1024 +#define GENCAT_CO 268435456 +#define GENCAT_ME 4194304 +#define GENCAT_ND 256 +#define GENCAT_PO 4 +#define GENCAT_LT 524288 +#define GENCAT_PC 2048 +#define GENCAT_SM 64 +#define GENCAT_ZS 2 +#define GENCAT_CC 1 +#define GENCAT_LU 512 +#define GENCAT_PD 128 +#define GENCAT_SO 8192 +#define GENCAT_PE 32 +#define GENCAT_CS 134217728 +#define GENCAT_PF 131072 +#define GENCAT_CF 32768 +#define GENCAT_PS 16 +#define GENCAT_SC 8 +#define GENCAT_LL 4096 +#define GENCAT_ZL 33554432 +#define GENCAT_LM 1048576 +#define GENCAT_PI 16384 +#define GENCAT_NL 16777216 +#define GENCAT_MN 2097152 +#define GENCAT_LO 262144 +#define MAX_UNI_CHAR 1114109 +#define NUM_BLOCKS 1916 +#define NUM_CONVBLOCKS 835 +#define NUM_SPACEBLOCKS 8 +#define NUM_LAT1BLOCKS 63 +#define NUM_RULES 126 +static const struct _convrule_ rule116={GENCAT_LU, NUMCAT_LU, 1, 0, -8383, 0}; +static const struct _convrule_ rule108={GENCAT_LU, NUMCAT_LU, 1, 0, -86, 0}; +static const struct _convrule_ rule88={GENCAT_LU, NUMCAT_LU, 1, 0, 80, 0}; +static const struct _convrule_ rule86={GENCAT_LL, NUMCAT_LL, 1, -96, 0, -96}; +static const struct _convrule_ rule79={GENCAT_LU, NUMCAT_LU, 0, 0, 0, 0}; +static const struct _convrule_ rule56={GENCAT_LL, NUMCAT_LL, 1, -203, 0, -203}; +static const struct _convrule_ rule54={GENCAT_LL, NUMCAT_LL, 1, -205, 0, -205}; +static const struct _convrule_ rule48={GENCAT_LL, NUMCAT_LL, 1, -79, 0, -79}; +static const struct _convrule_ rule40={GENCAT_LU, NUMCAT_LU, 1, 0, 218, 0}; +static const struct _convrule_ rule113={GENCAT_ZL, NUMCAT_ZL, 0, 0, 0, 0}; +static const struct _convrule_ rule103={GENCAT_LT, NUMCAT_LT, 1, 0, -8, 0}; +static const struct _convrule_ rule98={GENCAT_LL, NUMCAT_LL, 1, 86, 0, 86}; +static const struct _convrule_ rule95={GENCAT_LL, NUMCAT_LL, 1, 8, 0, 8}; +static const struct _convrule_ rule39={GENCAT_LU, NUMCAT_LU, 1, 0, 214, 0}; +static const struct _convrule_ rule119={GENCAT_NL, NUMCAT_NL, 1, -16, 0, -16}; +static const struct _convrule_ rule101={GENCAT_LL, NUMCAT_LL, 1, 112, 0, 112}; +static const struct _convrule_ rule93={GENCAT_NL, NUMCAT_NL, 0, 0, 0, 0}; +static const struct _convrule_ rule60={GENCAT_LL, NUMCAT_LL, 1, -213, 0, -213}; +static const struct _convrule_ rule59={GENCAT_LL, NUMCAT_LL, 1, -211, 0, -211}; +static const struct _convrule_ rule42={GENCAT_LU, NUMCAT_LU, 1, 0, 219, 0}; +static const struct _convrule_ rule38={GENCAT_LL, NUMCAT_LL, 1, 130, 0, 130}; +static const struct _convrule_ rule34={GENCAT_LL, NUMCAT_LL, 1, 97, 0, 97}; +static const struct _convrule_ rule25={GENCAT_LU, NUMCAT_LU, 1, 0, -121, 0}; +static const struct _convrule_ rule24={GENCAT_LL, NUMCAT_LL, 1, -232, 0, -232}; +static const struct _convrule_ rule20={GENCAT_LL, NUMCAT_LL, 1, 121, 0, 121}; +static const struct _convrule_ rule16={GENCAT_CF, NUMCAT_CF, 0, 0, 0, 0}; +static const struct _convrule_ rule4={GENCAT_PS, NUMCAT_PS, 0, 0, 0, 0}; +static const struct _convrule_ rule123={GENCAT_CO, NUMCAT_CO, 0, 0, 0, 0}; +static const struct _convrule_ rule112={GENCAT_LU, NUMCAT_LU, 1, 0, -126, 0}; +static const struct _convrule_ rule106={GENCAT_LT, NUMCAT_LT, 1, 0, -9, 0}; +static const struct _convrule_ rule105={GENCAT_LU, NUMCAT_LU, 1, 0, -74, 0}; +static const struct _convrule_ rule97={GENCAT_LL, NUMCAT_LL, 1, 74, 0, 74}; +static const struct _convrule_ rule65={GENCAT_LM, NUMCAT_LM, 0, 0, 0, 0}; +static const struct _convrule_ rule30={GENCAT_LU, NUMCAT_LU, 1, 0, 79, 0}; +static const struct _convrule_ rule5={GENCAT_PE, NUMCAT_PE, 0, 0, 0, 0}; +static const struct _convrule_ rule114={GENCAT_ZP, NUMCAT_ZP, 0, 0, 0, 0}; +static const struct _convrule_ rule104={GENCAT_LL, NUMCAT_LL, 1, 9, 0, 9}; +static const struct _convrule_ rule94={GENCAT_LL, NUMCAT_LL, 1, -59, 0, -59}; +static const struct _convrule_ rule92={GENCAT_MC, NUMCAT_MC, 0, 0, 0, 0}; +static const struct _convrule_ rule91={GENCAT_LL, NUMCAT_LL, 1, -48, 0, -48}; +static const struct _convrule_ rule82={GENCAT_LL, NUMCAT_LL, 1, -86, 0, -86}; +static const struct _convrule_ rule78={GENCAT_LL, NUMCAT_LL, 1, -57, 0, -57}; +static const struct _convrule_ rule66={GENCAT_MN, NUMCAT_MN, 0, 0, 0, 0}; +static const struct _convrule_ rule55={GENCAT_LL, NUMCAT_LL, 1, -202, 0, -202}; +static const struct _convrule_ rule50={GENCAT_LU, NUMCAT_LU, 1, 0, -56, 0}; +static const struct _convrule_ rule45={GENCAT_LU, NUMCAT_LU, 1, 0, 2, 1}; +static const struct _convrule_ rule31={GENCAT_LU, NUMCAT_LU, 1, 0, 202, 0}; +static const struct _convrule_ rule6={GENCAT_SM, NUMCAT_SM, 0, 0, 0, 0}; +static const struct _convrule_ rule107={GENCAT_LL, NUMCAT_LL, 1, -7205, 0, -7205}; +static const struct _convrule_ rule90={GENCAT_LU, NUMCAT_LU, 1, 0, 48, 0}; +static const struct _convrule_ rule87={GENCAT_LU, NUMCAT_LU, 1, 0, -7, 0}; +static const struct _convrule_ rule44={GENCAT_LL, NUMCAT_LL, 1, 56, 0, 56}; +static const struct _convrule_ rule33={GENCAT_LU, NUMCAT_LU, 1, 0, 207, 0}; +static const struct _convrule_ rule18={GENCAT_LL, NUMCAT_LL, 1, 743, 0, 743}; +static const struct _convrule_ rule17={GENCAT_NO, NUMCAT_NO, 0, 0, 0, 0}; +static const struct _convrule_ rule10={GENCAT_SK, NUMCAT_SK, 0, 0, 0, 0}; +static const struct _convrule_ rule8={GENCAT_ND, NUMCAT_ND, 0, 0, 0, 0}; +static const struct _convrule_ rule122={GENCAT_CS, NUMCAT_CS, 0, 0, 0, 0}; +static const struct _convrule_ rule99={GENCAT_LL, NUMCAT_LL, 1, 100, 0, 100}; +static const struct _convrule_ rule67={GENCAT_MN, NUMCAT_MN, 1, 84, 0, 84}; +static const struct _convrule_ rule52={GENCAT_LL, NUMCAT_LL, 1, -210, 0, -210}; +static const struct _convrule_ rule51={GENCAT_LU, NUMCAT_LU, 1, 0, -130, 0}; +static const struct _convrule_ rule32={GENCAT_LU, NUMCAT_LU, 1, 0, 203, 0}; +static const struct _convrule_ rule27={GENCAT_LU, NUMCAT_LU, 1, 0, 210, 0}; +static const struct _convrule_ rule15={GENCAT_PI, NUMCAT_PI, 0, 0, 0, 0}; +static const struct _convrule_ rule111={GENCAT_LU, NUMCAT_LU, 1, 0, -128, 0}; +static const struct _convrule_ rule96={GENCAT_LU, NUMCAT_LU, 1, 0, -8, 0}; +static const struct _convrule_ rule71={GENCAT_LU, NUMCAT_LU, 1, 0, 63, 0}; +static const struct _convrule_ rule64={GENCAT_LL, NUMCAT_LL, 1, -219, 0, -219}; +static const struct _convrule_ rule62={GENCAT_LL, NUMCAT_LL, 1, -218, 0, -218}; +static const struct _convrule_ rule23={GENCAT_LU, NUMCAT_LU, 1, 0, -199, 0}; +static const struct _convrule_ rule19={GENCAT_PF, NUMCAT_PF, 0, 0, 0, 0}; +static const struct _convrule_ rule1={GENCAT_ZS, NUMCAT_ZS, 0, 0, 0, 0}; +static const struct _convrule_ rule120={GENCAT_SO, NUMCAT_SO, 1, 0, 26, 0}; +static const struct _convrule_ rule115={GENCAT_LU, NUMCAT_LU, 1, 0, -7517, 0}; +static const struct _convrule_ rule83={GENCAT_LL, NUMCAT_LL, 1, -80, 0, -80}; +static const struct _convrule_ rule81={GENCAT_LL, NUMCAT_LL, 1, -54, 0, -54}; +static const struct _convrule_ rule80={GENCAT_LL, NUMCAT_LL, 1, -47, 0, -47}; +static const struct _convrule_ rule77={GENCAT_LL, NUMCAT_LL, 1, -62, 0, -62}; +static const struct _convrule_ rule76={GENCAT_LL, NUMCAT_LL, 1, -63, 0, -63}; +static const struct _convrule_ rule75={GENCAT_LL, NUMCAT_LL, 1, -64, 0, -64}; +static const struct _convrule_ rule73={GENCAT_LL, NUMCAT_LL, 1, -37, 0, -37}; +static const struct _convrule_ rule72={GENCAT_LL, NUMCAT_LL, 1, -38, 0, -38}; +static const struct _convrule_ rule35={GENCAT_LU, NUMCAT_LU, 1, 0, 211, 0}; +static const struct _convrule_ rule14={GENCAT_LL, NUMCAT_LL, 0, 0, 0, 0}; +static const struct _convrule_ rule11={GENCAT_PC, NUMCAT_PC, 0, 0, 0, 0}; +static const struct _convrule_ rule3={GENCAT_SC, NUMCAT_SC, 0, 0, 0, 0}; +static const struct _convrule_ rule2={GENCAT_PO, NUMCAT_PO, 0, 0, 0, 0}; +static const struct _convrule_ rule70={GENCAT_LU, NUMCAT_LU, 1, 0, 64, 0}; +static const struct _convrule_ rule58={GENCAT_LL, NUMCAT_LL, 1, -209, 0, -209}; +static const struct _convrule_ rule57={GENCAT_LL, NUMCAT_LL, 1, -207, 0, -207}; +static const struct _convrule_ rule53={GENCAT_LL, NUMCAT_LL, 1, -206, 0, -206}; +static const struct _convrule_ rule46={GENCAT_LT, NUMCAT_LT, 1, -1, 1, 0}; +static const struct _convrule_ rule36={GENCAT_LU, NUMCAT_LU, 1, 0, 209, 0}; +static const struct _convrule_ rule26={GENCAT_LL, NUMCAT_LL, 1, -300, 0, -300}; +static const struct _convrule_ rule9={GENCAT_LU, NUMCAT_LU, 1, 0, 32, 0}; +static const struct _convrule_ rule121={GENCAT_SO, NUMCAT_SO, 1, -26, 0, -26}; +static const struct _convrule_ rule117={GENCAT_LU, NUMCAT_LU, 1, 0, -8262, 0}; +static const struct _convrule_ rule109={GENCAT_LU, NUMCAT_LU, 1, 0, -100, 0}; +static const struct _convrule_ rule69={GENCAT_LU, NUMCAT_LU, 1, 0, 37, 0}; +static const struct _convrule_ rule29={GENCAT_LU, NUMCAT_LU, 1, 0, 205, 0}; +static const struct _convrule_ rule21={GENCAT_LU, NUMCAT_LU, 1, 0, 1, 0}; +static const struct _convrule_ rule124={GENCAT_LU, NUMCAT_LU, 1, 0, 40, 0}; +static const struct _convrule_ rule110={GENCAT_LU, NUMCAT_LU, 1, 0, -112, 0}; +static const struct _convrule_ rule102={GENCAT_LL, NUMCAT_LL, 1, 126, 0, 126}; +static const struct _convrule_ rule100={GENCAT_LL, NUMCAT_LL, 1, 128, 0, 128}; +static const struct _convrule_ rule85={GENCAT_LU, NUMCAT_LU, 1, 0, -60, 0}; +static const struct _convrule_ rule84={GENCAT_LL, NUMCAT_LL, 1, 7, 0, 7}; +static const struct _convrule_ rule63={GENCAT_LL, NUMCAT_LL, 1, -217, 0, -217}; +static const struct _convrule_ rule61={GENCAT_LL, NUMCAT_LL, 1, -214, 0, -214}; +static const struct _convrule_ rule43={GENCAT_LO, NUMCAT_LO, 0, 0, 0, 0}; +static const struct _convrule_ rule41={GENCAT_LU, NUMCAT_LU, 1, 0, 217, 0}; +static const struct _convrule_ rule125={GENCAT_LL, NUMCAT_LL, 1, -40, 0, -40}; +static const struct _convrule_ rule118={GENCAT_NL, NUMCAT_NL, 1, 0, 16, 0}; +static const struct _convrule_ rule89={GENCAT_ME, NUMCAT_ME, 0, 0, 0, 0}; +static const struct _convrule_ rule74={GENCAT_LL, NUMCAT_LL, 1, -31, 0, -31}; +static const struct _convrule_ rule68={GENCAT_LU, NUMCAT_LU, 1, 0, 38, 0}; +static const struct _convrule_ rule49={GENCAT_LU, NUMCAT_LU, 1, 0, -97, 0}; +static const struct _convrule_ rule47={GENCAT_LL, NUMCAT_LL, 1, -2, 0, -1}; +static const struct _convrule_ rule37={GENCAT_LU, NUMCAT_LU, 1, 0, 213, 0}; +static const struct _convrule_ rule28={GENCAT_LU, NUMCAT_LU, 1, 0, 206, 0}; +static const struct _convrule_ rule22={GENCAT_LL, NUMCAT_LL, 1, -1, 0, -1}; +static const struct _convrule_ rule13={GENCAT_SO, NUMCAT_SO, 0, 0, 0, 0}; +static const struct _convrule_ rule12={GENCAT_LL, NUMCAT_LL, 1, -32, 0, -32}; +static const struct _convrule_ rule7={GENCAT_PD, NUMCAT_PD, 0, 0, 0, 0}; +static const struct _convrule_ rule0={GENCAT_CC, NUMCAT_CC, 0, 0, 0, 0}; +static const struct _charblock_ allchars[]={ + {0, 32, &rule0}, + {32, 1, &rule1}, + {33, 3, &rule2}, + {36, 1, &rule3}, + {37, 3, &rule2}, + {40, 1, &rule4}, + {41, 1, &rule5}, + {42, 1, &rule2}, + {43, 1, &rule6}, + {44, 1, &rule2}, + {45, 1, &rule7}, + {46, 2, &rule2}, + {48, 10, &rule8}, + {58, 2, &rule2}, + {60, 3, &rule6}, + {63, 2, &rule2}, + {65, 26, &rule9}, + {91, 1, &rule4}, + {92, 1, &rule2}, + {93, 1, &rule5}, + {94, 1, &rule10}, + {95, 1, &rule11}, + {96, 1, &rule10}, + {97, 26, &rule12}, + {123, 1, &rule4}, + {124, 1, &rule6}, + {125, 1, &rule5}, + {126, 1, &rule6}, + {127, 33, &rule0}, + {160, 1, &rule1}, + {161, 1, &rule2}, + {162, 4, &rule3}, + {166, 2, &rule13}, + {168, 1, &rule10}, + {169, 1, &rule13}, + {170, 1, &rule14}, + {171, 1, &rule15}, + {172, 1, &rule6}, + {173, 1, &rule16}, + {174, 1, &rule13}, + {175, 1, &rule10}, + {176, 1, &rule13}, + {177, 1, &rule6}, + {178, 2, &rule17}, + {180, 1, &rule10}, + {181, 1, &rule18}, + {182, 1, &rule13}, + {183, 1, &rule2}, + {184, 1, &rule10}, + {185, 1, &rule17}, + {186, 1, &rule14}, + {187, 1, &rule19}, + {188, 3, &rule17}, + {191, 1, &rule2}, + {192, 23, &rule9}, + {215, 1, &rule6}, + {216, 7, &rule9}, + {223, 1, &rule14}, + {224, 23, &rule12}, + {247, 1, &rule6}, + {248, 7, &rule12}, + {255, 1, &rule20}, + {256, 1, &rule21}, + {257, 1, &rule22}, + {258, 1, &rule21}, + {259, 1, &rule22}, + {260, 1, &rule21}, + {261, 1, &rule22}, + {262, 1, &rule21}, + {263, 1, &rule22}, + {264, 1, &rule21}, + {265, 1, &rule22}, + {266, 1, &rule21}, + {267, 1, &rule22}, + {268, 1, &rule21}, + {269, 1, &rule22}, + {270, 1, &rule21}, + {271, 1, &rule22}, + {272, 1, &rule21}, + {273, 1, &rule22}, + {274, 1, &rule21}, + {275, 1, &rule22}, + {276, 1, &rule21}, + {277, 1, &rule22}, + {278, 1, &rule21}, + {279, 1, &rule22}, + {280, 1, &rule21}, + {281, 1, &rule22}, + {282, 1, &rule21}, + {283, 1, &rule22}, + {284, 1, &rule21}, + {285, 1, &rule22}, + {286, 1, &rule21}, + {287, 1, &rule22}, + {288, 1, &rule21}, + {289, 1, &rule22}, + {290, 1, &rule21}, + {291, 1, &rule22}, + {292, 1, &rule21}, + {293, 1, &rule22}, + {294, 1, &rule21}, + {295, 1, &rule22}, + {296, 1, &rule21}, + {297, 1, &rule22}, + {298, 1, &rule21}, + {299, 1, &rule22}, + {300, 1, &rule21}, + {301, 1, &rule22}, + {302, 1, &rule21}, + {303, 1, &rule22}, + {304, 1, &rule23}, + {305, 1, &rule24}, + {306, 1, &rule21}, + {307, 1, &rule22}, + {308, 1, &rule21}, + {309, 1, &rule22}, + {310, 1, &rule21}, + {311, 1, &rule22}, + {312, 1, &rule14}, + {313, 1, &rule21}, + {314, 1, &rule22}, + {315, 1, &rule21}, + {316, 1, &rule22}, + {317, 1, &rule21}, + {318, 1, &rule22}, + {319, 1, &rule21}, + {320, 1, &rule22}, + {321, 1, &rule21}, + {322, 1, &rule22}, + {323, 1, &rule21}, + {324, 1, &rule22}, + {325, 1, &rule21}, + {326, 1, &rule22}, + {327, 1, &rule21}, + {328, 1, &rule22}, + {329, 1, &rule14}, + {330, 1, &rule21}, + {331, 1, &rule22}, + {332, 1, &rule21}, + {333, 1, &rule22}, + {334, 1, &rule21}, + {335, 1, &rule22}, + {336, 1, &rule21}, + {337, 1, &rule22}, + {338, 1, &rule21}, + {339, 1, &rule22}, + {340, 1, &rule21}, + {341, 1, &rule22}, + {342, 1, &rule21}, + {343, 1, &rule22}, + {344, 1, &rule21}, + {345, 1, &rule22}, + {346, 1, &rule21}, + {347, 1, &rule22}, + {348, 1, &rule21}, + {349, 1, &rule22}, + {350, 1, &rule21}, + {351, 1, &rule22}, + {352, 1, &rule21}, + {353, 1, &rule22}, + {354, 1, &rule21}, + {355, 1, &rule22}, + {356, 1, &rule21}, + {357, 1, &rule22}, + {358, 1, &rule21}, + {359, 1, &rule22}, + {360, 1, &rule21}, + {361, 1, &rule22}, + {362, 1, &rule21}, + {363, 1, &rule22}, + {364, 1, &rule21}, + {365, 1, &rule22}, + {366, 1, &rule21}, + {367, 1, &rule22}, + {368, 1, &rule21}, + {369, 1, &rule22}, + {370, 1, &rule21}, + {371, 1, &rule22}, + {372, 1, &rule21}, + {373, 1, &rule22}, + {374, 1, &rule21}, + {375, 1, &rule22}, + {376, 1, &rule25}, + {377, 1, &rule21}, + {378, 1, &rule22}, + {379, 1, &rule21}, + {380, 1, &rule22}, + {381, 1, &rule21}, + {382, 1, &rule22}, + {383, 1, &rule26}, + {384, 1, &rule14}, + {385, 1, &rule27}, + {386, 1, &rule21}, + {387, 1, &rule22}, + {388, 1, &rule21}, + {389, 1, &rule22}, + {390, 1, &rule28}, + {391, 1, &rule21}, + {392, 1, &rule22}, + {393, 2, &rule29}, + {395, 1, &rule21}, + {396, 1, &rule22}, + {397, 1, &rule14}, + {398, 1, &rule30}, + {399, 1, &rule31}, + {400, 1, &rule32}, + {401, 1, &rule21}, + {402, 1, &rule22}, + {403, 1, &rule29}, + {404, 1, &rule33}, + {405, 1, &rule34}, + {406, 1, &rule35}, + {407, 1, &rule36}, + {408, 1, &rule21}, + {409, 1, &rule22}, + {410, 2, &rule14}, + {412, 1, &rule35}, + {413, 1, &rule37}, + {414, 1, &rule38}, + {415, 1, &rule39}, + {416, 1, &rule21}, + {417, 1, &rule22}, + {418, 1, &rule21}, + {419, 1, &rule22}, + {420, 1, &rule21}, + {421, 1, &rule22}, + {422, 1, &rule40}, + {423, 1, &rule21}, + {424, 1, &rule22}, + {425, 1, &rule40}, + {426, 2, &rule14}, + {428, 1, &rule21}, + {429, 1, &rule22}, + {430, 1, &rule40}, + {431, 1, &rule21}, + {432, 1, &rule22}, + {433, 2, &rule41}, + {435, 1, &rule21}, + {436, 1, &rule22}, + {437, 1, &rule21}, + {438, 1, &rule22}, + {439, 1, &rule42}, + {440, 1, &rule21}, + {441, 1, &rule22}, + {442, 1, &rule14}, + {443, 1, &rule43}, + {444, 1, &rule21}, + {445, 1, &rule22}, + {446, 1, &rule14}, + {447, 1, &rule44}, + {448, 4, &rule43}, + {452, 1, &rule45}, + {453, 1, &rule46}, + {454, 1, &rule47}, + {455, 1, &rule45}, + {456, 1, &rule46}, + {457, 1, &rule47}, + {458, 1, &rule45}, + {459, 1, &rule46}, + {460, 1, &rule47}, + {461, 1, &rule21}, + {462, 1, &rule22}, + {463, 1, &rule21}, + {464, 1, &rule22}, + {465, 1, &rule21}, + {466, 1, &rule22}, + {467, 1, &rule21}, + {468, 1, &rule22}, + {469, 1, &rule21}, + {470, 1, &rule22}, + {471, 1, &rule21}, + {472, 1, &rule22}, + {473, 1, &rule21}, + {474, 1, &rule22}, + {475, 1, &rule21}, + {476, 1, &rule22}, + {477, 1, &rule48}, + {478, 1, &rule21}, + {479, 1, &rule22}, + {480, 1, &rule21}, + {481, 1, &rule22}, + {482, 1, &rule21}, + {483, 1, &rule22}, + {484, 1, &rule21}, + {485, 1, &rule22}, + {486, 1, &rule21}, + {487, 1, &rule22}, + {488, 1, &rule21}, + {489, 1, &rule22}, + {490, 1, &rule21}, + {491, 1, &rule22}, + {492, 1, &rule21}, + {493, 1, &rule22}, + {494, 1, &rule21}, + {495, 1, &rule22}, + {496, 1, &rule14}, + {497, 1, &rule45}, + {498, 1, &rule46}, + {499, 1, &rule47}, + {500, 1, &rule21}, + {501, 1, &rule22}, + {502, 1, &rule49}, + {503, 1, &rule50}, + {504, 1, &rule21}, + {505, 1, &rule22}, + {506, 1, &rule21}, + {507, 1, &rule22}, + {508, 1, &rule21}, + {509, 1, &rule22}, + {510, 1, &rule21}, + {511, 1, &rule22}, + {512, 1, &rule21}, + {513, 1, &rule22}, + {514, 1, &rule21}, + {515, 1, &rule22}, + {516, 1, &rule21}, + {517, 1, &rule22}, + {518, 1, &rule21}, + {519, 1, &rule22}, + {520, 1, &rule21}, + {521, 1, &rule22}, + {522, 1, &rule21}, + {523, 1, &rule22}, + {524, 1, &rule21}, + {525, 1, &rule22}, + {526, 1, &rule21}, + {527, 1, &rule22}, + {528, 1, &rule21}, + {529, 1, &rule22}, + {530, 1, &rule21}, + {531, 1, &rule22}, + {532, 1, &rule21}, + {533, 1, &rule22}, + {534, 1, &rule21}, + {535, 1, &rule22}, + {536, 1, &rule21}, + {537, 1, &rule22}, + {538, 1, &rule21}, + {539, 1, &rule22}, + {540, 1, &rule21}, + {541, 1, &rule22}, + {542, 1, &rule21}, + {543, 1, &rule22}, + {544, 1, &rule51}, + {545, 1, &rule14}, + {546, 1, &rule21}, + {547, 1, &rule22}, + {548, 1, &rule21}, + {549, 1, &rule22}, + {550, 1, &rule21}, + {551, 1, &rule22}, + {552, 1, &rule21}, + {553, 1, &rule22}, + {554, 1, &rule21}, + {555, 1, &rule22}, + {556, 1, &rule21}, + {557, 1, &rule22}, + {558, 1, &rule21}, + {559, 1, &rule22}, + {560, 1, &rule21}, + {561, 1, &rule22}, + {562, 1, &rule21}, + {563, 1, &rule22}, + {564, 3, &rule14}, + {592, 3, &rule14}, + {595, 1, &rule52}, + {596, 1, &rule53}, + {597, 1, &rule14}, + {598, 2, &rule54}, + {600, 1, &rule14}, + {601, 1, &rule55}, + {602, 1, &rule14}, + {603, 1, &rule56}, + {604, 4, &rule14}, + {608, 1, &rule54}, + {609, 2, &rule14}, + {611, 1, &rule57}, + {612, 4, &rule14}, + {616, 1, &rule58}, + {617, 1, &rule59}, + {618, 5, &rule14}, + {623, 1, &rule59}, + {624, 2, &rule14}, + {626, 1, &rule60}, + {627, 2, &rule14}, + {629, 1, &rule61}, + {630, 10, &rule14}, + {640, 1, &rule62}, + {641, 2, &rule14}, + {643, 1, &rule62}, + {644, 4, &rule14}, + {648, 1, &rule62}, + {649, 1, &rule14}, + {650, 2, &rule63}, + {652, 6, &rule14}, + {658, 1, &rule64}, + {659, 29, &rule14}, + {688, 18, &rule65}, + {706, 4, &rule10}, + {710, 12, &rule65}, + {722, 14, &rule10}, + {736, 5, &rule65}, + {741, 9, &rule10}, + {750, 1, &rule65}, + {751, 17, &rule10}, + {768, 69, &rule66}, + {837, 1, &rule67}, + {838, 18, &rule66}, + {861, 19, &rule66}, + {884, 2, &rule10}, + {890, 1, &rule65}, + {894, 1, &rule2}, + {900, 2, &rule10}, + {902, 1, &rule68}, + {903, 1, &rule2}, + {904, 3, &rule69}, + {908, 1, &rule70}, + {910, 2, &rule71}, + {912, 1, &rule14}, + {913, 17, &rule9}, + {931, 9, &rule9}, + {940, 1, &rule72}, + {941, 3, &rule73}, + {944, 1, &rule14}, + {945, 17, &rule12}, + {962, 1, &rule74}, + {963, 9, &rule12}, + {972, 1, &rule75}, + {973, 2, &rule76}, + {976, 1, &rule77}, + {977, 1, &rule78}, + {978, 3, &rule79}, + {981, 1, &rule80}, + {982, 1, &rule81}, + {983, 1, &rule14}, + {984, 1, &rule21}, + {985, 1, &rule22}, + {986, 1, &rule21}, + {987, 1, &rule22}, + {988, 1, &rule21}, + {989, 1, &rule22}, + {990, 1, &rule21}, + {991, 1, &rule22}, + {992, 1, &rule21}, + {993, 1, &rule22}, + {994, 1, &rule21}, + {995, 1, &rule22}, + {996, 1, &rule21}, + {997, 1, &rule22}, + {998, 1, &rule21}, + {999, 1, &rule22}, + {1000, 1, &rule21}, + {1001, 1, &rule22}, + {1002, 1, &rule21}, + {1003, 1, &rule22}, + {1004, 1, &rule21}, + {1005, 1, &rule22}, + {1006, 1, &rule21}, + {1007, 1, &rule22}, + {1008, 1, &rule82}, + {1009, 1, &rule83}, + {1010, 1, &rule84}, + {1011, 1, &rule14}, + {1012, 1, &rule85}, + {1013, 1, &rule86}, + {1014, 1, &rule6}, + {1015, 1, &rule21}, + {1016, 1, &rule22}, + {1017, 1, &rule87}, + {1018, 1, &rule21}, + {1019, 1, &rule22}, + {1024, 16, &rule88}, + {1040, 32, &rule9}, + {1072, 32, &rule12}, + {1104, 16, &rule83}, + {1120, 1, &rule21}, + {1121, 1, &rule22}, + {1122, 1, &rule21}, + {1123, 1, &rule22}, + {1124, 1, &rule21}, + {1125, 1, &rule22}, + {1126, 1, &rule21}, + {1127, 1, &rule22}, + {1128, 1, &rule21}, + {1129, 1, &rule22}, + {1130, 1, &rule21}, + {1131, 1, &rule22}, + {1132, 1, &rule21}, + {1133, 1, &rule22}, + {1134, 1, &rule21}, + {1135, 1, &rule22}, + {1136, 1, &rule21}, + {1137, 1, &rule22}, + {1138, 1, &rule21}, + {1139, 1, &rule22}, + {1140, 1, &rule21}, + {1141, 1, &rule22}, + {1142, 1, &rule21}, + {1143, 1, &rule22}, + {1144, 1, &rule21}, + {1145, 1, &rule22}, + {1146, 1, &rule21}, + {1147, 1, &rule22}, + {1148, 1, &rule21}, + {1149, 1, &rule22}, + {1150, 1, &rule21}, + {1151, 1, &rule22}, + {1152, 1, &rule21}, + {1153, 1, &rule22}, + {1154, 1, &rule13}, + {1155, 4, &rule66}, + {1160, 2, &rule89}, + {1162, 1, &rule21}, + {1163, 1, &rule22}, + {1164, 1, &rule21}, + {1165, 1, &rule22}, + {1166, 1, &rule21}, + {1167, 1, &rule22}, + {1168, 1, &rule21}, + {1169, 1, &rule22}, + {1170, 1, &rule21}, + {1171, 1, &rule22}, + {1172, 1, &rule21}, + {1173, 1, &rule22}, + {1174, 1, &rule21}, + {1175, 1, &rule22}, + {1176, 1, &rule21}, + {1177, 1, &rule22}, + {1178, 1, &rule21}, + {1179, 1, &rule22}, + {1180, 1, &rule21}, + {1181, 1, &rule22}, + {1182, 1, &rule21}, + {1183, 1, &rule22}, + {1184, 1, &rule21}, + {1185, 1, &rule22}, + {1186, 1, &rule21}, + {1187, 1, &rule22}, + {1188, 1, &rule21}, + {1189, 1, &rule22}, + {1190, 1, &rule21}, + {1191, 1, &rule22}, + {1192, 1, &rule21}, + {1193, 1, &rule22}, + {1194, 1, &rule21}, + {1195, 1, &rule22}, + {1196, 1, &rule21}, + {1197, 1, &rule22}, + {1198, 1, &rule21}, + {1199, 1, &rule22}, + {1200, 1, &rule21}, + {1201, 1, &rule22}, + {1202, 1, &rule21}, + {1203, 1, &rule22}, + {1204, 1, &rule21}, + {1205, 1, &rule22}, + {1206, 1, &rule21}, + {1207, 1, &rule22}, + {1208, 1, &rule21}, + {1209, 1, &rule22}, + {1210, 1, &rule21}, + {1211, 1, &rule22}, + {1212, 1, &rule21}, + {1213, 1, &rule22}, + {1214, 1, &rule21}, + {1215, 1, &rule22}, + {1216, 1, &rule79}, + {1217, 1, &rule21}, + {1218, 1, &rule22}, + {1219, 1, &rule21}, + {1220, 1, &rule22}, + {1221, 1, &rule21}, + {1222, 1, &rule22}, + {1223, 1, &rule21}, + {1224, 1, &rule22}, + {1225, 1, &rule21}, + {1226, 1, &rule22}, + {1227, 1, &rule21}, + {1228, 1, &rule22}, + {1229, 1, &rule21}, + {1230, 1, &rule22}, + {1232, 1, &rule21}, + {1233, 1, &rule22}, + {1234, 1, &rule21}, + {1235, 1, &rule22}, + {1236, 1, &rule21}, + {1237, 1, &rule22}, + {1238, 1, &rule21}, + {1239, 1, &rule22}, + {1240, 1, &rule21}, + {1241, 1, &rule22}, + {1242, 1, &rule21}, + {1243, 1, &rule22}, + {1244, 1, &rule21}, + {1245, 1, &rule22}, + {1246, 1, &rule21}, + {1247, 1, &rule22}, + {1248, 1, &rule21}, + {1249, 1, &rule22}, + {1250, 1, &rule21}, + {1251, 1, &rule22}, + {1252, 1, &rule21}, + {1253, 1, &rule22}, + {1254, 1, &rule21}, + {1255, 1, &rule22}, + {1256, 1, &rule21}, + {1257, 1, &rule22}, + {1258, 1, &rule21}, + {1259, 1, &rule22}, + {1260, 1, &rule21}, + {1261, 1, &rule22}, + {1262, 1, &rule21}, + {1263, 1, &rule22}, + {1264, 1, &rule21}, + {1265, 1, &rule22}, + {1266, 1, &rule21}, + {1267, 1, &rule22}, + {1268, 1, &rule21}, + {1269, 1, &rule22}, + {1272, 1, &rule21}, + {1273, 1, &rule22}, + {1280, 1, &rule21}, + {1281, 1, &rule22}, + {1282, 1, &rule21}, + {1283, 1, &rule22}, + {1284, 1, &rule21}, + {1285, 1, &rule22}, + {1286, 1, &rule21}, + {1287, 1, &rule22}, + {1288, 1, &rule21}, + {1289, 1, &rule22}, + {1290, 1, &rule21}, + {1291, 1, &rule22}, + {1292, 1, &rule21}, + {1293, 1, &rule22}, + {1294, 1, &rule21}, + {1295, 1, &rule22}, + {1329, 38, &rule90}, + {1369, 1, &rule65}, + {1370, 6, &rule2}, + {1377, 38, &rule91}, + {1415, 1, &rule14}, + {1417, 1, &rule2}, + {1418, 1, &rule7}, + {1425, 17, &rule66}, + {1443, 23, &rule66}, + {1467, 3, &rule66}, + {1470, 1, &rule2}, + {1471, 1, &rule66}, + {1472, 1, &rule2}, + {1473, 2, &rule66}, + {1475, 1, &rule2}, + {1476, 1, &rule66}, + {1488, 27, &rule43}, + {1520, 3, &rule43}, + {1523, 2, &rule2}, + {1536, 4, &rule16}, + {1548, 2, &rule2}, + {1550, 2, &rule13}, + {1552, 6, &rule66}, + {1563, 1, &rule2}, + {1567, 1, &rule2}, + {1569, 26, &rule43}, + {1600, 1, &rule65}, + {1601, 10, &rule43}, + {1611, 14, &rule66}, + {1632, 10, &rule8}, + {1642, 4, &rule2}, + {1646, 2, &rule43}, + {1648, 1, &rule66}, + {1649, 99, &rule43}, + {1748, 1, &rule2}, + {1749, 1, &rule43}, + {1750, 7, &rule66}, + {1757, 1, &rule16}, + {1758, 1, &rule89}, + {1759, 6, &rule66}, + {1765, 2, &rule65}, + {1767, 2, &rule66}, + {1769, 1, &rule13}, + {1770, 4, &rule66}, + {1774, 2, &rule43}, + {1776, 10, &rule8}, + {1786, 3, &rule43}, + {1789, 2, &rule13}, + {1791, 1, &rule43}, + {1792, 14, &rule2}, + {1807, 1, &rule16}, + {1808, 1, &rule43}, + {1809, 1, &rule66}, + {1810, 30, &rule43}, + {1840, 27, &rule66}, + {1869, 3, &rule43}, + {1920, 38, &rule43}, + {1958, 11, &rule66}, + {1969, 1, &rule43}, + {2305, 2, &rule66}, + {2307, 1, &rule92}, + {2308, 54, &rule43}, + {2364, 1, &rule66}, + {2365, 1, &rule43}, + {2366, 3, &rule92}, + {2369, 8, &rule66}, + {2377, 4, &rule92}, + {2381, 1, &rule66}, + {2384, 1, &rule43}, + {2385, 4, &rule66}, + {2392, 10, &rule43}, + {2402, 2, &rule66}, + {2404, 2, &rule2}, + {2406, 10, &rule8}, + {2416, 1, &rule2}, + {2433, 1, &rule66}, + {2434, 2, &rule92}, + {2437, 8, &rule43}, + {2447, 2, &rule43}, + {2451, 22, &rule43}, + {2474, 7, &rule43}, + {2482, 1, &rule43}, + {2486, 4, &rule43}, + {2492, 1, &rule66}, + {2493, 1, &rule43}, + {2494, 3, &rule92}, + {2497, 4, &rule66}, + {2503, 2, &rule92}, + {2507, 2, &rule92}, + {2509, 1, &rule66}, + {2519, 1, &rule92}, + {2524, 2, &rule43}, + {2527, 3, &rule43}, + {2530, 2, &rule66}, + {2534, 10, &rule8}, + {2544, 2, &rule43}, + {2546, 2, &rule3}, + {2548, 6, &rule17}, + {2554, 1, &rule13}, + {2561, 2, &rule66}, + {2563, 1, &rule92}, + {2565, 6, &rule43}, + {2575, 2, &rule43}, + {2579, 22, &rule43}, + {2602, 7, &rule43}, + {2610, 2, &rule43}, + {2613, 2, &rule43}, + {2616, 2, &rule43}, + {2620, 1, &rule66}, + {2622, 3, &rule92}, + {2625, 2, &rule66}, + {2631, 2, &rule66}, + {2635, 3, &rule66}, + {2649, 4, &rule43}, + {2654, 1, &rule43}, + {2662, 10, &rule8}, + {2672, 2, &rule66}, + {2674, 3, &rule43}, + {2689, 2, &rule66}, + {2691, 1, &rule92}, + {2693, 9, &rule43}, + {2703, 3, &rule43}, + {2707, 22, &rule43}, + {2730, 7, &rule43}, + {2738, 2, &rule43}, + {2741, 5, &rule43}, + {2748, 1, &rule66}, + {2749, 1, &rule43}, + {2750, 3, &rule92}, + {2753, 5, &rule66}, + {2759, 2, &rule66}, + {2761, 1, &rule92}, + {2763, 2, &rule92}, + {2765, 1, &rule66}, + {2768, 1, &rule43}, + {2784, 2, &rule43}, + {2786, 2, &rule66}, + {2790, 10, &rule8}, + {2801, 1, &rule3}, + {2817, 1, &rule66}, + {2818, 2, &rule92}, + {2821, 8, &rule43}, + {2831, 2, &rule43}, + {2835, 22, &rule43}, + {2858, 7, &rule43}, + {2866, 2, &rule43}, + {2869, 5, &rule43}, + {2876, 1, &rule66}, + {2877, 1, &rule43}, + {2878, 1, &rule92}, + {2879, 1, &rule66}, + {2880, 1, &rule92}, + {2881, 3, &rule66}, + {2887, 2, &rule92}, + {2891, 2, &rule92}, + {2893, 1, &rule66}, + {2902, 1, &rule66}, + {2903, 1, &rule92}, + {2908, 2, &rule43}, + {2911, 3, &rule43}, + {2918, 10, &rule8}, + {2928, 1, &rule13}, + {2929, 1, &rule43}, + {2946, 1, &rule66}, + {2947, 1, &rule43}, + {2949, 6, &rule43}, + {2958, 3, &rule43}, + {2962, 4, &rule43}, + {2969, 2, &rule43}, + {2972, 1, &rule43}, + {2974, 2, &rule43}, + {2979, 2, &rule43}, + {2984, 3, &rule43}, + {2990, 8, &rule43}, + {2999, 3, &rule43}, + {3006, 2, &rule92}, + {3008, 1, &rule66}, + {3009, 2, &rule92}, + {3014, 3, &rule92}, + {3018, 3, &rule92}, + {3021, 1, &rule66}, + {3031, 1, &rule92}, + {3047, 9, &rule8}, + {3056, 3, &rule17}, + {3059, 6, &rule13}, + {3065, 1, &rule3}, + {3066, 1, &rule13}, + {3073, 3, &rule92}, + {3077, 8, &rule43}, + {3086, 3, &rule43}, + {3090, 23, &rule43}, + {3114, 10, &rule43}, + {3125, 5, &rule43}, + {3134, 3, &rule66}, + {3137, 4, &rule92}, + {3142, 3, &rule66}, + {3146, 4, &rule66}, + {3157, 2, &rule66}, + {3168, 2, &rule43}, + {3174, 10, &rule8}, + {3202, 2, &rule92}, + {3205, 8, &rule43}, + {3214, 3, &rule43}, + {3218, 23, &rule43}, + {3242, 10, &rule43}, + {3253, 5, &rule43}, + {3260, 1, &rule66}, + {3261, 1, &rule43}, + {3262, 1, &rule92}, + {3263, 1, &rule66}, + {3264, 5, &rule92}, + {3270, 1, &rule66}, + {3271, 2, &rule92}, + {3274, 2, &rule92}, + {3276, 2, &rule66}, + {3285, 2, &rule92}, + {3294, 1, &rule43}, + {3296, 2, &rule43}, + {3302, 10, &rule8}, + {3330, 2, &rule92}, + {3333, 8, &rule43}, + {3342, 3, &rule43}, + {3346, 23, &rule43}, + {3370, 16, &rule43}, + {3390, 3, &rule92}, + {3393, 3, &rule66}, + {3398, 3, &rule92}, + {3402, 3, &rule92}, + {3405, 1, &rule66}, + {3415, 1, &rule92}, + {3424, 2, &rule43}, + {3430, 10, &rule8}, + {3458, 2, &rule92}, + {3461, 18, &rule43}, + {3482, 24, &rule43}, + {3507, 9, &rule43}, + {3517, 1, &rule43}, + {3520, 7, &rule43}, + {3530, 1, &rule66}, + {3535, 3, &rule92}, + {3538, 3, &rule66}, + {3542, 1, &rule66}, + {3544, 8, &rule92}, + {3570, 2, &rule92}, + {3572, 1, &rule2}, + {3585, 48, &rule43}, + {3633, 1, &rule66}, + {3634, 2, &rule43}, + {3636, 7, &rule66}, + {3647, 1, &rule3}, + {3648, 6, &rule43}, + {3654, 1, &rule65}, + {3655, 8, &rule66}, + {3663, 1, &rule2}, + {3664, 10, &rule8}, + {3674, 2, &rule2}, + {3713, 2, &rule43}, + {3716, 1, &rule43}, + {3719, 2, &rule43}, + {3722, 1, &rule43}, + {3725, 1, &rule43}, + {3732, 4, &rule43}, + {3737, 7, &rule43}, + {3745, 3, &rule43}, + {3749, 1, &rule43}, + {3751, 1, &rule43}, + {3754, 2, &rule43}, + {3757, 4, &rule43}, + {3761, 1, &rule66}, + {3762, 2, &rule43}, + {3764, 6, &rule66}, + {3771, 2, &rule66}, + {3773, 1, &rule43}, + {3776, 5, &rule43}, + {3782, 1, &rule65}, + {3784, 6, &rule66}, + {3792, 10, &rule8}, + {3804, 2, &rule43}, + {3840, 1, &rule43}, + {3841, 3, &rule13}, + {3844, 15, &rule2}, + {3859, 5, &rule13}, + {3864, 2, &rule66}, + {3866, 6, &rule13}, + {3872, 10, &rule8}, + {3882, 10, &rule17}, + {3892, 1, &rule13}, + {3893, 1, &rule66}, + {3894, 1, &rule13}, + {3895, 1, &rule66}, + {3896, 1, &rule13}, + {3897, 1, &rule66}, + {3898, 1, &rule4}, + {3899, 1, &rule5}, + {3900, 1, &rule4}, + {3901, 1, &rule5}, + {3902, 2, &rule92}, + {3904, 8, &rule43}, + {3913, 34, &rule43}, + {3953, 14, &rule66}, + {3967, 1, &rule92}, + {3968, 5, &rule66}, + {3973, 1, &rule2}, + {3974, 2, &rule66}, + {3976, 4, &rule43}, + {3984, 8, &rule66}, + {3993, 36, &rule66}, + {4030, 8, &rule13}, + {4038, 1, &rule66}, + {4039, 6, &rule13}, + {4047, 1, &rule13}, + {4096, 34, &rule43}, + {4131, 5, &rule43}, + {4137, 2, &rule43}, + {4140, 1, &rule92}, + {4141, 4, &rule66}, + {4145, 1, &rule92}, + {4146, 1, &rule66}, + {4150, 2, &rule66}, + {4152, 1, &rule92}, + {4153, 1, &rule66}, + {4160, 10, &rule8}, + {4170, 6, &rule2}, + {4176, 6, &rule43}, + {4182, 2, &rule92}, + {4184, 2, &rule66}, + {4256, 38, &rule79}, + {4304, 41, &rule43}, + {4347, 1, &rule2}, + {4352, 90, &rule43}, + {4447, 68, &rule43}, + {4520, 82, &rule43}, + {4608, 7, &rule43}, + {4616, 63, &rule43}, + {4680, 1, &rule43}, + {4682, 4, &rule43}, + {4688, 7, &rule43}, + {4696, 1, &rule43}, + {4698, 4, &rule43}, + {4704, 39, &rule43}, + {4744, 1, &rule43}, + {4746, 4, &rule43}, + {4752, 31, &rule43}, + {4784, 1, &rule43}, + {4786, 4, &rule43}, + {4792, 7, &rule43}, + {4800, 1, &rule43}, + {4802, 4, &rule43}, + {4808, 7, &rule43}, + {4816, 7, &rule43}, + {4824, 23, &rule43}, + {4848, 31, &rule43}, + {4880, 1, &rule43}, + {4882, 4, &rule43}, + {4888, 7, &rule43}, + {4896, 39, &rule43}, + {4936, 19, &rule43}, + {4961, 8, &rule2}, + {4969, 9, &rule8}, + {4978, 11, &rule17}, + {5024, 85, &rule43}, + {5121, 620, &rule43}, + {5741, 2, &rule2}, + {5743, 8, &rule43}, + {5760, 1, &rule1}, + {5761, 26, &rule43}, + {5787, 1, &rule4}, + {5788, 1, &rule5}, + {5792, 75, &rule43}, + {5867, 3, &rule2}, + {5870, 3, &rule93}, + {5888, 13, &rule43}, + {5902, 4, &rule43}, + {5906, 3, &rule66}, + {5920, 18, &rule43}, + {5938, 3, &rule66}, + {5941, 2, &rule2}, + {5952, 18, &rule43}, + {5970, 2, &rule66}, + {5984, 13, &rule43}, + {5998, 3, &rule43}, + {6002, 2, &rule66}, + {6016, 52, &rule43}, + {6068, 2, &rule16}, + {6070, 1, &rule92}, + {6071, 7, &rule66}, + {6078, 8, &rule92}, + {6086, 1, &rule66}, + {6087, 2, &rule92}, + {6089, 11, &rule66}, + {6100, 3, &rule2}, + {6103, 1, &rule65}, + {6104, 3, &rule2}, + {6107, 1, &rule3}, + {6108, 1, &rule43}, + {6109, 1, &rule66}, + {6112, 10, &rule8}, + {6128, 10, &rule17}, + {6144, 6, &rule2}, + {6150, 1, &rule7}, + {6151, 4, &rule2}, + {6155, 3, &rule66}, + {6158, 1, &rule1}, + {6160, 10, &rule8}, + {6176, 35, &rule43}, + {6211, 1, &rule65}, + {6212, 52, &rule43}, + {6272, 41, &rule43}, + {6313, 1, &rule66}, + {6400, 29, &rule43}, + {6432, 3, &rule66}, + {6435, 4, &rule92}, + {6439, 2, &rule66}, + {6441, 3, &rule92}, + {6448, 2, &rule92}, + {6450, 1, &rule66}, + {6451, 6, &rule92}, + {6457, 3, &rule66}, + {6464, 1, &rule13}, + {6468, 2, &rule2}, + {6470, 10, &rule8}, + {6480, 30, &rule43}, + {6512, 5, &rule43}, + {6624, 32, &rule13}, + {7424, 44, &rule14}, + {7468, 54, &rule65}, + {7522, 10, &rule14}, + {7680, 1, &rule21}, + {7681, 1, &rule22}, + {7682, 1, &rule21}, + {7683, 1, &rule22}, + {7684, 1, &rule21}, + {7685, 1, &rule22}, + {7686, 1, &rule21}, + {7687, 1, &rule22}, + {7688, 1, &rule21}, + {7689, 1, &rule22}, + {7690, 1, &rule21}, + {7691, 1, &rule22}, + {7692, 1, &rule21}, + {7693, 1, &rule22}, + {7694, 1, &rule21}, + {7695, 1, &rule22}, + {7696, 1, &rule21}, + {7697, 1, &rule22}, + {7698, 1, &rule21}, + {7699, 1, &rule22}, + {7700, 1, &rule21}, + {7701, 1, &rule22}, + {7702, 1, &rule21}, + {7703, 1, &rule22}, + {7704, 1, &rule21}, + {7705, 1, &rule22}, + {7706, 1, &rule21}, + {7707, 1, &rule22}, + {7708, 1, &rule21}, + {7709, 1, &rule22}, + {7710, 1, &rule21}, + {7711, 1, &rule22}, + {7712, 1, &rule21}, + {7713, 1, &rule22}, + {7714, 1, &rule21}, + {7715, 1, &rule22}, + {7716, 1, &rule21}, + {7717, 1, &rule22}, + {7718, 1, &rule21}, + {7719, 1, &rule22}, + {7720, 1, &rule21}, + {7721, 1, &rule22}, + {7722, 1, &rule21}, + {7723, 1, &rule22}, + {7724, 1, &rule21}, + {7725, 1, &rule22}, + {7726, 1, &rule21}, + {7727, 1, &rule22}, + {7728, 1, &rule21}, + {7729, 1, &rule22}, + {7730, 1, &rule21}, + {7731, 1, &rule22}, + {7732, 1, &rule21}, + {7733, 1, &rule22}, + {7734, 1, &rule21}, + {7735, 1, &rule22}, + {7736, 1, &rule21}, + {7737, 1, &rule22}, + {7738, 1, &rule21}, + {7739, 1, &rule22}, + {7740, 1, &rule21}, + {7741, 1, &rule22}, + {7742, 1, &rule21}, + {7743, 1, &rule22}, + {7744, 1, &rule21}, + {7745, 1, &rule22}, + {7746, 1, &rule21}, + {7747, 1, &rule22}, + {7748, 1, &rule21}, + {7749, 1, &rule22}, + {7750, 1, &rule21}, + {7751, 1, &rule22}, + {7752, 1, &rule21}, + {7753, 1, &rule22}, + {7754, 1, &rule21}, + {7755, 1, &rule22}, + {7756, 1, &rule21}, + {7757, 1, &rule22}, + {7758, 1, &rule21}, + {7759, 1, &rule22}, + {7760, 1, &rule21}, + {7761, 1, &rule22}, + {7762, 1, &rule21}, + {7763, 1, &rule22}, + {7764, 1, &rule21}, + {7765, 1, &rule22}, + {7766, 1, &rule21}, + {7767, 1, &rule22}, + {7768, 1, &rule21}, + {7769, 1, &rule22}, + {7770, 1, &rule21}, + {7771, 1, &rule22}, + {7772, 1, &rule21}, + {7773, 1, &rule22}, + {7774, 1, &rule21}, + {7775, 1, &rule22}, + {7776, 1, &rule21}, + {7777, 1, &rule22}, + {7778, 1, &rule21}, + {7779, 1, &rule22}, + {7780, 1, &rule21}, + {7781, 1, &rule22}, + {7782, 1, &rule21}, + {7783, 1, &rule22}, + {7784, 1, &rule21}, + {7785, 1, &rule22}, + {7786, 1, &rule21}, + {7787, 1, &rule22}, + {7788, 1, &rule21}, + {7789, 1, &rule22}, + {7790, 1, &rule21}, + {7791, 1, &rule22}, + {7792, 1, &rule21}, + {7793, 1, &rule22}, + {7794, 1, &rule21}, + {7795, 1, &rule22}, + {7796, 1, &rule21}, + {7797, 1, &rule22}, + {7798, 1, &rule21}, + {7799, 1, &rule22}, + {7800, 1, &rule21}, + {7801, 1, &rule22}, + {7802, 1, &rule21}, + {7803, 1, &rule22}, + {7804, 1, &rule21}, + {7805, 1, &rule22}, + {7806, 1, &rule21}, + {7807, 1, &rule22}, + {7808, 1, &rule21}, + {7809, 1, &rule22}, + {7810, 1, &rule21}, + {7811, 1, &rule22}, + {7812, 1, &rule21}, + {7813, 1, &rule22}, + {7814, 1, &rule21}, + {7815, 1, &rule22}, + {7816, 1, &rule21}, + {7817, 1, &rule22}, + {7818, 1, &rule21}, + {7819, 1, &rule22}, + {7820, 1, &rule21}, + {7821, 1, &rule22}, + {7822, 1, &rule21}, + {7823, 1, &rule22}, + {7824, 1, &rule21}, + {7825, 1, &rule22}, + {7826, 1, &rule21}, + {7827, 1, &rule22}, + {7828, 1, &rule21}, + {7829, 1, &rule22}, + {7830, 5, &rule14}, + {7835, 1, &rule94}, + {7840, 1, &rule21}, + {7841, 1, &rule22}, + {7842, 1, &rule21}, + {7843, 1, &rule22}, + {7844, 1, &rule21}, + {7845, 1, &rule22}, + {7846, 1, &rule21}, + {7847, 1, &rule22}, + {7848, 1, &rule21}, + {7849, 1, &rule22}, + {7850, 1, &rule21}, + {7851, 1, &rule22}, + {7852, 1, &rule21}, + {7853, 1, &rule22}, + {7854, 1, &rule21}, + {7855, 1, &rule22}, + {7856, 1, &rule21}, + {7857, 1, &rule22}, + {7858, 1, &rule21}, + {7859, 1, &rule22}, + {7860, 1, &rule21}, + {7861, 1, &rule22}, + {7862, 1, &rule21}, + {7863, 1, &rule22}, + {7864, 1, &rule21}, + {7865, 1, &rule22}, + {7866, 1, &rule21}, + {7867, 1, &rule22}, + {7868, 1, &rule21}, + {7869, 1, &rule22}, + {7870, 1, &rule21}, + {7871, 1, &rule22}, + {7872, 1, &rule21}, + {7873, 1, &rule22}, + {7874, 1, &rule21}, + {7875, 1, &rule22}, + {7876, 1, &rule21}, + {7877, 1, &rule22}, + {7878, 1, &rule21}, + {7879, 1, &rule22}, + {7880, 1, &rule21}, + {7881, 1, &rule22}, + {7882, 1, &rule21}, + {7883, 1, &rule22}, + {7884, 1, &rule21}, + {7885, 1, &rule22}, + {7886, 1, &rule21}, + {7887, 1, &rule22}, + {7888, 1, &rule21}, + {7889, 1, &rule22}, + {7890, 1, &rule21}, + {7891, 1, &rule22}, + {7892, 1, &rule21}, + {7893, 1, &rule22}, + {7894, 1, &rule21}, + {7895, 1, &rule22}, + {7896, 1, &rule21}, + {7897, 1, &rule22}, + {7898, 1, &rule21}, + {7899, 1, &rule22}, + {7900, 1, &rule21}, + {7901, 1, &rule22}, + {7902, 1, &rule21}, + {7903, 1, &rule22}, + {7904, 1, &rule21}, + {7905, 1, &rule22}, + {7906, 1, &rule21}, + {7907, 1, &rule22}, + {7908, 1, &rule21}, + {7909, 1, &rule22}, + {7910, 1, &rule21}, + {7911, 1, &rule22}, + {7912, 1, &rule21}, + {7913, 1, &rule22}, + {7914, 1, &rule21}, + {7915, 1, &rule22}, + {7916, 1, &rule21}, + {7917, 1, &rule22}, + {7918, 1, &rule21}, + {7919, 1, &rule22}, + {7920, 1, &rule21}, + {7921, 1, &rule22}, + {7922, 1, &rule21}, + {7923, 1, &rule22}, + {7924, 1, &rule21}, + {7925, 1, &rule22}, + {7926, 1, &rule21}, + {7927, 1, &rule22}, + {7928, 1, &rule21}, + {7929, 1, &rule22}, + {7936, 8, &rule95}, + {7944, 8, &rule96}, + {7952, 6, &rule95}, + {7960, 6, &rule96}, + {7968, 8, &rule95}, + {7976, 8, &rule96}, + {7984, 8, &rule95}, + {7992, 8, &rule96}, + {8000, 6, &rule95}, + {8008, 6, &rule96}, + {8016, 1, &rule14}, + {8017, 1, &rule95}, + {8018, 1, &rule14}, + {8019, 1, &rule95}, + {8020, 1, &rule14}, + {8021, 1, &rule95}, + {8022, 1, &rule14}, + {8023, 1, &rule95}, + {8025, 1, &rule96}, + {8027, 1, &rule96}, + {8029, 1, &rule96}, + {8031, 1, &rule96}, + {8032, 8, &rule95}, + {8040, 8, &rule96}, + {8048, 2, &rule97}, + {8050, 4, &rule98}, + {8054, 2, &rule99}, + {8056, 2, &rule100}, + {8058, 2, &rule101}, + {8060, 2, &rule102}, + {8064, 8, &rule95}, + {8072, 8, &rule103}, + {8080, 8, &rule95}, + {8088, 8, &rule103}, + {8096, 8, &rule95}, + {8104, 8, &rule103}, + {8112, 2, &rule95}, + {8114, 1, &rule14}, + {8115, 1, &rule104}, + {8116, 1, &rule14}, + {8118, 2, &rule14}, + {8120, 2, &rule96}, + {8122, 2, &rule105}, + {8124, 1, &rule106}, + {8125, 1, &rule10}, + {8126, 1, &rule107}, + {8127, 3, &rule10}, + {8130, 1, &rule14}, + {8131, 1, &rule104}, + {8132, 1, &rule14}, + {8134, 2, &rule14}, + {8136, 4, &rule108}, + {8140, 1, &rule106}, + {8141, 3, &rule10}, + {8144, 2, &rule95}, + {8146, 2, &rule14}, + {8150, 2, &rule14}, + {8152, 2, &rule96}, + {8154, 2, &rule109}, + {8157, 3, &rule10}, + {8160, 2, &rule95}, + {8162, 3, &rule14}, + {8165, 1, &rule84}, + {8166, 2, &rule14}, + {8168, 2, &rule96}, + {8170, 2, &rule110}, + {8172, 1, &rule87}, + {8173, 3, &rule10}, + {8178, 1, &rule14}, + {8179, 1, &rule104}, + {8180, 1, &rule14}, + {8182, 2, &rule14}, + {8184, 2, &rule111}, + {8186, 2, &rule112}, + {8188, 1, &rule106}, + {8189, 2, &rule10}, + {8192, 12, &rule1}, + {8204, 4, &rule16}, + {8208, 6, &rule7}, + {8214, 2, &rule2}, + {8216, 1, &rule15}, + {8217, 1, &rule19}, + {8218, 1, &rule4}, + {8219, 2, &rule15}, + {8221, 1, &rule19}, + {8222, 1, &rule4}, + {8223, 1, &rule15}, + {8224, 8, &rule2}, + {8232, 1, &rule113}, + {8233, 1, &rule114}, + {8234, 5, &rule16}, + {8239, 1, &rule1}, + {8240, 9, &rule2}, + {8249, 1, &rule15}, + {8250, 1, &rule19}, + {8251, 4, &rule2}, + {8255, 2, &rule11}, + {8257, 3, &rule2}, + {8260, 1, &rule6}, + {8261, 1, &rule4}, + {8262, 1, &rule5}, + {8263, 11, &rule2}, + {8274, 1, &rule6}, + {8275, 1, &rule2}, + {8276, 1, &rule11}, + {8279, 1, &rule2}, + {8287, 1, &rule1}, + {8288, 4, &rule16}, + {8298, 6, &rule16}, + {8304, 1, &rule17}, + {8305, 1, &rule14}, + {8308, 6, &rule17}, + {8314, 3, &rule6}, + {8317, 1, &rule4}, + {8318, 1, &rule5}, + {8319, 1, &rule14}, + {8320, 10, &rule17}, + {8330, 3, &rule6}, + {8333, 1, &rule4}, + {8334, 1, &rule5}, + {8352, 18, &rule3}, + {8400, 13, &rule66}, + {8413, 4, &rule89}, + {8417, 1, &rule66}, + {8418, 3, &rule89}, + {8421, 6, &rule66}, + {8448, 2, &rule13}, + {8450, 1, &rule79}, + {8451, 4, &rule13}, + {8455, 1, &rule79}, + {8456, 2, &rule13}, + {8458, 1, &rule14}, + {8459, 3, &rule79}, + {8462, 2, &rule14}, + {8464, 3, &rule79}, + {8467, 1, &rule14}, + {8468, 1, &rule13}, + {8469, 1, &rule79}, + {8470, 3, &rule13}, + {8473, 5, &rule79}, + {8478, 6, &rule13}, + {8484, 1, &rule79}, + {8485, 1, &rule13}, + {8486, 1, &rule115}, + {8487, 1, &rule13}, + {8488, 1, &rule79}, + {8489, 1, &rule13}, + {8490, 1, &rule116}, + {8491, 1, &rule117}, + {8492, 2, &rule79}, + {8494, 1, &rule13}, + {8495, 1, &rule14}, + {8496, 2, &rule79}, + {8498, 1, &rule13}, + {8499, 1, &rule79}, + {8500, 1, &rule14}, + {8501, 4, &rule43}, + {8505, 1, &rule14}, + {8506, 2, &rule13}, + {8509, 1, &rule14}, + {8510, 2, &rule79}, + {8512, 5, &rule6}, + {8517, 1, &rule79}, + {8518, 4, &rule14}, + {8522, 1, &rule13}, + {8523, 1, &rule6}, + {8531, 13, &rule17}, + {8544, 16, &rule118}, + {8560, 16, &rule119}, + {8576, 4, &rule93}, + {8592, 5, &rule6}, + {8597, 5, &rule13}, + {8602, 2, &rule6}, + {8604, 4, &rule13}, + {8608, 1, &rule6}, + {8609, 2, &rule13}, + {8611, 1, &rule6}, + {8612, 2, &rule13}, + {8614, 1, &rule6}, + {8615, 7, &rule13}, + {8622, 1, &rule6}, + {8623, 31, &rule13}, + {8654, 2, &rule6}, + {8656, 2, &rule13}, + {8658, 1, &rule6}, + {8659, 1, &rule13}, + {8660, 1, &rule6}, + {8661, 31, &rule13}, + {8692, 268, &rule6}, + {8960, 8, &rule13}, + {8968, 4, &rule6}, + {8972, 20, &rule13}, + {8992, 2, &rule6}, + {8994, 7, &rule13}, + {9001, 1, &rule4}, + {9002, 1, &rule5}, + {9003, 81, &rule13}, + {9084, 1, &rule6}, + {9085, 30, &rule13}, + {9115, 25, &rule6}, + {9140, 1, &rule4}, + {9141, 1, &rule5}, + {9142, 1, &rule2}, + {9143, 26, &rule13}, + {9216, 39, &rule13}, + {9280, 11, &rule13}, + {9312, 60, &rule17}, + {9372, 26, &rule13}, + {9398, 26, &rule120}, + {9424, 26, &rule121}, + {9450, 22, &rule17}, + {9472, 183, &rule13}, + {9655, 1, &rule6}, + {9656, 9, &rule13}, + {9665, 1, &rule6}, + {9666, 54, &rule13}, + {9720, 8, &rule6}, + {9728, 24, &rule13}, + {9753, 86, &rule13}, + {9839, 1, &rule6}, + {9840, 14, &rule13}, + {9856, 18, &rule13}, + {9888, 2, &rule13}, + {9985, 4, &rule13}, + {9990, 4, &rule13}, + {9996, 28, &rule13}, + {10025, 35, &rule13}, + {10061, 1, &rule13}, + {10063, 4, &rule13}, + {10070, 1, &rule13}, + {10072, 7, &rule13}, + {10081, 7, &rule13}, + {10088, 1, &rule4}, + {10089, 1, &rule5}, + {10090, 1, &rule4}, + {10091, 1, &rule5}, + {10092, 1, &rule4}, + {10093, 1, &rule5}, + {10094, 1, &rule4}, + {10095, 1, &rule5}, + {10096, 1, &rule4}, + {10097, 1, &rule5}, + {10098, 1, &rule4}, + {10099, 1, &rule5}, + {10100, 1, &rule4}, + {10101, 1, &rule5}, + {10102, 30, &rule17}, + {10132, 1, &rule13}, + {10136, 24, &rule13}, + {10161, 14, &rule13}, + {10192, 22, &rule6}, + {10214, 1, &rule4}, + {10215, 1, &rule5}, + {10216, 1, &rule4}, + {10217, 1, &rule5}, + {10218, 1, &rule4}, + {10219, 1, &rule5}, + {10224, 16, &rule6}, + {10240, 256, &rule13}, + {10496, 131, &rule6}, + {10627, 1, &rule4}, + {10628, 1, &rule5}, + {10629, 1, &rule4}, + {10630, 1, &rule5}, + {10631, 1, &rule4}, + {10632, 1, &rule5}, + {10633, 1, &rule4}, + {10634, 1, &rule5}, + {10635, 1, &rule4}, + {10636, 1, &rule5}, + {10637, 1, &rule4}, + {10638, 1, &rule5}, + {10639, 1, &rule4}, + {10640, 1, &rule5}, + {10641, 1, &rule4}, + {10642, 1, &rule5}, + {10643, 1, &rule4}, + {10644, 1, &rule5}, + {10645, 1, &rule4}, + {10646, 1, &rule5}, + {10647, 1, &rule4}, + {10648, 1, &rule5}, + {10649, 63, &rule6}, + {10712, 1, &rule4}, + {10713, 1, &rule5}, + {10714, 1, &rule4}, + {10715, 1, &rule5}, + {10716, 32, &rule6}, + {10748, 1, &rule4}, + {10749, 1, &rule5}, + {10750, 258, &rule6}, + {11008, 14, &rule13}, + {11904, 26, &rule13}, + {11931, 89, &rule13}, + {12032, 214, &rule13}, + {12272, 12, &rule13}, + {12288, 1, &rule1}, + {12289, 3, &rule2}, + {12292, 1, &rule13}, + {12293, 1, &rule65}, + {12294, 1, &rule43}, + {12295, 1, &rule93}, + {12296, 1, &rule4}, + {12297, 1, &rule5}, + {12298, 1, &rule4}, + {12299, 1, &rule5}, + {12300, 1, &rule4}, + {12301, 1, &rule5}, + {12302, 1, &rule4}, + {12303, 1, &rule5}, + {12304, 1, &rule4}, + {12305, 1, &rule5}, + {12306, 2, &rule13}, + {12308, 1, &rule4}, + {12309, 1, &rule5}, + {12310, 1, &rule4}, + {12311, 1, &rule5}, + {12312, 1, &rule4}, + {12313, 1, &rule5}, + {12314, 1, &rule4}, + {12315, 1, &rule5}, + {12316, 1, &rule7}, + {12317, 1, &rule4}, + {12318, 2, &rule5}, + {12320, 1, &rule13}, + {12321, 9, &rule93}, + {12330, 6, &rule66}, + {12336, 1, &rule7}, + {12337, 5, &rule65}, + {12342, 2, &rule13}, + {12344, 3, &rule93}, + {12347, 1, &rule65}, + {12348, 1, &rule43}, + {12349, 1, &rule2}, + {12350, 2, &rule13}, + {12353, 86, &rule43}, + {12441, 2, &rule66}, + {12443, 2, &rule10}, + {12445, 2, &rule65}, + {12447, 1, &rule43}, + {12448, 1, &rule7}, + {12449, 90, &rule43}, + {12539, 1, &rule11}, + {12540, 3, &rule65}, + {12543, 1, &rule43}, + {12549, 40, &rule43}, + {12593, 94, &rule43}, + {12688, 2, &rule13}, + {12690, 4, &rule17}, + {12694, 10, &rule13}, + {12704, 24, &rule43}, + {12784, 16, &rule43}, + {12800, 31, &rule13}, + {12832, 10, &rule17}, + {12842, 26, &rule13}, + {12880, 1, &rule13}, + {12881, 15, &rule17}, + {12896, 30, &rule13}, + {12927, 1, &rule13}, + {12928, 10, &rule17}, + {12938, 39, &rule13}, + {12977, 15, &rule17}, + {12992, 63, &rule13}, + {13056, 256, &rule13}, + {13312, 6582, &rule43}, + {19904, 64, &rule13}, + {19968, 20902, &rule43}, + {40960, 1165, &rule43}, + {42128, 55, &rule13}, + {44032, 11172, &rule43}, + {55296, 896, &rule122}, + {56192, 128, &rule122}, + {56320, 1024, &rule122}, + {57344, 6400, &rule123}, + {63744, 302, &rule43}, + {64048, 59, &rule43}, + {64256, 7, &rule14}, + {64275, 5, &rule14}, + {64285, 1, &rule43}, + {64286, 1, &rule66}, + {64287, 10, &rule43}, + {64297, 1, &rule6}, + {64298, 13, &rule43}, + {64312, 5, &rule43}, + {64318, 1, &rule43}, + {64320, 2, &rule43}, + {64323, 2, &rule43}, + {64326, 108, &rule43}, + {64467, 363, &rule43}, + {64830, 1, &rule4}, + {64831, 1, &rule5}, + {64848, 64, &rule43}, + {64914, 54, &rule43}, + {65008, 12, &rule43}, + {65020, 1, &rule3}, + {65021, 1, &rule13}, + {65024, 16, &rule66}, + {65056, 4, &rule66}, + {65072, 1, &rule2}, + {65073, 2, &rule7}, + {65075, 2, &rule11}, + {65077, 1, &rule4}, + {65078, 1, &rule5}, + {65079, 1, &rule4}, + {65080, 1, &rule5}, + {65081, 1, &rule4}, + {65082, 1, &rule5}, + {65083, 1, &rule4}, + {65084, 1, &rule5}, + {65085, 1, &rule4}, + {65086, 1, &rule5}, + {65087, 1, &rule4}, + {65088, 1, &rule5}, + {65089, 1, &rule4}, + {65090, 1, &rule5}, + {65091, 1, &rule4}, + {65092, 1, &rule5}, + {65093, 2, &rule2}, + {65095, 1, &rule4}, + {65096, 1, &rule5}, + {65097, 4, &rule2}, + {65101, 3, &rule11}, + {65104, 3, &rule2}, + {65108, 4, &rule2}, + {65112, 1, &rule7}, + {65113, 1, &rule4}, + {65114, 1, &rule5}, + {65115, 1, &rule4}, + {65116, 1, &rule5}, + {65117, 1, &rule4}, + {65118, 1, &rule5}, + {65119, 3, &rule2}, + {65122, 1, &rule6}, + {65123, 1, &rule7}, + {65124, 3, &rule6}, + {65128, 1, &rule2}, + {65129, 1, &rule3}, + {65130, 2, &rule2}, + {65136, 5, &rule43}, + {65142, 135, &rule43}, + {65279, 1, &rule16}, + {65281, 3, &rule2}, + {65284, 1, &rule3}, + {65285, 3, &rule2}, + {65288, 1, &rule4}, + {65289, 1, &rule5}, + {65290, 1, &rule2}, + {65291, 1, &rule6}, + {65292, 1, &rule2}, + {65293, 1, &rule7}, + {65294, 2, &rule2}, + {65296, 10, &rule8}, + {65306, 2, &rule2}, + {65308, 3, &rule6}, + {65311, 2, &rule2}, + {65313, 26, &rule9}, + {65339, 1, &rule4}, + {65340, 1, &rule2}, + {65341, 1, &rule5}, + {65342, 1, &rule10}, + {65343, 1, &rule11}, + {65344, 1, &rule10}, + {65345, 26, &rule12}, + {65371, 1, &rule4}, + {65372, 1, &rule6}, + {65373, 1, &rule5}, + {65374, 1, &rule6}, + {65375, 1, &rule4}, + {65376, 1, &rule5}, + {65377, 1, &rule2}, + {65378, 1, &rule4}, + {65379, 1, &rule5}, + {65380, 1, &rule2}, + {65381, 1, &rule11}, + {65382, 10, &rule43}, + {65392, 1, &rule65}, + {65393, 45, &rule43}, + {65438, 2, &rule65}, + {65440, 31, &rule43}, + {65474, 6, &rule43}, + {65482, 6, &rule43}, + {65490, 6, &rule43}, + {65498, 3, &rule43}, + {65504, 2, &rule3}, + {65506, 1, &rule6}, + {65507, 1, &rule10}, + {65508, 1, &rule13}, + {65509, 2, &rule3}, + {65512, 1, &rule13}, + {65513, 4, &rule6}, + {65517, 2, &rule13}, + {65529, 3, &rule16}, + {65532, 2, &rule13}, + {65536, 12, &rule43}, + {65549, 26, &rule43}, + {65576, 19, &rule43}, + {65596, 2, &rule43}, + {65599, 15, &rule43}, + {65616, 14, &rule43}, + {65664, 123, &rule43}, + {65792, 2, &rule2}, + {65794, 1, &rule13}, + {65799, 45, &rule17}, + {65847, 9, &rule13}, + {66304, 31, &rule43}, + {66336, 4, &rule17}, + {66352, 26, &rule43}, + {66378, 1, &rule93}, + {66432, 30, &rule43}, + {66463, 1, &rule2}, + {66560, 40, &rule124}, + {66600, 40, &rule125}, + {66640, 78, &rule43}, + {66720, 10, &rule8}, + {67584, 6, &rule43}, + {67592, 1, &rule43}, + {67594, 44, &rule43}, + {67639, 2, &rule43}, + {67644, 1, &rule43}, + {67647, 1, &rule43}, + {118784, 246, &rule13}, + {119040, 39, &rule13}, + {119082, 59, &rule13}, + {119141, 2, &rule92}, + {119143, 3, &rule66}, + {119146, 3, &rule13}, + {119149, 6, &rule92}, + {119155, 8, &rule16}, + {119163, 8, &rule66}, + {119171, 2, &rule13}, + {119173, 7, &rule66}, + {119180, 30, &rule13}, + {119210, 4, &rule66}, + {119214, 48, &rule13}, + {119552, 87, &rule13}, + {119808, 26, &rule79}, + {119834, 26, &rule14}, + {119860, 26, &rule79}, + {119886, 7, &rule14}, + {119894, 18, &rule14}, + {119912, 26, &rule79}, + {119938, 26, &rule14}, + {119964, 1, &rule79}, + {119966, 2, &rule79}, + {119970, 1, &rule79}, + {119973, 2, &rule79}, + {119977, 4, &rule79}, + {119982, 8, &rule79}, + {119990, 4, &rule14}, + {119995, 1, &rule14}, + {119997, 7, &rule14}, + {120005, 11, &rule14}, + {120016, 26, &rule79}, + {120042, 26, &rule14}, + {120068, 2, &rule79}, + {120071, 4, &rule79}, + {120077, 8, &rule79}, + {120086, 7, &rule79}, + {120094, 26, &rule14}, + {120120, 2, &rule79}, + {120123, 4, &rule79}, + {120128, 5, &rule79}, + {120134, 1, &rule79}, + {120138, 7, &rule79}, + {120146, 26, &rule14}, + {120172, 26, &rule79}, + {120198, 26, &rule14}, + {120224, 26, &rule79}, + {120250, 26, &rule14}, + {120276, 26, &rule79}, + {120302, 26, &rule14}, + {120328, 26, &rule79}, + {120354, 26, &rule14}, + {120380, 26, &rule79}, + {120406, 26, &rule14}, + {120432, 26, &rule79}, + {120458, 26, &rule14}, + {120488, 25, &rule79}, + {120513, 1, &rule6}, + {120514, 25, &rule14}, + {120539, 1, &rule6}, + {120540, 6, &rule14}, + {120546, 25, &rule79}, + {120571, 1, &rule6}, + {120572, 25, &rule14}, + {120597, 1, &rule6}, + {120598, 6, &rule14}, + {120604, 25, &rule79}, + {120629, 1, &rule6}, + {120630, 25, &rule14}, + {120655, 1, &rule6}, + {120656, 6, &rule14}, + {120662, 25, &rule79}, + {120687, 1, &rule6}, + {120688, 25, &rule14}, + {120713, 1, &rule6}, + {120714, 6, &rule14}, + {120720, 25, &rule79}, + {120745, 1, &rule6}, + {120746, 25, &rule14}, + {120771, 1, &rule6}, + {120772, 6, &rule14}, + {120782, 50, &rule8}, + {131072, 42711, &rule43}, + {194560, 542, &rule43}, + {917505, 1, &rule16}, + {917536, 96, &rule16}, + {917760, 240, &rule66}, + {983040, 65534, &rule123}, + {1048576, 65534, &rule123} +}; +static const struct _charblock_ convchars[]={ + {65, 26, &rule9}, + {97, 26, &rule12}, + {181, 1, &rule18}, + {192, 23, &rule9}, + {216, 7, &rule9}, + {224, 23, &rule12}, + {248, 7, &rule12}, + {255, 1, &rule20}, + {256, 1, &rule21}, + {257, 1, &rule22}, + {258, 1, &rule21}, + {259, 1, &rule22}, + {260, 1, &rule21}, + {261, 1, &rule22}, + {262, 1, &rule21}, + {263, 1, &rule22}, + {264, 1, &rule21}, + {265, 1, &rule22}, + {266, 1, &rule21}, + {267, 1, &rule22}, + {268, 1, &rule21}, + {269, 1, &rule22}, + {270, 1, &rule21}, + {271, 1, &rule22}, + {272, 1, &rule21}, + {273, 1, &rule22}, + {274, 1, &rule21}, + {275, 1, &rule22}, + {276, 1, &rule21}, + {277, 1, &rule22}, + {278, 1, &rule21}, + {279, 1, &rule22}, + {280, 1, &rule21}, + {281, 1, &rule22}, + {282, 1, &rule21}, + {283, 1, &rule22}, + {284, 1, &rule21}, + {285, 1, &rule22}, + {286, 1, &rule21}, + {287, 1, &rule22}, + {288, 1, &rule21}, + {289, 1, &rule22}, + {290, 1, &rule21}, + {291, 1, &rule22}, + {292, 1, &rule21}, + {293, 1, &rule22}, + {294, 1, &rule21}, + {295, 1, &rule22}, + {296, 1, &rule21}, + {297, 1, &rule22}, + {298, 1, &rule21}, + {299, 1, &rule22}, + {300, 1, &rule21}, + {301, 1, &rule22}, + {302, 1, &rule21}, + {303, 1, &rule22}, + {304, 1, &rule23}, + {305, 1, &rule24}, + {306, 1, &rule21}, + {307, 1, &rule22}, + {308, 1, &rule21}, + {309, 1, &rule22}, + {310, 1, &rule21}, + {311, 1, &rule22}, + {313, 1, &rule21}, + {314, 1, &rule22}, + {315, 1, &rule21}, + {316, 1, &rule22}, + {317, 1, &rule21}, + {318, 1, &rule22}, + {319, 1, &rule21}, + {320, 1, &rule22}, + {321, 1, &rule21}, + {322, 1, &rule22}, + {323, 1, &rule21}, + {324, 1, &rule22}, + {325, 1, &rule21}, + {326, 1, &rule22}, + {327, 1, &rule21}, + {328, 1, &rule22}, + {330, 1, &rule21}, + {331, 1, &rule22}, + {332, 1, &rule21}, + {333, 1, &rule22}, + {334, 1, &rule21}, + {335, 1, &rule22}, + {336, 1, &rule21}, + {337, 1, &rule22}, + {338, 1, &rule21}, + {339, 1, &rule22}, + {340, 1, &rule21}, + {341, 1, &rule22}, + {342, 1, &rule21}, + {343, 1, &rule22}, + {344, 1, &rule21}, + {345, 1, &rule22}, + {346, 1, &rule21}, + {347, 1, &rule22}, + {348, 1, &rule21}, + {349, 1, &rule22}, + {350, 1, &rule21}, + {351, 1, &rule22}, + {352, 1, &rule21}, + {353, 1, &rule22}, + {354, 1, &rule21}, + {355, 1, &rule22}, + {356, 1, &rule21}, + {357, 1, &rule22}, + {358, 1, &rule21}, + {359, 1, &rule22}, + {360, 1, &rule21}, + {361, 1, &rule22}, + {362, 1, &rule21}, + {363, 1, &rule22}, + {364, 1, &rule21}, + {365, 1, &rule22}, + {366, 1, &rule21}, + {367, 1, &rule22}, + {368, 1, &rule21}, + {369, 1, &rule22}, + {370, 1, &rule21}, + {371, 1, &rule22}, + {372, 1, &rule21}, + {373, 1, &rule22}, + {374, 1, &rule21}, + {375, 1, &rule22}, + {376, 1, &rule25}, + {377, 1, &rule21}, + {378, 1, &rule22}, + {379, 1, &rule21}, + {380, 1, &rule22}, + {381, 1, &rule21}, + {382, 1, &rule22}, + {383, 1, &rule26}, + {385, 1, &rule27}, + {386, 1, &rule21}, + {387, 1, &rule22}, + {388, 1, &rule21}, + {389, 1, &rule22}, + {390, 1, &rule28}, + {391, 1, &rule21}, + {392, 1, &rule22}, + {393, 2, &rule29}, + {395, 1, &rule21}, + {396, 1, &rule22}, + {398, 1, &rule30}, + {399, 1, &rule31}, + {400, 1, &rule32}, + {401, 1, &rule21}, + {402, 1, &rule22}, + {403, 1, &rule29}, + {404, 1, &rule33}, + {405, 1, &rule34}, + {406, 1, &rule35}, + {407, 1, &rule36}, + {408, 1, &rule21}, + {409, 1, &rule22}, + {412, 1, &rule35}, + {413, 1, &rule37}, + {414, 1, &rule38}, + {415, 1, &rule39}, + {416, 1, &rule21}, + {417, 1, &rule22}, + {418, 1, &rule21}, + {419, 1, &rule22}, + {420, 1, &rule21}, + {421, 1, &rule22}, + {422, 1, &rule40}, + {423, 1, &rule21}, + {424, 1, &rule22}, + {425, 1, &rule40}, + {428, 1, &rule21}, + {429, 1, &rule22}, + {430, 1, &rule40}, + {431, 1, &rule21}, + {432, 1, &rule22}, + {433, 2, &rule41}, + {435, 1, &rule21}, + {436, 1, &rule22}, + {437, 1, &rule21}, + {438, 1, &rule22}, + {439, 1, &rule42}, + {440, 1, &rule21}, + {441, 1, &rule22}, + {444, 1, &rule21}, + {445, 1, &rule22}, + {447, 1, &rule44}, + {452, 1, &rule45}, + {453, 1, &rule46}, + {454, 1, &rule47}, + {455, 1, &rule45}, + {456, 1, &rule46}, + {457, 1, &rule47}, + {458, 1, &rule45}, + {459, 1, &rule46}, + {460, 1, &rule47}, + {461, 1, &rule21}, + {462, 1, &rule22}, + {463, 1, &rule21}, + {464, 1, &rule22}, + {465, 1, &rule21}, + {466, 1, &rule22}, + {467, 1, &rule21}, + {468, 1, &rule22}, + {469, 1, &rule21}, + {470, 1, &rule22}, + {471, 1, &rule21}, + {472, 1, &rule22}, + {473, 1, &rule21}, + {474, 1, &rule22}, + {475, 1, &rule21}, + {476, 1, &rule22}, + {477, 1, &rule48}, + {478, 1, &rule21}, + {479, 1, &rule22}, + {480, 1, &rule21}, + {481, 1, &rule22}, + {482, 1, &rule21}, + {483, 1, &rule22}, + {484, 1, &rule21}, + {485, 1, &rule22}, + {486, 1, &rule21}, + {487, 1, &rule22}, + {488, 1, &rule21}, + {489, 1, &rule22}, + {490, 1, &rule21}, + {491, 1, &rule22}, + {492, 1, &rule21}, + {493, 1, &rule22}, + {494, 1, &rule21}, + {495, 1, &rule22}, + {497, 1, &rule45}, + {498, 1, &rule46}, + {499, 1, &rule47}, + {500, 1, &rule21}, + {501, 1, &rule22}, + {502, 1, &rule49}, + {503, 1, &rule50}, + {504, 1, &rule21}, + {505, 1, &rule22}, + {506, 1, &rule21}, + {507, 1, &rule22}, + {508, 1, &rule21}, + {509, 1, &rule22}, + {510, 1, &rule21}, + {511, 1, &rule22}, + {512, 1, &rule21}, + {513, 1, &rule22}, + {514, 1, &rule21}, + {515, 1, &rule22}, + {516, 1, &rule21}, + {517, 1, &rule22}, + {518, 1, &rule21}, + {519, 1, &rule22}, + {520, 1, &rule21}, + {521, 1, &rule22}, + {522, 1, &rule21}, + {523, 1, &rule22}, + {524, 1, &rule21}, + {525, 1, &rule22}, + {526, 1, &rule21}, + {527, 1, &rule22}, + {528, 1, &rule21}, + {529, 1, &rule22}, + {530, 1, &rule21}, + {531, 1, &rule22}, + {532, 1, &rule21}, + {533, 1, &rule22}, + {534, 1, &rule21}, + {535, 1, &rule22}, + {536, 1, &rule21}, + {537, 1, &rule22}, + {538, 1, &rule21}, + {539, 1, &rule22}, + {540, 1, &rule21}, + {541, 1, &rule22}, + {542, 1, &rule21}, + {543, 1, &rule22}, + {544, 1, &rule51}, + {546, 1, &rule21}, + {547, 1, &rule22}, + {548, 1, &rule21}, + {549, 1, &rule22}, + {550, 1, &rule21}, + {551, 1, &rule22}, + {552, 1, &rule21}, + {553, 1, &rule22}, + {554, 1, &rule21}, + {555, 1, &rule22}, + {556, 1, &rule21}, + {557, 1, &rule22}, + {558, 1, &rule21}, + {559, 1, &rule22}, + {560, 1, &rule21}, + {561, 1, &rule22}, + {562, 1, &rule21}, + {563, 1, &rule22}, + {595, 1, &rule52}, + {596, 1, &rule53}, + {598, 2, &rule54}, + {601, 1, &rule55}, + {603, 1, &rule56}, + {608, 1, &rule54}, + {611, 1, &rule57}, + {616, 1, &rule58}, + {617, 1, &rule59}, + {623, 1, &rule59}, + {626, 1, &rule60}, + {629, 1, &rule61}, + {640, 1, &rule62}, + {643, 1, &rule62}, + {648, 1, &rule62}, + {650, 2, &rule63}, + {658, 1, &rule64}, + {837, 1, &rule67}, + {902, 1, &rule68}, + {904, 3, &rule69}, + {908, 1, &rule70}, + {910, 2, &rule71}, + {913, 17, &rule9}, + {931, 9, &rule9}, + {940, 1, &rule72}, + {941, 3, &rule73}, + {945, 17, &rule12}, + {962, 1, &rule74}, + {963, 9, &rule12}, + {972, 1, &rule75}, + {973, 2, &rule76}, + {976, 1, &rule77}, + {977, 1, &rule78}, + {981, 1, &rule80}, + {982, 1, &rule81}, + {984, 1, &rule21}, + {985, 1, &rule22}, + {986, 1, &rule21}, + {987, 1, &rule22}, + {988, 1, &rule21}, + {989, 1, &rule22}, + {990, 1, &rule21}, + {991, 1, &rule22}, + {992, 1, &rule21}, + {993, 1, &rule22}, + {994, 1, &rule21}, + {995, 1, &rule22}, + {996, 1, &rule21}, + {997, 1, &rule22}, + {998, 1, &rule21}, + {999, 1, &rule22}, + {1000, 1, &rule21}, + {1001, 1, &rule22}, + {1002, 1, &rule21}, + {1003, 1, &rule22}, + {1004, 1, &rule21}, + {1005, 1, &rule22}, + {1006, 1, &rule21}, + {1007, 1, &rule22}, + {1008, 1, &rule82}, + {1009, 1, &rule83}, + {1010, 1, &rule84}, + {1012, 1, &rule85}, + {1013, 1, &rule86}, + {1015, 1, &rule21}, + {1016, 1, &rule22}, + {1017, 1, &rule87}, + {1018, 1, &rule21}, + {1019, 1, &rule22}, + {1024, 16, &rule88}, + {1040, 32, &rule9}, + {1072, 32, &rule12}, + {1104, 16, &rule83}, + {1120, 1, &rule21}, + {1121, 1, &rule22}, + {1122, 1, &rule21}, + {1123, 1, &rule22}, + {1124, 1, &rule21}, + {1125, 1, &rule22}, + {1126, 1, &rule21}, + {1127, 1, &rule22}, + {1128, 1, &rule21}, + {1129, 1, &rule22}, + {1130, 1, &rule21}, + {1131, 1, &rule22}, + {1132, 1, &rule21}, + {1133, 1, &rule22}, + {1134, 1, &rule21}, + {1135, 1, &rule22}, + {1136, 1, &rule21}, + {1137, 1, &rule22}, + {1138, 1, &rule21}, + {1139, 1, &rule22}, + {1140, 1, &rule21}, + {1141, 1, &rule22}, + {1142, 1, &rule21}, + {1143, 1, &rule22}, + {1144, 1, &rule21}, + {1145, 1, &rule22}, + {1146, 1, &rule21}, + {1147, 1, &rule22}, + {1148, 1, &rule21}, + {1149, 1, &rule22}, + {1150, 1, &rule21}, + {1151, 1, &rule22}, + {1152, 1, &rule21}, + {1153, 1, &rule22}, + {1162, 1, &rule21}, + {1163, 1, &rule22}, + {1164, 1, &rule21}, + {1165, 1, &rule22}, + {1166, 1, &rule21}, + {1167, 1, &rule22}, + {1168, 1, &rule21}, + {1169, 1, &rule22}, + {1170, 1, &rule21}, + {1171, 1, &rule22}, + {1172, 1, &rule21}, + {1173, 1, &rule22}, + {1174, 1, &rule21}, + {1175, 1, &rule22}, + {1176, 1, &rule21}, + {1177, 1, &rule22}, + {1178, 1, &rule21}, + {1179, 1, &rule22}, + {1180, 1, &rule21}, + {1181, 1, &rule22}, + {1182, 1, &rule21}, + {1183, 1, &rule22}, + {1184, 1, &rule21}, + {1185, 1, &rule22}, + {1186, 1, &rule21}, + {1187, 1, &rule22}, + {1188, 1, &rule21}, + {1189, 1, &rule22}, + {1190, 1, &rule21}, + {1191, 1, &rule22}, + {1192, 1, &rule21}, + {1193, 1, &rule22}, + {1194, 1, &rule21}, + {1195, 1, &rule22}, + {1196, 1, &rule21}, + {1197, 1, &rule22}, + {1198, 1, &rule21}, + {1199, 1, &rule22}, + {1200, 1, &rule21}, + {1201, 1, &rule22}, + {1202, 1, &rule21}, + {1203, 1, &rule22}, + {1204, 1, &rule21}, + {1205, 1, &rule22}, + {1206, 1, &rule21}, + {1207, 1, &rule22}, + {1208, 1, &rule21}, + {1209, 1, &rule22}, + {1210, 1, &rule21}, + {1211, 1, &rule22}, + {1212, 1, &rule21}, + {1213, 1, &rule22}, + {1214, 1, &rule21}, + {1215, 1, &rule22}, + {1217, 1, &rule21}, + {1218, 1, &rule22}, + {1219, 1, &rule21}, + {1220, 1, &rule22}, + {1221, 1, &rule21}, + {1222, 1, &rule22}, + {1223, 1, &rule21}, + {1224, 1, &rule22}, + {1225, 1, &rule21}, + {1226, 1, &rule22}, + {1227, 1, &rule21}, + {1228, 1, &rule22}, + {1229, 1, &rule21}, + {1230, 1, &rule22}, + {1232, 1, &rule21}, + {1233, 1, &rule22}, + {1234, 1, &rule21}, + {1235, 1, &rule22}, + {1236, 1, &rule21}, + {1237, 1, &rule22}, + {1238, 1, &rule21}, + {1239, 1, &rule22}, + {1240, 1, &rule21}, + {1241, 1, &rule22}, + {1242, 1, &rule21}, + {1243, 1, &rule22}, + {1244, 1, &rule21}, + {1245, 1, &rule22}, + {1246, 1, &rule21}, + {1247, 1, &rule22}, + {1248, 1, &rule21}, + {1249, 1, &rule22}, + {1250, 1, &rule21}, + {1251, 1, &rule22}, + {1252, 1, &rule21}, + {1253, 1, &rule22}, + {1254, 1, &rule21}, + {1255, 1, &rule22}, + {1256, 1, &rule21}, + {1257, 1, &rule22}, + {1258, 1, &rule21}, + {1259, 1, &rule22}, + {1260, 1, &rule21}, + {1261, 1, &rule22}, + {1262, 1, &rule21}, + {1263, 1, &rule22}, + {1264, 1, &rule21}, + {1265, 1, &rule22}, + {1266, 1, &rule21}, + {1267, 1, &rule22}, + {1268, 1, &rule21}, + {1269, 1, &rule22}, + {1272, 1, &rule21}, + {1273, 1, &rule22}, + {1280, 1, &rule21}, + {1281, 1, &rule22}, + {1282, 1, &rule21}, + {1283, 1, &rule22}, + {1284, 1, &rule21}, + {1285, 1, &rule22}, + {1286, 1, &rule21}, + {1287, 1, &rule22}, + {1288, 1, &rule21}, + {1289, 1, &rule22}, + {1290, 1, &rule21}, + {1291, 1, &rule22}, + {1292, 1, &rule21}, + {1293, 1, &rule22}, + {1294, 1, &rule21}, + {1295, 1, &rule22}, + {1329, 38, &rule90}, + {1377, 38, &rule91}, + {7680, 1, &rule21}, + {7681, 1, &rule22}, + {7682, 1, &rule21}, + {7683, 1, &rule22}, + {7684, 1, &rule21}, + {7685, 1, &rule22}, + {7686, 1, &rule21}, + {7687, 1, &rule22}, + {7688, 1, &rule21}, + {7689, 1, &rule22}, + {7690, 1, &rule21}, + {7691, 1, &rule22}, + {7692, 1, &rule21}, + {7693, 1, &rule22}, + {7694, 1, &rule21}, + {7695, 1, &rule22}, + {7696, 1, &rule21}, + {7697, 1, &rule22}, + {7698, 1, &rule21}, + {7699, 1, &rule22}, + {7700, 1, &rule21}, + {7701, 1, &rule22}, + {7702, 1, &rule21}, + {7703, 1, &rule22}, + {7704, 1, &rule21}, + {7705, 1, &rule22}, + {7706, 1, &rule21}, + {7707, 1, &rule22}, + {7708, 1, &rule21}, + {7709, 1, &rule22}, + {7710, 1, &rule21}, + {7711, 1, &rule22}, + {7712, 1, &rule21}, + {7713, 1, &rule22}, + {7714, 1, &rule21}, + {7715, 1, &rule22}, + {7716, 1, &rule21}, + {7717, 1, &rule22}, + {7718, 1, &rule21}, + {7719, 1, &rule22}, + {7720, 1, &rule21}, + {7721, 1, &rule22}, + {7722, 1, &rule21}, + {7723, 1, &rule22}, + {7724, 1, &rule21}, + {7725, 1, &rule22}, + {7726, 1, &rule21}, + {7727, 1, &rule22}, + {7728, 1, &rule21}, + {7729, 1, &rule22}, + {7730, 1, &rule21}, + {7731, 1, &rule22}, + {7732, 1, &rule21}, + {7733, 1, &rule22}, + {7734, 1, &rule21}, + {7735, 1, &rule22}, + {7736, 1, &rule21}, + {7737, 1, &rule22}, + {7738, 1, &rule21}, + {7739, 1, &rule22}, + {7740, 1, &rule21}, + {7741, 1, &rule22}, + {7742, 1, &rule21}, + {7743, 1, &rule22}, + {7744, 1, &rule21}, + {7745, 1, &rule22}, + {7746, 1, &rule21}, + {7747, 1, &rule22}, + {7748, 1, &rule21}, + {7749, 1, &rule22}, + {7750, 1, &rule21}, + {7751, 1, &rule22}, + {7752, 1, &rule21}, + {7753, 1, &rule22}, + {7754, 1, &rule21}, + {7755, 1, &rule22}, + {7756, 1, &rule21}, + {7757, 1, &rule22}, + {7758, 1, &rule21}, + {7759, 1, &rule22}, + {7760, 1, &rule21}, + {7761, 1, &rule22}, + {7762, 1, &rule21}, + {7763, 1, &rule22}, + {7764, 1, &rule21}, + {7765, 1, &rule22}, + {7766, 1, &rule21}, + {7767, 1, &rule22}, + {7768, 1, &rule21}, + {7769, 1, &rule22}, + {7770, 1, &rule21}, + {7771, 1, &rule22}, + {7772, 1, &rule21}, + {7773, 1, &rule22}, + {7774, 1, &rule21}, + {7775, 1, &rule22}, + {7776, 1, &rule21}, + {7777, 1, &rule22}, + {7778, 1, &rule21}, + {7779, 1, &rule22}, + {7780, 1, &rule21}, + {7781, 1, &rule22}, + {7782, 1, &rule21}, + {7783, 1, &rule22}, + {7784, 1, &rule21}, + {7785, 1, &rule22}, + {7786, 1, &rule21}, + {7787, 1, &rule22}, + {7788, 1, &rule21}, + {7789, 1, &rule22}, + {7790, 1, &rule21}, + {7791, 1, &rule22}, + {7792, 1, &rule21}, + {7793, 1, &rule22}, + {7794, 1, &rule21}, + {7795, 1, &rule22}, + {7796, 1, &rule21}, + {7797, 1, &rule22}, + {7798, 1, &rule21}, + {7799, 1, &rule22}, + {7800, 1, &rule21}, + {7801, 1, &rule22}, + {7802, 1, &rule21}, + {7803, 1, &rule22}, + {7804, 1, &rule21}, + {7805, 1, &rule22}, + {7806, 1, &rule21}, + {7807, 1, &rule22}, + {7808, 1, &rule21}, + {7809, 1, &rule22}, + {7810, 1, &rule21}, + {7811, 1, &rule22}, + {7812, 1, &rule21}, + {7813, 1, &rule22}, + {7814, 1, &rule21}, + {7815, 1, &rule22}, + {7816, 1, &rule21}, + {7817, 1, &rule22}, + {7818, 1, &rule21}, + {7819, 1, &rule22}, + {7820, 1, &rule21}, + {7821, 1, &rule22}, + {7822, 1, &rule21}, + {7823, 1, &rule22}, + {7824, 1, &rule21}, + {7825, 1, &rule22}, + {7826, 1, &rule21}, + {7827, 1, &rule22}, + {7828, 1, &rule21}, + {7829, 1, &rule22}, + {7835, 1, &rule94}, + {7840, 1, &rule21}, + {7841, 1, &rule22}, + {7842, 1, &rule21}, + {7843, 1, &rule22}, + {7844, 1, &rule21}, + {7845, 1, &rule22}, + {7846, 1, &rule21}, + {7847, 1, &rule22}, + {7848, 1, &rule21}, + {7849, 1, &rule22}, + {7850, 1, &rule21}, + {7851, 1, &rule22}, + {7852, 1, &rule21}, + {7853, 1, &rule22}, + {7854, 1, &rule21}, + {7855, 1, &rule22}, + {7856, 1, &rule21}, + {7857, 1, &rule22}, + {7858, 1, &rule21}, + {7859, 1, &rule22}, + {7860, 1, &rule21}, + {7861, 1, &rule22}, + {7862, 1, &rule21}, + {7863, 1, &rule22}, + {7864, 1, &rule21}, + {7865, 1, &rule22}, + {7866, 1, &rule21}, + {7867, 1, &rule22}, + {7868, 1, &rule21}, + {7869, 1, &rule22}, + {7870, 1, &rule21}, + {7871, 1, &rule22}, + {7872, 1, &rule21}, + {7873, 1, &rule22}, + {7874, 1, &rule21}, + {7875, 1, &rule22}, + {7876, 1, &rule21}, + {7877, 1, &rule22}, + {7878, 1, &rule21}, + {7879, 1, &rule22}, + {7880, 1, &rule21}, + {7881, 1, &rule22}, + {7882, 1, &rule21}, + {7883, 1, &rule22}, + {7884, 1, &rule21}, + {7885, 1, &rule22}, + {7886, 1, &rule21}, + {7887, 1, &rule22}, + {7888, 1, &rule21}, + {7889, 1, &rule22}, + {7890, 1, &rule21}, + {7891, 1, &rule22}, + {7892, 1, &rule21}, + {7893, 1, &rule22}, + {7894, 1, &rule21}, + {7895, 1, &rule22}, + {7896, 1, &rule21}, + {7897, 1, &rule22}, + {7898, 1, &rule21}, + {7899, 1, &rule22}, + {7900, 1, &rule21}, + {7901, 1, &rule22}, + {7902, 1, &rule21}, + {7903, 1, &rule22}, + {7904, 1, &rule21}, + {7905, 1, &rule22}, + {7906, 1, &rule21}, + {7907, 1, &rule22}, + {7908, 1, &rule21}, + {7909, 1, &rule22}, + {7910, 1, &rule21}, + {7911, 1, &rule22}, + {7912, 1, &rule21}, + {7913, 1, &rule22}, + {7914, 1, &rule21}, + {7915, 1, &rule22}, + {7916, 1, &rule21}, + {7917, 1, &rule22}, + {7918, 1, &rule21}, + {7919, 1, &rule22}, + {7920, 1, &rule21}, + {7921, 1, &rule22}, + {7922, 1, &rule21}, + {7923, 1, &rule22}, + {7924, 1, &rule21}, + {7925, 1, &rule22}, + {7926, 1, &rule21}, + {7927, 1, &rule22}, + {7928, 1, &rule21}, + {7929, 1, &rule22}, + {7936, 8, &rule95}, + {7944, 8, &rule96}, + {7952, 6, &rule95}, + {7960, 6, &rule96}, + {7968, 8, &rule95}, + {7976, 8, &rule96}, + {7984, 8, &rule95}, + {7992, 8, &rule96}, + {8000, 6, &rule95}, + {8008, 6, &rule96}, + {8017, 1, &rule95}, + {8019, 1, &rule95}, + {8021, 1, &rule95}, + {8023, 1, &rule95}, + {8025, 1, &rule96}, + {8027, 1, &rule96}, + {8029, 1, &rule96}, + {8031, 1, &rule96}, + {8032, 8, &rule95}, + {8040, 8, &rule96}, + {8048, 2, &rule97}, + {8050, 4, &rule98}, + {8054, 2, &rule99}, + {8056, 2, &rule100}, + {8058, 2, &rule101}, + {8060, 2, &rule102}, + {8064, 8, &rule95}, + {8072, 8, &rule103}, + {8080, 8, &rule95}, + {8088, 8, &rule103}, + {8096, 8, &rule95}, + {8104, 8, &rule103}, + {8112, 2, &rule95}, + {8115, 1, &rule104}, + {8120, 2, &rule96}, + {8122, 2, &rule105}, + {8124, 1, &rule106}, + {8126, 1, &rule107}, + {8131, 1, &rule104}, + {8136, 4, &rule108}, + {8140, 1, &rule106}, + {8144, 2, &rule95}, + {8152, 2, &rule96}, + {8154, 2, &rule109}, + {8160, 2, &rule95}, + {8165, 1, &rule84}, + {8168, 2, &rule96}, + {8170, 2, &rule110}, + {8172, 1, &rule87}, + {8179, 1, &rule104}, + {8184, 2, &rule111}, + {8186, 2, &rule112}, + {8188, 1, &rule106}, + {8486, 1, &rule115}, + {8490, 1, &rule116}, + {8491, 1, &rule117}, + {8544, 16, &rule118}, + {8560, 16, &rule119}, + {9398, 26, &rule120}, + {9424, 26, &rule121}, + {65313, 26, &rule9}, + {65345, 26, &rule12}, + {66560, 40, &rule124}, + {66600, 40, &rule125} +}; +static const struct _charblock_ spacechars[]={ + {32, 1, &rule1}, + {160, 1, &rule1}, + {5760, 1, &rule1}, + {6158, 1, &rule1}, + {8192, 12, &rule1}, + {8239, 1, &rule1}, + {8287, 1, &rule1}, + {12288, 1, &rule1} +}; + +/* + Obtain the reference to character rule by doing + binary search over the specified array of blocks. + To make checkattr shorter, the address of + nullrule is returned if the search fails: + this rule defines no category and no conversion + distances. The compare function returns 0 when + key->start is within the block. Otherwise + result of comparison of key->start and start of the + current block is returned as usual. +*/ + +static const struct _convrule_ nullrule={0,NUMCAT_CN,0,0,0,0}; + +int blkcmp(const void *vk,const void *vb) +{ + const struct _charblock_ *key,*cur; + key=vk; + cur=vb; + if((key->start>=cur->start)&&(key->start<(cur->start+cur->length))) + { + return 0; + } + if(key->start>cur->start) return 1; + return -1; +} + +static const struct _convrule_ *getrule( + const struct _charblock_ *blocks, + int numblocks, + int unichar) +{ + struct _charblock_ key={unichar,1,(void *)0}; + struct _charblock_ *cb=bsearch(&key,blocks,numblocks,sizeof(key),blkcmp); + if(cb==(void *)0) return &nullrule; + return cb->rule; +} + + + +/* + Check whether a character (internal code) has certain attributes. + Attributes (category flags) may be ORed. The function ANDs + character category flags and the mask and returns the result. + If the character belongs to one of the categories requested, + the result will be nonzero. +*/ + +inline static int checkattr(int c,unsigned int catmask) +{ + return (catmask & (getrule(allchars,(c<256)?NUM_LAT1BLOCKS:NUM_BLOCKS,c)->category)); +} + +inline static int checkattr_s(int c,unsigned int catmask) +{ + return (catmask & (getrule(spacechars,NUM_SPACEBLOCKS,c)->category)); +} + +/* + Define predicate functions for some combinations of categories. +*/ + +#define unipred(p,m) \ +int p(int c) \ +{ \ + return checkattr(c,m); \ +} + +#define unipred_s(p,m) \ +int p(int c) \ +{ \ + return checkattr_s(c,m); \ +} + +/* + Make these rules as close to Hugs as possible. +*/ + +unipred(u_iswcntrl,GENCAT_CC) +unipred(u_iswprint,~(GENCAT_ZL|GENCAT_ZP|GENCAT_CC|GENCAT_CF|GENCAT_CS|GENCAT_CO)) +unipred_s(u_iswspace,GENCAT_ZS) +unipred(u_iswupper,(GENCAT_LU|GENCAT_LT)) +unipred(u_iswlower,GENCAT_LL) +unipred(u_iswalpha,(GENCAT_LL|GENCAT_LU|GENCAT_LT|GENCAT_LM|GENCAT_LO)) +unipred(u_iswdigit,GENCAT_ND) + +unipred(u_iswalnum,(GENCAT_LT|GENCAT_LU|GENCAT_LL|GENCAT_LM|GENCAT_LO| + GENCAT_MC|GENCAT_ME|GENCAT_MN| + GENCAT_NO|GENCAT_ND|GENCAT_NL)) + +#define caseconv(p,to) \ +int p(int c) \ +{ \ + const struct _convrule_ *rule=getrule(convchars,NUM_CONVBLOCKS,c);\ + if(rule==&nullrule) return c;\ + return c+rule->to;\ +} + +caseconv(u_towupper,updist) +caseconv(u_towlower,lowdist) +caseconv(u_towtitle,titledist) + +int u_gencat(int c) +{ + return getrule(allchars,NUM_BLOCKS,c)->catnumber; +} + diff --git a/include/HsBase.h b/include/HsBase.h index a559774..6471aa1 100644 --- a/include/HsBase.h +++ b/include/HsBase.h @@ -117,6 +117,7 @@ #endif #include "lockFile.h" #include "dirUtils.h" +#include "WCsubst.h" #include "runProcess.h" diff --git a/include/WCsubst.h b/include/WCsubst.h new file mode 100644 index 0000000..f2436dd --- /dev/null +++ b/include/WCsubst.h @@ -0,0 +1,24 @@ +#ifndef WCSUBST_INCL + +#define WCSUBST_INCL + +#include + +int u_iswupper(int wc); +int u_iswdigit(int wc); +int u_iswalpha(int wc); +int u_iswcntrl(int wc); +int u_iswspace(int wc); +int u_iswprint(int wc); +int u_iswlower(int wc); + +int u_iswalnum(int wc); + +int u_towlower(int wc); +int u_towupper(int wc); +int u_towtitle(int wc); + +int u_gencat(int wc); + +#endif +