Skip to content

Commit e04bc57

Browse files
committed
adding inline functionality to nodes function
1 parent 6a0df85 commit e04bc57

File tree

2 files changed

+43
-16
lines changed

2 files changed

+43
-16
lines changed

jupyter_sphinx/ast.py

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,8 @@ def html(self):
227227
)
228228

229229

230-
def cell_output_to_nodes(outputs, data_priority, write_stderr, dir, thebe_config):
230+
def cell_output_to_nodes(outputs, data_priority, write_stderr, dir,
231+
thebe_config, inline=False):
231232
"""Convert a jupyter cell with outputs and filenames to doctree nodes.
232233
233234
Parameters
@@ -242,12 +243,22 @@ def cell_output_to_nodes(outputs, data_priority, write_stderr, dir, thebe_config
242243
to the source folder prefixed with ``/``.
243244
thebe_config: dict
244245
Thebelab configuration object or None
246+
inline: False
247+
Whether the nodes will be placed in-line with the text.
245248
246249
Returns
247250
-------
248251
to_add : list of docutils nodes
249252
Each output, converted into a docutils node.
250253
"""
254+
# If we're in `inline` mode, ensure that we don't add block-level nodes
255+
if inline is True:
256+
literal_node = docutils.nodes.literal
257+
math_node = docutils.nodes.math
258+
else:
259+
literal_node = docutils.nodes.literal_block
260+
math_node = math_block
261+
251262
to_add = []
252263
for output in outputs:
253264
output_type = output["output_type"]
@@ -265,19 +276,22 @@ def cell_output_to_nodes(outputs, data_priority, write_stderr, dir, thebe_config
265276
# Not setting "rawsource" disables Pygment hightlighting, which
266277
# would otherwise add a <div class="highlight">.
267278

268-
container = docutils.nodes.container(classes=["stderr"])
269-
container.append(
270-
docutils.nodes.literal_block(
271-
text=output["text"],
272-
rawsource="", # disables Pygment highlighting
273-
language="none",
274-
classes=["stderr"],
275-
)
279+
literal = literal_node(
280+
text=output["text"],
281+
rawsource="", # disables Pygment highlighting
282+
language="none",
283+
classes=["stderr"],
276284
)
277-
to_add.append(container)
285+
if inline is True:
286+
# In this case, we don't wrap the text in containers
287+
to_add.append(literal)
288+
else:
289+
container = docutils.nodes.container(classes=["stderr"])
290+
container.append(literal)
291+
to_add.append(container)
278292
else:
279293
to_add.append(
280-
docutils.nodes.literal_block(
294+
literal_node(
281295
text=output["text"],
282296
rawsource=output["text"],
283297
language="none",
@@ -288,7 +302,7 @@ def cell_output_to_nodes(outputs, data_priority, write_stderr, dir, thebe_config
288302
traceback = "\n".join(output["traceback"])
289303
text = nbconvert.filters.strip_ansi(traceback)
290304
to_add.append(
291-
docutils.nodes.literal_block(
305+
literal_node(
292306
text=text,
293307
rawsource=text,
294308
language="ipythontb",
@@ -325,7 +339,7 @@ def cell_output_to_nodes(outputs, data_priority, write_stderr, dir, thebe_config
325339
)
326340
elif mime_type == "text/latex":
327341
to_add.append(
328-
math_block(
342+
math_node(
329343
text=strip_latex_delimiters(data),
330344
nowrap=False,
331345
number=None,
@@ -334,7 +348,7 @@ def cell_output_to_nodes(outputs, data_priority, write_stderr, dir, thebe_config
334348
)
335349
elif mime_type == "text/plain":
336350
to_add.append(
337-
docutils.nodes.literal_block(
351+
literal_node(
338352
text=data,
339353
rawsource=data,
340354
language="none",

tests/test_execute.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from sphinx.testing.util import SphinxTestApp, path
88
from sphinx.errors import ExtensionError
9-
from docutils.nodes import raw
9+
from docutils.nodes import raw, literal, literal_block, container
1010
from nbformat import from_dict
1111

1212
import pytest
@@ -546,7 +546,7 @@ def test_latex(doctree):
546546
assert celloutput.children[0].astext() == r"\int"
547547

548548

549-
def test_image_mimetype_uri(doctree):
549+
def test_cell_output_to_nodes(doctree):
550550
# tests the image uri paths on conversion to docutils image nodes
551551
priority = ['image/png', 'image/jpeg', 'text/latex', 'text/plain']
552552
output_dir = '/_build/jupyter_execute'
@@ -564,3 +564,16 @@ def test_image_mimetype_uri(doctree):
564564
cell = from_dict(cell)
565565
output_node = cell_output_to_nodes(cell["outputs"], priority, True, output_dir, None)
566566
assert output_node[0].attributes['uri'] == img_locs[index]
567+
568+
# Testing inline functionality
569+
outputs = [
570+
{"name": "stdout", "output_type": "stream", "text": ["hi\n"]},
571+
{"name": "stderr", "output_type": "stream", "text": ["hi\n"]},
572+
]
573+
output_nodes = cell_output_to_nodes(outputs, priority, True, output_dir, None)
574+
for output, kind in zip(output_nodes, [literal_block, container]):
575+
assert isinstance(output, kind)
576+
577+
output_nodes = cell_output_to_nodes(outputs, priority, True, output_dir, None, inline=True)
578+
for output, kind in zip(output_nodes, [literal, literal]):
579+
assert isinstance(output, kind)

0 commit comments

Comments
 (0)