##// END OF EJS Templates
Removed "profiles"... Templates that are shipped with nbconvert by default should...
Removed "profiles"... Templates that are shipped with nbconvert by default should have settings built into exporter.py class. If the user wants to add a new template and use profile setting with it, the "profile" (config file) should be specified via the commandline when calling the exporter.

File last commit:

r10386:6416b524
r10435:896aaed3
Show More
notebook_sphinxext.py
90 lines | 2.7 KiB | text/x-python | PythonLexer
/ nbconvert1 / notebook_sphinxext.py
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 import sys
import os.path
import re
import time
from docutils import io, nodes, statemachine, utils
Anthony Scopatz
made error string a little more robust.
r8898 try:
from docutils.utils.error_reporting import ErrorString # the new way
except ImportError:
from docutils.error_reporting import ErrorString # the old way
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 from docutils.parsers.rst import Directive, convert_directive_function
from docutils.parsers.rst import directives, roles, states
from docutils.parsers.rst.roles import set_classes
from docutils.transforms import misc
from nbconvert import ConverterHTML
Jake Vanderplas
cleanup implementation
r8476 class Notebook(Directive):
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 """
Jake Vanderplas
cleanup implementation
r8476 Use nbconvert to insert a notebook into the environment.
This is based on the Raw directive in docutils
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 """
required_arguments = 1
optional_arguments = 0
final_argument_whitespace = True
option_spec = {}
has_content = False
def run(self):
Jake Vanderplas
sphinx: remove duplicate html, head, & body tags; use scoped attribute
r8478 # check if raw html is supported
if not self.state.document.settings.raw_enabled:
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 raise self.warning('"%s" directive disabled.' % self.name)
Jake Vanderplas
sphinx: remove duplicate html, head, & body tags; use scoped attribute
r8478
# set up encoding
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 attributes = {'format': 'html'}
encoding = self.options.get(
'encoding', self.state.document.settings.input_encoding)
Jake Vanderplas
cleanup implementation
r8476 e_handler = self.state.document.settings.input_encoding_error_handler
Jake Vanderplas
add raw-based sphinx notebook extension
r8465
# get path to notebook
source_dir = os.path.dirname(
os.path.abspath(self.state.document.current_source))
Jake Vanderplas
sphinx: remove duplicate html, head, & body tags; use scoped attribute
r8478 nb_path = os.path.normpath(os.path.join(source_dir,
self.arguments[0]))
nb_path = utils.relative_path(None, nb_path)
Jake Vanderplas
add raw-based sphinx notebook extension
r8465
# convert notebook to html
Jake Vanderplas
sphinx: remove duplicate html, head, & body tags; use scoped attribute
r8478 converter = ConverterHTML(nb_path)
converter.read()
# add HTML5 scoped attribute to header style tags
header = map(lambda s: s.replace('<style', '<style scoped="scoped"'),
converter.header_body())
# concatenate raw html lines
lines = ['<div class="ipynotebook">']
lines.extend(header)
lines.extend(converter.main_body())
lines.append('</div>')
text = '\n'.join(lines)
Jake Vanderplas
add raw-based sphinx notebook extension
r8465
Jake Vanderplas
sphinx: remove duplicate html, head, & body tags; use scoped attribute
r8478 # add dependency
self.state.document.settings.record_dependencies.add(nb_path)
attributes['source'] = nb_path
# create notebook node
Jake Vanderplas
cleanup implementation
r8476 nb_node = notebook('', text, **attributes)
Jake Vanderplas
sphinx: remove duplicate html, head, & body tags; use scoped attribute
r8478 (nb_node.source, nb_node.line) = \
self.state_machine.get_source_and_line(self.lineno)
Jake Vanderplas
cleanup implementation
r8476 return [nb_node]
Jake Vanderplas
add raw-based sphinx notebook extension
r8465
Jake Vanderplas
cleanup implementation
r8476 class notebook(nodes.raw):
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 pass
Jake Vanderplas
cleanup implementation
r8476
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 def visit_notebook_node(self, node):
self.visit_raw(node)
Jake Vanderplas
cleanup implementation
r8476
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 def depart_notebook_node(self, node):
self.depart_raw(node)
Jake Vanderplas
cleanup implementation
r8476
Jake Vanderplas
add raw-based sphinx notebook extension
r8465 def setup(app):
app.add_node(notebook,
html=(visit_notebook_node, depart_notebook_node))
app.add_directive('notebook', Notebook)