diff --git a/CHANGES b/CHANGES index b47d08966..c37a72f73 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,7 @@ Bugs fixed * #2882: Fall back to a GET request on 403 status in linkcheck * #2902: jsdump.loads fails to load search index if keywords starts with underscore +* #2900: Fix epub content.opf: add auto generated orphan files to spine. Release 1.4.6 (released Aug 20, 2016) ===================================== diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index f5f0d8098..e2c780261 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -123,6 +123,9 @@ FILE_TEMPLATE = u'''\ SPINE_TEMPLATE = u'''\ ''' +NO_LINEAR_SPINE_TEMPLATE = u'''\ + ''' + GUIDE_TEMPLATE = u'''\ ''' @@ -202,6 +205,7 @@ class EpubBuilder(StandaloneHTMLBuilder): coverpage_name = COVERPAGE_NAME file_template = FILE_TEMPLATE spine_template = SPINE_TEMPLATE + no_linear_spine_template = NO_LINEAR_SPINE_TEMPLATE guide_template = GUIDE_TEMPLATE toctree_template = TOCTREE_TEMPLATE doctype = DOCTYPE @@ -584,6 +588,7 @@ class EpubBuilder(StandaloneHTMLBuilder): # spine spine = [] + spinefiles = set() for item in self.refnodes: if '#' in item['refuri']: continue @@ -592,14 +597,23 @@ class EpubBuilder(StandaloneHTMLBuilder): spine.append(self.spine_template % { 'idref': self.esc(self.make_id(item['refuri'])) }) + spinefiles.add(item['refuri']) for info in self.domain_indices: spine.append(self.spine_template % { 'idref': self.esc(self.make_id(info[0] + self.out_suffix)) }) + spinefiles.add(info[0] + self.out_suffix) if self.get_builder_config('use_index', 'epub'): spine.append(self.spine_template % { 'idref': self.esc(self.make_id('genindex' + self.out_suffix)) }) + spinefiles.add('genindex' + self.out_suffix) + # add auto generated files + for name in self.files: + if name not in spinefiles and name.endswith(self.out_suffix): + spine.append(self.no_linear_spine_template % { + 'idref': self.esc(self.make_id(name)) + }) # add the optional cover content_tmpl = self.content_template @@ -626,6 +640,7 @@ class EpubBuilder(StandaloneHTMLBuilder): ctx = {'image': self.esc(image), 'title': self.config.project} self.handle_page( path.splitext(self.coverpage_name)[0], ctx, html_tmpl) + spinefiles.add(self.coverpage_name) guide = [] auto_add_cover = True