public string PerformReplacements(string text, ReplacementInfo replacementInfo) { if (replacementInfo == null) { return(text); } //AM: replacements may be implemented more effectively buffer.Capacity = Math.Max(buffer.Capacity, text.Length + replacementInfo.DeltaLength); buffer.Append(text); IList <ReplacementItem> replacementItems = replacementInfo.Items; int count = replacementItems.Count; for (int i = 0; i < count; i++) { ReplacementItem item = replacementItems[i]; buffer.Remove(item.CharIndex, 1); string replaceString = item.ReplaceWith; if (!String.IsNullOrEmpty(replaceString)) { buffer.Insert(item.CharIndex, replaceString); } } string result = buffer.ToString(); buffer.Length = 0; return(result); }
public ReplacementInfo CreateReplacementInfo(string text, Dictionary <char, string> replaceTable) { ReplacementInfo result = null; for (int i = text.Length - 1; i >= 0; i--) { string replaceWith; if (replaceTable.TryGetValue(text[i], out replaceWith)) { if (result == null) { result = new ReplacementInfo(); } result.Add(i, replaceWith); } } return(result); }