def serialize_guide(self): ''' The Kindle decides where to open a book based on the presence of an item in the guide that looks like <reference type="text" title="Start" href="chapter-one.xhtml"/> Similarly an item with type="toc" controls where the Goto Table of Contents operation on the kindle goes. ''' buf = self.buf hrefs = self.oeb.manifest.hrefs buf.write(b'<guide>') for ref in self.oeb.guide.values(): path = urldefrag(ref.href)[0] if path not in hrefs or hrefs[path].media_type not in OEB_DOCS: continue buf.write(b'<reference type="') if ref.type.startswith('other.') : self.serialize_text(ref.type.replace('other.',''), quot=True) else: self.serialize_text(ref.type, quot=True) buf.write(b'" ') if ref.title is not None: buf.write(b'title="') self.serialize_text(ref.title, quot=True) buf.write(b'" ') if is_guide_ref_start(ref): self._start_href = ref.href self.serialize_href(ref.href) # Space required or won't work, I kid you not buf.write(b' />') buf.write(b'</guide>')
def create_guide(self): self.start_offset = None self.guide_table = [] self.guide_records = [] GuideRef = namedtuple('GuideRef', 'title type pos_fid') for ref in self.oeb.guide.values(): href, frag = ref.href.partition('#')[0::2] aid = self.id_map.get((href, frag), None) if aid is None: aid = self.id_map.get((href, '')) if aid is None: continue pos, fid, offset = self.aid_offset_map[aid] if is_guide_ref_start(ref): self.start_offset = offset self.guide_table.append( GuideRef(ref.title or _('Unknown'), ref.type, (pos, fid))) if self.guide_table: self.guide_table.sort(key=lambda x: x.type) # Needed by the Kindle self.guide_records = GuideIndex(self.guide_table)()
def create_guide(self): self.start_offset = None self.guide_table = [] self.guide_records = [] GuideRef = namedtuple('GuideRef', 'title type pos_fid') for ref in self.oeb.guide.values(): href, frag = ref.href.partition('#')[0::2] aid = self.id_map.get((href, frag), None) if aid is None: aid = self.id_map.get((href, '')) if aid is None: continue pos, fid, offset = self.aid_offset_map[aid] if is_guide_ref_start(ref): self.start_offset = offset self.guide_table.append(GuideRef(ref.title or _('Unknown'), ref.type, (pos, fid))) if self.guide_table: self.guide_table.sort(key=lambda x:x.type) # Needed by the Kindle self.guide_records = GuideIndex(self.guide_table)()