1from typing
import TYPE_CHECKING, Any, Dict, Iterable, List, Sequence
6from .
import get_console
7from .segment
import Segment
8from .terminal_theme
import DEFAULT_TERMINAL_THEME
13JUPYTER_HTML_FORMAT =
"""\
14<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace">{code}</pre>
19 """A shim to write html to Jupyter notebook."""
21 def __init__(self, html: str, text: str) ->
None:
26 self, include: Sequence[str], exclude: Sequence[str], **kwargs: Any
28 data = {
"text/plain": self.
text,
"text/html": self.
html}
30 data = {k: v
for (k, v)
in data.items()
if k
in include}
32 data = {k: v
for (k, v)
in data.items()
if k
not in exclude}
37 """Add to an Rich renderable to make it render in Jupyter notebook."""
42 self:
"ConsoleRenderable",
43 include: Sequence[str],
44 exclude: Sequence[str],
47 console = get_console()
51 data = {
"text/plain": text,
"text/html": html}
53 data = {k: v
for (k, v)
in data.items()
if k
in include}
55 data = {k: v
for (k, v)
in data.items()
if k
not in exclude}
60 def escape(text: str) -> str:
62 return text.replace(
"&",
"&").replace(
"<",
"<").replace(
">",
">")
64 fragments: List[str] = []
66 theme = DEFAULT_TERMINAL_THEME
73 text = f
'<span style="{rule}">{text}</span>' if rule
else text
75 text = f
'<a href="{style.link}" target="_blank">{text}</a>'
78 code =
"".join(fragments)
84def display(segments: Iterable[Segment], text: str) ->
None:
85 """Render segments to Jupyter."""
92 except ModuleNotFoundError:
98def print(*args: Any, **kwargs: Any) ->
None:
99 """Proxy for Console print."""
100 console = get_console()
Dict[str, str] _repr_mimebundle_("ConsoleRenderable" self, Sequence[str] include, Sequence[str] exclude, **Any kwargs)
None __init__(self, str html, str text)
Dict[str, str] _repr_mimebundle_(self, Sequence[str] include, Sequence[str] exclude, **Any kwargs)
None display(Iterable[Segment] segments, str text)
str _render_segments(Iterable[Segment] segments)