private static Epub3NavLi ReadEpub3NavLi(XElement epub3NavLiNode) { Epub3NavLi epub3NavLi = new Epub3NavLi(); foreach (XElement navLiChildNode in epub3NavLiNode.Elements()) { switch (navLiChildNode.GetLowerCaseLocalName()) { case "a": Epub3NavAnchor epub3NavAnchor = ReadEpub3NavAnchor(navLiChildNode); epub3NavLi.Anchor = epub3NavAnchor; break; case "span": Epub3NavSpan epub3NavSpan = ReadEpub3NavSpan(navLiChildNode); epub3NavLi.Span = epub3NavSpan; break; case "ol": Epub3NavOl epub3NavOl = ReadEpub3NavOl(navLiChildNode); epub3NavLi.ChildOl = epub3NavOl; break; } } return(epub3NavLi); }
private static List <EpubNavigationItemRef> GetNavigationItems(EpubBookRef bookRef, Epub3NavOl epub3NavOl) { List <EpubNavigationItemRef> result = new List <EpubNavigationItemRef>(); if (epub3NavOl != null && epub3NavOl.Lis != null) { foreach (Epub3NavLi epub3NavLi in epub3NavOl.Lis) { if (epub3NavLi != null && (epub3NavLi.Anchor != null || epub3NavLi.Span != null)) { if (epub3NavLi.Anchor != null) { Epub3NavAnchor navAnchor = epub3NavLi.Anchor; EpubNavigationItemRef navigationItemRef = EpubNavigationItemRef.CreateAsLink(); navigationItemRef.Title = GetFirstNonEmptyHeader(navAnchor.Text, navAnchor.Title, navAnchor.Alt); navigationItemRef.Link = new EpubNavigationItemLink(navAnchor.Href); navigationItemRef.HtmlContentFileRef = GetHtmlContentFileRef(bookRef, navigationItemRef.Link.ContentFileName); navigationItemRef.NestedItems = GetNavigationItems(bookRef, epub3NavLi.ChildOl); result.Add(navigationItemRef); } else if (epub3NavLi.Span != null) { Epub3NavSpan navSpan = epub3NavLi.Span; EpubNavigationItemRef navigationItemRef = EpubNavigationItemRef.CreateAsHeader(); navigationItemRef.Title = GetFirstNonEmptyHeader(navSpan.Text, navSpan.Title, navSpan.Alt); navigationItemRef.NestedItems = GetNavigationItems(bookRef, epub3NavLi.ChildOl); result.Add(navigationItemRef); } } } } return(result); }
private static Epub3NavSpan ReadEpub3NavSpan(XElement epub3NavSpanNode) { Epub3NavSpan epub3NavSpan = new Epub3NavSpan(); foreach (XAttribute navSpanNodeAttribute in epub3NavSpanNode.Attributes()) { string attributeValue = navSpanNodeAttribute.Value; switch (navSpanNodeAttribute.GetLowerCaseLocalName()) { case "title": epub3NavSpan.Title = attributeValue; break; case "alt": epub3NavSpan.Alt = attributeValue; break; } } epub3NavSpan.Text = epub3NavSpanNode.Value.Trim(); return(epub3NavSpan); }