From 164a1160981814c2c660e578f7ce16911a14eebf Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 28 Mar 2012 10:40:21 +0530 Subject: [PATCH] MOBI Output: Recognize type=text in addition to type=start guide elements --- src/calibre/ebooks/mobi/writer2/serializer.py | 4 ++-- src/calibre/ebooks/oeb/transforms/guide.py | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/calibre/ebooks/mobi/writer2/serializer.py b/src/calibre/ebooks/mobi/writer2/serializer.py index abce926152..b35f33439b 100644 --- a/src/calibre/ebooks/mobi/writer2/serializer.py +++ b/src/calibre/ebooks/mobi/writer2/serializer.py @@ -161,8 +161,8 @@ class Serializer(object): self.serialize_text(ref.title, quot=True) buf.write(b'" ') if (ref.title.lower() == 'start' or - (ref.type and ref.type.lower() in ('start', - 'other.start'))): + (ref.type and ref.type.lower() in {'start', + 'other.start', 'text'})): self._start_href = ref.href self.serialize_href(ref.href) # Space required or won't work, I kid you not diff --git a/src/calibre/ebooks/oeb/transforms/guide.py b/src/calibre/ebooks/oeb/transforms/guide.py index 8ebf02c5d4..870e1b5f75 100644 --- a/src/calibre/ebooks/oeb/transforms/guide.py +++ b/src/calibre/ebooks/oeb/transforms/guide.py @@ -8,10 +8,9 @@ __docformat__ = 'restructuredtext en' class Clean(object): - '''Clean up guide, leaving only a pointer to the cover''' + '''Clean up guide, leaving only known values ''' def __call__(self, oeb, opts): - from calibre.ebooks.oeb.base import urldefrag self.oeb, self.log, self.opts = oeb, oeb.log, opts if 'cover' not in self.oeb.guide: @@ -32,10 +31,15 @@ class Clean(object): ref.type = 'cover' self.oeb.guide.refs['cover'] = ref + if ('start' in self.oeb.guide and 'text' not in self.oeb.guide): + # Prefer text to start as per the OPF 2.0 spec + x = self.oeb.guide['start'] + self.oeb.guide.add('text', x.title, x.href) + self.oeb.guide.remove('start') + for x in list(self.oeb.guide): - href = urldefrag(self.oeb.guide[x].href)[0] - if x.lower() not in ('cover', 'titlepage', 'masthead', 'toc', - 'title-page', 'copyright-page', 'start'): + if x.lower() not in {'cover', 'titlepage', 'masthead', 'toc', + 'title-page', 'copyright-page', 'text'}: item = self.oeb.guide[x] if item.title and item.title.lower() == 'start': continue