1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
// This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with // this file, You can obtain one at https://mozilla.org/MPL/2.0/. use toc::TocElement; use std::io::Read; /// Represents the possible reference type of an EPUB page. /// /// Used by the guide section of EPUB 2.0 and the lankmarks navigation section /// for EPUB 3.0. /// /// For more information, see http://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm#Section2.3 /// and https://idpf.github.io/epub-vocabs/structure/ #[derive(Debug, Clone, Copy, PartialEq)] pub enum ReferenceType { /// The Book cover(s) (this refers to the cover PAGE, not the cover IMAGE) Cover, /// Page with title, author, publisher TitlePage, /// Table of contents Toc, /// Index Index, /// Glossary Glossary, /// Aknowledgements Acknowledgements, /// Bibliography Bibliography, /// No idea what this might be Colophon, /// Copyright page Copyright, /// Dedication Dedication, /// Epigraph Epigraph, /// Foreword Foreword, /// List of illustrations Loi, /// List of tables Lot, /// Notes Notes, /// Preface Preface, /// Beginning of the real content Text, } /// Represents a XHTML file that can be added to an EPUB document. /// /// This struct is designed to be used with the `add_content` method /// of the `[EpubBuilder](struct.EpubBuilder.html). /// /// # Example /// /// ``` /// use epub_builder::{EpubContent, TocElement}; /// /// let page_content = "Some XHTML content"; /// /// // Creates a new EpubContent /// let content = EpubContent::new("intro.xhtml", page_content.as_bytes()) /// // ... and sets a title so it is added to the TOC /// .title("Introduction") /// // ... and add some toc information on the document structure /// .child(TocElement::new("intro.xhtml#1", "Section 1")) /// .child(TocElement::new("intro.xhtml#2", "Section 2")); /// ``` #[derive(Debug)] pub struct EpubContent<R: Read> { /// The title and url, plus sublevels pub toc: TocElement, /// The content pub content: R, /// Properties. See [EpubProperties](enum.EpubProperties.html) pub reftype: Option<ReferenceType>, } impl<R: Read> EpubContent<R> { /// Creates a new EpubContent /// /// By default, this element is at level 1, and it has no title /// (meaning it won't be added to the [`Table of Contents`](struct.Toc.html). pub fn new<S: Into<String>>(href: S, content: R) -> Self { EpubContent { content: content, toc: TocElement::new(href, ""), reftype: None, } } /// Set the title of this content. If no title is set, /// this part of the book will not be displayed in the table of content. pub fn title<S: Into<String>>(mut self, title: S) -> Self { self.toc.title = title.into(); self } /// Set the level pub fn level(mut self, level: i32) -> Self { self.toc = self.toc.level(level); self } /// Adds a sublevel to the toc pub fn child(mut self, elem: TocElement) -> Self { self.toc = self.toc.child(elem); self } /// Sets reference type of this content /// /// If this is set, this will list this item as a reference in the guide section. /// /// See www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm#Section2.3 /// /// # Example /// /// Reference an item as the title page: /// /// ``` /// use epub_builder::{EpubContent, ReferenceType}; /// let dummy = "Should be a XHTML file"; /// let item = EpubContent::new("title.xhtml", dummy.as_bytes()) /// .title("Title") /// .reftype(ReferenceType::TitlePage); /// ``` pub fn reftype(mut self, reftype: ReferenceType) -> Self { self.reftype = Some(reftype); self } }