// // This CSharp output file generated by Gardens Point LEX // Version: 1.1.3.301 // Machine: DESKTOP-G8V08V4 // DateTime: 23.02.2022 10:29:10 // UserName: ????????? // GPLEX input file // GPLEX frame file // // Option settings: unicode, parser, minimize // Option settings: classes, compressMap, compressNext, persistBuffer, embedbuffers // Fallback code page: Target machine default // // // Experimental embedded frame // Version 1.1.3 of 18-April-2010 // // #define BACKUP #define PERSIST using System; using System.IO; using System.Text; using System.Globalization; using System.Collections.Generic; using System.Runtime.Serialization; using System.Diagnostics.CodeAnalysis; using PascalABCSavParser; using PascalABCCompiler.SyntaxTree; using PascalABCCompiler.ParserTools; using QUT.Gppg; namespace GPPGParserScanner { /// /// Summary Canonical example of GPLEX automaton /// #if STANDALONE // // These are the dummy declarations for stand-alone GPLEX applications // normally these declarations would come from the parser. // If you declare /noparser, or %option noparser then you get this. // public enum Tokens { EOF = 0, maxParseToken = int.MaxValue // must have at least these two, values are almost arbitrary } public abstract class ScanBase { [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] public abstract int yylex(); [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yywrap")] [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yywrap")] protected virtual bool yywrap() { return true; } #if BABEL protected abstract int CurrentSc { get; set; } // EolState is the 32-bit of state data persisted at // the end of each line for Visual Studio colorization. // The default is to return CurrentSc. You must override // this if you want more complicated behavior. public virtual int EolState { get { return CurrentSc; } set { CurrentSc = value; } } } public interface IColorScan { void SetSource(string source, int offset); int GetNext(ref int state, out int start, out int end); #endif // BABEL } #endif // STANDALONE // If the compiler can't find the scanner base class maybe you // need to run GPPG with the /gplex option, or GPLEX with /noparser #if BABEL public sealed partial class Scanner : ScanBase, IColorScan { private ScanBuff buffer; int currentScOrd; // start condition ordinal protected override int CurrentSc { // The current start state is a property // to try to avoid the user error of setting // scState but forgetting to update the FSA // start state "currentStart" // get { return currentScOrd; } // i.e. return YY_START; set { currentScOrd = value; // i.e. BEGIN(value); currentStart = startState[value]; } } #else // BABEL public sealed partial class Scanner : ScanBase { private ScanBuff buffer; int currentScOrd; // start condition ordinal #endif // BABEL /// /// The input buffer for this scanner. /// [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public ScanBuff Buffer { get { return buffer; } } private static int GetMaxParseToken() { System.Reflection.FieldInfo f = typeof(Tokens).GetField("maxParseToken"); return (f == null ? int.MaxValue : (int)f.GetValue(null)); } static int parserMax = GetMaxParseToken(); enum Result {accept, noMatch, contextFound}; const int maxAccept = 72; const int initial = 73; const int eofNum = 0; const int goStart = -1; const int INITIAL = 0; const int COMMENT = 1; const int COMMENT1 = 2; const int COMMENTONELINE = 3; const int INCL = 4; const int EXCLUDETEXT = 5; #region user code public PT parsertools; Stack buffStack = new Stack(); Stack fNameStack = new Stack(); Stack IfStack = new Stack(); // 0 - if, 1 - else public List Defines = new List(); int IfExclude; string Pars; string directivename; string directiveparam; LexLocation currentLexLocation; #endregion user code int state; int currentStart = startState[0]; int code; // last code read int cCol; // column number of code int lNum; // current line number // // The following instance variables are used, among other // things, for constructing the yylloc location objects. // int tokPos; // buffer position at start of token int tokCol; // zero-based column number at start of token int tokLin; // line number at start of token int tokEPos; // buffer position at end of token int tokECol; // column number at end of token int tokELin; // line number at end of token string tokTxt; // lazily constructed text of token #if STACK private Stack scStack = new Stack(); #endif // STACK #region ScannerTables struct Table { public int min; public int rng; public int dflt; public sbyte[] nxt; public Table(int m, int x, int d, sbyte[] n) { min = m; rng = x; dflt = d; nxt = n; } }; static int[] startState = new int[] {73, 110, 111, 112, 112, 113, 0}; #region TwoLevelCharacterMap // // There are 51 equivalence classes // There are 256 character sequence regions // There are 47 tables, 12032 entries // static sbyte[] mLo0 = new sbyte[256] { /* '\0' */ 5, 43, 5, 5, 5, 5, 5, 5, 5, 12, 0, 5, 5, 6, 5, 5, /* '\x10' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\x20' */ 12, 5, 5, 11, 4, 5, 13, 50, 7, 9, 8, 24, 14, 25, 16, 1, /* '0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 15, 17, 27, 23, 26, 20, /* '@' */ 22, 48, 46, 48, 48, 49, 48, 44, 44, 47, 44, 44, 44, 44, 44, 44, /* 'P' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 18, 29, 19, 28, 21, /* '`' */ 5, 40, 46, 48, 48, 31, 48, 44, 44, 36, 44, 44, 44, 41, 38, 37, /* 'p' */ 33, 44, 34, 35, 39, 44, 44, 44, 32, 42, 44, 3, 10, 2, 5, 5, /* '\x80' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\x90' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\xA0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 5, 5, 5, 5, 5, /* '\xB0' */ 5, 5, 5, 5, 5, 44, 5, 5, 5, 5, 44, 5, 5, 5, 5, 5, /* '\xC0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\xD0' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, /* '\xE0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\xF0' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mLo1 = new sbyte[256] { /* '\u0100' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0110' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0120' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0130' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0140' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0150' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0160' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0170' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0180' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0190' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u01A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u01B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u01C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u01D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u01E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u01F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mLo2 = new sbyte[256] { /* '\u0200' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0210' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0220' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0230' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0240' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0250' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0260' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0270' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0280' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0290' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u02A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u02B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u02C0' */ 44, 44, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u02D0' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u02E0' */ 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 5, /* '\u02F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo3 = new sbyte[256] { /* '\u0300' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0310' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0320' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0330' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0340' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0350' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0360' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0370' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 5, 5, /* '\u0380' */ 5, 5, 5, 5, 5, 5, 44, 5, 44, 44, 44, 5, 44, 5, 44, 44, /* '\u0390' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u03A0' */ 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u03B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u03C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u03D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u03E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u03F0' */ 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mLo4 = new sbyte[256] { /* '\u0400' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0410' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0420' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0430' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0440' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0450' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0460' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0470' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0480' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, /* '\u0490' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u04A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u04B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u04C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u04D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u04E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u04F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mLo5 = new sbyte[256] { /* '\u0500' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0510' */ 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0520' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0530' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0540' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0550' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 44, 5, 5, 5, 5, 5, 5, /* '\u0560' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0570' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0580' */ 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0590' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u05A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u05B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u05C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u05D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u05E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\u05F0' */ 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo6 = new sbyte[256] { /* '\u0600' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0610' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0620' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0630' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\u0640' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\u0650' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0660' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, /* '\u0670' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0680' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0690' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u06A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u06B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u06C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u06D0' */ 44, 44, 44, 44, 5, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u06E0' */ 5, 5, 5, 5, 5, 44, 44, 5, 5, 5, 5, 5, 5, 5, 44, 44, /* '\u06F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 5, 5, 44 }; static sbyte[] mLo7 = new sbyte[256] { /* '\u0700' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0710' */ 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0720' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0730' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0740' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, /* '\u0750' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0760' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, /* '\u0770' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0780' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0790' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u07A0' */ 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u07B0' */ 5, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u07C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, /* '\u07D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u07E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\u07F0' */ 5, 5, 5, 5, 44, 44, 5, 5, 5, 5, 44, 5, 5, 5, 5, 5 }; static sbyte[] mLo8 = new sbyte[256] { /* '\u0800' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0810' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0820' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0830' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0840' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0850' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0860' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0870' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0880' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0890' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u08A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u08B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u08C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u08D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u08E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u08F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo9 = new sbyte[256] { /* '\u0900' */ 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0910' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0920' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0930' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 44, 5, 5, /* '\u0940' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0950' */ 44, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0960' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0970' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, /* '\u0980' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 44, /* '\u0990' */ 44, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u09A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\u09B0' */ 44, 5, 44, 5, 5, 5, 44, 44, 44, 44, 5, 5, 5, 44, 5, 5, /* '\u09C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 5, /* '\u09D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 5, 44, /* '\u09E0' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u09F0' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo10 = new sbyte[256] { /* '\u0A00' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 44, /* '\u0A10' */ 44, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0A20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\u0A30' */ 44, 5, 44, 44, 5, 44, 44, 5, 44, 44, 5, 5, 5, 5, 5, 5, /* '\u0A40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0A50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 5, 44, 5, /* '\u0A60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0A70' */ 5, 5, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0A80' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, /* '\u0A90' */ 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0AA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\u0AB0' */ 44, 5, 44, 44, 5, 44, 44, 44, 44, 44, 5, 5, 5, 44, 5, 5, /* '\u0AC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0AD0' */ 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0AE0' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0AF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo11 = new sbyte[256] { /* '\u0B00' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 44, /* '\u0B10' */ 44, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0B20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\u0B30' */ 44, 5, 44, 44, 5, 44, 44, 44, 44, 44, 5, 5, 5, 44, 5, 5, /* '\u0B40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0B50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 5, 44, /* '\u0B60' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0B70' */ 5, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0B80' */ 5, 5, 5, 44, 5, 44, 44, 44, 44, 44, 44, 5, 5, 5, 44, 44, /* '\u0B90' */ 44, 5, 44, 44, 44, 44, 5, 5, 5, 44, 44, 5, 44, 5, 44, 44, /* '\u0BA0' */ 5, 5, 5, 44, 44, 5, 5, 5, 44, 44, 44, 5, 5, 5, 44, 44, /* '\u0BB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, /* '\u0BC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0BD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0BE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0BF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo12 = new sbyte[256] { /* '\u0C00' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, /* '\u0C10' */ 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0C20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\u0C30' */ 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, /* '\u0C40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0C50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0C60' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0C70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0C80' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, /* '\u0C90' */ 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0CA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\u0CB0' */ 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 5, 5, 5, 44, 5, 5, /* '\u0CC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0CD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 5, /* '\u0CE0' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0CF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo13 = new sbyte[256] { /* '\u0D00' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, /* '\u0D10' */ 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0D20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\u0D30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, /* '\u0D40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0D50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0D60' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0D70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0D80' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0D90' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 44, 44, 44, 44, 44, 44, /* '\u0DA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0DB0' */ 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 5, 5, /* '\u0DC0' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0DD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0DE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0DF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo14 = new sbyte[256] { /* '\u0E00' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0E10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0E20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0E30' */ 44, 5, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0E40' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0E50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0E60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0E70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0E80' */ 5, 44, 44, 5, 44, 5, 5, 44, 44, 5, 44, 5, 5, 44, 5, 5, /* '\u0E90' */ 5, 5, 5, 5, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, /* '\u0EA0' */ 5, 44, 44, 44, 5, 44, 5, 44, 5, 5, 44, 44, 5, 44, 44, 44, /* '\u0EB0' */ 44, 5, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 5, 5, /* '\u0EC0' */ 44, 44, 44, 44, 44, 5, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0ED0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 5, 5, /* '\u0EE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0EF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo15 = new sbyte[256] { /* '\u0F00' */ 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0F10' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0F20' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0F30' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0F40' */ 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, /* '\u0F50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u0F60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\u0F70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0F80' */ 5, 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 5, 5, 5, 5, /* '\u0F90' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FA0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FB0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo16 = new sbyte[256] { /* '\u1000' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1010' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1020' */ 44, 44, 5, 44, 44, 44, 44, 44, 5, 44, 44, 5, 5, 5, 5, 5, /* '\u1030' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1040' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1050' */ 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1060' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1070' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1080' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1090' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u10A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u10B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u10C0' */ 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u10D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u10E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u10F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 5, 5, 5 }; static sbyte[] mLo17 = new sbyte[256] { /* '\u1100' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1110' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1120' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1130' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1140' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1150' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 44, /* '\u1160' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1170' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1180' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1190' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u11A0' */ 44, 44, 44, 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u11B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u11C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u11D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u11E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u11F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo18 = new sbyte[256] { /* '\u1200' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1210' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1220' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1230' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1240' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 5, 5, /* '\u1250' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 5, 44, 44, 44, 44, 5, 5, /* '\u1260' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1270' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1280' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 5, 5, /* '\u1290' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u12A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u12B0' */ 44, 5, 44, 44, 44, 44, 5, 5, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u12C0' */ 44, 5, 44, 44, 44, 44, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u12D0' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u12E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u12F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mLo19 = new sbyte[256] { /* '\u1300' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1310' */ 44, 5, 44, 44, 44, 44, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1320' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1330' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1340' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1350' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\u1360' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1370' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1380' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1390' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u13A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u13B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u13C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u13D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u13E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u13F0' */ 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo20 = new sbyte[256] { /* '\u1400' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1410' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1420' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1430' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1440' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1450' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1460' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1470' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1480' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1490' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u14A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u14B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u14C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u14D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u14E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u14F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mLo22 = new sbyte[256] { /* '\u1600' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1610' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1620' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1630' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1640' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1650' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1660' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 44, /* '\u1670' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1680' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1690' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\u16A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u16B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u16C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u16D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u16E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\u16F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo23 = new sbyte[256] { /* '\u1700' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, /* '\u1710' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1720' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1730' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1740' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1750' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1760' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, /* '\u1770' */ 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1780' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1790' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u17A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u17B0' */ 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u17C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u17D0' */ 5, 5, 5, 5, 5, 5, 5, 44, 5, 5, 5, 5, 44, 5, 5, 5, /* '\u17E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u17F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo24 = new sbyte[256] { /* '\u1800' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1810' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1820' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1830' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1840' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1850' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1860' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1870' */ 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1880' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1890' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u18A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, /* '\u18B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u18C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u18D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u18E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u18F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo25 = new sbyte[256] { /* '\u1900' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1910' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, /* '\u1920' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1930' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1940' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1950' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1960' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, /* '\u1970' */ 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1980' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1990' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u19A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, /* '\u19B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u19C0' */ 5, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u19D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u19E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u19F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo26 = new sbyte[256] { /* '\u1A00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1A10' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A20' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A30' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A80' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A90' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1AA0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1AB0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1AC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1AD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1AE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1AF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo27 = new sbyte[256] { /* '\u1B00' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1B10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1B20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1B30' */ 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1B40' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, /* '\u1B50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1B60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1B70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1B80' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1B90' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1BA0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1BB0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1BC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1BD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1BE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1BF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo29 = new sbyte[256] { /* '\u1D00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D40' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1D90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1DA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1DB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1DC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1DD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1DE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1DF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo30 = new sbyte[256] { /* '\u1E00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E40' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1E90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, /* '\u1EA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1EB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1EC0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1ED0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1EE0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1EF0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo31 = new sbyte[256] { /* '\u1F00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1F10' */ 44, 44, 44, 44, 44, 44, 5, 5, 44, 44, 44, 44, 44, 44, 5, 5, /* '\u1F20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1F30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1F40' */ 44, 44, 44, 44, 44, 44, 5, 5, 44, 44, 44, 44, 44, 44, 5, 5, /* '\u1F50' */ 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 5, 44, 5, 44, 5, 44, /* '\u1F60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1F70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, /* '\u1F80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1F90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1FA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u1FB0' */ 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 5, 44, 5, /* '\u1FC0' */ 5, 5, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, /* '\u1FD0' */ 44, 44, 44, 44, 5, 5, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, /* '\u1FE0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, /* '\u1FF0' */ 5, 5, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5 }; static sbyte[] mLo32 = new sbyte[256] { /* '\u2000' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2010' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2020' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2030' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2040' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2050' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2060' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2070' */ 5, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, /* '\u2080' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2090' */ 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo33 = new sbyte[256] { /* '\u2100' */ 5, 5, 44, 5, 5, 5, 5, 44, 5, 5, 44, 44, 44, 44, 44, 44, /* '\u2110' */ 44, 44, 44, 44, 5, 44, 5, 5, 5, 44, 44, 44, 44, 44, 5, 5, /* '\u2120' */ 5, 5, 5, 5, 44, 5, 44, 5, 44, 5, 44, 44, 44, 44, 5, 44, /* '\u2130' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 44, 44, 44, 44, /* '\u2140' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 5, 5, 5, 5, 44, 5, /* '\u2150' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2160' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2170' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2180' */ 5, 5, 5, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2190' */ 5, 5, 30, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo44 = new sbyte[256] { /* '\u2C00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2C10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2C20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u2C30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2C40' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2C50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u2C60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, /* '\u2C70' */ 5, 5, 5, 5, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2C80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2C90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2CA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2CB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2CC0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2CD0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2CE0' */ 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2CF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo45 = new sbyte[256] { /* '\u2D00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2D10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2D20' */ 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2D30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2D40' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2D50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2D60' */ 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 44, /* '\u2D70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2D80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u2D90' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2DA0' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u2DB0' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u2DC0' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u2DD0' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u2DE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2DF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo48 = new sbyte[256] { /* '\u3000' */ 5, 5, 5, 5, 5, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u3010' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u3020' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u3030' */ 5, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 44, 44, 5, 5, 5, /* '\u3040' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3050' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3060' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3070' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3080' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3090' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 44, 44, 44, /* '\u30A0' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u30B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u30C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u30D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u30E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u30F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44 }; static sbyte[] mLo49 = new sbyte[256] { /* '\u3100' */ 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3110' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3120' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, /* '\u3130' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3140' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3150' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3160' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3170' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u3180' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, /* '\u3190' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u31A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u31B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u31C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u31D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u31E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u31F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mLo77 = new sbyte[256] { /* '\u4D00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D40' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4D90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4DA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u4DB0' */ 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u4DC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u4DD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u4DE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u4DF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo159 = new sbyte[256] { /* '\u9F00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F40' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9F90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9FA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\u9FB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, /* '\u9FC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u9FD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u9FE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u9FF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo164 = new sbyte[256] { /* '\uA400' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA410' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA420' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA430' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA440' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA450' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA460' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA470' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA480' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, /* '\uA490' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA4A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA4B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA4C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA4D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA4E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA4F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo167 = new sbyte[256] { /* '\uA700' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA710' */ 5, 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\uA720' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA730' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA740' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA750' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA760' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA770' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA780' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA790' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA7A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA7B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA7C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA7D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA7E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA7F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo168 = new sbyte[256] { /* '\uA800' */ 44, 44, 5, 44, 44, 44, 5, 44, 44, 44, 44, 5, 44, 44, 44, 44, /* '\uA810' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA820' */ 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA830' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA840' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA850' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA860' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uA870' */ 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA880' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA890' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA8A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA8B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA8C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA8D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA8E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA8F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo215 = new sbyte[256] { /* '\uD700' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD710' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD720' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD730' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD740' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD750' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD760' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD770' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD780' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD790' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uD7A0' */ 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo250 = new sbyte[256] { /* '\uFA00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFA10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFA20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, /* '\uFA30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFA40' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFA50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFA60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\uFA70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFA80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFA90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFAA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFAB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFAC0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFAD0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, /* '\uFAE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFAF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo251 = new sbyte[256] { /* '\uFB00' */ 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFB10' */ 5, 5, 5, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 44, 5, 44, /* '\uFB20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\uFB30' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 5, 44, 5, /* '\uFB40' */ 44, 44, 5, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFB50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFB60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFB70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFB80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFB90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFBA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFBB0' */ 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFBC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFBD0' */ 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFBE0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFBF0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mLo253 = new sbyte[256] { /* '\uFD00' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFD10' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFD20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFD30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, /* '\uFD40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFD50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFD60' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFD70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFD80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFD90' */ 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFDA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFDB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFDC0' */ 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFDD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFDE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFDF0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5 }; static sbyte[] mLo254 = new sbyte[256] { /* '\uFE00' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE10' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE20' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE30' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE70' */ 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFE80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFE90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFEA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFEB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFEC0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFED0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFEE0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFEF0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5 }; static sbyte[] mLo255 = new sbyte[256] { /* '\uFF00' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFF10' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFF20' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFF30' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\uFF40' */ 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFF50' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, /* '\uFF60' */ 5, 5, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFF70' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFF80' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFF90' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFFA0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\uFFB0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, /* '\uFFC0' */ 5, 5, 44, 44, 44, 44, 44, 44, 5, 5, 44, 44, 44, 44, 44, 44, /* '\uFFD0' */ 5, 5, 44, 44, 44, 44, 44, 44, 5, 5, 44, 44, 44, 5, 5, 5, /* '\uFFE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFFF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[][] map = new sbyte[256][] { /* '\u00xx' */ mLo0, mLo1, mLo2, mLo3, mLo4, mLo5, mLo6, mLo7, mLo8, mLo9, mLo10, mLo11, mLo12, mLo13, mLo14, mLo15, /* '\u10xx' */ mLo16, mLo17, mLo18, mLo19, mLo20, mLo1, mLo22, mLo23, mLo24, mLo25, mLo26, mLo27, mLo8, mLo29, mLo30, mLo31, /* '\u20xx' */ mLo32, mLo33, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo44, mLo45, mLo8, mLo8, /* '\u30xx' */ mLo48, mLo49, mLo8, mLo8, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, /* '\u40xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo77, mLo1, mLo1, /* '\u50xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, /* '\u60xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, /* '\u70xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, /* '\u80xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, /* '\u90xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo159, /* '\uA0xx' */ mLo1, mLo1, mLo1, mLo1, mLo164, mLo8, mLo8, mLo167, mLo168, mLo8, mLo8, mLo8, mLo1, mLo1, mLo1, mLo1, /* '\uB0xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, /* '\uC0xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, /* '\uD0xx' */ mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo1, mLo215, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, /* '\uE0xx' */ mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, /* '\uF0xx' */ mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo8, mLo1, mLo250, mLo251, mLo1, mLo253, mLo254, mLo255}; #endregion #region CompressedCharacterMap // // There are 51 equivalence classes // There are 21 character sequence regions // There are 6 tables, 1255 entries // There are 15 runs, 0 singletons // Decision tree depth is 5 // static sbyte[] mapC0 = new sbyte[251] { /* '\U00010000' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, /* '\U00010010' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010020' */ 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010030' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 5, 44, /* '\U00010040' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, /* '\U00010050' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, /* '\U00010060' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010070' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010080' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010090' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000100A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000100B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000100C0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000100D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000100E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000100F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44 }; static sbyte[] mapC2 = new sbyte[256] { /* '\U00010300' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010310' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, /* '\U00010320' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010330' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010340' */ 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, 5, 5, 5, 5, /* '\U00010350' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010360' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010370' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010380' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010390' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 5, /* '\U000103A0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000103B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000103C0' */ 44, 44, 44, 44, 5, 5, 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U000103D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U000103E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U000103F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mapC5 = new sbyte[64] { /* '\U00010800' */ 44, 44, 44, 44, 44, 44, 5, 5, 44, 5, 44, 44, 44, 44, 44, 44, /* '\U00010810' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010820' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010830' */ 44, 44, 44, 44, 44, 44, 5, 44, 44, 5, 5, 5, 44, 5, 5, 44 }; static sbyte[] mapC9 = new sbyte[52] { /* '\U00010A00' */ 44, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010A10' */ 44, 44, 44, 44, 5, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, /* '\U00010A20' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U00010A30' */ 44, 44, 44, 44 }; static sbyte[] mapC13 = new sbyte[338] { /* '\U0001D400' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D410' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D420' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D430' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D440' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D450' */ 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D460' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D470' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D480' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D490' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, /* '\U0001D4A0' */ 5, 5, 44, 5, 5, 44, 44, 5, 5, 44, 44, 44, 44, 5, 44, 44, /* '\U0001D4B0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 5, 44, 44, 44, /* '\U0001D4C0' */ 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D4D0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D4E0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D4F0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D500' */ 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 5, 5, 44, 44, 44, /* '\U0001D510' */ 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, /* '\U0001D520' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D530' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 5, /* '\U0001D540' */ 44, 44, 44, 44, 44, 5, 44, 5, 5, 5, 44, 44, 44, 44, 44, 44, /* '\U0001D550' */ 44, 5 }; static sbyte[] mapC15 = new sbyte[294] { /* '\U0001D6A6' */ 5, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D6B6' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, /* '\U0001D6C6' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D6D6' */ 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D6E6' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D6F6' */ 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D706' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, /* '\U0001D716' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D726' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, /* '\U0001D736' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D746' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\U0001D756' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D766' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, /* '\U0001D776' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D786' */ 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D796' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D7A6' */ 44, 44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, /* '\U0001D7B6' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 44, 44, /* '\U0001D7C6' */ 44, 44, 44, 44, 44, 44 }; static sbyte MapC(int code) { // '\U00010000' <= code <= '\U0010FFFF' if (code < 68148) // '\U00010000' <= code <= '\U00010A33' if (code < 67584) // '\U00010000' <= code <= '\U000107FF' if (code < 66304) // '\U00010000' <= code <= '\U000102FF' if (code < 65787) // '\U00010000' <= code <= '\U000100FA' return mapC0[code - 65536]; else // '\U000100FB' <= code <= '\U000102FF' return (sbyte)5; else // '\U00010300' <= code <= '\U000107FF' if (code < 66560) // '\U00010300' <= code <= '\U000103FF' return mapC2[code - 66304]; else // '\U00010400' <= code <= '\U000107FF' if (code < 66718) // '\U00010400' <= code <= '\U0001049D' return (sbyte)44; else // '\U0001049E' <= code <= '\U000107FF' return (sbyte)5; else // '\U00010800' <= code <= '\U00010A33' if (code < 67840) // '\U00010800' <= code <= '\U000108FF' if (code < 67648) // '\U00010800' <= code <= '\U0001083F' return mapC5[code - 67584]; else // '\U00010840' <= code <= '\U000108FF' return (sbyte)5; else // '\U00010900' <= code <= '\U00010A33' if (code < 67862) // '\U00010900' <= code <= '\U00010915' return (sbyte)44; else // '\U00010916' <= code <= '\U00010A33' if (code < 68096) // '\U00010916' <= code <= '\U000109FF' return (sbyte)5; else // '\U00010A00' <= code <= '\U00010A33' return mapC9[code - 68096]; else // '\U00010A34' <= code <= '\U0010FFFF' if (code < 120486) // '\U00010A34' <= code <= '\U0001D6A5' if (code < 74607) // '\U00010A34' <= code <= '\U0001236E' if (code < 73728) // '\U00010A34' <= code <= '\U00011FFF' return (sbyte)5; else // '\U00012000' <= code <= '\U0001236E' return (sbyte)44; else // '\U0001236F' <= code <= '\U0001D6A5' if (code < 119808) // '\U0001236F' <= code <= '\U0001D3FF' return (sbyte)5; else // '\U0001D400' <= code <= '\U0001D6A5' if (code < 120146) // '\U0001D400' <= code <= '\U0001D551' return mapC13[code - 119808]; else // '\U0001D552' <= code <= '\U0001D6A5' return (sbyte)44; else // '\U0001D6A6' <= code <= '\U0010FFFF' if (code < 173783) // '\U0001D6A6' <= code <= '\U0002A6D6' if (code < 120780) // '\U0001D6A6' <= code <= '\U0001D7CB' return mapC15[code - 120486]; else // '\U0001D7CC' <= code <= '\U0002A6D6' if (code < 131072) // '\U0001D7CC' <= code <= '\U0001FFFF' return (sbyte)5; else // '\U00020000' <= code <= '\U0002A6D6' return (sbyte)44; else // '\U0002A6D7' <= code <= '\U0010FFFF' if (code < 194560) // '\U0002A6D7' <= code <= '\U0002F7FF' return (sbyte)5; else // '\U0002F800' <= code <= '\U0010FFFF' if (code < 195102) // '\U0002F800' <= code <= '\U0002FA1D' return (sbyte)44; else // '\U0002FA1E' <= code <= '\U0010FFFF' return (sbyte)5; } #endregion static sbyte Map(int code) { if (code <= 65535) return map[code / 256][code % 256]; else return MapC(code); } static Table[] NxS = new Table[115] { /* NxS[ 0] */ new Table(0, 0, 0, null), /* NxS[ 1] */ new Table(1, 23, -1, new sbyte[] {61, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62}), /* NxS[ 2] */ new Table(0, 0, -1, null), /* NxS[ 3] */ new Table(4, 1, -1, new sbyte[] {109}), /* NxS[ 4] */ new Table(31, 20, -1, new sbyte[] {58, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, 58, 58, -1, 58, 58, 108}), /* NxS[ 5] */ new Table(8, 1, -1, new sbyte[] {57}), /* NxS[ 6] */ new Table(8, 16, -1, new sbyte[] {55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56}), /* NxS[ 7] */ new Table(0, 0, -1, null), /* NxS[ 8] */ new Table(0, 0, -1, null), /* NxS[ 9] */ new Table(43, 39, 51, new sbyte[] {-1, 51, 52, 51, 51, 51, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1}), /* NxS[ 10] */ new Table(21, 29, -1, new sbyte[] {28, -1, -1, -1, -1, -1, -1, -1, -1, -1, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -1, 28, -1, 28, 28, 28, 28}), /* NxS[ 11] */ new Table(0, 0, -1, null), /* NxS[ 12] */ new Table(23, 1, -1, new sbyte[] {50}), /* NxS[ 13] */ new Table(16, 1, -1, new sbyte[] {49}), /* NxS[ 14] */ new Table(0, 0, -1, null), /* NxS[ 15] */ new Table(0, 0, -1, null), /* NxS[ 16] */ new Table(0, 0, -1, null), /* NxS[ 17] */ new Table(16, 5, -1, new sbyte[] {46, -1, 47, -1, 48}), /* NxS[ 18] */ new Table(21, 29, -1, new sbyte[] {28, -1, -1, -1, -1, -1, -1, -1, -1, -1, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -1, 28, 28, 28, 28, 28, 28}), /* NxS[ 19] */ new Table(0, 0, -1, null), /* NxS[ 20] */ new Table(0, 0, -1, null), /* NxS[ 21] */ new Table(23, 1, -1, new sbyte[] {45}), /* NxS[ 22] */ new Table(23, 4, -1, new sbyte[] {43, -1, -1, 44}), /* NxS[ 23] */ new Table(23, 1, -1, new sbyte[] {42}), /* NxS[ 24] */ new Table(23, 5, -1, new sbyte[] {37, -1, -1, 38, 79}), /* NxS[ 25] */ new Table(0, 0, -1, null), /* NxS[ 26] */ new Table(7, 1, -1, new sbyte[] {36}), /* NxS[ 27] */ new Table(0, 0, -1, null), /* NxS[ 28] */ new Table(21, 29, -1, new sbyte[] {28, -1, -1, -1, -1, -1, -1, -1, -1, -1, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -1, 28, 28, 28, 28, 28, 28}), /* NxS[ 29] */ new Table(0, 0, -1, null), /* NxS[ 30] */ new Table(16, 34, -1, new sbyte[] {75, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, 77, -1, -1, 76}), /* NxS[ 31] */ new Table(50, 2, 74, new sbyte[] {32, -1}), /* NxS[ 32] */ new Table(50, 1, -1, new sbyte[] {74}), /* NxS[ 33] */ new Table(0, 0, -1, null), /* NxS[ 34] */ new Table(45, 1, -1, new sbyte[] {34}), /* NxS[ 35] */ new Table(31, 19, -1, new sbyte[] {76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35, -1, -1, -1, 76}), /* NxS[ 36] */ new Table(0, 0, -1, null), /* NxS[ 37] */ new Table(0, 0, -1, null), /* NxS[ 38] */ new Table(0, 0, -1, null), /* NxS[ 39] */ new Table(0, 0, -1, null), /* NxS[ 40] */ new Table(0, 0, -1, null), /* NxS[ 41] */ new Table(0, 0, -1, null), /* NxS[ 42] */ new Table(0, 0, -1, null), /* NxS[ 43] */ new Table(0, 0, -1, null), /* NxS[ 44] */ new Table(0, 0, -1, null), /* NxS[ 45] */ new Table(0, 0, -1, null), /* NxS[ 46] */ new Table(0, 0, -1, null), /* NxS[ 47] */ new Table(0, 0, -1, null), /* NxS[ 48] */ new Table(0, 0, -1, null), /* NxS[ 49] */ new Table(0, 0, -1, null), /* NxS[ 50] */ new Table(0, 0, -1, null), /* NxS[ 51] */ new Table(21, 29, -1, new sbyte[] {51, -1, -1, -1, -1, -1, -1, -1, -1, -1, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, -1, 51, 51, 51, 51, 51, 51}), /* NxS[ 52] */ new Table(45, 1, -1, new sbyte[] {52}), /* NxS[ 53] */ new Table(0, 13, -1, new sbyte[] {53, -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, -1, 53}), /* NxS[ 54] */ new Table(0, 13, -1, new sbyte[] {54, -1, -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, 54}), /* NxS[ 55] */ new Table(0, 0, -1, null), /* NxS[ 56] */ new Table(0, 0, -1, null), /* NxS[ 57] */ new Table(0, 0, -1, null), /* NxS[ 58] */ new Table(31, 19, -1, new sbyte[] {58, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, 58, 58, -1, 58, 58}), /* NxS[ 59] */ new Table(50, 1, -1, new sbyte[] {108}), /* NxS[ 60] */ new Table(0, 0, -1, null), /* NxS[ 61] */ new Table(0, 7, 61, new sbyte[] {-1, 61, 61, 61, 61, 61, -1}), /* NxS[ 62] */ new Table(0, 0, -1, null), /* NxS[ 63] */ new Table(0, 0, -1, null), /* NxS[ 64] */ new Table(0, 0, -1, null), /* NxS[ 65] */ new Table(0, 0, -1, null), /* NxS[ 66] */ new Table(9, 1, -1, new sbyte[] {67}), /* NxS[ 67] */ new Table(0, 0, -1, null), /* NxS[ 68] */ new Table(0, 0, -1, null), /* NxS[ 69] */ new Table(1, 1, -1, new sbyte[] {72}), /* NxS[ 70] */ new Table(4, 1, -1, new sbyte[] {114}), /* NxS[ 71] */ new Table(0, 0, -1, null), /* NxS[ 72] */ new Table(0, 7, 72, new sbyte[] {-1, 72, 72, 72, 72, 72, -1}), /* NxS[ 73] */ new Table(43, 39, 28, new sbyte[] {29, 28, 30, 28, 28, 28, 28, 31, -1, 1, 2, 3, 4, 2, -1, 5, 6, 7, 8, 9, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}), /* NxS[ 74] */ new Table(50, 2, 74, new sbyte[] {32, -1}), /* NxS[ 75] */ new Table(45, 1, -1, new sbyte[] {35}), /* NxS[ 76] */ new Table(24, 22, -1, new sbyte[] {78, 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34}), /* NxS[ 77] */ new Table(36, 12, -1, new sbyte[] {33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33}), /* NxS[ 78] */ new Table(45, 1, -1, new sbyte[] {34}), /* NxS[ 79] */ new Table(31, 9, -1, new sbyte[] {80, -1, -1, -1, 81, -1, -1, -1, 82}), /* NxS[ 80] */ new Table(32, 1, -1, new sbyte[] {96}), /* NxS[ 81] */ new Table(39, 1, -1, new sbyte[] {87}), /* NxS[ 82] */ new Table(42, 1, -1, new sbyte[] {83}), /* NxS[ 83] */ new Table(33, 1, -1, new sbyte[] {84}), /* NxS[ 84] */ new Table(31, 1, -1, new sbyte[] {85}), /* NxS[ 85] */ new Table(26, 1, -1, new sbyte[] {86}), /* NxS[ 86] */ new Table(26, 1, -1, new sbyte[] {39}), /* NxS[ 87] */ new Table(40, 1, -1, new sbyte[] {88}), /* NxS[ 88] */ new Table(39, 1, -1, new sbyte[] {89}), /* NxS[ 89] */ new Table(31, 1, -1, new sbyte[] {90}), /* NxS[ 90] */ new Table(41, 1, -1, new sbyte[] {91}), /* NxS[ 91] */ new Table(31, 1, -1, new sbyte[] {92}), /* NxS[ 92] */ new Table(38, 1, -1, new sbyte[] {93}), /* NxS[ 93] */ new Table(39, 1, -1, new sbyte[] {94}), /* NxS[ 94] */ new Table(26, 1, -1, new sbyte[] {95}), /* NxS[ 95] */ new Table(26, 1, -1, new sbyte[] {40}), /* NxS[ 96] */ new Table(33, 1, -1, new sbyte[] {97}), /* NxS[ 97] */ new Table(34, 1, -1, new sbyte[] {98}), /* NxS[ 98] */ new Table(31, 1, -1, new sbyte[] {99}), /* NxS[ 99] */ new Table(35, 1, -1, new sbyte[] {100}), /* NxS[ 100] */ new Table(35, 1, -1, new sbyte[] {101}), /* NxS[ 101] */ new Table(36, 1, -1, new sbyte[] {102}), /* NxS[ 102] */ new Table(37, 1, -1, new sbyte[] {103}), /* NxS[ 103] */ new Table(38, 1, -1, new sbyte[] {104}), /* NxS[ 104] */ new Table(26, 1, -1, new sbyte[] {105}), /* NxS[ 105] */ new Table(26, 1, -1, new sbyte[] {41}), /* NxS[ 106] */ new Table(0, 13, -1, new sbyte[] {53, -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, 107, 53}), /* NxS[ 107] */ new Table(0, 13, -1, new sbyte[] {54, -1, -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, 54}), /* NxS[ 108] */ new Table(50, 2, 108, new sbyte[] {59, -1}), /* NxS[ 109] */ new Table(0, 7, 109, new sbyte[] {-1, 109, 60, 109, 109, 109, -1}), /* NxS[ 110] */ new Table(2, 1, 63, new sbyte[] {64}), /* NxS[ 111] */ new Table(8, 1, 65, new sbyte[] {66}), /* NxS[ 112] */ new Table(0, 0, -1, null), /* NxS[ 113] */ new Table(1, 3, 68, new sbyte[] {69, 68, 70}), /* NxS[ 114] */ new Table(0, 7, 114, new sbyte[] {-1, 114, 71, 114, 114, 114, -1}), }; int NextState() { if (code == ScanBuff.EndOfFile) return eofNum; else unchecked { int rslt; int idx = Map(code) - NxS[state].min; if (idx < 0) idx += 51; if ((uint)idx >= (uint)NxS[state].rng) rslt = NxS[state].dflt; else rslt = NxS[state].nxt[idx]; return rslt; } } #endregion #if BACKUP // ============================================================== // == Nested struct used for backup in automata that do backup == // ============================================================== struct Context // class used for automaton backup. { public int bPos; public int rPos; // scanner.readPos saved value public int cCol; public int lNum; // Need this in case of backup over EOL. public int state; public int cChr; } private Context ctx = new Context(); #endif // BACKUP // ============================================================== // ==== Nested struct to support input switching in scanners ==== // ============================================================== struct BufferContext { internal ScanBuff buffSv; internal int chrSv; internal int cColSv; internal int lNumSv; } // ============================================================== // ===== Private methods to save and restore buffer contexts ==== // ============================================================== /// /// This method creates a buffer context record from /// the current buffer object, together with some /// scanner state values. /// [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] BufferContext MkBuffCtx() { BufferContext rslt; rslt.buffSv = this.buffer; rslt.chrSv = this.code; rslt.cColSv = this.cCol; rslt.lNumSv = this.lNum; return rslt; } /// /// This method restores the buffer value and allied /// scanner state from the given context record value. /// [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] void RestoreBuffCtx(BufferContext value) { this.buffer = value.buffSv; this.code = value.chrSv; this.cCol = value.cColSv; this.lNum = value.lNumSv; } // =================== End Nested classes ======================= #if !NOFILES public Scanner(Stream file) { SetSource(file, 0); // unicode option } public Scanner(Stream file, string codepage) { SetSource(file, CodePageHandling.GetCodePage(codepage)); } #endif // !NOFILES public Scanner() { } private int readPos; void GetCode() { if (code == '\n') // This needs to be fixed for other conventions // i.e. [\r\n\205\u2028\u2029] { cCol = -1; lNum++; } readPos = buffer.Pos; // Now read new codepoint. code = buffer.Read(); if (code > ScanBuff.EndOfFile) { #if (!BYTEMODE) if (code >= 0xD800 && code <= 0xDBFF) { int next = buffer.Read(); if (next < 0xDC00 || next > 0xDFFF) code = ScanBuff.UnicodeReplacementChar; else code = (0x10000 + (code & 0x3FF << 10) + (next & 0x3FF)); } #endif cCol++; } } void MarkToken() { #if (!PERSIST) buffer.Mark(); #endif tokPos = readPos; tokLin = lNum; tokCol = cCol; } void MarkEnd() { tokTxt = null; tokEPos = readPos; tokELin = lNum; tokECol = cCol; } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] int Peek() { int rslt, codeSv = code, cColSv = cCol, lNumSv = lNum, bPosSv = buffer.Pos; GetCode(); rslt = code; lNum = lNumSv; cCol = cColSv; code = codeSv; buffer.Pos = bPosSv; return rslt; } // ============================================================== // ===== Initialization of string-based input buffers ==== // ============================================================== /// /// Create and initialize a StringBuff buffer object for this scanner /// /// the input string /// starting offset in the string [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void SetSource(string source, int offset) { this.buffer = ScanBuff.GetBuffer(source); this.buffer.Pos = offset; this.lNum = 0; this.code = '\n'; // to initialize yyline, yycol and lineStart GetCode(); } #if !NOFILES // ================ LineBuffer Initialization =================== /// /// Create and initialize a LineBuff buffer object for this scanner /// /// the list of input strings [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void SetSource(IList source) { this.buffer = ScanBuff.GetBuffer(source); this.code = '\n'; // to initialize yyline, yycol and lineStart this.lNum = 0; GetCode(); } // =============== StreamBuffer Initialization ================== /// /// Create and initialize a StreamBuff buffer object for this scanner. /// StreamBuff is buffer for 8-bit byte files. /// /// the input byte stream [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void SetSource(Stream source) { this.buffer = ScanBuff.GetBuffer(source); this.lNum = 0; this.code = '\n'; // to initialize yyline, yycol and lineStart GetCode(); } #if !BYTEMODE // ================ TextBuffer Initialization =================== /// /// Create and initialize a TextBuff buffer object for this scanner. /// TextBuff is a buffer for encoded unicode files. /// /// the input text file /// Code page to use if file has /// no BOM. For 0, use machine default; for -1, 8-bit binary [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void SetSource(Stream source, int fallbackCodePage) { this.buffer = ScanBuff.GetBuffer(source, fallbackCodePage); this.lNum = 0; this.code = '\n'; // to initialize yyline, yycol and lineStart GetCode(); } #endif // !BYTEMODE #endif // !NOFILES // ============================================================== #if BABEL // // Get the next token for Visual Studio // // "state" is the inout mode variable that maintains scanner // state between calls, using the EolState property. In principle, // if the calls of EolState are costly set could be called once // only per line, at the start; and get called only at the end // of the line. This needs more infrastructure ... // public int GetNext(ref int state, out int start, out int end) { Tokens next; int s, e; s = state; // state at start EolState = state; next = (Tokens)Scan(); state = EolState; e = state; // state at end; start = tokPos; end = tokEPos - 1; // end is the index of last char. return (int)next; } #endif // BABEL // ======== AbstractScanner<> Implementation ========= [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] public override int yylex() { // parserMax is set by reflecting on the Tokens // enumeration. If maxParseToken is defined // that is used, otherwise int.MaxValue is used. int next; do { next = Scan(); } while (next >= parserMax); return next; } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] int yypos { get { return tokPos; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] int yyline { get { return tokLin; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] int yycol { get { return tokCol; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yytext")] [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yytext")] public string yytext { get { if (tokTxt == null) tokTxt = buffer.GetString(tokPos, tokEPos); return tokTxt; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] void yyless(int n) { buffer.Pos = tokPos; // Must read at least one char, so set before start. cCol = tokCol - 1; GetCode(); // Now ensure that line counting is correct. lNum = tokLin; // And count the rest of the text. for (int i = 0; i < n; i++) GetCode(); MarkEnd(); } // // It would be nice to count backward in the text // but it does not seem possible to re-establish // the correct column counts except by going forward. // [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] void _yytrunc(int n) { yyless(yyleng - n); } // // This is painful, but we no longer count // codepoints. For the overwhelming majority // of cases the single line code is fast, for // the others, well, at least it is all in the // buffer so no files are touched. Note that we // can't use (tokEPos - tokPos) because of the // possibility of surrogate pairs in the token. // [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyleng")] [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyleng")] public int yyleng { get { #if BYTEMODE return tokEPos - tokPos; #else if (tokELin == tokLin) return tokECol - tokCol; else { int ch; int count = 0; int save = buffer.Pos; buffer.Pos = tokPos; do { ch = buffer.Read(); if (!char.IsHighSurrogate((char)ch)) count++; } while (buffer.Pos < tokEPos && ch != ScanBuff.EndOfFile); buffer.Pos = save; return count; } #endif // BYTEMODE } } // ============ methods available in actions ============== [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal int YY_START { get { return currentScOrd; } set { currentScOrd = value; currentStart = startState[value]; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal void BEGIN(int next) { currentScOrd = next; currentStart = startState[next]; } // ============== The main tokenizer code ================= int Scan() { try { for (; ; ) { int next; // next state to enter #if BACKUP Result rslt = Result.noMatch; #endif // BACKUP #if LEFTANCHORS for (;;) { // Discard characters that do not start any pattern. // Must check the left anchor condition after *every* GetCode! state = ((cCol == 0) ? anchorState[currentScOrd] : currentStart); if ((next = NextState()) != goStart) break; // LOOP EXIT HERE... GetCode(); } #else // !LEFTANCHORS state = currentStart; while ((next = NextState()) == goStart) // At this point, the current character has no // transition from the current state. We discard // the "no-match" char. In traditional LEX such // characters are echoed to the console. GetCode(); #endif // LEFTANCHORS // At last, a valid transition ... MarkToken(); state = next; GetCode(); while ((next = NextState()) > eofNum) // Exit for goStart AND for eofNum #if BACKUP if (state <= maxAccept && next > maxAccept) // need to prepare backup data { // ctx is an object. The fields may be // mutated by the call to Recurse2. // On return the data in ctx is the // *latest* accept state that was found. rslt = Recurse2(ref ctx, next); if (rslt == Result.noMatch) RestoreStateAndPos(ref ctx); break; } else #endif // BACKUP { state = next; GetCode(); } if (state <= maxAccept) { MarkEnd(); #region ActionSwitch #pragma warning disable 162 switch (state) { case eofNum: if (yywrap()) return (int)Tokens.EOF; break; case 1: yylval = new Union(); yylval.op = new op_type_node(Operators.Division); return (int)Tokens.tkSlash; break; case 2: case 4: case 9: case 26: case 31: parsertools.AddErrorFromResource("UNEXPECTED_SYMBOL{0}",CurrentLexLocation, yytext); return -1; break; case 3: BEGIN(COMMENT); break; case 5: return (int)Tokens.tkRoundOpen; break; case 6: yylval = new Union(); yylval.op = new op_type_node(Operators.Multiplication); return (int)Tokens.tkStar; break; case 7: return (int)Tokens.tkRoundClose; break; case 8: return (int)Tokens.tkVertParen; break; case 10: return (int)Tokens.tkAmpersend; break; case 11: yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkComma; break; case 12: return (int)Tokens.tkColon; break; case 13: return (int)Tokens.tkPoint; break; case 14: return (int)Tokens.tkSemiColon; break; case 15: return (int)Tokens.tkSquareOpen; break; case 16: return (int)Tokens.tkSquareClose; break; case 17: return (int)Tokens.tkQuestion; break; case 18: return (int)Tokens.tkUnderscore; break; case 19: yylval = new Union(); yylval.op = new op_type_node(Operators.AddressOf); return (int)Tokens.tkAddressOf; break; case 20: yylval = new Union(); yylval.op = new op_type_node(Operators.Equal); return (int)Tokens.tkEqual; break; case 21: yylval = new Union(); yylval.op = new op_type_node(Operators.Plus); return (int)Tokens.tkPlus; break; case 22: yylval = new Union(); yylval.op = new op_type_node(Operators.Minus); return (int)Tokens.tkMinus; break; case 23: yylval = new Union(); yylval.op = new op_type_node(Operators.Greater); return (int)Tokens.tkGreater; break; case 24: yylval = new Union(); yylval.op = new op_type_node(Operators.Less); return (int)Tokens.tkLower; break; case 25: yylval = new Union(); yylval.op = new op_type_node(Operators.Deref); return (int)Tokens.tkDeref; break; case 27: yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; break; case 28: string cur_yytext = yytext; int res = Keywords.KeywordOrIDToken(cur_yytext); currentLexLocation = CurrentLexLocation; if (res == (int)Tokens.tkIdentifier) { yylval = new Union(); yylval.id = parsertools.create_ident(cur_yytext,currentLexLocation); } else switch (res) { case (int)Tokens.tkOr: yylval = new Union(); yylval.op = new op_type_node(Operators.LogicalOR,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkXor: yylval = new Union(); yylval.op = new op_type_node(Operators.BitwiseXOR,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkAnd: yylval = new Union(); yylval.op = new op_type_node(Operators.LogicalAND,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkDiv: yylval = new Union(); yylval.op = new op_type_node(Operators.IntegerDivision,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkMod: yylval = new Union(); yylval.op = new op_type_node(Operators.ModulusRemainder,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkShl: yylval = new Union(); yylval.op = new op_type_node(Operators.BitwiseLeftShift,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkShr: yylval = new Union(); yylval.op = new op_type_node(Operators.BitwiseRightShift,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkNot: yylval = new Union(); yylval.op = new op_type_node(Operators.LogicalNOT,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkAs: yylval = new Union(); yylval.op = new op_type_node(Operators.As,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkIn: yylval = new Union(); yylval.op = new op_type_node(Operators.In,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkIs: yylval = new Union(); yylval.op = new op_type_node(Operators.Is,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkImplicit: yylval = new Union(); yylval.op = new op_type_node(Operators.Implicit,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkExplicit: yylval = new Union(); yylval.op = new op_type_node(Operators.Explicit,currentLexLocation); yylval.op.text = cur_yytext; break; case (int)Tokens.tkSizeOf: case (int)Tokens.tkTypeOf: case (int)Tokens.tkWhere: case (int)Tokens.tkArray: case (int)Tokens.tkCase: case (int)Tokens.tkClass: case (int)Tokens.tkAuto: case (int)Tokens.tkConst: case (int)Tokens.tkConstructor: case (int)Tokens.tkDestructor: case (int)Tokens.tkDo: case (int)Tokens.tkElse: case (int)Tokens.tkExcept: case (int)Tokens.tkFile: case (int)Tokens.tkFinalization: case (int)Tokens.tkFinally: case (int)Tokens.tkFor: case (int)Tokens.tkLoop: case (int)Tokens.tkForeach: case (int)Tokens.tkFunction: case (int)Tokens.tkIf: case (int)Tokens.tkImplementation: case (int)Tokens.tkInherited: case (int)Tokens.tkInitialization: case (int)Tokens.tkInterface: case (int)Tokens.tkProcedure: case (int)Tokens.tkOperator: case (int)Tokens.tkProperty: case (int)Tokens.tkRaise: case (int)Tokens.tkRecord: case (int)Tokens.tkRepeat: case (int)Tokens.tkSet: case (int)Tokens.tkType: case (int)Tokens.tkThen: case (int)Tokens.tkUntil: case (int)Tokens.tkUses: case (int)Tokens.tkVar: case (int)Tokens.tkWhile: case (int)Tokens.tkWith: case (int)Tokens.tkNil: case (int)Tokens.tkGoto: case (int)Tokens.tkOf: case (int)Tokens.tkLabel: case (int)Tokens.tkLock: case (int)Tokens.tkProgram: case (int)Tokens.tkEvent: case (int)Tokens.tkDefault: case (int)Tokens.tkTemplate: case (int)Tokens.tkPacked: case (int)Tokens.tkExports: case (int)Tokens.tkResourceString: case (int)Tokens.tkThreadvar: case (int)Tokens.tkSealed: case (int)Tokens.tkPartial: case (int)Tokens.tkParams: case (int)Tokens.tkTo: case (int)Tokens.tkDownto: case (int)Tokens.tkUnit: case (int)Tokens.tkNamespace: case (int)Tokens.tkLibrary: case (int)Tokens.tkExternal: case (int)Tokens.tkYield: case (int)Tokens.tkSequence: case (int)Tokens.tkMatch: case (int)Tokens.tkWhen: case (int)Tokens.tkStatic: case (int)Tokens.tkStep: yylval = new Union(); yylval.ti = new token_info(cur_yytext,currentLexLocation); break; case (int)Tokens.tkBegin: case (int)Tokens.tkEnd: case (int)Tokens.tkTry: yylval = new Union(); yylval.ti = new token_info(cur_yytext,currentLexLocation); break; case (int)Tokens.tkNew: case (int)Tokens.tkOn: case (int)Tokens.tkName: case (int)Tokens.tkPrivate: case (int)Tokens.tkProtected: case (int)Tokens.tkPublic: case (int)Tokens.tkInternal: case (int)Tokens.tkRead: case (int)Tokens.tkWrite: case (int)Tokens.tkIndex: yylval = new Union(); yylval.id = new ident(cur_yytext,currentLexLocation); break; case (int)Tokens.tkAbstract: yylval = new Union(); yylval.id = new procedure_attribute(proc_attribute.attr_abstract,currentLexLocation); yylval.id.name = cur_yytext; break; case (int)Tokens.tkForward: yylval = new Union(); yylval.id = new procedure_attribute(proc_attribute.attr_forward,currentLexLocation); yylval.id.name = cur_yytext; break; case (int)Tokens.tkOverload: yylval = new Union(); yylval.id = new procedure_attribute(proc_attribute.attr_overload,currentLexLocation); yylval.id.name = cur_yytext; break; case (int)Tokens.tkReintroduce: yylval = new Union(); yylval.id = new procedure_attribute(proc_attribute.attr_reintroduce,currentLexLocation); yylval.id.name = cur_yytext; break; case (int)Tokens.tkOverride: yylval = new Union(); yylval.id = new procedure_attribute(proc_attribute.attr_override,currentLexLocation); yylval.id.name = cur_yytext; break; case (int)Tokens.tkExtensionMethod: yylval = new Union(); yylval.id = new procedure_attribute(proc_attribute.attr_extension,currentLexLocation); yylval.id.name = cur_yytext; break; case (int)Tokens.tkVirtual: yylval = new Union(); yylval.id = new procedure_attribute(proc_attribute.attr_virtual,currentLexLocation); yylval.id.name = cur_yytext; break; } return res; break; case 29: return (int)Tokens.INVISIBLE; break; case 30: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.ex = parsertools.create_int_const(yytext,currentLexLocation); return (int)Tokens.tkInteger; break; case 32: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.stn = parsertools.create_string_const(yytext,currentLexLocation); return (int)Tokens.tkStringLiteral; break; case 33: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.ex = parsertools.create_bigint_const(yytext,currentLexLocation); return (int)Tokens.tkBigInteger; break; case 34: case 35: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.ex = parsertools.create_double_const(yytext,currentLexLocation); return (int)Tokens.tkFloat; break; case 36: yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkBackSlashRoundOpen; break; case 37: yylval = new Union(); yylval.op = new op_type_node(Operators.LessEqual); return (int)Tokens.tkLowerEqual; break; case 38: yylval = new Union(); yylval.op = new op_type_node(Operators.NotEqual); return (int)Tokens.tkNotEqual; break; case 39: return (int)Tokens.tkParseModeType; break; case 40: return (int)Tokens.tkParseModeStatement; break; case 41: return (int)Tokens.tkParseModeExpression; break; case 42: yylval = new Union(); yylval.op = new op_type_node(Operators.GreaterEqual); return (int)Tokens.tkGreaterEqual; break; case 43: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentSubtraction); return (int)Tokens.tkMinusEqual; break; case 44: yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; break; case 45: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentAddition); return (int)Tokens.tkPlusEqual; break; case 46: return (int)Tokens.tkQuestionPoint; break; case 47: return (int)Tokens.tkQuestionSquareOpen; break; case 48: return (int)Tokens.tkDoubleQuestion; break; case 49: return (int)Tokens.tkDotDot; break; case 50: yylval = new Union(); yylval.op = new op_type_node(Operators.Assignment); return (int)Tokens.tkAssign; break; case 51: yylval = new Union(); yylval.id = new ident(yytext,CurrentLexLocation); return (int)Tokens.tkDirectiveName; break; case 52: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.stn = parsertools.create_sharp_char_const(yytext,currentLexLocation); return (int)Tokens.tkAsciiChar; break; case 53: yylval = new Union(); yylval.ti = new token_info("##",CurrentLexLocation); return (int)Tokens.tkShortProgram; break; case 54: yylval = new Union(); yylval.ti = new token_info("###",CurrentLexLocation); return (int)Tokens.tkShortSFProgram; break; case 55: yylval = new Union(); yylval.op = new op_type_node(Operators.Power); return (int)Tokens.tkStarStar; break; case 56: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentMultiplication); return (int)Tokens.tkMultEqual; break; case 57: BEGIN(COMMENT1); break; case 58: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.ex = parsertools.create_hex_const(yytext,currentLexLocation); return (int)Tokens.tkHex; break; case 59: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.stn = parsertools.create_format_string_const(yytext,currentLexLocation); return (int)Tokens.tkFormatStringLiteral; break; case 60: if (parsertools.build_tree_for_formatter) break; parsertools.DivideDirectiveOn(yytext,out directivename,out directiveparam); parsertools.CheckDirectiveParams(directivename,directiveparam); // directivename in UPPERCASE! if (directivename == "INCLUDE") { TryInclude(directiveparam); } else if (directivename == "IFDEF") { IfStack.Push(0); if (!Defines.Contains(directiveparam)) { BEGIN(EXCLUDETEXT); IfExclude = 1; } } else if (directivename == "IFNDEF") { IfStack.Push(0); if (Defines.Contains(directiveparam)) { BEGIN(EXCLUDETEXT); IfExclude = 1; } } else if (directivename == "ELSE") { if (IfStack.Count==0) parsertools.AddErrorFromResource("UNNECESSARY $else",CurrentLexLocation); if (IfStack.Peek()==1) parsertools.AddErrorFromResource("UNNECESSARY $else",CurrentLexLocation); IfStack.Pop(); IfStack.Push(1); BEGIN(EXCLUDETEXT); IfExclude = 1; } else if (directivename == "ENDIF") { if (IfStack.Count == 0) parsertools.AddErrorFromResource("UNNECESSARY $endif",CurrentLexLocation); IfStack.Pop(); } else if (directivename == "DEFINE") { if (!Defines.Contains(directiveparam)) Defines.Add(directiveparam); } else if (directivename == "UNDEF") { if (Defines.Contains(directiveparam)) Defines.Remove(directiveparam); } break; case 61: { } break; case 62: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentDivision); return (int)Tokens.tkDivEqual; break; case 63: { } break; case 64: BEGIN(INITIAL); break; case 65: case 66: { } break; case 67: BEGIN(INITIAL); break; case 68: case 69: case 70: { } break; case 71: parsertools.DivideDirectiveOn(yytext,out directivename,out directiveparam); parsertools.CheckDirectiveParams(directivename,directiveparam); // directivename in UPPERCASE! if (directivename == "IFDEF") { IfStack.Push(0); IfExclude++; } else if (directivename == "IFNDEF") { IfStack.Push(0); IfExclude++; } else if (directivename == "ELSE") { if (IfStack.Peek() == 1) parsertools.AddErrorFromResource("UNNECESSARY $else",CurrentLexLocation); IfStack.Pop(); IfStack.Push(1); if (IfExclude == 1) BEGIN(INITIAL); } else if (directivename == "ENDIF") { if (IfStack.Count==0) parsertools.AddErrorFromResource("UNNECESSARY $endif",CurrentLexLocation); IfStack.Pop(); IfExclude--; if (IfExclude == 0) BEGIN(INITIAL); } else if (IfExclude > 0) { int ind_to_remove = -1; for (int i=0; i eofNum) { if (state <= maxAccept && next > maxAccept) // need to update backup data SaveStateAndPos(ref ctx); state = next; if (state == eofNum) return Result.accept; GetCode(); } return (state <= maxAccept ? Result.accept : Result.noMatch); } void SaveStateAndPos(ref Context ctx) { ctx.bPos = buffer.Pos; ctx.rPos = readPos; ctx.cCol = cCol; ctx.lNum = lNum; ctx.state = state; ctx.cChr = code; } void RestoreStateAndPos(ref Context ctx) { buffer.Pos = ctx.bPos; readPos = ctx.rPos; cCol = ctx.cCol; lNum = ctx.lNum; state = ctx.state; code = ctx.cChr; } #endif // BACKUP // ============= End of the tokenizer code ================ #if STACK [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal void yy_clear_stack() { scStack.Clear(); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal int yy_top_state() { return scStack.Peek(); } internal void yy_push_state(int state) { scStack.Push(currentScOrd); BEGIN(state); } internal void yy_pop_state() { // Protect against input errors that pop too far ... if (scStack.Count > 0) { int newSc = scStack.Pop(); BEGIN(newSc); } // Otherwise leave stack unchanged. } #endif // STACK [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal void ECHO() { Console.Out.Write(yytext); } #region UserCodeSection public LexLocation CurrentLexLocation { get { return new LexLocation(tokLin, tokCol, tokELin, tokECol, parsertools.CurrentFileName); } } protected override bool yywrap() { if (IfStack.Count > 0) parsertools.AddErrorFromResource("ENDIF_ABSENT",CurrentLexLocation); BEGIN(INITIAL); if (buffStack.Count == 0) return true; RestoreBuffCtx(buffStack.Pop()); parsertools.CurrentFileName = fNameStack.Pop(); return false; } public override void yyerror(string format, params object[] args) { string errorMsg = parsertools.CreateErrorString(yytext,args); parsertools.AddError(errorMsg,CurrentLexLocation); } private void TryInclude(string fName) { if (fName == null || fName.Length == 0) parsertools.AddErrorFromResource("INCLUDE_EMPTY_FILE",CurrentLexLocation); else try { if (fName.StartsWith("'")) { fName = fName.Substring(1); if (fName.EndsWith("'")) fName = fName.Substring(0, fName.Length-1); } BufferContext savedCtx = MkBuffCtx(); string full_path = fName; if (!Path.IsPathRooted(full_path)) full_path = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(parsertools.CurrentFileName), fName)); if (fNameStack.Contains(full_path)) { parsertools.AddErrorFromResource("RECUR_INCLUDE", CurrentLexLocation, fName); return; } SetSource(File.ReadAllText(full_path), 0); fNameStack.Push(parsertools.CurrentFileName); parsertools.CurrentFileName = full_path; buffStack.Push(savedCtx); } catch { parsertools.AddErrorFromResource("INCLUDE_COULDNT_OPEN_FILE{0}",CurrentLexLocation,fName); } } #endregion } // end class $Scanner // ============================================================== // // This code automatically produced from an embedded resource. // Do not edit this file, or it will become incompatible with // the specification from which it was generated. // // ============================================================== // Code copied from GPLEX embedded resource [Serializable] public class BufferException : Exception { public BufferException() { } public BufferException(string message) : base(message) { } public BufferException(string message, Exception innerException) : base(message, innerException) { } protected BufferException(SerializationInfo info, StreamingContext context) : base(info, context) { } } public abstract class ScanBuff { private string fileNm; public const int EndOfFile = -1; public const int UnicodeReplacementChar = 0xFFFD; public bool IsFile { get { return (fileNm != null); } } public string FileName { get { return fileNm; } set { fileNm = value; } } public abstract int Pos { get; set; } public abstract int Read(); public virtual void Mark() { } public abstract string GetString(int begin, int limit); public static ScanBuff GetBuffer(string source) { return new StringBuffer(source); } public static ScanBuff GetBuffer(IList source) { return new LineBuffer(source); } public static ScanBuff GetBuffer(Stream source) { return new BuildBuffer(source); } #if (!BYTEMODE) public static ScanBuff GetBuffer(Stream source, int fallbackCodePage) { return new BuildBuffer(source, fallbackCodePage); } #endif } #region Buffer classes // ============================================================== // ===== Definitions for various ScanBuff derived classes ==== // ============================================================== // =============== String input ================ // ============================================================== /// /// This class reads characters from a single string as /// required, for example, by Visual Studio language services /// sealed class StringBuffer : ScanBuff { string str; // input buffer int bPos; // current position in buffer int sLen; public StringBuffer(string source) { this.str = source; this.sLen = source.Length; this.FileName = null; } public override int Read() { if (bPos < sLen) return str[bPos++]; else if (bPos == sLen) { bPos++; return '\n'; } // one strike, see new line else { bPos++; return EndOfFile; } // two strikes and you're out! } public override string GetString(int begin, int limit) { // "limit" can be greater than sLen with the BABEL // option set. Read returns a "virtual" EOL if // an attempt is made to read past the end of the // string buffer. Without the guard any attempt // to fetch yytext for a token that includes the // EOL will throw an index exception. if (limit > sLen) limit = sLen; if (limit <= begin) return ""; else return str.Substring(begin, limit - begin); } public override int Pos { get { return bPos; } set { bPos = value; } } public override string ToString() { return "StringBuffer"; } } // ============================================================== // The LineBuff class contributed by Nigel Horspool, // nigelh@cs.uvic.cs // ============================================================== sealed class LineBuffer : ScanBuff { IList line; // list of source lines from a file int numLines; // number of strings in line list string curLine; // current line in that list int cLine; // index of current line in the list int curLen; // length of current line int curLineStart; // position of line start in whole file int curLineEnd; // position of line end in whole file int maxPos; // max position ever visited in whole file int cPos; // ordinal number of code in source // Constructed from a list of strings, one per source line. // The lines have had trailing '\n' characters removed. public LineBuffer(IList lineList) { line = lineList; numLines = line.Count; cPos = curLineStart = 0; curLine = (numLines > 0 ? line[0] : ""); maxPos = curLineEnd = curLen = curLine.Length; cLine = 1; FileName = null; } public override int Read() { if (cPos < curLineEnd) return curLine[cPos++ - curLineStart]; if (cPos++ == curLineEnd) return '\n'; if (cLine >= numLines) return EndOfFile; curLine = line[cLine]; curLen = curLine.Length; curLineStart = curLineEnd + 1; curLineEnd = curLineStart + curLen; if (curLineEnd > maxPos) maxPos = curLineEnd; cLine++; return curLen > 0 ? curLine[0] : '\n'; } // To speed up searches for the line containing a position private int cachedPosition; private int cachedIxdex; private int cachedLineStart; // Given a position pos within the entire source, the results are // ix -- the index of the containing line // lstart -- the position of the first character on that line private void findIndex(int pos, out int ix, out int lstart) { if (pos >= cachedPosition) { ix = cachedIxdex; lstart = cachedLineStart; } else { ix = lstart = 0; } for (; ; ) { int len = line[ix].Length + 1; if (pos < lstart + len) break; lstart += len; ix++; } cachedPosition = pos; cachedIxdex = ix; cachedLineStart = lstart; } public override string GetString(int begin, int limit) { if (begin >= maxPos || limit <= begin) return ""; int endIx, begIx, endLineStart, begLineStart; findIndex(begin, out begIx, out begLineStart); int begCol = begin - begLineStart; findIndex(limit, out endIx, out endLineStart); int endCol = limit - endLineStart; string s = line[begIx]; if (begIx == endIx) { // the usual case, substring all on one line return (endCol <= s.Length) ? s.Substring(begCol, endCol - begCol) : s.Substring(begCol) + "\n"; } // the string spans multiple lines, yuk! StringBuilder sb = new StringBuilder(); if (begCol < s.Length) sb.Append(s.Substring(begCol)); for (; ; ) { sb.Append("\n"); s = line[++begIx]; if (begIx >= endIx) break; sb.Append(s); } if (endCol <= s.Length) { sb.Append(s.Substring(0, endCol)); } else { sb.Append(s); sb.Append("\n"); } return sb.ToString(); } public override int Pos { get { return cPos; } set { cPos = value; findIndex(cPos, out cLine, out curLineStart); curLine = line[cLine]; curLineEnd = curLineStart + curLine.Length; } } public override string ToString() { return "LineBuffer"; } } // ============================================================== // ===== class BuildBuff : for unicode text files ======== // ============================================================== class BuildBuffer : ScanBuff { // Double buffer for char stream. class BufferElement { StringBuilder bldr = new StringBuilder(); StringBuilder next = new StringBuilder(); int minIx; int maxIx; int brkIx; bool appendToNext; internal BufferElement() { } internal int MaxIndex { get { return maxIx; } } // internal int MinIndex { get { return minIx; } } internal char this[int index] { get { if (index < minIx || index >= maxIx) throw new BufferException("Index was outside data buffer"); else if (index < brkIx) return bldr[index - minIx]; else return next[index - brkIx]; } } internal void Append(char[] block, int count) { maxIx += count; if (appendToNext) this.next.Append(block, 0, count); else { this.bldr.Append(block, 0, count); brkIx = maxIx; appendToNext = true; } } internal string GetString(int start, int limit) { if (limit <= start) return ""; if (start >= minIx && limit <= maxIx) if (limit < brkIx) // String entirely in bldr builder return bldr.ToString(start - minIx, limit - start); else if (start >= brkIx) // String entirely in next builder return next.ToString(start - brkIx, limit - start); else // Must do a string-concatenation return bldr.ToString(start - minIx, brkIx - start) + next.ToString(0, limit - brkIx); else throw new BufferException("String was outside data buffer"); } internal void Mark(int limit) { if (limit > brkIx + 16) // Rotate blocks { StringBuilder temp = bldr; bldr = next; next = temp; next.Length = 0; minIx = brkIx; brkIx = maxIx; } } } BufferElement data = new BufferElement(); int bPos; // Postion index in the StringBuilder BlockReader NextBlk; // Delegate that serves char-arrays; private string EncodingName { get { StreamReader rdr = NextBlk.Target as StreamReader; return (rdr == null ? "raw-bytes" : rdr.CurrentEncoding.BodyName); } } public BuildBuffer(Stream stream) { FileStream fStrm = (stream as FileStream); if (fStrm != null) FileName = fStrm.Name; NextBlk = BlockReaderFactory.Raw(stream); } #if (!BYTEMODE) public BuildBuffer(Stream stream, int fallbackCodePage) { FileStream fStrm = (stream as FileStream); if (fStrm != null) FileName = fStrm.Name; NextBlk = BlockReaderFactory.Get(stream, fallbackCodePage); } #endif /// /// Marks a conservative lower bound for the buffer, /// allowing space to be reclaimed. If an application /// needs to call GetString at arbitrary past locations /// in the input stream, Mark() is not called. /// public override void Mark() { data.Mark(bPos - 2); } public override int Pos { get { return bPos; } set { bPos = value; } } /// /// Read returns the ordinal number of the next char, or /// EOF (-1) for an end of stream. Note that the next /// code point may require *two* calls of Read(). /// /// public override int Read() { // // Characters at positions // [data.offset, data.offset + data.bldr.Length) // are available in data.bldr. // if (bPos < data.MaxIndex) { // ch0 cannot be EOF return (int)data[bPos++]; } else // Read from underlying stream { // Experimental code, blocks of page size char[] chrs = new char[4096]; int count = NextBlk(chrs, 0, 4096); if (count == 0) return EndOfFile; else { data.Append(chrs, count); return (int)data[bPos++]; } } } public override string GetString(int begin, int limit) { return data.GetString(begin, limit); } public override string ToString() { return "StringBuilder buffer, encoding: " + this.EncodingName; } } // =============== End ScanBuff-derived classes ================== public delegate int BlockReader(char[] block, int index, int number); // A delegate factory, serving up a delegate that // reads a block of characters from the underlying // encoded stream, via a StreamReader object. // public static class BlockReaderFactory { public static BlockReader Raw(Stream stream) { return delegate(char[] block, int index, int number) { byte[] b = new byte[number]; int count = stream.Read(b, 0, number); int i = 0; int j = index; for (; i < count; i++, j++) block[j] = (char)b[i]; return count; }; } #if (!BYTEMODE) public static BlockReader Get(Stream stream, int fallbackCodePage) { Encoding encoding; int preamble = Preamble(stream); if (preamble != 0) // There is a valid BOM here! encoding = Encoding.GetEncoding(preamble); else if (fallbackCodePage == -1) // Fallback is "raw" bytes return Raw(stream); else if (fallbackCodePage != -2) // Anything but "guess" encoding = Encoding.GetEncoding(fallbackCodePage); else // This is the "guess" option { int guess = new Guesser(stream).GuessCodePage(); stream.Seek(0, SeekOrigin.Begin); if (guess == -1) // ==> this is a 7-bit file encoding = Encoding.ASCII; else if (guess == 65001) encoding = Encoding.UTF8; else // ==> use the machine default encoding = Encoding.Default; } StreamReader reader = new StreamReader(stream, encoding); return reader.Read; } static int Preamble(Stream stream) { int b0 = stream.ReadByte(); int b1 = stream.ReadByte(); if (b0 == 0xfe && b1 == 0xff) return 1201; // UTF16BE if (b0 == 0xff && b1 == 0xfe) return 1200; // UTF16LE int b2 = stream.ReadByte(); if (b0 == 0xef && b1 == 0xbb && b2 == 0xbf) return 65001; // UTF8 // // There is no unicode preamble, so we // return denoter for the machine default. // stream.Seek(0, SeekOrigin.Begin); return 0; } #endif // !BYTEMODE } #endregion Buffer classes // ============================================================== // ============ class CodePageHandling ============= // ============================================================== public static class CodePageHandling { public static int GetCodePage(string option) { string command = option.ToUpperInvariant(); if (command.StartsWith("CodePage:", StringComparison.OrdinalIgnoreCase)) command = command.Substring(9); try { if (command.Equals("RAW")) return -1; else if (command.Equals("GUESS")) return -2; else if (command.Equals("DEFAULT")) return 0; else if (char.IsDigit(command[0])) return int.Parse(command, CultureInfo.InvariantCulture); else { Encoding enc = Encoding.GetEncoding(command); return enc.CodePage; } } catch (FormatException) { Console.Error.WriteLine( "Invalid format \"{0}\", using machine default", option); } catch (ArgumentException) { Console.Error.WriteLine( "Unknown code page \"{0}\", using machine default", option); } return 0; } } #region guesser #if (!BYTEMODE) // ============================================================== // ============ Encoding Guesser ============= // ============================================================== /// /// This class provides a simple finite state automaton that /// scans the file looking for (1) valid UTF-8 byte patterns, /// (2) bytes >= 0x80 which are not part of a UTF-8 sequence. /// The method then guesses whether it is UTF-8 or maybe some /// local machine default encoding. This works well for the /// various Latin encodings. /// internal class Guesser { ScanBuff buffer; public int GuessCodePage() { return Scan(); } const int maxAccept = 10; const int initial = 0; const int eofNum = 0; const int goStart = -1; const int INITIAL = 0; const int EndToken = 0; #region user code /* * Reads the bytes of a file to determine if it is * UTF-8 or a single-byte code page file. */ public long utfX; public long uppr; #endregion user code int state; int currentStart = startState[0]; int code; #region ScannerTables static int[] startState = new int[] { 11, 0 }; #region CharacterMap static sbyte[] map = new sbyte[256] { /* '\0' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* '\x10' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* '\x20' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* '0' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* '@' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 'P' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* '`' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 'p' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* '\x80' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* '\x90' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* '\xA0' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* '\xB0' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* '\xC0' */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* '\xD0' */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* '\xE0' */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* '\xF0' */ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5 }; #endregion static sbyte[][] nextState = new sbyte[][] { new sbyte[] {0, 0, 0, 0, 0, 0}, new sbyte[] {-1, -1, 10, -1, -1, -1}, new sbyte[] {-1, -1, -1, -1, -1, -1}, new sbyte[] {-1, -1, 8, -1, -1, -1}, new sbyte[] {-1, -1, 5, -1, -1, -1}, new sbyte[] {-1, -1, 6, -1, -1, -1}, new sbyte[] {-1, -1, 7, -1, -1, -1}, null, new sbyte[] {-1, -1, 9, -1, -1, -1}, null, null, new sbyte[] {-1, 1, 2, 3, 4, 2} }; [SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline")] // Reason for suppression: cannot have self-reference in array initializer. static Guesser() { nextState[7] = nextState[2]; nextState[9] = nextState[2]; nextState[10] = nextState[2]; } int NextState() { if (code == ScanBuff.EndOfFile) return eofNum; else return nextState[state][map[code]]; } #endregion public Guesser(System.IO.Stream file) { SetSource(file); } public void SetSource(System.IO.Stream source) { this.buffer = new BuildBuffer(source); code = buffer.Read(); } int Scan() { for (; ; ) { int next; state = currentStart; while ((next = NextState()) == goStart) code = buffer.Read(); state = next; code = buffer.Read(); while ((next = NextState()) > eofNum) { state = next; code = buffer.Read(); } if (state <= maxAccept) { #region ActionSwitch #pragma warning disable 162 switch (state) { case eofNum: switch (currentStart) { case 11: if (utfX == 0 && uppr == 0) return -1; /* raw ascii */ else if (uppr * 10 > utfX) return 0; /* default code page */ else return 65001; /* UTF-8 encoding */ break; } return EndToken; case 1: // Recognized '{Upper128}', Shortest string "\xC0" case 2: // Recognized '{Upper128}', Shortest string "\x80" case 3: // Recognized '{Upper128}', Shortest string "\xE0" case 4: // Recognized '{Upper128}', Shortest string "\xF0" uppr++; break; case 5: // Recognized '{Utf8pfx4}{Utf8cont}', Shortest string "\xF0\x80" uppr += 2; break; case 6: // Recognized '{Utf8pfx4}{Utf8cont}{2}', Shortest string "\xF0\x80\x80" uppr += 3; break; case 7: // Recognized '{Utf8pfx4}{Utf8cont}{3}', Shortest string "\xF0\x80\x80\x80" utfX += 3; break; case 8: // Recognized '{Utf8pfx3}{Utf8cont}', Shortest string "\xE0\x80" uppr += 2; break; case 9: // Recognized '{Utf8pfx3}{Utf8cont}{2}', Shortest string "\xE0\x80\x80" utfX += 2; break; case 10: // Recognized '{Utf8pfx2}{Utf8cont}', Shortest string "\xC0\x80" utfX++; break; default: break; } #pragma warning restore 162 #endregion } } } } // end class Guesser #endif // !BYTEMODE #endregion // End of code copied from embedded resource } // end namespace