コード例 #1
0
    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"));
    }
コード例 #2
0
ファイル: Font.cs プロジェクト: EYHN/Anything
 public TextBlock()
 {
     CharacterMatcher.Initialize();
 }