diff --git a/src/DocNet/NavigatedPath.cs b/src/DocNet/NavigatedPath.cs
index b2c53df..d2e51f6 100644
--- a/src/DocNet/NavigatedPath.cs
+++ b/src/DocNet/NavigatedPath.cs
@@ -52,7 +52,7 @@ namespace Docnet
}
else
{
- fragments.Add(string.Format("
{2}", relativePathToRoot, HttpUtility.UrlEncode(targetURL), element.Name));
+ fragments.Add(string.Format("{2}", relativePathToRoot, targetURL, element.Name));
}
}
return string.Format("{1}", string.Join(" / ", fragments.ToArray()), Environment.NewLine);
diff --git a/src/DocNet/SimpleNavigationElement.cs b/src/DocNet/SimpleNavigationElement.cs
index 2de247b..5d0b0b8 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)
@@ -210,7 +213,7 @@ namespace Docnet
_targetURLForHTML = (this.Value ?? string.Empty);
if(_targetURLForHTML.ToLowerInvariant().EndsWith(".md"))
{
- _targetURLForHTML = _targetURLForHTML.Substring(0, _targetURLForHTML.Length-3) + ".htm";
+ _targetURLForHTML = _targetURLForHTML.Substring(0, _targetURLForHTML.Length-3) + ".html";
}
_targetURLForHTML = _targetURLForHTML.Replace("\\", "/");
}
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;
+ }
+ }
}