using System; using System.Globalization; namespace System.Text.RegularExpressions { // Token: 0x020002C4 RID: 708 internal class CategoryUtils { // Token: 0x060019AD RID: 6573 RVA: 0x0005B5B8 File Offset: 0x000597B8 public static Category CategoryFromName(string name) { Category category; try { if (name.StartsWith("Is")) { name = name.Substring(2); } category = (Category)((ushort)Enum.Parse(typeof(Category), "Unicode" + name, false)); } catch (ArgumentException) { category = Category.None; } return category; } // Token: 0x060019AE RID: 6574 RVA: 0x0005B634 File Offset: 0x00059834 public static bool IsCategory(Category cat, char c) { switch (cat) { case Category.None: return false; case Category.Any: return c != '\n'; case Category.AnySingleline: return true; case Category.Word: return char.IsLetterOrDigit(c) || CategoryUtils.IsCategory(UnicodeCategory.ConnectorPunctuation, c); case Category.Digit: return char.IsDigit(c); case Category.WhiteSpace: return char.IsWhiteSpace(c); case Category.EcmaAny: return c != '\n'; case Category.EcmaAnySingleline: return true; case Category.EcmaWord: return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || '_' == c; case Category.EcmaDigit: return '0' <= c && c <= '9'; case Category.EcmaWhiteSpace: return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'; case Category.UnicodeL: return CategoryUtils.IsCategory(UnicodeCategory.UppercaseLetter, c) || CategoryUtils.IsCategory(UnicodeCategory.LowercaseLetter, c) || CategoryUtils.IsCategory(UnicodeCategory.TitlecaseLetter, c) || CategoryUtils.IsCategory(UnicodeCategory.ModifierLetter, c) || CategoryUtils.IsCategory(UnicodeCategory.OtherLetter, c); case Category.UnicodeM: return CategoryUtils.IsCategory(UnicodeCategory.NonSpacingMark, c) || CategoryUtils.IsCategory(UnicodeCategory.EnclosingMark, c) || CategoryUtils.IsCategory(UnicodeCategory.SpacingCombiningMark, c); case Category.UnicodeN: return CategoryUtils.IsCategory(UnicodeCategory.DecimalDigitNumber, c) || CategoryUtils.IsCategory(UnicodeCategory.LetterNumber, c) || CategoryUtils.IsCategory(UnicodeCategory.OtherNumber, c); case Category.UnicodeZ: return CategoryUtils.IsCategory(UnicodeCategory.SpaceSeparator, c) || CategoryUtils.IsCategory(UnicodeCategory.LineSeparator, c) || CategoryUtils.IsCategory(UnicodeCategory.ParagraphSeparator, c); case Category.UnicodeP: return CategoryUtils.IsCategory(UnicodeCategory.DashPunctuation, c) || CategoryUtils.IsCategory(UnicodeCategory.OpenPunctuation, c) || CategoryUtils.IsCategory(UnicodeCategory.InitialQuotePunctuation, c) || CategoryUtils.IsCategory(UnicodeCategory.ClosePunctuation, c) || CategoryUtils.IsCategory(UnicodeCategory.FinalQuotePunctuation, c) || CategoryUtils.IsCategory(UnicodeCategory.ConnectorPunctuation, c) || CategoryUtils.IsCategory(UnicodeCategory.OtherPunctuation, c); case Category.UnicodeS: return CategoryUtils.IsCategory(UnicodeCategory.MathSymbol, c) || CategoryUtils.IsCategory(UnicodeCategory.CurrencySymbol, c) || CategoryUtils.IsCategory(UnicodeCategory.ModifierSymbol, c) || CategoryUtils.IsCategory(UnicodeCategory.OtherSymbol, c); case Category.UnicodeC: return CategoryUtils.IsCategory(UnicodeCategory.Control, c) || CategoryUtils.IsCategory(UnicodeCategory.Format, c) || CategoryUtils.IsCategory(UnicodeCategory.PrivateUse, c) || CategoryUtils.IsCategory(UnicodeCategory.Surrogate, c) || CategoryUtils.IsCategory(UnicodeCategory.OtherNotAssigned, c); case Category.UnicodeLu: return CategoryUtils.IsCategory(UnicodeCategory.UppercaseLetter, c); case Category.UnicodeLl: return CategoryUtils.IsCategory(UnicodeCategory.LowercaseLetter, c); case Category.UnicodeLt: return CategoryUtils.IsCategory(UnicodeCategory.TitlecaseLetter, c); case Category.UnicodeLm: return CategoryUtils.IsCategory(UnicodeCategory.ModifierLetter, c); case Category.UnicodeLo: return CategoryUtils.IsCategory(UnicodeCategory.OtherLetter, c); case Category.UnicodeMn: return CategoryUtils.IsCategory(UnicodeCategory.NonSpacingMark, c); case Category.UnicodeMe: return CategoryUtils.IsCategory(UnicodeCategory.EnclosingMark, c); case Category.UnicodeMc: return CategoryUtils.IsCategory(UnicodeCategory.SpacingCombiningMark, c); case Category.UnicodeNd: return CategoryUtils.IsCategory(UnicodeCategory.DecimalDigitNumber, c); case Category.UnicodeNl: return CategoryUtils.IsCategory(UnicodeCategory.LetterNumber, c); case Category.UnicodeNo: return CategoryUtils.IsCategory(UnicodeCategory.OtherNumber, c); case Category.UnicodeZs: return CategoryUtils.IsCategory(UnicodeCategory.SpaceSeparator, c); case Category.UnicodeZl: return CategoryUtils.IsCategory(UnicodeCategory.LineSeparator, c); case Category.UnicodeZp: return CategoryUtils.IsCategory(UnicodeCategory.ParagraphSeparator, c); case Category.UnicodePd: return CategoryUtils.IsCategory(UnicodeCategory.DashPunctuation, c); case Category.UnicodePs: return CategoryUtils.IsCategory(UnicodeCategory.OpenPunctuation, c); case Category.UnicodePi: return CategoryUtils.IsCategory(UnicodeCategory.InitialQuotePunctuation, c); case Category.UnicodePe: return CategoryUtils.IsCategory(UnicodeCategory.ClosePunctuation, c); case Category.UnicodePf: return CategoryUtils.IsCategory(UnicodeCategory.FinalQuotePunctuation, c); case Category.UnicodePc: return CategoryUtils.IsCategory(UnicodeCategory.ConnectorPunctuation, c); case Category.UnicodePo: return CategoryUtils.IsCategory(UnicodeCategory.OtherPunctuation, c); case Category.UnicodeSm: return CategoryUtils.IsCategory(UnicodeCategory.MathSymbol, c); case Category.UnicodeSc: return CategoryUtils.IsCategory(UnicodeCategory.CurrencySymbol, c); case Category.UnicodeSk: return CategoryUtils.IsCategory(UnicodeCategory.ModifierSymbol, c); case Category.UnicodeSo: return CategoryUtils.IsCategory(UnicodeCategory.OtherSymbol, c); case Category.UnicodeCc: return CategoryUtils.IsCategory(UnicodeCategory.Control, c); case Category.UnicodeCf: return CategoryUtils.IsCategory(UnicodeCategory.Format, c); case Category.UnicodeCo: return CategoryUtils.IsCategory(UnicodeCategory.PrivateUse, c); case Category.UnicodeCs: return CategoryUtils.IsCategory(UnicodeCategory.Surrogate, c); case Category.UnicodeCn: return CategoryUtils.IsCategory(UnicodeCategory.OtherNotAssigned, c); case Category.UnicodeBasicLatin: return '\0' <= c && c <= '\u007f'; case Category.UnicodeLatin1Supplement: return '\u0080' <= c && c <= 'ÿ'; case Category.UnicodeLatinExtendedA: return 'Ā' <= c && c <= 'ſ'; case Category.UnicodeLatinExtendedB: return 'ƀ' <= c && c <= 'ɏ'; case Category.UnicodeIPAExtensions: return 'ɐ' <= c && c <= 'ʯ'; case Category.UnicodeSpacingModifierLetters: return 'ʰ' <= c && c <= '\u02ff'; case Category.UnicodeCombiningDiacriticalMarks: return '\u0300' <= c && c <= '\u036f'; case Category.UnicodeGreek: return 'Ͱ' <= c && c <= 'Ͽ'; case Category.UnicodeCyrillic: return 'Ѐ' <= c && c <= 'ӿ'; case Category.UnicodeArmenian: return '\u0530' <= c && c <= '֏'; case Category.UnicodeHebrew: return '\u0590' <= c && c <= '\u05ff'; case Category.UnicodeArabic: return '\u0600' <= c && c <= 'ۿ'; case Category.UnicodeSyriac: return '܀' <= c && c <= 'ݏ'; case Category.UnicodeThaana: return 'ހ' <= c && c <= '\u07bf'; case Category.UnicodeDevanagari: return '\u0900' <= c && c <= 'ॿ'; case Category.UnicodeBengali: return 'ঀ' <= c && c <= '\u09ff'; case Category.UnicodeGurmukhi: return '\u0a00' <= c && c <= '\u0a7f'; case Category.UnicodeGujarati: return '\u0a80' <= c && c <= '\u0aff'; case Category.UnicodeOriya: return '\u0b00' <= c && c <= '\u0b7f'; case Category.UnicodeTamil: return '\u0b80' <= c && c <= '\u0bff'; case Category.UnicodeTelugu: return '\u0c00' <= c && c <= '౿'; case Category.UnicodeKannada: return 'ಀ' <= c && c <= '\u0cff'; case Category.UnicodeMalayalam: return '\u0d00' <= c && c <= 'ൿ'; case Category.UnicodeSinhala: return '\u0d80' <= c && c <= '\u0dff'; case Category.UnicodeThai: return '\u0e00' <= c && c <= '\u0e7f'; case Category.UnicodeLao: return '\u0e80' <= c && c <= '\u0eff'; case Category.UnicodeTibetan: return 'ༀ' <= c && c <= '\u0fff'; case Category.UnicodeMyanmar: return 'က' <= c && c <= '႟'; case Category.UnicodeGeorgian: return 'Ⴀ' <= c && c <= 'ჿ'; case Category.UnicodeHangulJamo: return 'ᄀ' <= c && c <= 'ᇿ'; case Category.UnicodeEthiopic: return 'ሀ' <= c && c <= '\u137f'; case Category.UnicodeCherokee: return 'Ꭰ' <= c && c <= '\u13ff'; case Category.UnicodeUnifiedCanadianAboriginalSyllabics: return '᐀' <= c && c <= 'ᙿ'; case Category.UnicodeOgham: return '\u1680' <= c && c <= '\u169f'; case Category.UnicodeRunic: return 'ᚠ' <= c && c <= '\u16ff'; case Category.UnicodeKhmer: return 'ក' <= c && c <= '\u17ff'; case Category.UnicodeMongolian: return '᠀' <= c && c <= '\u18af'; case Category.UnicodeLatinExtendedAdditional: return 'Ḁ' <= c && c <= 'ỿ'; case Category.UnicodeGreekExtended: return 'ἀ' <= c && c <= '\u1fff'; case Category.UnicodeGeneralPunctuation: return '\u2000' <= c && c <= '\u206f'; case Category.UnicodeSuperscriptsandSubscripts: return '⁰' <= c && c <= '\u209f'; case Category.UnicodeCurrencySymbols: return '₠' <= c && c <= '\u20cf'; case Category.UnicodeCombiningMarksforSymbols: return '\u20d0' <= c && c <= '\u20ff'; case Category.UnicodeLetterlikeSymbols: return '℀' <= c && c <= '⅏'; case Category.UnicodeNumberForms: return '⅐' <= c && c <= '\u218f'; case Category.UnicodeArrows: return '←' <= c && c <= '⇿'; case Category.UnicodeMathematicalOperators: return '∀' <= c && c <= '⋿'; case Category.UnicodeMiscellaneousTechnical: return '⌀' <= c && c <= '⏿'; case Category.UnicodeControlPictures: return '␀' <= c && c <= '\u243f'; case Category.UnicodeOpticalCharacterRecognition: return '⑀' <= c && c <= '\u245f'; case Category.UnicodeEnclosedAlphanumerics: return '①' <= c && c <= '⓿'; case Category.UnicodeBoxDrawing: return '─' <= c && c <= '╿'; case Category.UnicodeBlockElements: return '▀' <= c && c <= '▟'; case Category.UnicodeGeometricShapes: return '■' <= c && c <= '◿'; case Category.UnicodeMiscellaneousSymbols: return '☀' <= c && c <= '⛿'; case Category.UnicodeDingbats: return '✀' <= c && c <= '➿'; case Category.UnicodeBraillePatterns: return '⠀' <= c && c <= '⣿'; case Category.UnicodeCJKRadicalsSupplement: return '⺀' <= c && c <= '\u2eff'; case Category.UnicodeKangxiRadicals: return '⼀' <= c && c <= '\u2fdf'; case Category.UnicodeIdeographicDescriptionCharacters: return '⿰' <= c && c <= '\u2fff'; case Category.UnicodeCJKSymbolsandPunctuation: return '\u3000' <= c && c <= '〿'; case Category.UnicodeHiragana: return '\u3040' <= c && c <= 'ゟ'; case Category.UnicodeKatakana: return '゠' <= c && c <= 'ヿ'; case Category.UnicodeBopomofo: return '\u3100' <= c && c <= 'ㄯ'; case Category.UnicodeHangulCompatibilityJamo: return '\u3130' <= c && c <= '\u318f'; case Category.UnicodeKanbun: return '㆐' <= c && c <= '㆟'; case Category.UnicodeBopomofoExtended: return 'ㆠ' <= c && c <= 'ㆿ'; case Category.UnicodeEnclosedCJKLettersandMonths: return '㈀' <= c && c <= '㋿'; case Category.UnicodeCJKCompatibility: return '㌀' <= c && c <= '㏿'; case Category.UnicodeCJKUnifiedIdeographsExtensionA: return '㐀' <= c && c <= '䶵'; case Category.UnicodeCJKUnifiedIdeographs: return '一' <= c && c <= '鿿'; case Category.UnicodeYiSyllables: return 'ꀀ' <= c && c <= '\ua48f'; case Category.UnicodeYiRadicals: return '꒐' <= c && c <= '\ua4cf'; case Category.UnicodeHangulSyllables: return '가' <= c && c <= '힣'; case Category.UnicodeHighSurrogates: return '\ud800' <= c && c <= '\udb7f'; case Category.UnicodeHighPrivateUseSurrogates: return '\udb80' <= c && c <= '\udbff'; case Category.UnicodeLowSurrogates: return '\udc00' <= c && c <= '\udfff'; case Category.UnicodePrivateUse: return '\ue000' <= c && c <= '\uf8ff'; case Category.UnicodeCJKCompatibilityIdeographs: return '豈' <= c && c <= '\ufaff'; case Category.UnicodeAlphabeticPresentationForms: return 'ff' <= c && c <= 'ﭏ'; case Category.UnicodeArabicPresentationFormsA: return 'ﭐ' <= c && c <= '﷿'; case Category.UnicodeCombiningHalfMarks: return '\ufe20' <= c && c <= '\ufe2f'; case Category.UnicodeCJKCompatibilityForms: return '︰' <= c && c <= '\ufe4f'; case Category.UnicodeSmallFormVariants: return '﹐' <= c && c <= '\ufe6f'; case Category.UnicodeArabicPresentationFormsB: return 'ﹰ' <= c && c <= '\ufefe'; case Category.UnicodeSpecials: return ('\ufeff' <= c && c <= '\ufeff') || ('\ufff0' <= c && c <= '\ufffd'); case Category.UnicodeHalfwidthandFullwidthForms: return '\uff00' <= c && c <= '\uffef'; case Category.UnicodeOldItalic: case Category.UnicodeGothic: case Category.UnicodeDeseret: case Category.UnicodeByzantineMusicalSymbols: case Category.UnicodeMusicalSymbols: case Category.UnicodeMathematicalAlphanumericSymbols: case Category.UnicodeCJKUnifiedIdeographsExtensionB: case Category.UnicodeCJKCompatibilityIdeographsSupplement: case Category.UnicodeTags: return false; default: return false; } } // Token: 0x060019AF RID: 6575 RVA: 0x0005C4B0 File Offset: 0x0005A6B0 private static bool IsCategory(UnicodeCategory uc, char c) { return char.GetUnicodeCategory(c) == uc; } } }