示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }