/// <summary> /// Converts FB2 section element /// </summary> /// <param name="sectionItem">item to convert</param> /// <returns>XHTML representation</returns> public List<IHTMLItem> Convert(SectionItem sectionItem) { if (sectionItem == null) { throw new ArgumentNullException("sectionItem"); } var resList = new List<IHTMLItem>(); Logger.Log.Debug("Converting section"); var content = new Div(HTMLElementType.XHTML11); ulong documentSize = 0; _checker.MaxSizeLimit = Settings.MaxSize; SetClassType(content, string.Format(ElementStylesV2.SectionItemFormat, RecursionLevel)); content.GlobalAttributes.ID.Value = Settings.ReferencesManager.AddIdUsed(sectionItem.ID, content); if (sectionItem.Lang != null) { content.GlobalAttributes.Language.Value = sectionItem.Lang; } // Load Title if (sectionItem.Title != null) { IHTMLItem titleItem; if (!LinkSection) { var titleConverter = new TitleConverterV2(); titleItem = titleConverter.Convert(sectionItem.Title, new TitleConverterParamsV2 { Settings = Settings, TitleLevel = RecursionLevel + 1 }); } else { var linkSectionConverter = new LinkSectionConverterV2(); titleItem = linkSectionConverter.Convert(sectionItem, new LinkSectionConverterParamsV2{Settings = Settings}); } if (titleItem != null) { documentSize = SplitBlockHTMLItem(titleItem, content, resList, documentSize); } } // Load epigraphs documentSize = (from epigraph in sectionItem.Epigraphs let epigraphConverter = new EpigraphConverterV2() select epigraphConverter.Convert(epigraph, new EpigraphConverterParamsV2 {Settings = Settings, Level = RecursionLevel + 1})).Aggregate(documentSize, (current, epigraphItem) => SplitBlockHTMLItem(epigraphItem, content, resList, current)); // Load section image if (Settings.Images.HasRealImages()) { documentSize = sectionItem.SectionImages.Aggregate(documentSize, (current, sectionImage) => ConvertSectionImage(sectionImage, content, resList, current)); } // Load annotations if (sectionItem.Annotation != null) { var annotationConverter = new AnnotationConverterV2(); IHTMLItem annotationItem = annotationConverter.Convert(sectionItem.Annotation, new AnnotationConverterParamsV2{ Level = RecursionLevel + 1 ,Settings = Settings}); documentSize = SplitBlockHTMLItem(annotationItem, content, resList, documentSize); } // Parse all elements only if section has no sub section if (sectionItem.SubSections.Count == 0) { bool startSection = true; sectionItem.Content.Aggregate(documentSize, (current, item) => ConvertSimpleSubItem(item, sectionItem, content, resList, ref startSection, current)); } resList.Add(content); return resList; }
/// <summary> /// Converts FB2 section element /// </summary> /// <param name="sectionItem">item to convert</param> /// <returns>XHTML representation</returns> public List <IHTMLItem> Convert(SectionItem sectionItem) { if (sectionItem == null) { throw new ArgumentNullException("sectionItem"); } var resList = new List <IHTMLItem>(); Logger.Log.Debug("Converting section"); var content = new Div(HTMLElementType.XHTML11); ulong documentSize = 0; _checker.MaxSizeLimit = Settings.MaxSize; SetClassType(content, string.Format(ElementStylesV2.SectionItemFormat, RecursionLevel)); content.GlobalAttributes.ID.Value = Settings.ReferencesManager.AddIdUsed(sectionItem.ID, content); if (sectionItem.Lang != null) { content.GlobalAttributes.Language.Value = sectionItem.Lang; } // Load Title if (sectionItem.Title != null) { IHTMLItem titleItem; if (!LinkSection) { var titleConverter = new TitleConverterV2(); titleItem = titleConverter.Convert(sectionItem.Title, new TitleConverterParamsV2 { Settings = Settings, TitleLevel = RecursionLevel + 1 }); } else { var linkSectionConverter = new LinkSectionConverterV2(); titleItem = linkSectionConverter.Convert(sectionItem, new LinkSectionConverterParamsV2 { Settings = Settings }); } if (titleItem != null) { documentSize = SplitBlockHTMLItem(titleItem, content, resList, documentSize); } } // Load epigraphs documentSize = (from epigraph in sectionItem.Epigraphs let epigraphConverter = new EpigraphConverterV2() select epigraphConverter.Convert(epigraph, new EpigraphConverterParamsV2 { Settings = Settings, Level = RecursionLevel + 1 })).Aggregate(documentSize, (current, epigraphItem) => SplitBlockHTMLItem(epigraphItem, content, resList, current)); // Load section image if (Settings.Images.HasRealImages()) { documentSize = sectionItem.SectionImages.Aggregate(documentSize, (current, sectionImage) => ConvertSectionImage(sectionImage, content, resList, current)); } // Load annotations if (sectionItem.Annotation != null) { var annotationConverter = new AnnotationConverterV2(); IHTMLItem annotationItem = annotationConverter.Convert(sectionItem.Annotation, new AnnotationConverterParamsV2 { Level = RecursionLevel + 1, Settings = Settings }); documentSize = SplitBlockHTMLItem(annotationItem, content, resList, documentSize); } // Parse all elements only if section has no sub section if (sectionItem.SubSections.Count == 0) { bool startSection = true; sectionItem.Content.Aggregate(documentSize, (current, item) => ConvertSimpleSubItem(item, sectionItem, content, resList, ref startSection, current)); } resList.Add(content); return(resList); }