/// <summary> /// Create deep level copy of an opus and export as plain HTML using the goven groups builder attributes. /// </summary> /// <param name="opus">Source</param> /// <param name="createImage">handler to store images</param> /// <param name="scaleImage">handler to scale/change images according to image properties</param> /// <param name="builderContent">Callback to get the content from caller</param> /// <param name="numbering">Instruction to create section numbers.</param> /// <param name="path">Path to savely store temporary files.</param> /// <param name="target">Build for HTML, RSS, PDF, and so on.</param> /// <returns>HTML</returns> public string CreateDocumentHtml(Opus opus, CreateImageHandler createImage, ScaleImageHandler scaleImage, Func <string> builderContent, IDictionary <string, NumberingSchema> numbering, string path, GroupKind target) { opus.CreateImage += createImage; opus.ScaleImage += scaleImage; opus.TempPath = path; opus.Numbering = numbering; var builder = opus.GetType().GetCustomAttributes(typeof(SnippetBuilderAttribute), true).OfType <SnippetBuilderAttribute>().Single(sb => sb.Target == target); opus.BuiltContent = builderContent(); return(builder.BuildHtml(opus, numbering, null)); }
/// <summary> /// Create deep level copy of one chapter of an opus and export as plain HTML using the goven groups builder attributes. /// </summary> /// <param name="opus">Reference to parent opus</param> /// <param name="chapter">Source Chapter</param> /// <param name="createImage">handler to store images</param> /// <param name="scaleImage">handler to scale/change images according to image properties</param> /// <param name="builderContent">Callback to get the content from caller</param> /// <param name="numbering">Instruction to create section numbers.</param> /// <param name="path">Path to savely store temporary files.</param> /// <param name="target">Build for HTML, RSS, PDF, and so on.</param> /// <returns>HTML</returns> public string CreateChapterHtml(Opus document, Section chapter, CreateImageHandler createImage, ScaleImageHandler scaleImage, string path, GroupKind target, bool withNumbers = true) { if (chapter.Parent.Id != document.Id) { throw new ArgumentOutOfRangeException("chapter"); } document.CreateImage += createImage; document.ScaleImage += scaleImage; document.TempPath = path; document.Numbering = GetLocalizedNumberingSchema(); var html = new StringBuilder(); html.Append(CreateHtmlInner(new Snippet[] { chapter }, document.Numbering, target)); return(html.ToString()); }
/// <summary> /// Create the final HTML from a frozen fragment. There is no scaling or file handling as the frozen fragments are ready to go. /// </summary> /// <param name="fragment"></param> /// <param name="withNumbers"></param> /// <returns></returns> public string CreateFragmentHtml(FrozenFragment fragment, CreateImageHandler createImage, ScaleImageHandler scaleImage, bool withNumbers = true) { var flatFragments = fragment.Children.FlattenHierarchy() .Where(f => f.TypeOfFragment == FragmentType.Html) .ToList(); var sb = new StringBuilder(); sb.AppendLine(Encoding.UTF8.GetString(fragment.Content)); flatFragments.Select(f => sb.AppendLine(Encoding.UTF8.GetString(f.Content))); var fragmentContent = sb.ToString(); // assume children provide resources if (fragment.HasChildren()) { foreach (var resources in fragment.Children) { var imgRegex = new Regex(String.Format(@"src=""{0}""", resources.ItemHref)); if (!imgRegex.Match(fragmentContent).Success) { continue; } var newPath = createImage(this, new CreateImageArguments { FileName = resources.ItemHref }); fragmentContent = imgRegex.Replace(fragmentContent, String.Format(@"src=""{0}""", newPath)); } } return(fragmentContent); }