Beispiel #1
0
        void ReadSpine()
        {
            XFragment f = XFragment.FindFragment("manifest", OPF.text);

            _manifest = new Dictionary <string, ManifestItem>();
            foreach (var e in f.root.childs)
            {
                if (e.tag.tagname != "item")
                {
                    continue;
                }
                var i = new ManifestItem(e, this);
                _manifest.Add(i.id, i);
            }
            foreach (var a in _manifest)
            {
                if (a.Value.href[0] != '/')
                {
                    string dir = Path.GetDirectoryName(OPF.fullName);
                    if (dir != "")
                    {
                        a.Value.href = Path.GetDirectoryName(OPF.fullName) + "/" + a.Value.href;
                    }
                }
            }

            f      = XFragment.FindFragment("spine", OPF.text);
            _spine = new Spine(f, _manifest);
        }
Beispiel #2
0
 public SpineItemref(XELement itemref, Dictionary <string, ManifestItem> items)
 {
     this.item  = items[itemref.tag.GetAttribute("idref")];
     properties = itemref.tag.GetAttribute("properties");
     id         = itemref.tag.GetAttribute("id");
     if (itemref.tag.GetAttribute("linear") == "no")
     {
         linear = false;
     }
 }
Beispiel #3
0
        public Spine(XFragment spine, Dictionary <string, ManifestItem> items)
        {
            string toc = spine.root.tag.GetAttribute("toc");
            string id  = spine.root.tag.GetAttribute("id");

            if (toc != "")
            {
                this.toc = items[toc];
            }
            pageProgressionDirection = spine.root.tag.GetAttribute("page-progression-direction");
            foreach (var e in spine.root.childs)
            {
                if (e.tag.tagname != "itemref")
                {
                    continue;
                }
                this.items.Add(new SpineItemref(e, items));
            }
        }
Beispiel #4
0
        void ReadMeta3()
        {
            XFragment         f       = XFragment.FindFragment("metadata", OPF.text);
            List <MetaRecord> primary = new List <MetaRecord>();

            foreach (var e in f.root.childs)
            {
                switch (e.tag.tagname)
                {
                case "dc:language":
                case "dc:identifier":
                {
                    var t = new MetaRecord(e);
                    primary.Add(t);
                }
                break;

                case "meta":
                {
                    string name = e.tag.GetAttribute("name");
                    if (name != "")
                    {
                        var t = new MetaRecord();
                        t.name  = name;
                        t.value = e.tag.GetAttribute("content");
                        meta.Add(t);
                        continue;
                    }
                    string refines = e.tag.GetAttribute("refines");
                    if (refines != "")
                    {
                        if (refines.StartsWith("#") && refines.Length > 1)
                        {
                            string id = refines.Substring(1);
                            var    t  = new MetaRecord(e);
                            t.name = e.tag.GetAttribute("property");
                            t.AddIfExist(e, "scheme");
                            foreach (var r in primary)
                            {         //要是refine在primary前面我可不管……
                                if (r.id == id)
                                {
                                    r.refines.Add(t);
                                    break;
                                }
                            }
                            continue;
                        }
                    }
                    string property = e.tag.GetAttribute("property");
                    if (property != "")
                    {
                        var t = new MetaRecord(e);
                        t.name = property;
                        meta.Add(t);
                        continue;
                    }
                }
                break;

                default:
                {
                    var t = new MetaRecord(e);
                    t.AddIfExist(e, "xml:lang");
                    t.AddIfExist(e, "dir");
                    primary.Add(t);
                }
                break;
                }
            }
            foreach (var a in primary)
            {
                switch (a.name)
                {
                case "dc:title": dc_titles.Add(a); break;

                case "dc:creator": dc_creators.Add(a); break;

                case "dc:identifier": dc_identifier.Add(a); break;

                case "dc:language": dc_language.Add(a); break;

                default: others.Add(a); break;
                }
            }
            foreach (var a in dc_identifier)
            {
                if (idref == a.id)
                {
                    uniqueIdentifier = a; break;
                }
            }
            foreach (var a in manifest)
            {
                switch (a.Value.properties)
                {
                case "nav": _toc = a.Value; break;

                case "cover-image": cover_img = a.Value.href; break;
                }
            }
            if (_toc == null)
            {
                _toc = spine.toc;
            }
            //check
            //if (dc_titles.Count == 0 || dc_identifier.Count == 0 || dc_language.Count == 0) { throw new EpubErrorException("Lack of some metadata."); }
        }
Beispiel #5
0
        void ReadMeta2()
        {
            XFragment f = XFragment.FindFragment("metadata", OPF.text);

            foreach (var e in f.root.childs)
            {
                switch (e.tag.tagname)
                {
                case "dc:title":
                {
                    var t = new MetaRecord(e);
                    t.AddIfExist(e, "opf:file-as");
                    dc_titles.Add(t);
                }
                break;

                case "dc:creator":
                {
                    var t = new MetaRecord(e);
                    t.AddIfExist(e, "opf:file-as");
                    t.AddIfExist(e, "opf:role");
                    dc_creators.Add(t);
                }
                break;

                case "dc:language":
                {
                    var t = new MetaRecord(e);
                    dc_language.Add(t);
                }
                break;

                case "dc:identifier":
                {
                    var t = new MetaRecord(e);
                    t.AddIfExist(e, "opf:scheme");
                    dc_identifier.Add(t);
                }
                break;

                case "dc:contributor":
                {
                    var t = new MetaRecord(e);
                    t.AddIfExist(e, "opf:file-as");
                    t.AddIfExist(e, "opf:role");
                    others.Add(t);
                }
                break;

                case "dc:date":
                {
                    var t = new MetaRecord(e);
                    t.AddIfExist(e, "opf:event");
                    others.Add(t);
                }
                break;

                case "meta":
                {
                    var t = new MetaRecord();
                    t.name  = e.tag.GetAttribute("name");
                    t.value = e.tag.GetAttribute("content");
                    meta.Add(t);
                }
                break;

                default:
                {
                    var t = new MetaRecord(e);
                    others.Add(t);
                }
                break;
                }
            }
            foreach (var a in meta)
            {
                if (a.name == "cover")
                {
                    string id = a.value;
                    if (manifest.ContainsKey(id))
                    {
                        cover_img = manifest[id].href;
                    }
                    break;
                }
            }
            _toc = spine.toc;
        }