public static int ReplaceFirst(Matcher m,Substitution substitution,TextBuffer dest) { int c=0; if(m.Find()) { if(m.Start>0) m.Group(Matcher.PREFIX,dest); substitution.AppendSubstitution(m,dest); c++; m.SetTarget(m,Matcher.SUFFIX); } m.Group(Matcher.TARGET,dest); return c; }
public static int Replace(Matcher m,Substitution substitution,TextBuffer dest) { bool firstPass=true; int c=0; while(m.Find()) { if(m.End==0 && !firstPass) continue; //allow to Replace at "^" if(m.Start>0) m.Group(Matcher.PREFIX,dest); substitution.AppendSubstitution(m,dest); c++; m.SetTarget(m,Matcher.SUFFIX); firstPass=false; } m.Group(Matcher.TARGET,dest); return c; }
static Element MakeQueue(Matcher refMatcher) { if(refMatcher.Find()){ Element element; if(refMatcher.IsCaptured(NAME_ID)){ char c=refMatcher.CharAt(0,NAME_ID); if(c=='&') { element = new IntRefHandler(refMatcher.Prefix, 0); } else if(char.IsDigit(c)){ element = new IntRefHandler(refMatcher.Prefix, Convert.ToInt32(refMatcher.Group(NAME_ID))); } else element = new StringRefHandler(refMatcher.Prefix, refMatcher.Group(NAME_ID)); } else { //escaped char element = new PlainElement(refMatcher.Prefix, refMatcher.Group(ESC_ID)); } refMatcher.SetTarget(refMatcher, Matcher.SUFFIX); element.next = MakeQueue(refMatcher); return element; } else return new PlainElement(refMatcher.Target); }