Exemple #1
0
        string Replace(string input, MatchAppendEvaluator evaluator, int count, int startat)
        {
            StringBuilder result  = new StringBuilder();
            int           ptr     = startat;
            int           counter = count;

            result.Append(input, 0, ptr);

            Match m = Match(input, startat);

            while (m.Success)
            {
                if (count != -1)
                {
                    if (counter-- <= 0)
                    {
                        break;
                    }
                }
                result.Append(input, ptr, m.Index - ptr);
                evaluator(m, result);

                ptr = m.Index + m.Length;
                m   = m.NextMatch();
            }

            if (ptr == 0)
            {
                return(input);
            }

            result.Append(input, ptr, input.Length - ptr);

            return(result.ToString());
        }
Exemple #2
0
        internal string LTRReplace(Regex regex, string input, MatchAppendEvaluator evaluator, int count, int startat, bool needs_groups_or_captures)
        {
            this.needs_groups_or_captures = needs_groups_or_captures;
            Match match = Scan(regex, input, startat, input.Length);

            if (!match.Success)
            {
                return(input);
            }
            StringBuilder stringBuilder = new StringBuilder(input.Length);
            int           num           = startat;
            int           num2          = count;

            stringBuilder.Append(input, 0, num);
            while (count == -1 || num2-- > 0)
            {
                if (match.Index < num)
                {
                    throw new SystemException("how");
                }
                stringBuilder.Append(input, num, match.Index - num);
                evaluator(match, stringBuilder);
                num   = match.Index + match.Length;
                match = match.NextMatch();
                if (!match.Success)
                {
                    break;
                }
            }
            stringBuilder.Append(input, num, input.Length - num);
            return(stringBuilder.ToString());
        }
        internal IString LTRReplace(Regex regex, IString input, MatchAppendEvaluator evaluator, int count, int startat, bool needs_groups_or_captures)
        {
            this.needs_groups_or_captures = needs_groups_or_captures;

            Match m = Scan(regex, input, startat, input.Length);

            if (!m.Success)
            {
                return(input);
            }

            StringBuilder result  = new StringBuilder(input.Length * 2);
            int           ptr     = startat;
            int           counter = count;

            input.AppendTo(result, 0, ptr);

            do
            {
                if (count != -1)
                {
                    if (counter-- <= 0)
                    {
                        break;
                    }
                }
                if (m.Index < ptr)
                {
                    throw new SystemException("how");
                }
                int appendLen = m.Index - ptr;
                input.AppendTo(result, ptr, appendLen);
                evaluator(m, result);

                ptr = m.Index + m.Length;
                m   = m.NextMatch();
            } while (m.Success);

            input.AppendTo(result, ptr, input.Length - ptr);

            return(new WrappedStringBuilder(result));
        }
Exemple #4
0
 internal string LTRReplace(Regex regex, string input, MatchAppendEvaluator evaluator, int count, int startat)
 {
     return(LTRReplace(regex, input, evaluator, count, startat, true));
 }
Exemple #5
0
		internal string LTRReplace (Regex regex, string input, MatchAppendEvaluator evaluator, int count, int startat, bool needs_groups_or_captures)
		{
			this.needs_groups_or_captures = needs_groups_or_captures;
			
			Match m = Scan (regex, input, startat, input.Length);
			if (!m.Success)
				return input;

			StringBuilder result = new StringBuilder (input.Length);
			int ptr = startat;
			int counter = count;

			result.Append (input, 0, ptr);

			do {
				if (count != -1)
					if (counter-- <= 0)
						break;
				if (m.Index < ptr)
					throw new SystemException ("how");
				result.Append (input, ptr, m.Index - ptr);
				evaluator (m, result);

				ptr = m.Index + m.Length;
				m = m.NextMatch ();
			} while (m.Success);

			result.Append (input, ptr, input.Length - ptr);

			return result.ToString ();
		}
Exemple #6
0
		internal string LTRReplace (Regex regex, string input, MatchAppendEvaluator evaluator, int count, int startat) {
			return LTRReplace (regex, input, evaluator, count, startat, true);
		}
		string Replace (string input, MatchAppendEvaluator evaluator, int count, int startat)
		{
			StringBuilder result = new StringBuilder ();
			int ptr = startat;
			int counter = count;

			result.Append (input, 0, ptr);

			Match m = Match (input, startat);
			while (m.Success) {
				if (count != -1)
					if(counter -- <= 0)
						break;
				result.Append (input, ptr, m.Index - ptr);
				evaluator (m, result);

				ptr = m.Index + m.Length;
				m = m.NextMatch ();
			}
			
			if (ptr == 0)
				return input;
			
			result.Append (input, ptr, input.Length - ptr);

			return result.ToString ();
		}
Exemple #8
0
 internal string LTRReplace(Regex regex, string input, MatchAppendEvaluator evaluator, int count, int startat)
 {
     return(LTRReplace(regex, input, evaluator, count, startat, needs_groups_or_captures: true));
 }