7 instantiations of RegexCharClass
System.Text.RegularExpressions.Generator (7)
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexCharClass.cs (1)
1506
return new
RegexCharClass
(IsNegated(charClass, start), ranges, categoriesBuilder, sub);
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexNode.cs (1)
1028
prevCharClass = new
RegexCharClass
();
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexParser.cs (2)
555
RegexCharClass? charClass = scanOnly ? null : new
RegexCharClass
();
1131
var cc = new
RegexCharClass
();
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (3)
948
cc ??= new
RegexCharClass
();
957
cc ??= new
RegexCharClass
();
994
cc ??= new
RegexCharClass
();
165 references to RegexCharClass
System.Text.RegularExpressions.Generator (165)
RegexGenerator.Emitter.cs (34)
405
return chars.Length > 5 ||
RegexCharClass
.IsAscii(chars)
417
if (
RegexCharClass
.IsAscii(chars))
516
if (!
RegexCharClass
.CharInClass((char)i, set))
525
RegexCharClass
.DigitClass => "IndexOfAnyDigit",
526
RegexCharClass
.ControlClass => "IndexOfAnyControl",
527
RegexCharClass
.LetterClass => "IndexOfAnyLetter",
528
RegexCharClass
.LetterOrDigitClass => "IndexOfAnyLetterOrDigit",
529
RegexCharClass
.LowerClass => "IndexOfAnyLower",
530
RegexCharClass
.NumberClass => "IndexOfAnyNumber",
531
RegexCharClass
.PunctuationClass => "IndexOfAnyPunctuation",
532
RegexCharClass
.SeparatorClass => "IndexOfAnySeparator",
533
RegexCharClass
.SpaceClass => "IndexOfAnyWhiteSpace",
534
RegexCharClass
.SymbolClass => "IndexOfAnySymbol",
535
RegexCharClass
.UpperClass => "IndexOfAnyUpper",
536
RegexCharClass
.WordClass => "IndexOfAnyWordChar",
538
RegexCharClass
.NotDigitClass => "IndexOfAnyExceptDigit",
539
RegexCharClass
.NotControlClass => "IndexOfAnyExceptControl",
540
RegexCharClass
.NotLetterClass => "IndexOfAnyExceptLetter",
541
RegexCharClass
.NotLetterOrDigitClass => "IndexOfAnyExceptLetterOrDigit",
542
RegexCharClass
.NotLowerClass => "IndexOfAnyExceptLower",
543
RegexCharClass
.NotNumberClass => "IndexOfAnyExceptNumber",
544
RegexCharClass
.NotPunctuationClass => "IndexOfAnyExceptPunctuation",
545
RegexCharClass
.NotSeparatorClass => "IndexOfAnyExceptSeparator",
546
RegexCharClass
.NotSpaceClass => "IndexOfAnyExceptWhiteSpace",
547
RegexCharClass
.NotSymbolClass => "IndexOfAnyExceptSymbol",
548
RegexCharClass
.NotUpperClass => "IndexOfAnyExceptUpper",
549
RegexCharClass
.NotWordClass => "IndexOfAnyExceptWordChar",
558
if (
RegexCharClass
.TryGetOnlyCategories(set, categories, out int numCategories, out bool negatedCategory))
1157
primarySet.Set !=
RegexCharClass
.NotNewLineClass &&
1158
primarySet.Set !=
RegexCharClass
.AnyClass;
1223
else if (
RegexCharClass
.IsUnicodeCategoryOfSmallCharCount(primarySet.Set, out char[]? setChars, out bool negated, out string? description))
1741
if (
RegexCharClass
.IsNegated(startingLiteralNode.Str!) ||
1742
(numChars =
RegexCharClass
.GetSetChars(startingLiteralNode.Str!, setChars)) == 0)
1809
int numChars =
RegexCharClass
.GetSetChars(startingLiteralNode.Str!, setChars);
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexCharClass.cs (8)
316
private
RegexCharClass
? _subtractor;
349
private RegexCharClass(bool negate, List<(char First, char Last)>? ranges, StringBuilder? categories,
RegexCharClass
? subtraction)
369
public void AddCharClass(
RegexCharClass
cc)
387
public bool TryAddCharClass(
RegexCharClass
cc)
425
public void AddSubtraction(
RegexCharClass
sub)
1481
public static
RegexCharClass
Parse(string charClass) => ParseRecursive(charClass, 0);
1483
private static
RegexCharClass
ParseRecursive(string charClass, int start)
1494
RegexCharClass
? sub = null;
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexFindOptimizations.cs (4)
131
if (!
RegexCharClass
.IsNegated(charClass) &&
132
(scratchCount =
RegexCharClass
.GetSetChars(charClass, scratch)) > 0)
142
Debug.Assert(!
RegexCharClass
.IsNegated(charClass));
149
Debug.Assert(!
RegexCharClass
.IsNegated(charClass) || chars is null);
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexNode.cs (54)
26
/// <remarks>For a <see cref="RegexNodeKind.Multi"/>, this is the string from the expression. For an <see cref="IsSetFamily"/> node, this is the character class string from <see cref="
RegexCharClass
"/>.</remarks>
126
string stringSet =
RegexCharClass
.CharsToStringClass(equivalences);
879
if (
RegexCharClass
.IsEmpty(Str))
884
else if (
RegexCharClass
.IsSingleton(Str))
886
Ch =
RegexCharClass
.SingletonChar(Str);
894
else if (
RegexCharClass
.IsSingletonInverse(Str))
896
Ch =
RegexCharClass
.SingletonChar(Str);
909
case
RegexCharClass
.WordNotWordClass:
910
case
RegexCharClass
.NotWordWordClass:
911
case
RegexCharClass
.DigitNotDigitClass:
912
case
RegexCharClass
.NotDigitDigitClass:
913
case
RegexCharClass
.SpaceNotSpaceClass:
914
case
RegexCharClass
.NotSpaceSpaceClass:
915
Str =
RegexCharClass
.AnyClass;
1004
if (!wasLastSet || optionsLast != optionsAt || lastNodeCannotMerge || !
RegexCharClass
.IsMergeable(at.Str!))
1007
lastNodeCannotMerge = !
RegexCharClass
.IsMergeable(at.Str!);
1025
RegexCharClass
prevCharClass;
1033
prevCharClass =
RegexCharClass
.Parse(prev.Str!);
1042
RegexCharClass
atCharClass =
RegexCharClass
.Parse(at.Str!);
1446
if (
RegexCharClass
.TryGetSingleRange(node.Str!, out char lowInclusive, out char highInclusive) &&
1450
return new StartingLiteralData(range: (lowInclusive, highInclusive), negated:
RegexCharClass
.IsNegated(node.Str!));
1455
if ((numChars =
RegexCharClass
.GetSetChars(node.Str!, setChars)) != 0)
1457
return new StartingLiteralData(setChars: setChars.Slice(0, numChars).ToString(), negated:
RegexCharClass
.IsNegated(node.Str!));
2126
case RegexNodeKind.Set when !
RegexCharClass
.CharInClass(node.Ch, subsequent.Str!):
2129
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !
RegexCharClass
.CharInClass(node.Ch, subsequent.Str!):
2137
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !
RegexCharClass
.CharInClass(node.Ch, subsequent.Str!):
2138
case RegexNodeKind.Boundary when node.M > 0 &&
RegexCharClass
.IsBoundaryWordChar(node.Ch):
2139
case RegexNodeKind.NonBoundary when node.M > 0 && !
RegexCharClass
.IsBoundaryWordChar(node.Ch):
2140
case RegexNodeKind.ECMABoundary when node.M > 0 &&
RegexCharClass
.IsECMAWordChar(node.Ch):
2141
case RegexNodeKind.NonECMABoundary when node.M > 0 && !
RegexCharClass
.IsECMAWordChar(node.Ch):
2173
case RegexNodeKind.One when !
RegexCharClass
.CharInClass(subsequent.Ch, node.Str!):
2174
case RegexNodeKind.Set when !
RegexCharClass
.MayOverlap(node.Str!, subsequent.Str!):
2175
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M > 0 && !
RegexCharClass
.CharInClass(subsequent.Ch, node.Str!):
2176
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !
RegexCharClass
.MayOverlap(node.Str!, subsequent.Str!):
2177
case RegexNodeKind.Multi when !
RegexCharClass
.CharInClass(subsequent.Str![0], node.Str!):
2179
case RegexNodeKind.EndZ or RegexNodeKind.Eol when !
RegexCharClass
.CharInClass('\n', node.Str!):
2182
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M == 0 && !
RegexCharClass
.CharInClass(subsequent.Ch, node.Str!):
2183
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !
RegexCharClass
.MayOverlap(node.Str!, subsequent.Str!):
2184
case RegexNodeKind.Boundary when node.M > 0 && node.Str is
RegexCharClass
.WordClass or
RegexCharClass
.DigitClass:
2185
case RegexNodeKind.NonBoundary when node.M > 0 && node.Str is
RegexCharClass
.NotWordClass or
RegexCharClass
.NotDigitClass:
2186
case RegexNodeKind.ECMABoundary when node.M > 0 && node.Str is
RegexCharClass
.ECMAWordClass or
RegexCharClass
.ECMADigitClass:
2187
case RegexNodeKind.NonECMABoundary when node.M > 0 && node.Str is
RegexCharClass
.NotECMAWordClass or
RegexCharClass
.NotDigitClass:
2539
RegexCharClass
.ParticipatesInCaseConversion(child.Ch))
2550
if (!
RegexCharClass
.IsAscii(child.Str.AsSpan()) ||
2551
RegexCharClass
.ParticipatesInCaseConversion(child.Str.AsSpan()))
2563
if (!
RegexCharClass
.SetContainsAsciiOrdinalIgnoreCaseCharacter(child.Str!, twoChars))
2902
sb.Append(" '").Append(
RegexCharClass
.DescribeChar(Ch)).Append('\'');
2919
sb.Append(
RegexCharClass
.DescribeChar(c));
2927
sb.Append(' ').Append(
RegexCharClass
.DescribeSet(Str!));
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexNodeKind.cs (4)
22
/// <remarks>The <see cref="
RegexCharClass
"/> set string is specified in <see cref="RegexNode.Str"/>.</remarks>
40
/// <remarks>The <see cref="
RegexCharClass
"/> set string is specified in <see cref="RegexNode.Str"/>, the minimum number of iterations in <see cref="RegexNode.M"/>, and the maximum number of iterations in <see cref="RegexNode.N"/>.</remarks>
53
/// <remarks>The <see cref="
RegexCharClass
"/> set string is specified in <see cref="RegexNode.Str"/>, the minimum number of iterations in <see cref="RegexNode.M"/>, and the maximum number of iterations in <see cref="RegexNode.N"/>.</remarks>
71
/// The <see cref="
RegexCharClass
"/> set string is specified in <see cref="RegexNode.Str"/>, the minimum number of iterations in <see cref="RegexNode.M"/>, and the maximum number of iterations in <see cref="RegexNode.N"/>.
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexParser.cs (27)
403
new RegexNode(RegexNodeKind.Set, _options & ~RegexOptions.IgnoreCase,
RegexCharClass
.AnyClass) :
547
private
RegexCharClass
? ScanCharClass(bool caseInsensitive, bool scanOnly)
555
RegexCharClass
? charClass = scanOnly ? null : new RegexCharClass();
710
RegexCharClass
? rcc = ScanCharClass(caseInsensitive, scanOnly);
865
else if (
RegexCharClass
.IsBoundaryWordChar(ch))
912
else if (
RegexCharClass
.IsBoundaryWordChar(ch))
967
else if (
RegexCharClass
.IsBoundaryWordChar(ch))
1096
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.ECMAWordClass :
RegexCharClass
.WordClass);
1101
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.NotECMAWordClass :
RegexCharClass
.NotWordClass);
1106
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.ECMASpaceClass :
RegexCharClass
.SpaceClass);
1111
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.NotECMASpaceClass :
RegexCharClass
.NotSpaceClass);
1116
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.ECMADigitClass :
RegexCharClass
.DigitClass);
1121
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.NotECMADigitClass :
RegexCharClass
.NotDigitClass);
1131
var
cc = new RegexCharClass();
1261
else if (angled &&
RegexCharClass
.IsBoundaryWordChar(ch))
1360
else if (angled &&
RegexCharClass
.IsBoundaryWordChar(ch))
1422
if (!
RegexCharClass
.IsBoundaryWordChar(_pattern[_pos++]))
1609
if ((_options & RegexOptions.ECMAScript) == 0 &&
RegexCharClass
.IsBoundaryWordChar(ch))
1635
if (!(
RegexCharClass
.IsBoundaryWordChar(ch) || ch == '-'))
1728
if (ch != '0' &&
RegexCharClass
.IsBoundaryWordChar(ch))
2021
case > 1 when (_options & RegexOptions.IgnoreCase) == 0 || isReplacement || !
RegexCharClass
.ParticipatesInCaseConversion(_pattern.AsSpan(pos, cch)):
src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (34)
112
case RegexNodeKind.One or RegexNodeKind.Oneloop or RegexNodeKind.Onelazy or RegexNodeKind.Oneloopatomic when !ignoreCase || !
RegexCharClass
.ParticipatesInCaseConversion(node.Ch):
138
if (
RegexCharClass
.ParticipatesInCaseConversion(c))
156
case RegexNodeKind.Set or RegexNodeKind.Setloop or RegexNodeKind.Setlazy or RegexNodeKind.Setloopatomic when !
RegexCharClass
.IsNegated(node.Str!): // negated sets are too complex to analyze
158
int charCount =
RegexCharClass
.GetSetChars(node.Str!, setChars);
197
if (!
RegexCharClass
.SetContainsAsciiOrdinalIgnoreCaseCharacter(node.Str!, setChars))
530
if (results[i].Set ==
RegexCharClass
.AnyClass)
532
results.RemoveAll(s => s.Set ==
RegexCharClass
.AnyClass);
543
charClass ==
RegexCharClass
.AnyClass) // weed out match-all, same as above
557
result.Negated =
RegexCharClass
.IsNegated(result.Set);
559
if (
RegexCharClass
.TryGetSingleRange(result.Set, out char lowInclusive, out char highInclusive) &&
566
int count =
RegexCharClass
.GetSetChars(result.Set, scratch);
603
string setString =
RegexCharClass
.OneToStringClass(node.Ch);
611
string setString =
RegexCharClass
.OneToStringClass(node.Ch);
627
string setString =
RegexCharClass
.OneToStringClass(s[i]);
714
var combined = new Dictionary<int, (
RegexCharClass
Set, int Count)>();
742
if (combined.TryGetValue(fixedSet.Distance, out (
RegexCharClass
Set, int Count) value))
744
if (value.Set.TryAddCharClass(
RegexCharClass
.Parse(fixedSet.Set)))
752
combined[fixedSet.Distance] = (
RegexCharClass
.Parse(fixedSet.Set), 1);
757
foreach (KeyValuePair<int, (
RegexCharClass
Set, int Count)> pair in combined)
829
if (!
RegexCharClass
.IsAscii(s1Chars) && !
RegexCharClass
.IsAscii(s2Chars))
915
RegexCharClass
? cc = null;
933
static bool? TryFindFirstCharClass(RegexNode node, ref
RegexCharClass
? cc)
977
cc =
RegexCharClass
.Parse(node.Str!);
980
else if (cc.CanMerge &&
RegexCharClass
.Parse(node.Str!) is { CanMerge: true } setCc)
1160
RegexCharClass
.CharInClass(prefix[0], firstChild.Str!) ? null :
1176
!
RegexCharClass
.ParticipatesInCaseConversion(ordinalCaseInsensitivePrefix[0]) ||
1179
if (
RegexCharClass
.ParticipatesInCaseConversion(ordinalCaseInsensitivePrefix[0]))
1181
if (
RegexCharClass
.CharInClass((char)(ordinalCaseInsensitivePrefix[0] | 0x20), firstChild.Str!) ||
1182
RegexCharClass
.CharInClass((char)(ordinalCaseInsensitivePrefix[0] & ~0x20), firstChild.Str!))
1187
else if (
RegexCharClass
.CharInClass(ordinalCaseInsensitivePrefix[0], firstChild.Str!))
1208
!
RegexCharClass
.IsNegated(nextChild.Str!) &&
1212
chars = chars.Slice(0,
RegexCharClass
.GetSetChars(nextChild.Str!, chars));
1217
if (
RegexCharClass
.CharInClass(c, firstChild.Str!))