diff --git a/src/DocNet/SimpleNavigationElement.cs b/src/DocNet/SimpleNavigationElement.cs index 2de247b..323e958 100644 --- a/src/DocNet/SimpleNavigationElement.cs +++ b/src/DocNet/SimpleNavigationElement.cs @@ -108,9 +108,12 @@ namespace Docnet sb.Replace("{{Breadcrumbs}}", activePath.CreateBreadCrumbsHTML(relativePathToRoot)); sb.Replace("{{ToC}}", activePath.CreateToCHTML(relativePathToRoot)); sb.Replace("{{ExtraScript}}", (this.ExtraScriptProducerFunc == null) ? string.Empty : this.ExtraScriptProducerFunc(this)); - - // the last action has to be replacing the content marker, so markers in the content which we have in the template as well aren't replaced - sb.Replace("{{Content}}", content); + + // Check if the content contains @@include tag + content = Utils.IncludeProcessor(content, Path.Combine(activeConfig.Source, "_partials")); + + // the last action has to be replacing the content marker, so markers in the content which we have in the template as well aren't replaced + sb.Replace("{{Content}}", content); Utils.CreateFoldersIfRequired(destinationFile); File.WriteAllText(destinationFile, sb.ToString()); if(!this.IsIndexElement) diff --git a/src/DocNet/Utils.cs b/src/DocNet/Utils.cs index 492f128..f45593f 100644 --- a/src/DocNet/Utils.cs +++ b/src/DocNet/Utils.cs @@ -25,6 +25,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; namespace Docnet @@ -184,5 +185,37 @@ namespace Docnet return relativePath; } - } + + /// + /// Regex expression used to parse @@include(filename.html) tag. + /// + private static Regex includeRegex = new Regex(@"@@include\((.*)\)", RegexOptions.IgnoreCase | RegexOptions.Compiled); + + /// + /// Process the input for @@include tags and embeds the included content + /// into the output. + /// + /// + /// + /// + public static string IncludeProcessor(string content, string partialPath) + { + Match m = includeRegex.Match(content); + while (m.Success) + { + if (m.Groups.Count > 1) + { + string tagToReplace = m.Groups[0].Value; + string fileName = m.Groups[1].Value; + string filePath = Path.Combine(partialPath, fileName); + if (File.Exists(filePath)) + { + content = content.Replace(tagToReplace, File.ReadAllText(filePath)); + } + } + m = m.NextMatch(); + } + return content; + } + } }