/// <summary> /// Builds the content by replacing any custom tags with their actual content by running the macros. /// </summary> /// <param name="content">String with content to process.</param> /// <returns>Processed content.</returns> public string BuildContent(string content) { var doc = new MacroDocParser(_prefix, _openBracket, _closeBracket); var result = doc.Parse(content); if (result == null || result.Tags == null || result.Tags.Count == 0) { return(content); } int start = 0; int tagIndex = 0; var buffer = new StringBuilder(); while (start < content.Length && tagIndex < result.Tags.Count) { var tag = result.Tags[tagIndex]; // Add existing content without macros. string nonMacroContent = content.Substring(start, tag.Position - start); buffer.Append(nonMacroContent); // Add macro content. var meta = Lookup[tag.Name]; string macroContent = string.Empty; if (meta.Lamda == null) { var macro = Create(tag.Name); macroContent = macro.Process(tag); } else { var callback = meta.Lamda as Func <Tag, string>; macroContent = callback(tag); } buffer.Append(macroContent); // Increment // 1. next starting postion of content after macro tag. // 2. next index of tag start = tag.Position + tag.Length; tagIndex++; } // Remaining content if (start < content.Length) { buffer.Append(content.Substring(start)); } string finalText = buffer.ToString(); return(finalText); }
/// <summary> /// Builds the content by replacing any custom cms tags with their actual content. /// </summary> /// <param name="content"></param> /// <returns></returns> public string BuildContent(string content) { var doc = new MacroDocParser(_prefix, _openBracket, _closeBracket); var result = doc.Parse(content); if (result == null || result.Tags == null || result.Tags.Count == 0) { return(content); } var buffer = new StringBuilder(); foreach (var tag in result.Tags) { var macro = Create(tag.Name); buffer.Append(macro.Process(tag)); } string finalText = buffer.ToString(); return(finalText); }