Example #1
0
        private int MatchReluctant(Matcher m, LookAheadReader input, int start, int skip)
        {
            var flag = this.matchStart != start;

            if (flag)
            {
                this.matchStart = start;
                this.matches    = new BitArray(10);
                this.FindMatches(m, input, start, 0, 0, 0);
            }
            var num = this.matches.Count - 1;
            int matchReluctant;

            for (var i = 0; i <= num; i++)
            {
                var flag2 = this.matches[i];
                if (flag2)
                {
                    var flag3 = skip == 0;
                    if (flag3)
                    {
                        matchReluctant = i;
                        return(matchReluctant);
                    }
                    skip--;
                }
            }
            matchReluctant = -1;
            return(matchReluctant);
        }
Example #2
0
        public override int Match(Matcher m, LookAheadReader input, int start, int skip)
        {
            var flag = skip != 0;
            int Match;

            if (flag)
            {
                Match = -1;
            }
            else
            {
                var c     = input.Peek(start);
                var flag2 = c < 0;
                if (flag2)
                {
                    m.SetReadEndOfString();
                    Match = -1;
                }
                else
                {
                    var flag3 = m.IsCaseInsensitive();
                    if (flag3)
                    {
                        c = Convert.ToInt32(char.ToLower(Convert.ToChar(c)));
                    }
                    Match = Conversions.ToInteger(Interaction.IIf(this.InSet(Convert.ToChar(c)), 1, -1));
                }
            }
            return(Match);
        }
Example #3
0
        public override int Match(Matcher m, LookAheadReader input, int start, int skip)
        {
            var flag = skip == 0;

            if (flag)
            {
                this.matchStart = -1;
                this.matches    = null;
            }
            int match;

            switch (this.repeatType)
            {
            case RepeatType.Greedy:
                match = this.MatchGreedy(m, input, start, skip);
                return(match);

            case RepeatType.Reluctant:
                match = this.MatchReluctant(m, input, start, skip);
                return(match);

            case RepeatType.Possessive:
            {
                var flag2 = skip == 0;
                if (flag2)
                {
                    match = this.MatchPossessive(m, input, start, 0);
                    return(match);
                }
                break;
            }
            }
            match = -1;
            return(match);
        }
Example #4
0
        private int MatchPossessive(Matcher m, LookAheadReader input, int start, int count)
        {
            var length    = 0;
            var subLength = 1;

            while (subLength > 0 && count < this.max)
            {
                subLength = this.element.Match(m, input, start + length, 0);
                var flag = subLength >= 0;
                if (flag)
                {
                    count++;
                    length += subLength;
                }
            }
            var flag2 = this.min <= count && count <= this.max;
            int matchPossessive;

            if (flag2)
            {
                matchPossessive = length;
            }
            else
            {
                matchPossessive = -1;
            }
            return(matchPossessive);
        }
Example #5
0
 internal Matcher(Element e, LookAheadReader input, bool ignoreCase)
 {
     this.element    = e;
     this.input      = input;
     this.ignoreCase = ignoreCase;
     this.Reset();
 }
Example #6
0
        public override int Match(Matcher m, LookAheadReader input, int start, int skip)
        {
            var length  = -1;
            var length2 = 0;
            var skip2   = 0;
            var skip3   = 0;
            int match;

            while (skip >= 0)
            {
                length = this.elem1.Match(m, input, start, skip2);
                var flag = length < 0;
                if (flag)
                {
                    match = -1;
                    return(match);
                }
                length2 = this.elem2.Match(m, input, start + length, skip3);
                var flag2 = length2 < 0;
                if (flag2)
                {
                    skip2++;
                    skip3 = 0;
                }
                else
                {
                    skip3++;
                    skip--;
                }
            }
            match = length + length2;
            return(match);
        }
Example #7
0
        private void FindMatches(Matcher m, LookAheadReader input, int start, int length, int count, int attempt)
        {
            var flag = count > this.max;

            if (!flag)
            {
                var flag2 = this.min <= count && attempt == 0;
                if (flag2)
                {
                    var flag3 = this.matches.Length <= length;
                    if (flag3)
                    {
                        this.matches.Length = length + 10;
                    }
                    this.matches[length] = true;
                }
                var subLength = this.element.Match(m, input, start, attempt);
                var flag4     = subLength < 0;
                if (!flag4)
                {
                    var flag5 = subLength == 0;
                    if (flag5)
                    {
                        var flag6 = this.min == count + 1;
                        if (flag6)
                        {
                            var flag7 = this.matches.Length <= length;
                            if (flag7)
                            {
                                this.matches.Length = length + 10;
                            }
                            this.matches[length] = true;
                        }
                    }
                    else
                    {
                        this.FindMatches(m, input, start, length, count, attempt + 1);
                        this.FindMatches(m, input, start + subLength, length + subLength, count + 1, 0);
                    }
                }
            }
        }
Example #8
0
        public override int Match(Matcher m, LookAheadReader input, int start, int skip)
        {
            var flag = skip != 0;
            int match;

            if (flag)
            {
                match = -1;
            }
            else
            {
                var num = this.value.Length - 1;
                for (var i = 0; i <= num; i++)
                {
                    var c     = input.Peek(start + i);
                    var flag2 = c < 0;
                    if (flag2)
                    {
                        m.SetReadEndOfString();
                        match = -1;
                        return(match);
                    }
                    var flag3 = m.IsCaseInsensitive();
                    if (flag3)
                    {
                        c = Convert.ToInt32(char.ToLower(Convert.ToChar(c)));
                    }
                    var flag4 = c != Convert.ToInt32(this.value[i]);
                    if (flag4)
                    {
                        match = -1;
                        return(match);
                    }
                }
                match = this.value.Length;
            }
            return(match);
        }
Example #9
0
        private int MatchGreedy(Matcher m, LookAheadReader input, int start, int skip)
        {
            var flag = skip == 0;
            int matchGreedy;

            if (flag)
            {
                matchGreedy = this.MatchPossessive(m, input, start, 0);
            }
            else
            {
                var flag2 = this.matchStart != start;
                if (flag2)
                {
                    this.matchStart = start;
                    this.matches    = new BitArray(10);
                    this.FindMatches(m, input, start, 0, 0, 0);
                }
                var num = this.matches.Count - 1;
                for (var i = num; i >= 0; i += -1)
                {
                    var flag3 = this.matches[i];
                    if (flag3)
                    {
                        var flag4 = skip == 0;
                        if (flag4)
                        {
                            matchGreedy = i;
                            return(matchGreedy);
                        }
                        skip--;
                    }
                }
                matchGreedy = -1;
            }
            return(matchGreedy);
        }
Example #10
0
        public override int Match(Matcher m, LookAheadReader input, int start, int skip)
        {
            var length = 0;
            var skip2  = 0;
            var skip3  = 0;

            while (length >= 0 && skip2 + skip3 <= skip)
            {
                var length2 = this.elem1.Match(m, input, start, skip2);
                var length3 = this.elem2.Match(m, input, start, skip3);
                var flag    = length2 >= length3;
                if (flag)
                {
                    length = length2;
                    skip2++;
                }
                else
                {
                    length = length3;
                    skip3++;
                }
            }
            return(length);
        }
Example #11
0
 private void Reset(LookAheadReader input)
 {
     this.input = input;
     this.Reset();
 }
Example #12
0
 private Matcher Matcher(LookAheadReader input)
 {
     return(new Matcher((Element)this.element.Clone(), input, this.ignoreCase));
 }
Example #13
0
 public abstract int Match(Matcher m, LookAheadReader input, int start, int skip);