Skip to content

Instantly share code, notes, and snippets.

@karlnapf
Created March 22, 2015 20:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karlnapf/d231d9d5587671645e73 to your computer and use it in GitHub Desktop.
Save karlnapf/d231d9d5587671645e73 to your computer and use it in GitHub Desktop.
sphinx hack to have multiple bodies
def check_contains_literal_block(self, doctree):
if len(doctree.children)>0:
for child in doctree.children:
if self.check_contains_literal_block(child):
return True
if type(doctree) is nodes.literal_block:
return True
return False
def get_language_file_ending(self, target="python"):
if target == "python":
return "py"
elif target == "octave":
return "m"
else:
raise ValueError("Unknown target language: %s" % target)
def get_supported_languages(self):
return [
"python",
"octave",
]
def replace_literal_blocks_language(self, doctree, target="python"):
if len(doctree.children)>0:
for child in doctree.children:
self.replace_literal_blocks_language(child, target)
if type(doctree) is nodes.literal_block:
if doctree['language'] != target:
doctree['language'] = target
temp = doctree['source'].split(os.sep)
fname_base = temp[-1].split(".")[0]
fname_ending = self.get_language_file_ending(target)
directory = os.sep.join(temp[:-2] + [target])
doctree['source'] = directory + os.sep + fname_base + "." + fname_ending
print "\n", doctree.children[0]
def write_doc(self, docname, doctree):
destination = StringOutput(encoding='utf-8')
doctree.settings = self.docsettings
self.secnumbers = self.env.toc_secnumbers.get(docname, {})
self.fignumbers = self.env.toc_fignumbers.get(docname, {})
self.imgpath = relative_uri(self.get_target_uri(docname), '_images')
self.dlpath = relative_uri(self.get_target_uri(docname), '_downloads')
self.current_docname = docname
ctxadd = {}
if self.check_contains_literal_block(doctree):
print "\nstarting hack!"
for language in self.get_supported_languages():
print "\n" + language
self.replace_literal_blocks_language(doctree, language)
print doctree
self.docwriter.write(doctree, destination)
self.docwriter.assemble_parts()
body = self.docwriter.parts['fragment']
metatags = self.docwriter.clean_meta
ctx = self.get_doc_context(docname, body, metatags)
ctxadd['body' + "_" + language] = ctx['body']
print "\nSummary:"
print ctxadd
self.docwriter.write(doctree, destination)
self.docwriter.assemble_parts()
body = self.docwriter.parts['fragment']
metatags = self.docwriter.clean_meta
ctx = self.get_doc_context(docname, body, metatags)
ctx.update(ctxadd)
self.handle_page(docname, ctx, event_arg=doctree)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment