from docutils import nodes
from sphinx.writers.html import SmartyPantsHTMLTranslator
from sphinx.builders.html import StandaloneHTMLBuilder
import os
def setup(app):
app.add_builder(PxBuilder)
BaseHtmlXlator = SmartyPantsHTMLTranslator
class PxTranslator(BaseHtmlXlator):
"""Adjust the HTML translator into a .px translator.
"""
def __init__(self, *args, **kwargs):
BaseHtmlXlator.__init__(self, *args, **kwargs)
#self.document.reporter.debug_flag = 1
# To make the doc title be h0 (skipped), and the next h1.
self.initial_header_level = 0
def visit_section(self, node):
self.section_level += 1
def depart_section(self, node):
self.section_level -= 1
def visit_title(self, node):
if self.section_level == 1:
raise nodes.SkipNode
else:
# The id for the h2 tag is on the parent, move it
# down here so we'll get the right HTML.
if not node['ids'] and len(node.parent['ids']) > 1:
node['ids'] = [node.parent['ids'][1]]
BaseHtmlXlator.visit_title(self, node)
def visit_field_list(self, node):
self.history = []
def depart_field_list(self, node):
if self.history:
self.body.append("\n")
for hist in self.history:
when, what = hist.split(',', 1)
self.body.append("%s\n" % (when, self.encode(what.strip())))
self.body.append("\n")
if "b" in self.builder.config.release:
self.body.append("""
These docs are for a beta release, %s.
For the latest released version, see coverage.py.
""" % self.builder.config.release)
def visit_field(self, node):
if node.children[0].astext() == 'history':
self.history.append(node.children[1].astext())
raise nodes.SkipChildren
def depart_field(self, node):
pass
def visit_literal_block(self, node):
if node.rawsource != node.astext():
# most probably a parsed-literal block -- don't highlight
return BaseHtmlXlator.visit_literal_block(self, node)
lang = self.highlightlang
if node.has_key('language'):
# code-block directives
lang = node['language']
self.body.append('' % lang)
self.body.append(self.encode(node.rawsource))
self.body.append('
\n')
raise nodes.SkipNode
def visit_desc_parameterlist(self, node):
self.body.append('(')
self.first_param = 1
self.param_separator = node.child_text_separator
def depart_desc_parameterlist(self, node):
self.body.append(')')
class PxBuilder(StandaloneHTMLBuilder):
name = 'px'
def init(self):
self.config.html_theme = 'px'
self.config.html_translator_class = "px_xlator.PxTranslator"
super(PxBuilder, self).init()
self.out_suffix = '.px'
self.link_suffix = '.html'
if "b" in self.config.release:
self.px_uri = "/code/coverage/beta/"
else:
self.px_uri = "/code/coverage/"
def get_target_uri(self, docname, typ=None):
return self.px_uri + docname + self.link_suffix