+2009-08-17 Raja R Harinath <harinath@hurrynot.org>
+
+ * parser.cs (ResolveReferences): Handle some cases of
+ explicitly-named numeric groups.
+
2009-08-17 Raja R Harinath <harinath@hurrynot.org>
* parser.cs (ResolveReferences): Rearrange slightly to prepare for
foreach (CapturingGroup group in caps) {
if (group.Name == null)
continue;
+
if (dict.Contains (group.Name)) {
CapturingGroup prev = (CapturingGroup) dict [group.Name];
group.Number = prev.Number;
continue;
}
+
+ if (Char.IsDigit (group.Name [0])) {
+ int ptr = 0;
+ int group_gid = ParseDecimal (group.Name, ref ptr);
+ if (ptr == group.Name.Length) {
+ // FIXME: Handle non-contiguous groups
+ group.Number = group_gid;
+ dict.Add (group.Name, group);
+ ++ num_groups;
+ continue;
+ }
+ }
+
string gid_s = gid.ToString ();
+ while (dict.Contains (gid_s))
+ gid_s = (++gid).ToString ();
+
+ dict.Add (gid_s, group);
dict.Add (group.Name, group);
- if (!dict.Contains (gid_s))
- dict.Add (gid_s, group);
group.Number = gid ++;
++ num_groups;
}
+2009-08-17 Raja R Harinath <harinath@hurrynot.org>
+
+ * RegexMatchTests.cs (RegexTrial0061): New.
+
2009-08-17 Raja R Harinath <harinath@hurrynot.org>
* RegexTrial.cs (Execute): Prepare to handle dis-contiguous group numbers.
new RegexTrial (@"\4400", RegexOptions.ECMAScript, "asdf 012", "Fail."),//58
new RegexTrial (@"\4400", RegexOptions.None, "asdf$0012", "Fail."),//59
new RegexTrial (@"\4400", RegexOptions.ECMAScript, "asdf$0012", "Pass. Group[0]=(4,3)"),//60
+ new RegexTrial (@"(?<2>ab)(?<c>c)(?<d>d)", RegexOptions.None, "abcd", "Pass. Group[0]=(0,4) Group[1]=(2,1) Group[2]=(0,2) Group[3]=(3,1)"),// 61
};
[Test]
[Test] public void RegexTrial0058 () { trials [58].Execute (); }
[Test] public void RegexTrial0059 () { trials [59].Execute (); }
[Test] public void RegexTrial0060 () { trials [60].Execute (); }
+ [Test] public void RegexTrial0061 () { trials [61].Execute (); }
}
}