Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions sphinx_tojupyter/builders/jupyter.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,12 @@ class JupyterBuilder(Builder):
n_workers = 1
logger = logging.getLogger(__name__)

def __init__(self, app):
super().__init__(app)
self.config = app.config

def init(self):
super().init()
### initializing required classes
self._execute_notebook_class = ExecuteNotebookWriter(self)
self._make_site_class = MakeSiteWriter(self)
Expand Down Expand Up @@ -112,6 +117,10 @@ def get_outdated_docs(self):
except EnvironmentError:
pass

def update_context(self):
# Apply extension settings to context
registry = self.app.registry

def get_target_uri(self, docname, typ=None):
return docname

Expand All @@ -131,8 +140,10 @@ def prepare_writing(self, docnames):
def write_doc(self, docname, doctree):
# work around multiple string % tuple issues in docutils;
# replace tuples in attribute values with lists
self.docname = docname
doctree = doctree.deepcopy()
destination = docutils.io.StringOutput(encoding="utf-8")
self.update_context()
### print an output for downloading notebooks as well with proper links if variable is set
if "tojupyter_urlpath" in self.config:
self.writer._set_ref_urlpath(self.config["tojupyter_urlpath"])
Expand Down
4 changes: 2 additions & 2 deletions sphinx_tojupyter/writers/jupyter.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

class JupyterWriter(docutils.writers.Writer):
def __init__(self, builder):
docutils.writers.Writer.__init__(self)
super().__init__()

self.output = None
self.builder = builder
Expand All @@ -18,7 +18,7 @@ def translate(self):
self.document.settings.indents = \
self.builder.env.config.xml_pretty

visitor = self.translator_class(self.builder, self.document)
visitor = self.translator_class(self.document, self.builder)

self.document.walkabout(visitor)
self.output = nbformat.writes(visitor.output)
Expand Down
68 changes: 66 additions & 2 deletions sphinx_tojupyter/writers/translate_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
from docutils import nodes, writers
from .translate_code import JupyterCodeTranslator
from .utils import JupyterOutputCellGenerators
from sphinx.util import logging
from shutil import copyfile
import copy
import os

logger = logging.getLogger(__name__)

class JupyterTranslator(JupyterCodeTranslator, object):
class JupyterTranslator(JupyterCodeTranslator):
""" Jupyter Translator for Text and Code
"""

Expand All @@ -25,7 +27,7 @@ def __init__(self, builder, document):
self.indent = self.indent_char * 4
self.default_ext = ".ipynb"
self.html_ext = ".html"
self.urlpath = builder.urlpath
self.urlpath = document.urlpath
# Variables used in visit/depart
self.in_code_block = False # if False, it means in markdown_cell
self.in_block_quote = False
Expand Down Expand Up @@ -710,6 +712,9 @@ def visit_target(self, node):
else:
self.markdown_lines.append("\n<a id='{}'></a>\n".format(refid))

def depart_target(self, node):
pass

# list items
def visit_bullet_list(self, node):
## trying to return if it is in the topmost depth and it is more than 1
Expand Down Expand Up @@ -969,6 +974,65 @@ def depart_caption(self, node):
if self.in_toctree:
self.markdown_lines.append("\n")

#
# TODO: Needs implementing
#

def visit_index(self, node):
pass

def depart_index(self, node):
pass

def visit_inline(self, node):
pass

def depart_inline(self, node):
pass

# Jupyter Cell Types

def visit_CellNode(self, node):
pass

def depart_CellNode(self, node):
pass

def visit_CellInputNode(self, node):
pass

def depart_CellInputNode(self, node):
pass

def visit_CellOutputNode(self, node):
pass

def depart_CellOutputNode(self, node):
pass

def visit_HiddenCellNode(self, node):
pass

def depart_HiddenCellNode(self, node):
pass

def visit_exercise_enumerable_node(self, node):
"""
TODO: This should be moved to spinx-exercise visit_ and depart_ methods
"""
title = node.children[0].get("title", "")
label = node.get("label", "")
docname = self.builder.docname
fig_num = self.builder.env.toc_fignumbers.get(docname, {})
try:
number = fig_num["exercise"][label]
number = ".".join(map(str, number))
title_text = self.builder.config.numfig_format["exercise"] % number
except:
logger.warn("[sphinx-tojupyter] Unable to parse enumerable exercise node with numfig format")
title = node.children[0]
title += nodes.Text(title_text)

# ================
# general methods
# ================
Expand Down
17 changes: 13 additions & 4 deletions sphinx_tojupyter/writers/translate_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,19 @@
import nbformat.v4
import os.path
import datetime
from sphinx.util.docutils import SphinxTranslator
from sphinx.util import logging
from .utils import LanguageTranslator, JupyterOutputCellGenerators, get_source_file_name

class JupyterCodeTranslator(docutils.nodes.GenericNodeVisitor):
logger = logging.getLogger(__name__)

class JupyterCodeTranslator(SphinxTranslator):

URI_SPACE_REPLACE_FROM = re.compile(r"\s")
URI_SPACE_REPLACE_TO = "-"

def __init__(self, builder, document):
docutils.nodes.NodeVisitor.__init__(self, document)
def __init__(self, document, builder):
super().__init__(document, builder)

self.lang = None
self.nodelang = None
Expand All @@ -25,7 +29,6 @@ def __init__(self, builder, document):

# Settings
self.settings = document.settings
self.builder = builder
self.source_file_name = get_source_file_name(
self.settings._source,
self.settings.env.srcdir)
Expand Down Expand Up @@ -226,6 +229,12 @@ def visit_CellOutputNode(self, node):
def depart_CellOutputNode(self, node):
pass

def unknown_visit(self, node):
logger.warning(('unknown node type: %r'), node, location=node)

def unknown_departure(self, node):
pass

# ===================
# general methods
# ===================
Expand Down