public XNode ToXML() { XElement xCite = new XElement(Fb2Const.fb2DefaultNamespace + Fb2CiteElementName); if (!string.IsNullOrEmpty(ID)) { xCite.Add(new XAttribute("id", ID)); } if (!string.IsNullOrEmpty(Lang)) { xCite.Add(new XAttribute(XNamespace.Xml + "lang", Lang)); } foreach (IFb2TextItem CiteItem in citeData) { xCite.Add(CiteItem.ToXML()); } foreach (ParagraphItem AuthorItem in textAuthors) { xCite.Add(AuthorItem.ToXML()); } return(xCite); }
internal void Load(XElement xSection) { ClearAll(); if (xSection == null) { throw new ArgumentNullException("xSection"); } if (xSection.Name.LocalName != Fb2TextSectionElementName) { throw new ArgumentException("Element of wrong type passed", "xSection"); } XElement xTitle = xSection.Element(xSection.Name.Namespace + TitleItem.Fb2TitleElementName); if (xTitle != null) { Title = new TitleItem(); try { Title.Load(xTitle); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section title : {0}.", ex.Message)); } } IEnumerable<XElement> xEpigraphs = xSection.Elements(xSection.Name.Namespace + EpigraphItem.Fb2EpigraphElementName); foreach (var xEpigraph in xEpigraphs) { EpigraphItem epigraph = new EpigraphItem(); try { epigraph.Load(xEpigraph); _epigraphs.Add(epigraph); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section epigraph : {0}.", ex.Message)); } } XElement xAnnotation = xSection.Element(xSection.Name.Namespace + AnnotationItem.Fb2AnnotationItemName); if (xAnnotation != null) { Annotation = new AnnotationItem(); try { Annotation.Load(xAnnotation); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section annotation : {0}.", ex.Message)); } } IEnumerable<XElement> xElements = xSection.Elements(); foreach (var xElement in xElements) { switch (xElement.Name.LocalName) { case ParagraphItem.Fb2ParagraphElementName: ParagraphItem paragraph = new ParagraphItem(); try { paragraph.Load(xElement); _content.Add(paragraph); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section paragraph : {0}.", ex.Message)); } break; case PoemItem.Fb2PoemElementName: PoemItem poem = new PoemItem(); try { poem.Load(xElement); _content.Add(poem); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section poem : {0}.", ex.Message)); } break; case ImageItem.Fb2ImageElementName: ImageItem image = new ImageItem(); try { image.Load(xElement); AddImage(image); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section image : {0}.", ex.Message)); } break; case SubTitleItem.Fb2SubtitleElementName: SubTitleItem subtitle = new SubTitleItem(); try { subtitle.Load(xElement); _content.Add(subtitle); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section subtitle : {0}.", ex.Message)); } break; case CiteItem.Fb2CiteElementName: CiteItem cite = new CiteItem(); try { cite.Load(xElement); _content.Add(cite); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section citation : {0}.", ex.Message)); } break; case EmptyLineItem.Fb2EmptyLineElementName: EmptyLineItem eline = new EmptyLineItem(); _content.Add(eline); break; case TableItem.Fb2TableElementName: TableItem table = new TableItem(); try { table.Load(xElement); _content.Add(table); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load section emptly line : {0}.", ex.Message)); } break; case Fb2TextSectionElementName: // internal <section> read recurive SectionItem section = new SectionItem(); try { section.Load(xElement); AddSection(section); } catch (Exception ex) { Debug.WriteLine(string.Format("Failed to load sub-section : {0}.", ex.Message)); } break; case AnnotationItem.Fb2AnnotationItemName: // already processed break; case TitleItem.Fb2TitleElementName: // already processed break; case EpigraphItem.Fb2EpigraphElementName: // already processed break; default: if (!string.IsNullOrEmpty(xElement.Value)) { ParagraphItem tempParagraph = new ParagraphItem(); try { SimpleText text = new SimpleText {Text = xElement.Value}; tempParagraph.ParagraphData.Add(text); _content.Add(tempParagraph); } catch { // ignored } } Debug.WriteLine("AnnotationItem:Load - invalid element <{0}> encountered in title .", xElement.Name.LocalName); break; } } ID = null; XAttribute xID = xSection.Attribute("id"); if ((xID != null)) { ID = xID.Value; } Lang = null; XAttribute xLang = xSection.Attribute(XNamespace.Xml + "lang"); if ((xLang != null)) { Lang = xLang.Value; } }
internal void Load(XElement xEpigraph) { epigraphData.Clear(); if (xEpigraph == null) { throw new ArgumentNullException("xEpigraph"); } if (xEpigraph.Name.LocalName != Fb2EpigraphElementName) { throw new ArgumentException("Element of wrong type passed", "xEpigraph"); } IEnumerable<XElement> xItems = xEpigraph.Elements(); textAuthors.Clear(); foreach (var element in xItems) { switch (element.Name.LocalName) { case ParagraphItem.Fb2ParagraphElementName: ParagraphItem paragraph = new ParagraphItem(); try { paragraph.Load(element); epigraphData.Add(paragraph); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load paragraph: {0}.", ex.Message)); } break; case PoemItem.Fb2PoemElementName: PoemItem poem = new PoemItem(); try { poem.Load(element); epigraphData.Add(poem); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load poem: {0}.", ex.Message)); } break; case CiteItem.Fb2CiteElementName: CiteItem cite = new CiteItem(); try { cite.Load(element); epigraphData.Add(cite); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load citation: {0}.", ex.Message)); } break; case EmptyLineItem.Fb2EmptyLineElementName: EmptyLineItem emptyLine = new EmptyLineItem(); try { epigraphData.Add(emptyLine); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load empty line: {0}.", ex.Message)); } break; case TextAuthorItem.Fb2TextAuthorElementName: TextAuthorItem author = new TextAuthorItem(); //SimpleText author = new SimpleText(); try { author.Load(element); textAuthors.Add(author); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load text author: {0}.", ex.Message)); } break; default: Debug.Fail(string.Format("EpigraphItem:Load - invalid element <{0}> encountered in title ."), element.Name.LocalName); break; } } XAttribute xID = xEpigraph.Attribute("id"); if ((xID != null) &&(xID.Value != null)) { ID = xID.Value; } }
/// <summary> /// Convert FB2 citation element /// </summary> /// <param name="citeItem">item to convert</param> /// <param name="citationConverterParams"></param> /// <returns>XHTML representation</returns> public Div Convert(CiteItem citeItem, CitationConverterParamsV2 citationConverterParams) { if (citeItem == null) { throw new ArgumentNullException("citeItem"); } if (citationConverterParams == null) { throw new ArgumentNullException("citationConverterParams"); } var citation = new Div(HTMLElementType.XHTML11); foreach (var item in citeItem.CiteData) { if (item is SubTitleItem) { var subtitleConverter = new SubtitleConverterV2(); citation.Add(subtitleConverter.Convert(item as SubTitleItem, new SubtitleConverterParamsV2 { Settings = citationConverterParams.Settings})); } else if (item is ParagraphItem) { var paragraphConverter = new ParagraphConverterV2(); citation.Add(paragraphConverter.Convert(item as ParagraphItem, new ParagraphConverterParamsV2 { ResultType = ParagraphConvTargetEnumV2.Paragraph, Settings = citationConverterParams.Settings, StartSection = false})); } else if (item is PoemItem) { var poemConverter = new PoemConverterV2(); citation.Add(poemConverter.Convert(item as PoemItem, new PoemConverterParamsV2 { Settings = citationConverterParams.Settings, Level = citationConverterParams.Level + 1 } )); } else if (item is EmptyLineItem) { var emptyLineConverter = new EmptyLineConverterV2(); citation.Add(emptyLineConverter.Convert()); } else if (item is TableItem) { var tableConverter = new TableConverterV2(); citation.Add(tableConverter.Convert(item as TableItem, new TableConverterParamsV2 { Settings = citationConverterParams.Settings})); } } foreach (var author in citeItem.TextAuthors) { var citationAuthorConverter = new CitationAuthorConverterV2(); citation.Add(citationAuthorConverter.Convert(author,new CitationAuthorConverterParamsV2 { Settings = citationConverterParams.Settings})); } citation.GlobalAttributes.ID.Value = citationConverterParams.Settings.ReferencesManager.AddIdUsed(citeItem.ID, citation); if (citeItem.Lang != null) { citation.GlobalAttributes.Language.Value = citeItem.Lang; } SetClassType(citation, ElementStylesV2.Citation); return citation; }
internal void Load(XElement xEpigraph) { epigraphData.Clear(); if (xEpigraph == null) { throw new ArgumentNullException("xEpigraph"); } if (xEpigraph.Name.LocalName != Fb2EpigraphElementName) { throw new ArgumentException("Element of wrong type passed", "xEpigraph"); } IEnumerable <XElement> xItems = xEpigraph.Elements(); textAuthors.Clear(); foreach (var element in xItems) { switch (element.Name.LocalName) { case ParagraphItem.Fb2ParagraphElementName: ParagraphItem paragraph = new ParagraphItem(); try { paragraph.Load(element); epigraphData.Add(paragraph); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load paragraph: {0}.", ex.Message)); } break; case PoemItem.Fb2PoemElementName: PoemItem poem = new PoemItem(); try { poem.Load(element); epigraphData.Add(poem); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load poem: {0}.", ex.Message)); } break; case CiteItem.Fb2CiteElementName: CiteItem cite = new CiteItem(); try { cite.Load(element); epigraphData.Add(cite); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load citation: {0}.", ex.Message)); } break; case EmptyLineItem.Fb2EmptyLineElementName: EmptyLineItem emptyLine = new EmptyLineItem(); try { epigraphData.Add(emptyLine); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load empty line: {0}.", ex.Message)); } break; case TextAuthorItem.Fb2TextAuthorElementName: TextAuthorItem author = new TextAuthorItem(); //SimpleText author = new SimpleText(); try { author.Load(element); textAuthors.Add(author); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load text author: {0}.", ex.Message)); } break; default: Debug.Fail(string.Format("EpigraphItem:Load - invalid element <{0}> encountered in title ."), element.Name.LocalName); break; } } XAttribute xID = xEpigraph.Attribute("id"); if ((xID != null) && (xID.Value != null)) { ID = xID.Value; } }
internal void Load(XElement xSection) { ClearAll(); if (xSection == null) { throw new ArgumentNullException("xSection"); } if (xSection.Name.LocalName != Fb2TextSectionElementName) { throw new ArgumentException("Element of wrong type passed", "xSection"); } XElement xTitle = xSection.Element(xSection.Name.Namespace + TitleItem.Fb2TitleElementName); if (xTitle != null) { Title = new TitleItem(); try { Title.Load(xTitle); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section title : {0}.", ex.Message)); } } IEnumerable <XElement> xEpigraphs = xSection.Elements(xSection.Name.Namespace + EpigraphItem.Fb2EpigraphElementName); foreach (var xEpigraph in xEpigraphs) { EpigraphItem epigraph = new EpigraphItem(); try { epigraph.Load(xEpigraph); _epigraphs.Add(epigraph); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section epigraph : {0}.", ex.Message)); } } XElement xAnnotation = xSection.Element(xSection.Name.Namespace + AnnotationItem.Fb2AnnotationItemName); if (xAnnotation != null) { Annotation = new AnnotationItem(); try { Annotation.Load(xAnnotation); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section annotation : {0}.", ex.Message)); } } IEnumerable <XElement> xElements = xSection.Elements(); foreach (var xElement in xElements) { switch (xElement.Name.LocalName) { case ParagraphItem.Fb2ParagraphElementName: ParagraphItem paragraph = new ParagraphItem(); try { paragraph.Load(xElement); _content.Add(paragraph); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section paragraph : {0}.", ex.Message)); } break; case PoemItem.Fb2PoemElementName: PoemItem poem = new PoemItem(); try { poem.Load(xElement); _content.Add(poem); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section poem : {0}.", ex.Message)); } break; case ImageItem.Fb2ImageElementName: ImageItem image = new ImageItem(); try { image.Load(xElement); AddImage(image); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section image : {0}.", ex.Message)); } break; case SubTitleItem.Fb2SubtitleElementName: SubTitleItem subtitle = new SubTitleItem(); try { subtitle.Load(xElement); _content.Add(subtitle); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section subtitle : {0}.", ex.Message)); } break; case CiteItem.Fb2CiteElementName: CiteItem cite = new CiteItem(); try { cite.Load(xElement); _content.Add(cite); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section citation : {0}.", ex.Message)); } break; case EmptyLineItem.Fb2EmptyLineElementName: EmptyLineItem eline = new EmptyLineItem(); _content.Add(eline); break; case TableItem.Fb2TableElementName: TableItem table = new TableItem(); try { table.Load(xElement); _content.Add(table); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load section emptly line : {0}.", ex.Message)); } break; case Fb2TextSectionElementName: // internal <section> read recurive SectionItem section = new SectionItem(); try { section.Load(xElement); AddSection(section); } catch (Exception ex) { Debug.Fail(string.Format("Failed to load sub-section : {0}.", ex.Message)); } break; case AnnotationItem.Fb2AnnotationItemName: // already processed break; case TitleItem.Fb2TitleElementName: // already processed break; case EpigraphItem.Fb2EpigraphElementName: // already processed break; default: if (!string.IsNullOrEmpty(xElement.Value)) { ParagraphItem tempParagraph = new ParagraphItem(); try { SimpleText text = new SimpleText { Text = xElement.Value }; tempParagraph.ParagraphData.Add(text); _content.Add(tempParagraph); } catch { // ignored } } Debug.Print("AnnotationItem:Load - invalid element <{0}> encountered in title .", xElement.Name.LocalName); break; } } ID = null; XAttribute xID = xSection.Attribute("id"); if ((xID != null)) { ID = xID.Value; } Lang = null; XAttribute xLang = xSection.Attribute(XNamespace.Xml + "lang"); if ((xLang != null)) { Lang = xLang.Value; } }
internal void Load(XElement xAnnotation) { if (xAnnotation == null) { throw new ArgumentNullException(nameof(xAnnotation)); } if (xAnnotation.Name.LocalName != GetElementName()) { throw new ArgumentException("Element of wrong type passed", nameof(xAnnotation)); } _content.Clear(); IEnumerable <XElement> xItems = xAnnotation.Elements(); foreach (var xItem in xItems) { switch (xItem.Name.LocalName) { case ParagraphItem.Fb2ParagraphElementName: ParagraphItem paragraph = new ParagraphItem(); try { paragraph.Load(xItem); _content.Add(paragraph); } catch (Exception) { } break; case PoemItem.Fb2PoemElementName: PoemItem poem = new PoemItem(); try { poem.Load(xItem); _content.Add(poem); } catch (Exception) { } break; case CiteItem.Fb2CiteElementName: CiteItem cite = new CiteItem(); try { cite.Load(xItem); _content.Add(cite); } catch (Exception) { } break; case SubTitleItem.Fb2SubtitleElementName: SubTitleItem subtitle = new SubTitleItem(); try { subtitle.Load(xItem); _content.Add(subtitle); } catch (Exception) { } break; case TableItem.Fb2TableElementName: TableItem table = new TableItem(); try { table.Load(xItem); _content.Add(table); } catch (Exception) { } break; case EmptyLineItem.Fb2EmptyLineElementName: EmptyLineItem eline = new EmptyLineItem(); _content.Add(eline); break; default: Debug.WriteLine(string.Format("AnnotationItem:Load - invalid element <{0}> encountered in annotation ."), xItem.Name.LocalName); break; } } ID = null; XAttribute xID = xAnnotation.Attribute("id"); if ((xID != null) && (xID.Value != null)) { ID = xID.Value; } }
internal void Load(XElement xAnnotation) { if (xAnnotation == null) { throw new ArgumentNullException("xAnnotation"); } if (xAnnotation.Name.LocalName != GetElementName()) { throw new ArgumentException("Element of wrong type passed", "xAnnotation"); } content.Clear(); IEnumerable<XElement> xItems = xAnnotation.Elements(); foreach (var xItem in xItems) { switch (xItem.Name.LocalName) { case ParagraphItem.Fb2ParagraphElementName: ParagraphItem paragraph = new ParagraphItem(); try { paragraph.Load(xItem); content.Add(paragraph); } catch (Exception) { } break; case PoemItem.Fb2PoemElementName: PoemItem poem = new PoemItem(); try { poem.Load(xItem); content.Add(poem); } catch (Exception) { } break; case CiteItem.Fb2CiteElementName: CiteItem cite = new CiteItem(); try { cite.Load(xItem); content.Add(cite); } catch (Exception) { } break; case SubTitleItem.Fb2SubtitleElementName: SubTitleItem subtitle = new SubTitleItem(); try { subtitle.Load(xItem); content.Add(subtitle); } catch (Exception) { } break; case TableItem.Fb2TableElementName: TableItem table = new TableItem(); try { table.Load(xItem); content.Add(table); } catch (Exception) { } break; case EmptyLineItem.Fb2EmptyLineElementName: EmptyLineItem eline = new EmptyLineItem(); content.Add(eline); break; default: Debug.Fail(string.Format("AnnotationItem:Load - invalid element <{0}> encountered in annotation ."), xItem.Name.LocalName); break; } } ID = null; XAttribute xID = xAnnotation.Attribute("id"); if ((xID != null) && (xID.Value != null)) { ID = xID.Value; } }