private static List <State> ParseCharacterClass(IPrattParseContext <char> ctx, List <State>?states) { var invertResult = ctx.TryParse(MatchChar('^')); var ranges = new List <(char low, char high)>(); while (true) { if (ctx.Input.IsAtEnd) { throw new RegexException("Incomplete character class"); } var c = ctx.Input.GetNext(); if (c == ']') { break; } c = GetUnescapedCharacter(ctx, c); var range = ParseCharacterRange(ctx, c); ranges.Add(range); } if (ranges.Count == 0) { throw new RegexException("Empty character class"); } var matcher = new CharacterMatcher(invertResult.Success, ranges); return(State.AddMatch(states, c => matcher.IsMatch(c), "class")); }
public TextBlock() { CharacterMatcher.Initialize(); }