public static string ExpandMasterPage(IResourceFileReader reader, ResourceInfo info, Regex masterRegex, Regex bodyRegex) { var template = info.Content; var path = info.Path; var masterPageResourceName = ExtractMasterPageResourceName(reader, info, masterRegex).FirstOrDefault(); template = masterRegex.Replace(template, string.Empty); if (masterPageResourceName != null) { using var stream = reader.GetResourceStream(masterPageResourceName); if (stream != null) { using var sr = new StreamReader(stream); var master = sr.ReadToEnd(); if (bodyRegex.IsMatch(master)) { return(bodyRegex.Replace(master, template)); } else { Logger.LogInfo($"Master page {masterPageResourceName} does not contain {{{{!body}}}} element, content in current template {path} is ignored."); return(master); } } } return(template); }
public Nustache.Core.Template GetTemplate(string name) { if (_reader == null) { return(null); } var resourceName = name + PartialTemplateExtension; return(_templateCache.GetOrAdd(resourceName, s => { lock (_reader) { using (var stream = _reader.GetResourceStream(s)) { if (stream == null) { return null; } var template = new Nustache.Core.Template(name); using (StreamReader reader = new StreamReader(stream)) { template.Load(reader); } return template; } } })); }