def init_settings(self): settings = self.settings = self.document.settings elements = self.elements = self.default_elements.copy() elements.update({ # if empty, the title is set to the first section title 'title': settings.title, 'author': settings.author, # if empty, use basename of input file 'filename': settings.texinfo_filename, 'release': self.escape(self.builder.config.release), 'project': self.escape(self.builder.config.project), 'copyright': self.escape(self.builder.config.copyright), 'date': self.escape(self.builder.config.today or ustrftime(self.builder.config.today_fmt or _('%B %d, %Y'))) }) # title title = elements['title'] if not title: title = self.document.next_node(nodes.title) title = (title and title.astext()) or '<untitled>' elements['title'] = self.escape_id(title) or '<untitled>' # filename if not elements['filename']: elements['filename'] = self.document.get('source') or 'untitled' if elements['filename'][-4:] in ('.txt', '.rst'): elements['filename'] = elements['filename'][:-4] elements['filename'] += '.info' # direntry if settings.texinfo_dir_entry: entry = self.format_menu_entry( self.escape_menu(settings.texinfo_dir_entry), '(%s)' % elements['filename'], self.escape_arg(settings.texinfo_dir_description)) elements['direntry'] = ('@dircategory %s\n' '@direntry\n' '%s' '@end direntry\n') % ( self.escape_id(settings.texinfo_dir_category), entry) elements['copying'] = COPYING % elements # allow the user to override them all elements.update(settings.texinfo_elements)
def prepare_writing(self, docnames): from sphinx.search import IndexBuilder self.indexer = IndexBuilder(self.env) self.load_indexer(docnames) self.docwriter = HTMLWriter(self) self.docsettings = OptionParser( defaults=self.env.settings, components=(self.docwriter,)).get_default_values() # format the "last updated on" string, only once is enough since it # typically doesn't include the time of day lufmt = self.config.html_last_updated_fmt if lufmt is not None: self.last_updated = ustrftime(lufmt or _('%b %d, %Y')) else: self.last_updated = None logo = self.config.html_logo and \ path.basename(self.config.html_logo) or '' favicon = self.config.html_favicon and \ path.basename(self.config.html_favicon) or '' if favicon and os.path.splitext(favicon)[1] != '.ico': self.warn('html_favicon is not an .ico file') if not isinstance(self.config.html_use_opensearch, basestring): self.warn('html_use_opensearch config value must now be a string') self.relations = self.env.collect_relations() rellinks = [] 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'))) if self.config.html_style is not None: stylename = self.config.html_style elif self.theme: stylename = self.theme.get_confstr('theme', 'stylesheet') else: stylename = 'default.css' self.globalcontext = dict( embedded = self.embedded, project = self.config.project, release = self.config.release, version = self.config.version, last_updated = self.last_updated, copyright = self.config.copyright, master_doc = self.config.master_doc, use_opensearch = self.config.html_use_opensearch, docstitle = self.config.html_title, shorttitle = self.config.html_short_title, show_sphinx = self.config.html_show_sphinx, has_source = self.config.html_copy_source, show_source = self.config.html_show_sourcelink, file_suffix = self.out_suffix, script_files = self.script_files, sphinx_version = __version__, style = stylename, rellinks = rellinks, builder = self.name, parents = [], logo = logo, favicon = favicon, ) if self.theme: self.globalcontext.update( ('theme_' + key, val) for (key, val) in self.theme.get_options( self.config.html_theme_options).iteritems()) self.globalcontext.update(self.config.html_context)
def translate(self): visitor = PDFTranslator(self.document, self.builder) self.document.walkabout(visitor) lang = self.config.language or 'en' langmod = get_language_available(lang)[2] self.docutils_languages = {lang: langmod} # Generate Contents topic manually if self.use_toc: contents = nodes.topic(classes=['contents']) contents += nodes.title('') contents[0] += nodes.Text(langmod.labels['contents']) contents['ids'] = ['Contents'] pending = nodes.topic() contents.append(pending) pending.details = {} self.document.insert( 0, nodes.raw(text='SetPageCounter 1 arabic', format='pdf')) self.document.insert( 0, nodes.raw(text='OddPageBreak %s' % self.page_template, format='pdf')) self.document.insert(0, contents) self.document.insert( 0, nodes.raw(text='SetPageCounter 1 lowerroman', format='pdf')) contTrans = PDFContents(self.document) contTrans.toc_depth = self.toc_depth contTrans.startnode = pending contTrans.apply() if self.use_coverpage: # Generate cover page # FIXME: duplicate from createpdf, refactor! # Find cover template, save it in cover_file def find_cover(name): cover_path = [ self.srcdir, os.path.expanduser('~/.rst2pdf'), os.path.join(self.PATH, 'templates') ] # Add the Sphinx template paths def add_template_path(path): return os.path.join(self.srcdir, path) cover_path.extend( map(add_template_path, self.config.templates_path)) cover_file = None for d in cover_path: if os.path.exists(os.path.join(d, name)): cover_file = os.path.join(d, name) break return cover_file cover_file = find_cover(self.config.pdf_cover_template) if cover_file is None: log.error("Can't find cover template %s, using default" % self.custom_cover) cover_file = find_cover('sphinxcover.tmpl') # This is what's used in the python docs because # Latex does a manual linebreak. This sucks. authors = self.document.settings.author.split('\\') # Feed data to the template, get restructured text. cover_text = createpdf.renderTemplate( tname=cover_file, title=self.document.settings.title or visitor.elements['title'], subtitle='%s %s' % (_('version'), self.config.version), authors=authors, date=ustrftime(self.config.today_fmt or _('%B %d, %Y'))) cover_tree = docutils.core.publish_doctree(cover_text) self.document.insert(0, cover_tree) sio = StringIO() if self.invariant: createpdf.patch_PDFDate() createpdf.patch_digester() createpdf.RstToPdf(sphinx=True, stylesheets=self.stylesheets, language=self.__language, breaklevel=self.breaklevel, breakside=self.breakside, fit_mode=self.fitmode, font_path=self.fontpath, inline_footnotes=self.inline_footnotes, highlightlang=self.highlightlang, splittables=self.splittables, style_path=self.style_path, basedir=self.srcdir, def_dpi=self.default_dpi, real_footnotes=self.real_footnotes, numbered_links=self.use_numbered_links, background_fit_mode=self.fit_background_mode, baseurl=self.baseurl, section_header_depth=self.section_header_depth, floating_images=self.floating_images).createPdf( doctree=self.document, output=sio, compressed=self.compressed) self.output = sio.getvalue()
def __init__(self, document, builder): nodes.NodeVisitor.__init__(self, document) self.builder = builder self.body = [] # sort out some elements papersize = builder.config.latex_paper_size + 'paper' if papersize == 'paper': # e.g. command line "-D latex_paper_size=" papersize = 'letterpaper' self.elements = self.default_elements.copy() self.elements.update({ 'docclass': document.settings.docclass, 'papersize': papersize, 'pointsize': builder.config.latex_font_size, # if empty, the title is set to the first section title 'title': document.settings.title, 'date': ustrftime(builder.config.today_fmt or _('%B %d, %Y')), 'release': builder.config.release, 'author': document.settings.author, 'releasename': _('Release'), 'preamble': builder.config.latex_preamble, 'modindexname': _('Module Index'), 'indexname': _('Index'), }) if builder.config.latex_logo: self.elements['logo'] = '\\includegraphics{%s}\\par' % \ path.basename(builder.config.latex_logo) if builder.config.language: babel = ExtBabel(builder.config.language) lang = babel.get_language() if lang: self.elements['classoptions'] += ',' + babel.get_language() else: self.builder.warn('no Babel option known for language %r' % builder.config.language) self.elements['shorthandoff'] = babel.get_shorthandoff() self.elements['fncychap'] = '\\usepackage[Sonny]{fncychap}' else: self.elements['classoptions'] += ',english' if not builder.config.latex_use_modindex: self.elements['makemodindex'] = '' self.elements['printmodindex'] = '' # allow the user to override them all self.elements.update(builder.config.latex_elements) self.highlighter = highlighting.PygmentsBridge( 'latex', builder.config.pygments_style) self.context = [] self.descstack = [] self.bibitems = [] self.table = None self.next_table_colspec = None self.highlightlang = builder.config.highlight_language self.highlightlinenothreshold = sys.maxint self.written_ids = set() self.footnotestack = [] if self.elements['docclass'] == 'manual': if builder.config.latex_use_parts: self.top_sectionlevel = 0 else: self.top_sectionlevel = 1 else: self.top_sectionlevel = 2 self.next_section_target = None # flags self.verbatim = None self.in_title = 0 self.in_production_list = 0 self.first_document = 1 self.this_is_the_title = 1 self.literal_whitespace = 0 self.no_contractions = 0
def translate(self): visitor = PDFTranslator(self.document, self.builder) self.document.walkabout(visitor) if self.config.language: langmod = languages.get_language(self.config.language[:2]) else: langmod = languages.get_language('en') # Generate Contents topic manually contents=nodes.topic(classes=['contents']) contents+=nodes.title('') contents[0]+=nodes.Text( langmod.labels['contents']) contents['ids']=['Contents'] pending=nodes.topic() contents.append(pending) pending.details={} self.document.insert(0,nodes.raw(text='SetPageCounter 1 arabic', format='pdf')) self.document.insert(0,nodes.raw(text='OddPageBreak %s'%self.page_template, format='pdf')) self.document.insert(0,contents) self.document.insert(0,nodes.raw(text='SetPageCounter 1 lowerroman', format='pdf')) contTrans=PDFContents(self.document) contTrans.startnode=pending contTrans.apply() if self.config.pdf_use_coverpage: # Generate cover page spacer=docutils.core.publish_doctree('.. raw:: pdf\n\n Spacer 0 3cm\n\n')[0] doctitle=nodes.title() doctitle.append(nodes.Text(self.document.settings.title or visitor.elements['title'])) docsubtitle=nodes.subtitle() docsubtitle.append(nodes.Text('%s %s'%(_('version'),self.config.version))) # This is what's used in the python docs because # Latex does a manual linrebreak. This sucks. authors=self.document.settings.author.split('\\') authornodes=[] for author in authors: node=nodes.paragraph() node.append(nodes.Text(author)) node['classes']=['author'] authornodes.append(node) date=nodes.paragraph() date.append(nodes.Text(ustrftime(self.config.today_fmt or _('%B %d, %Y')))) date['classes']=['author'] self.document.insert(0,nodes.raw(text='OddPageBreak %s'%self.page_template, format='pdf')) self.document.insert(0,date) self.document.insert(0,spacer) for node in authornodes[::-1]: self.document.insert(0,node) self.document.insert(0,spacer) self.document.insert(0,docsubtitle) self.document.insert(0,doctitle) sio=StringIO() if self.invariant: createpdf.patch_PDFDate() createpdf.patch_digester() createpdf.RstToPdf(sphinx=True, stylesheets=self.stylesheets, language=self.__language, breaklevel=self.breaklevel, breakside=self.breakside, fit_mode=self.fitmode, font_path=self.fontpath, inline_footnotes=self.inline_footnotes, highlightlang=self.highlightlang, splittables=self.splittables, style_path=[self.srcdir], basedir=self.srcdir, def_dpi=self.default_dpi, ).createPdf(doctree=self.document, output=sio, compressed=self.compressed) self.output=sio.getvalue()
def __init__(self, document, builder): nodes.NodeVisitor.__init__(self, document) self.builder = builder self.body = [] # sort out some elements papersize = builder.config.latex_paper_size + 'paper' if papersize == 'paper': # e.g. command line "-D latex_paper_size=" papersize = 'letterpaper' self.elements = self.default_elements.copy() self.elements.update({ 'wrapperclass': 'sphinx' + document.settings.docclass, 'papersize': papersize, 'pointsize': builder.config.latex_font_size, # if empty, the title is set to the first section title 'title': document.settings.title, 'date': ustrftime(builder.config.today_fmt or _('%B %d, %Y')), 'release': builder.config.release, 'author': document.settings.author, 'releasename': _('Release'), 'preamble': builder.config.latex_preamble, 'modindexname': _('Module Index'), 'indexname': _('Index'), }) if document.settings.docclass == 'howto': docclass = builder.config.latex_docclass.get('howto', 'article') else: docclass = builder.config.latex_docclass.get('manual', 'report') self.elements['docclass'] = docclass if builder.config.latex_logo: self.elements['logo'] = '\\includegraphics{%s}\\par' % \ path.basename(builder.config.latex_logo) if builder.config.language: babel = ExtBabel(builder.config.language) lang = babel.get_language() if lang: self.elements['classoptions'] += ',' + babel.get_language() else: self.builder.warn('no Babel option known for language %r' % builder.config.language) self.elements['shorthandoff'] = babel.get_shorthandoff() self.elements['fncychap'] = '\\usepackage[Sonny]{fncychap}' else: self.elements['classoptions'] += ',english' if not builder.config.latex_use_modindex: self.elements['makemodindex'] = '' self.elements['printmodindex'] = '' # allow the user to override them all self.elements.update(builder.config.latex_elements) self.highlighter = highlighting.PygmentsBridge('latex', builder.config.pygments_style, builder.config.trim_doctest_flags) self.context = [] self.descstack = [] self.bibitems = [] self.table = None self.next_table_colspec = None self.highlightlang = builder.config.highlight_language self.highlightlinenothreshold = sys.maxint self.written_ids = set() self.footnotestack = [] self.curfilestack = [] self.handled_abbrs = set() if document.settings.docclass == 'howto': self.top_sectionlevel = 2 else: if builder.config.latex_use_parts: self.top_sectionlevel = 0 else: self.top_sectionlevel = 1 self.next_section_target = None # flags self.verbatim = None self.in_title = 0 self.in_production_list = 0 self.first_document = 1 self.this_is_the_title = 1 self.literal_whitespace = 0 self.no_contractions = 0 self.compact_list = 0
def translate(self): visitor = PDFTranslator(self.document, self.builder) self.document.walkabout(visitor) lang = self.config.language or 'en' langmod = get_language_available(lang)[2] self.docutils_languages = {lang: langmod} # Generate Contents topic manually if self.use_toc: contents=nodes.topic(classes=['contents']) contents+=nodes.title('') contents[0]+=nodes.Text(langmod.labels['contents']) contents['ids']=['Contents'] pending=nodes.topic() contents.append(pending) pending.details={} self.document.insert(0,nodes.raw(text='SetPageCounter 1 arabic', format='pdf')) self.document.insert(0,nodes.raw(text='OddPageBreak %s'%self.page_template, format='pdf')) self.document.insert(0,contents) self.document.insert(0,nodes.raw(text='SetPageCounter 1 lowerroman', format='pdf')) contTrans=PDFContents(self.document) contTrans.toc_depth = self.toc_depth contTrans.startnode=pending contTrans.apply() if self.use_coverpage: # Generate cover page # FIXME: duplicate from createpdf, refactor! # Find cover template, save it in cover_file def find_cover(name): cover_path=[self.srcdir, os.path.expanduser('~/.rst2pdf'), os.path.join(self.PATH,'templates')] # Add the Sphinx template paths def add_template_path(path): return os.path.join(self.srcdir, path) cover_path.extend(map(add_template_path, self.config.templates_path)) cover_file=None for d in cover_path: if os.path.exists(os.path.join(d,name)): cover_file=os.path.join(d,name) break return cover_file cover_file=find_cover(self.config.pdf_cover_template) if cover_file is None: log.error("Can't find cover template %s, using default"%self.custom_cover) cover_file=find_cover('sphinxcover.tmpl') # This is what's used in the python docs because # Latex does a manual linebreak. This sucks. authors=self.document.settings.author.split('\\') # Feed data to the template, get restructured text. cover_text = createpdf.renderTemplate(tname=cover_file, title=self.document.settings.title or visitor.elements['title'], subtitle='%s %s'%(_('version'),self.config.version), authors=authors, date=ustrftime(self.config.today_fmt or _('%B %d, %Y')) ) cover_tree = docutils.core.publish_doctree(cover_text) self.document.insert(0, cover_tree) sio=StringIO() if self.invariant: createpdf.patch_PDFDate() createpdf.patch_digester() createpdf.RstToPdf(sphinx=True, stylesheets=self.stylesheets, language=self.__language, breaklevel=self.breaklevel, breakside=self.breakside, fit_mode=self.fitmode, font_path=self.fontpath, inline_footnotes=self.inline_footnotes, highlightlang=self.highlightlang, splittables=self.splittables, style_path=self.style_path, basedir=self.srcdir, def_dpi=self.default_dpi, real_footnotes=self.real_footnotes, numbered_links=self.use_numbered_links, background_fit_mode=self.fit_background_mode, baseurl=self.baseurl, section_header_depth=self.section_header_depth ).createPdf(doctree=self.document, output=sio, compressed=self.compressed) self.output=sio.getvalue()
def prepare_writing(self, docnames): from sphinx.search import IndexBuilder self.indexer = IndexBuilder(self.env) self.load_indexer(docnames) self.docwriter = HTMLWriter(self) self.docsettings = OptionParser( defaults=self.env.settings, components=(self.docwriter, )).get_default_values() # format the "last updated on" string, only once is enough since it # typically doesn't include the time of day lufmt = self.config.html_last_updated_fmt if lufmt is not None: self.last_updated = ustrftime(lufmt or _('%b %d, %Y')) else: self.last_updated = None logo = self.config.html_logo and \ path.basename(self.config.html_logo) or '' favicon = self.config.html_favicon and \ path.basename(self.config.html_favicon) or '' if favicon and os.path.splitext(favicon)[1] != '.ico': self.warn('html_favicon is not an .ico file') if not isinstance(self.config.html_use_opensearch, basestring): self.warn('html_use_opensearch config value must now be a string') self.relations = self.env.collect_relations() rellinks = [] 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'))) if self.config.html_style is not None: stylename = self.config.html_style elif self.theme: stylename = self.theme.get_confstr('theme', 'stylesheet') else: stylename = 'default.css' self.globalcontext = dict( embedded=self.embedded, project=self.config.project, release=self.config.release, version=self.config.version, last_updated=self.last_updated, copyright=self.config.copyright, master_doc=self.config.master_doc, use_opensearch=self.config.html_use_opensearch, docstitle=self.config.html_title, shorttitle=self.config.html_short_title, show_copyright=self.config.html_show_copyright, show_sphinx=self.config.html_show_sphinx, has_source=self.config.html_copy_source, show_source=self.config.html_show_sourcelink, file_suffix=self.out_suffix, script_files=self.script_files, css_files=self.css_files, sphinx_version=__version__, style=stylename, rellinks=rellinks, builder=self.name, parents=[], logo=logo, favicon=favicon, ) if self.theme: self.globalcontext.update( ('theme_' + key, val) for (key, val) in self.theme.get_options( self.config.html_theme_options).iteritems()) self.globalcontext.update(self.config.html_context)