diff options
Diffstat (limited to 'sphinx/builders/html.py')
-rw-r--r-- | sphinx/builders/html.py | 83 |
1 files changed, 54 insertions, 29 deletions
diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index bfbe299a9..6d9a2ba87 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -27,7 +27,8 @@ from sphinx.search import js_index from sphinx.builders import Builder, ENV_PICKLE_FILENAME from sphinx.highlighting import PygmentsBridge from sphinx.util.console import bold -from sphinx.writers.html import HTMLWriter, HTMLTranslator, SmartyPantsHTMLTranslator +from sphinx.writers.html import HTMLWriter, HTMLTranslator, \ + SmartyPantsHTMLTranslator try: import json @@ -88,7 +89,8 @@ class StandaloneHTMLBuilder(Builder): def init_translator_class(self): if self.config.html_translator_class: self.translator_class = self.app.import_object( - self.config.html_translator_class, 'html_translator_class setting') + self.config.html_translator_class, + 'html_translator_class setting') elif self.config.html_use_smartypants: self.translator_class = SmartyPantsHTMLTranslator else: @@ -141,7 +143,8 @@ class StandaloneHTMLBuilder(Builder): if self.config.html_use_index: rellinks.append(('genindex', _('General Index'), 'I', _('index'))) if self.config.html_use_modindex and self.env.modules: - rellinks.append(('modindex', _('Global Module Index'), 'M', _('modules'))) + rellinks.append(('modindex', _('Global Module Index'), + 'M', _('modules'))) if self.config.html_style is not None: stylename = self.config.html_style @@ -184,18 +187,23 @@ class StandaloneHTMLBuilder(Builder): titles = self.env.titles if related and related[2]: try: - next = {'link': self.get_relative_uri(docname, related[2]), - 'title': self.render_partial(titles[related[2]])['title']} + next = { + 'link': self.get_relative_uri(docname, related[2]), + 'title': self.render_partial(titles[related[2]])['title'] + } rellinks.append((related[2], next['title'], 'N', _('next'))) except KeyError: next = None if related and related[1]: try: - prev = {'link': self.get_relative_uri(docname, related[1]), - 'title': self.render_partial(titles[related[1]])['title']} + prev = { + 'link': self.get_relative_uri(docname, related[1]), + 'title': self.render_partial(titles[related[1]])['title'] + } rellinks.append((related[1], prev['title'], 'P', _('previous'))) except KeyError: - # the relation is (somehow) not in the TOC tree, handle that gracefully + # the relation is (somehow) not in the TOC tree, handle + # that gracefully prev = None while related and related[0]: try: @@ -219,6 +227,9 @@ class StandaloneHTMLBuilder(Builder): # metadata for the document meta = self.env.metadata.get(docname) + # TOC + toc = self.render_partial(self.env.get_toc_for(docname))['fragment'] + return dict( parents = parents, prev = prev, @@ -229,7 +240,7 @@ class StandaloneHTMLBuilder(Builder): metatags = metatags, rellinks = rellinks, sourcename = sourcename, - toc = self.render_partial(self.env.get_toc_for(docname))['fragment'], + toc = toc, # only display a TOC if there's more than one item to show display_toc = (self.env.toc_num_entries[docname] > 1), ) @@ -272,12 +283,15 @@ class StandaloneHTMLBuilder(Builder): self.info(' genindex', nonl=1) if self.config.html_split_index: - self.handle_page('genindex', genindexcontext, 'genindex-split.html') - self.handle_page('genindex-all', genindexcontext, 'genindex.html') + self.handle_page('genindex', genindexcontext, + 'genindex-split.html') + self.handle_page('genindex-all', genindexcontext, + 'genindex.html') for (key, entries), count in zip(genindex, indexcounts): ctx = {'key': key, 'entries': entries, 'count': count, 'genindexentries': genindex} - self.handle_page('genindex-' + key, ctx, 'genindex-single.html') + self.handle_page('genindex-' + key, ctx, + 'genindex-single.html') else: self.handle_page('genindex', genindexcontext, 'genindex.html') @@ -318,11 +332,13 @@ class StandaloneHTMLBuilder(Builder): elif not pmn.startswith(tn): # submodule without parent in list, add dummy entry cg += 1 - modindexentries.append([tn, True, cg, False, '', '', [], False]) + modindexentries.append([tn, True, cg, + False, '', '', [], False]) else: num_toplevels += 1 cg += 1 - modindexentries.append([mn, False, cg, (tn != mn), fn, sy, pl, dep]) + modindexentries.append([mn, False, cg, (tn != mn), + fn, sy, pl, dep]) pmn = mn fl = mn[0].lower() platforms = sorted(platforms) @@ -430,7 +446,8 @@ class StandaloneHTMLBuilder(Builder): if docname not in self.env.all_docs: yield docname continue - targetname = self.env.doc2path(docname, self.outdir, self.out_suffix) + targetname = self.env.doc2path(docname, self.outdir, + self.out_suffix) try: targetmtime = path.getmtime(targetname) except Exception: @@ -454,8 +471,9 @@ class StandaloneHTMLBuilder(Builder): f.close() except (IOError, OSError, ValueError): if keep: - self.warn("search index couldn't be loaded, but not all documents " - "will be built: the index will be incomplete.") + self.warn('search index couldn\'t be loaded, but not all ' + 'documents will be built: the index will be ' + 'incomplete.') # delete all entries for files that will be rebuilt self.indexer.prune(keep) @@ -485,12 +503,15 @@ class StandaloneHTMLBuilder(Builder): ctx['customsidebar'] = self.config.html_sidebars.get(pagename) ctx.update(addctx) - self.app.emit('html-page-context', pagename, templatename, ctx, event_arg) + self.app.emit('html-page-context', pagename, templatename, + ctx, event_arg) output = self.templates.render(templatename, ctx) if not outfilename: - outfilename = path.join(self.outdir, os_path(pagename) + self.out_suffix) - ensuredir(path.dirname(outfilename)) # normally different from self.outdir + outfilename = path.join(self.outdir, + os_path(pagename) + self.out_suffix) + # outfilename's path is in general different from self.outdir + ensuredir(path.dirname(outfilename)) try: f = codecs.open(outfilename, 'w', 'utf-8') try: @@ -501,7 +522,8 @@ class StandaloneHTMLBuilder(Builder): self.warn("Error writing file %s: %s" % (outfilename, err)) if self.copysource and ctx.get('sourcename'): # copy the source file for the "show source" link - source_name = path.join(self.outdir, '_sources', os_path(ctx['sourcename'])) + source_name = path.join(self.outdir, '_sources', + os_path(ctx['sourcename'])) ensuredir(path.dirname(source_name)) shutil.copyfile(self.env.doc2path(pagename), source_name) @@ -509,8 +531,8 @@ class StandaloneHTMLBuilder(Builder): self.info(bold('dumping search index... '), nonl=True) self.indexer.prune(self.env.all_docs) searchindexfn = path.join(self.outdir, self.searchindex_filename) - # first write to a temporary file, so that if dumping fails, the existing - # index won't be overwritten + # first write to a temporary file, so that if dumping fails, + # the existing index won't be overwritten f = open(searchindexfn + '.tmp', 'wb') try: self.indexer.dump(f, self.indexer_format) @@ -528,7 +550,8 @@ class StandaloneHTMLBuilder(Builder): for modname, info in self.env.modules.iteritems(): f.write('%s mod %s\n' % (modname, self.get_target_uri(info[0]))) for refname, (docname, desctype) in self.env.descrefs.iteritems(): - f.write('%s %s %s\n' % (refname, desctype, self.get_target_uri(docname))) + f.write('%s %s %s\n' % (refname, desctype, + self.get_target_uri(docname))) finally: f.close() self.info('done') @@ -568,9 +591,11 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder): ctx['customsidebar'] = sidebarfile if not outfilename: - outfilename = path.join(self.outdir, os_path(pagename) + self.out_suffix) + outfilename = path.join(self.outdir, + os_path(pagename) + self.out_suffix) - self.app.emit('html-page-context', pagename, templatename, ctx, event_arg) + self.app.emit('html-page-context', pagename, templatename, + ctx, event_arg) ensuredir(path.dirname(outfilename)) f = open(outfilename, 'wb') @@ -638,7 +663,7 @@ class JSONHTMLBuilder(SerializingHTMLBuilder): def init(self): if json is None: from sphinx.application import SphinxError - raise SphinxError('The module simplejson (or json in Python >= 2.6) ' - 'is not available. The JSONHTMLBuilder builder ' - 'will not work.') + raise SphinxError( + 'The module simplejson (or json in Python >= 2.6) ' + 'is not available. The JSONHTMLBuilder builder will not work.') SerializingHTMLBuilder.init(self) |