diff options
| author | Zher Huei Lee | 2017-06-26 15:16:33 +0800 |
|---|---|---|
| committer | Zher Huei Lee | 2017-06-26 15:16:33 +0800 |
| commit | 382db0898e36c0e5b92d63126c87c71389a9a00f (patch) | |
| tree | d4a256ce751f26c3a8e93f7b3a95426c39156d70 /modules/regex/regex.cpp | |
| parent | 760cdbe1a31837bcb142de6912718fd80f57346b (diff) | |
| download | godot-382db0898e36c0e5b92d63126c87c71389a9a00f.tar.gz godot-382db0898e36c0e5b92d63126c87c71389a9a00f.tar.zst godot-382db0898e36c0e5b92d63126c87c71389a9a00f.zip | |
Diffstat (limited to 'modules/regex/regex.cpp')
| -rw-r--r-- | modules/regex/regex.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/modules/regex/regex.cpp b/modules/regex/regex.cpp index eb9f1d2ab..c095291ae 100644 --- a/modules/regex/regex.cpp +++ b/modules/regex/regex.cpp @@ -590,6 +590,11 @@ struct RegExNodeGroup : public RegExNode { memdelete(childset[i]); } + virtual void test_success(RegExSearch &s, int pos) const { + + return; + } + virtual int test(RegExSearch &s, int pos) const { for (int i = 0; i < childset.size(); ++i) { @@ -614,6 +619,7 @@ struct RegExNodeGroup : public RegExNode { if (res >= 0) { if (reset_pos) res = pos; + this->test_success(s, res); return next ? next->test(s, res) : res; } } @@ -668,6 +674,12 @@ struct RegExNodeCapturing : public RegExNodeGroup { id = p_id; } + virtual void test_success(RegExSearch &s, int pos) const { + + RegExMatch::Group &ref = s.match->captures[id]; + ref.length = pos - ref.start; + } + virtual int test(RegExSearch &s, int pos) const { RegExMatch::Group &ref = s.match->captures[id]; @@ -676,13 +688,8 @@ struct RegExNodeCapturing : public RegExNodeGroup { int res = RegExNodeGroup::test(s, pos); - if (res >= 0) { - if (!s.complete) - ref.length = res - pos; - } else { + if (res < 0) ref.start = old_start; - } - return res; } |
