aboutsummaryrefslogtreecommitdiff
path: root/Mammoth/Couscous/java/util/regex/Matcher.cs
blob: db477d728c8661670d32040c54710f9a536eabee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System.Text.RegularExpressions;

namespace Mammoth.Couscous.java.util.regex {
    internal class Matcher {
        private readonly Regex _regex;
        private readonly string _value;
        private int _regionStart = 0;
        private Match _lastMatch = null;
        
        internal Matcher(Regex regex, string value) {
            _regex = regex;
            _value = value;
        }
        
        internal bool lookingAt() {
            var match = _regex.Match(_value, _regionStart);
            if (match.Success && match.Index == _regionStart) {
                _lastMatch = match;
                return true;
            } else {
                return false;
            }
        }
        
        internal bool find() {
            var match = _regex.Match(_value, _regionStart);
            if (match.Success) {
                _lastMatch = match;
                _regionStart = end();
                return true;
            } else {
                return false;
            }
        }
        
        internal string group() {
            return group(0);
        }
        
        internal string group(int groupIndex) {
            var group = _lastMatch.Groups[groupIndex];
            return group.Success ? group.Value : null;
        }
        
        internal int groupCount() {
            return _regex.GetGroupNumbers().Length - 1;
        }
        
        internal int start() {
            return _lastMatch.Index;
        }
        
        internal int end() {
            return _lastMatch.Index + _lastMatch.Length;
        }
        
        internal int regionStart() {
            return _regionStart;
        }
        
        internal void region(int start, int end) {
            if (end == _value.Length) {
                _regionStart = start;
            } else {
                throw new System.NotSupportedException();
            }
        }
    }
}