public static NavDocument Read(XDocument xml)
        {
            if (xml == null)
            {
                throw new ArgumentNullException(nameof(xml));
            }
            if (xml.Root == null)
            {
                throw new ArgumentException("XML document has no root element.", nameof(xml));
            }

            var ns = xml.Root.Name.Namespace;

            var head = xml.Root?.Element(ns + NavElements.Head);
            var body = xml.Root?.Element(ns + NavElements.Body);

            var nav = new NavDocument
            {
                Head = new NavHead
                {
                    Dom   = head,
                    Title = head?.Element(ns + NavElements.Title)?.Value,
                    Links = head?.Elements(ns + NavElements.Link).AsObjectList(elem => new NavHeadLink
                    {
                        Class = elem.Attribute(NavHeadLink.Attributes.Class)?.Value,
                        Href  = elem.Attribute(NavHeadLink.Attributes.Href)?.Value,
                        Rel   = elem.Attribute(NavHeadLink.Attributes.Rel)?.Value,
                        Title = elem.Attribute(NavHeadLink.Attributes.Title)?.Value,
                        Type  = elem.Attribute(NavHeadLink.Attributes.Type)?.Value,
                        Media = elem.Attribute(NavHeadLink.Attributes.Media)?.Value
                    }) ?? new List <NavHeadLink>(),
                    Metas = head?.Elements(ns + NavElements.Meta).AsObjectList(elem => new NavMeta
                    {
                        Name    = elem.Attribute(NavMeta.Attributes.Name)?.Value,
                        Content = elem.Attribute(NavMeta.Attributes.Content)?.Value,
                        Charset = elem.Attribute(NavMeta.Attributes.Charset)?.Value
                    }) ?? new List <NavMeta>()
                },
                Body = new NavBody
                {
                    Dom  = body,
                    Navs = body?.Descendants(ns + NavElements.Nav).AsObjectList(elem => new NavNav
                    {
                        Dom    = elem,
                        Id     = elem.Attribute(NavNav.Attributes.Id)?.Value,
                        Class  = elem.Attribute(NavNav.Attributes.Class)?.Value,
                        Hidden = elem.Attribute(NavNav.Attributes.Hidden)?.Value,
                        Type   = elem.Attribute(NavNav.Attributes.Type)?.Value
                    })
                }
            };

            return(nav);
        }
Exemple #2
0
        private void AssertNav(NavDocument expected, NavDocument actual)
        {
            Assert.Equal(expected == null, actual == null);
            if (expected != null && actual != null)
            {
                Assert.Equal(expected.Head == null, actual.Head == null);
                if (expected.Head != null && actual.Head != null)
                {
                    Assert.Equal(expected.Head.Title, actual.Head.Title);
                    AssertCollection(expected.Head.Links, actual.Head.Links, (a, b) =>
                    {
                        Assert.Equal(a.Class, b.Class);
                        Assert.Equal(a.Href, b.Href);
                        Assert.Equal(a.Rel, b.Rel);
                        Assert.Equal(a.Title, b.Title);
                        Assert.Equal(a.Type, b.Type);
                        Assert.Equal(a.Media, b.Media);
                    });

                    AssertCollection(expected.Head.Metas, actual.Head.Metas, (a, b) =>
                    {
                        Assert.Equal(a.Charset, b.Charset);
                        Assert.Equal(a.Name, b.Name);
                        Assert.Equal(a.Content, b.Content);
                    });
                }

                Assert.Equal(expected.Body == null, actual.Body == null);
                if (expected.Body != null && actual.Body != null)
                {
                    Assert.Equal(expected.Body.Dom == null, actual.Body.Dom == null);
                    AssertCollection(expected.Body.Navs, actual.Body.Navs, (a, b) =>
                    {
                        Assert.Equal(a.Dom == null, b.Dom == null);
                        Assert.Equal(a.Class, b.Class);
                        Assert.Equal(a.Hidden, b.Hidden);
                        Assert.Equal(a.Id, b.Id);
                        Assert.Equal(a.Type, b.Type);
                    });
                }
            }
        }
Exemple #3
0
        private void AssertNav(NavDocument expected, NavDocument actual)
        {
            Assert.AreEqual(expected == null, actual == null, nameof(actual));
            if (expected != null && actual != null)
            {
                Assert.AreEqual(expected.Head == null, actual.Head == null, nameof(actual.Head));
                if (expected.Head != null && actual.Head != null)
                {
                    Assert.AreEqual(expected.Head.Title, actual.Head.Title);
                    AssertCollection(expected.Head.Links, actual.Head.Links, nameof(actual.Head.Links), (a, b) =>
                    {
                        Assert.AreEqual(a.Class, b.Class, "Link.Class");
                        Assert.AreEqual(a.Href, b.Href, "Link.Href");
                        Assert.AreEqual(a.Rel, b.Rel, "Link.Rel");
                        Assert.AreEqual(a.Title, b.Title, "Link.Title");
                        Assert.AreEqual(a.Type, b.Type, "Link.Type");
                        Assert.AreEqual(a.Media, b.Media, "Link.Media");
                    });

                    AssertCollection(expected.Head.Metas, actual.Head.Metas, nameof(actual.Head.Metas), (a, b) =>
                    {
                        Assert.AreEqual(a.Charset, b.Charset, "Meta.Charset");
                        Assert.AreEqual(a.Name, b.Name, "Meta.Name");
                        Assert.AreEqual(a.Content, b.Content, "Meta.Content");
                    });
                }

                Assert.AreEqual(expected.Body == null, actual.Body == null, nameof(actual.Body));
                if (expected.Body != null && actual.Body != null)
                {
                    Assert.AreEqual(expected.Body.Dom == null, actual.Body.Dom == null);
                    AssertCollection(expected.Body.Navs, actual.Body.Navs, nameof(actual.Body.Navs), (a, b) =>
                    {
                        Assert.AreEqual(a.Dom == null, b.Dom == null);
                        Assert.AreEqual(a.Class, b.Class, "Nav.Class");
                        Assert.AreEqual(a.Hidden, b.Hidden, "Nav.Hidden");
                        Assert.AreEqual(a.Id, b.Id, "Nav.Id");
                        Assert.AreEqual(a.Type, b.Type, "Nav.Type");
                    });
                }
            }
        }
        /*
         * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         * @@@@                              Method                                                                @@@@
         * @@@@****************************Read Epub      ******************************************************@@@@
         * @@@@                                                                                                    @@@@
         * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         */
        //------------method geeting smil fil -----------
        public void ProcessEpub(string currentFile)
        {
            try
            {
                string EpubNummerOnly = Path.GetFileNameWithoutExtension(currentFile);

                // Read an epub file
                EpubBook book = EpubReader.Read(currentFile);

                // Read metadata
                string title = book.Title;
                FinalReportlist.Add("Title of book = " + title);

                //******Author******
                var    authors          = book.Authors;
                int    Authors_count    = 0;
                string Authors_Metadata = "";
                foreach (var eachData in authors)
                {
                    Authors_count++;
                    Authors_Metadata = Authors_Metadata + " (" + eachData + "), ";
                }
                FinalReportlist.Add("Author of book= (" + Authors_count + ")" + Authors_Metadata);

                //******images***********
                ICollection <EpubByteFile> images = book.Resources.Images;
                FinalReportlist.Add("Images in  book= (" + images.Count + ")");

                //******other metadata***********
                // Access internal EPUB format specific data structures.
                EpubFormat  format      = book.Format;
                OcfDocument ocf         = format.Ocf;
                OpfDocument opf         = format.Opf;
                NcxDocument ncx         = format.Ncx;
                NavDocument nav         = format.Nav;
                var         bookVersion = format.Opf.EpubVersion;
                var         bookIsbnID  = format.Opf.Metadata.Identifiers;

                var    allMetadata       = opf.Metadata.Languages;
                string language_Metadata = "";
                foreach (var eachData in allMetadata)
                {
                    language_Metadata = language_Metadata + eachData + ", ";
                }
                FinalReportlist.Add("Language of of book= (" + allMetadata.Count + ")" + language_Metadata);
                FinalReportlist.Add("version of book= " + bookVersion);


                // Get table of contents
                FinalReportlist.Add("\n*****Table of Content*****");
                ICollection <EpubChapter> chapters = book.TableOfContents;
                foreach (var eachH1chapter in chapters)
                {
                    FinalReportlist.Add(eachH1chapter.Title);
                    //*******writing h2 Chapter****
                    if (eachH1chapter.SubChapters.Count >= 1)
                    {
                        var h2chapter = eachH1chapter.SubChapters;
                        foreach (var eachH2chapter in h2chapter)
                        {
                            FinalReportlist.Add("\t" + eachH2chapter.Title);
                            //*******writing h3 Chapter****
                            if (eachH2chapter.SubChapters.Count >= 1)
                            {
                                var h3chapter = eachH2chapter.SubChapters;
                                foreach (var eachH3chapter in h3chapter)
                                {
                                    FinalReportlist.Add("\t\t" + eachH3chapter.Title);
                                }
                            }
                        }
                    }
                }
            }// try end
            catch (Exception e)
            {
                string error = "\n Error in syncStart " + Program.Current_bookPath;
                Console.WriteLine(error + e);
                Program.Global_error = Program.Global_error + error;
            } // catch end
        }     //syncStart end