Files
2026-06-04 11:42:34 +02:00

325 lines
14 KiB
C#
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}
}