markdown-exec 1.10.1__py3-none-any.whl → 1.10.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- markdown_exec/__init__.py +50 -138
- markdown_exec/_internal/__init__.py +0 -0
- markdown_exec/{debug.py → _internal/debug.py} +13 -15
- markdown_exec/_internal/formatters/__init__.py +1 -0
- markdown_exec/{formatters → _internal/formatters}/_exec_python.py +1 -1
- markdown_exec/_internal/formatters/base.py +191 -0
- markdown_exec/_internal/formatters/bash.py +32 -0
- markdown_exec/_internal/formatters/console.py +29 -0
- markdown_exec/_internal/formatters/markdown.py +11 -0
- markdown_exec/_internal/formatters/pycon.py +26 -0
- markdown_exec/_internal/formatters/pyodide.py +73 -0
- markdown_exec/_internal/formatters/python.py +85 -0
- markdown_exec/_internal/formatters/sh.py +32 -0
- markdown_exec/_internal/formatters/tree.py +60 -0
- markdown_exec/_internal/logger.py +89 -0
- markdown_exec/_internal/main.py +123 -0
- markdown_exec/_internal/mkdocs_plugin.py +143 -0
- markdown_exec/_internal/processors.py +136 -0
- markdown_exec/_internal/rendering.py +280 -0
- markdown_exec/{pyodide.js → assets/pyodide.js} +15 -7
- markdown_exec/formatters/__init__.py +17 -1
- markdown_exec/formatters/base.py +12 -183
- markdown_exec/formatters/bash.py +10 -25
- markdown_exec/formatters/console.py +12 -24
- markdown_exec/formatters/markdown.py +11 -5
- markdown_exec/formatters/pycon.py +12 -24
- markdown_exec/formatters/pyodide.py +12 -65
- markdown_exec/formatters/python.py +11 -79
- markdown_exec/formatters/sh.py +10 -25
- markdown_exec/formatters/tree.py +12 -55
- markdown_exec/logger.py +12 -87
- markdown_exec/mkdocs_plugin.py +11 -135
- markdown_exec/processors.py +12 -118
- markdown_exec/rendering.py +11 -270
- {markdown_exec-1.10.1.dist-info → markdown_exec-1.10.3.dist-info}/METADATA +4 -3
- markdown_exec-1.10.3.dist-info/RECORD +42 -0
- markdown_exec-1.10.3.dist-info/entry_points.txt +7 -0
- markdown_exec-1.10.1.dist-info/RECORD +0 -26
- markdown_exec-1.10.1.dist-info/entry_points.txt +0 -7
- /markdown_exec/{ansi.css → assets/ansi.css} +0 -0
- /markdown_exec/{pyodide.css → assets/pyodide.css} +0 -0
- {markdown_exec-1.10.1.dist-info → markdown_exec-1.10.3.dist-info}/WHEEL +0 -0
- {markdown_exec-1.10.1.dist-info → markdown_exec-1.10.3.dist-info}/licenses/LICENSE +0 -0
markdown_exec/processors.py
CHANGED
@@ -1,123 +1,17 @@
|
|
1
|
-
"""
|
1
|
+
"""Deprecated. Import from `markdown_exec` directly."""
|
2
2
|
|
3
|
-
|
3
|
+
# YORE: Bump 2: Remove file.
|
4
4
|
|
5
|
-
import
|
6
|
-
import
|
7
|
-
from typing import TYPE_CHECKING
|
8
|
-
from xml.etree.ElementTree import Element
|
5
|
+
import warnings
|
6
|
+
from typing import Any
|
9
7
|
|
10
|
-
from
|
11
|
-
from markdown.util import HTML_PLACEHOLDER_RE
|
8
|
+
from markdown_exec._internal import processors
|
12
9
|
|
13
|
-
if TYPE_CHECKING:
|
14
|
-
from markdown import Markdown
|
15
|
-
from markupsafe import Markup
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
def __init__(self, md: Markdown, id_prefix: str) -> None: # noqa: D107
|
25
|
-
super().__init__(md)
|
26
|
-
self.id_prefix = id_prefix
|
27
|
-
|
28
|
-
def run(self, root: Element) -> None: # noqa: D102
|
29
|
-
if not self.id_prefix:
|
30
|
-
return
|
31
|
-
for el in root.iter():
|
32
|
-
id_attr = el.get("id")
|
33
|
-
if id_attr:
|
34
|
-
el.set("id", self.id_prefix + id_attr)
|
35
|
-
|
36
|
-
href_attr = el.get("href")
|
37
|
-
if href_attr and href_attr.startswith("#"):
|
38
|
-
el.set("href", "#" + self.id_prefix + href_attr[1:])
|
39
|
-
|
40
|
-
name_attr = el.get("name")
|
41
|
-
if name_attr:
|
42
|
-
el.set("name", self.id_prefix + name_attr)
|
43
|
-
|
44
|
-
if el.tag == "label":
|
45
|
-
for_attr = el.get("for")
|
46
|
-
if for_attr:
|
47
|
-
el.set("for", self.id_prefix + for_attr)
|
48
|
-
|
49
|
-
|
50
|
-
# code taken from mkdocstrings, credits to @oprypin
|
51
|
-
class HeadingReportingTreeprocessor(Treeprocessor):
|
52
|
-
"""Records the heading elements encountered in the document."""
|
53
|
-
|
54
|
-
name = "markdown_exec_record_headings"
|
55
|
-
regex = re.compile("[Hh][1-6]")
|
56
|
-
|
57
|
-
def __init__(self, md: Markdown, headings: list[Element]): # noqa: D107
|
58
|
-
super().__init__(md)
|
59
|
-
self.headings = headings
|
60
|
-
|
61
|
-
def run(self, root: Element) -> None: # noqa: D102
|
62
|
-
for el in root.iter():
|
63
|
-
if self.regex.fullmatch(el.tag):
|
64
|
-
el = copy.copy(el) # noqa: PLW2901
|
65
|
-
# 'toc' extension's first pass (which we require to build heading stubs/ids) also edits the HTML.
|
66
|
-
# Undo the permalink edit so we can pass this heading to the outer pass of the 'toc' extension.
|
67
|
-
if len(el) > 0 and el[-1].get("class") == self.md.treeprocessors["toc"].permalink_class: # type: ignore[attr-defined]
|
68
|
-
del el[-1]
|
69
|
-
self.headings.append(el)
|
70
|
-
|
71
|
-
|
72
|
-
class InsertHeadings(Treeprocessor):
|
73
|
-
"""Our headings insertor."""
|
74
|
-
|
75
|
-
name = "markdown_exec_insert_headings"
|
76
|
-
|
77
|
-
def __init__(self, md: Markdown):
|
78
|
-
"""Initialize the object.
|
79
|
-
|
80
|
-
Arguments:
|
81
|
-
md: A `markdown.Markdown` instance.
|
82
|
-
"""
|
83
|
-
super().__init__(md)
|
84
|
-
self.headings: dict[Markup, list[Element]] = {}
|
85
|
-
|
86
|
-
def run(self, root: Element) -> None: # noqa: D102 (ignore missing docstring)
|
87
|
-
if not self.headings:
|
88
|
-
return
|
89
|
-
|
90
|
-
for el in root.iter():
|
91
|
-
match = HTML_PLACEHOLDER_RE.match(el.text or "")
|
92
|
-
if match:
|
93
|
-
counter = int(match.group(1))
|
94
|
-
markup: Markup = self.md.htmlStash.rawHtmlBlocks[counter] # type: ignore[assignment]
|
95
|
-
if headings := self.headings.get(markup):
|
96
|
-
div = Element("div", {"class": "markdown-exec"})
|
97
|
-
div.extend(headings)
|
98
|
-
el.append(div)
|
99
|
-
|
100
|
-
|
101
|
-
class RemoveHeadings(Treeprocessor):
|
102
|
-
"""Our headings remover."""
|
103
|
-
|
104
|
-
name = "markdown_exec_remove_headings"
|
105
|
-
|
106
|
-
def run(self, root: Element) -> None: # noqa: D102
|
107
|
-
self._remove_duplicated_headings(root)
|
108
|
-
|
109
|
-
def _remove_duplicated_headings(self, parent: Element) -> None:
|
110
|
-
carry_text = ""
|
111
|
-
for el in reversed(parent): # Reversed mainly for the ability to mutate during iteration.
|
112
|
-
if el.tag == "div" and el.get("class") == "markdown-exec":
|
113
|
-
# Delete the duplicated headings along with their container, but keep the text (i.e. the actual HTML).
|
114
|
-
carry_text = (el.text or "") + carry_text
|
115
|
-
parent.remove(el)
|
116
|
-
else:
|
117
|
-
if carry_text:
|
118
|
-
el.tail = (el.tail or "") + carry_text
|
119
|
-
carry_text = ""
|
120
|
-
self._remove_duplicated_headings(el)
|
121
|
-
|
122
|
-
if carry_text:
|
123
|
-
parent.text = (parent.text or "") + carry_text
|
11
|
+
def __getattr__(name: str) -> Any:
|
12
|
+
warnings.warn(
|
13
|
+
"Importing from `markdown_exec.processors` is deprecated. Import from `markdown_exec` directly.",
|
14
|
+
DeprecationWarning,
|
15
|
+
stacklevel=2,
|
16
|
+
)
|
17
|
+
return getattr(processors, name)
|
markdown_exec/rendering.py
CHANGED
@@ -1,276 +1,17 @@
|
|
1
|
-
"""
|
1
|
+
"""Deprecated. Import from `markdown_exec` directly."""
|
2
2
|
|
3
|
-
|
3
|
+
# YORE: Bump 2: Remove file.
|
4
4
|
|
5
|
-
|
6
|
-
from
|
7
|
-
from textwrap import indent
|
8
|
-
from typing import TYPE_CHECKING, Any
|
5
|
+
import warnings
|
6
|
+
from typing import Any
|
9
7
|
|
10
|
-
from
|
11
|
-
from markupsafe import Markup
|
8
|
+
from markdown_exec._internal import rendering
|
12
9
|
|
13
|
-
from markdown_exec.processors import (
|
14
|
-
HeadingReportingTreeprocessor,
|
15
|
-
IdPrependingTreeprocessor,
|
16
|
-
InsertHeadings,
|
17
|
-
RemoveHeadings,
|
18
|
-
)
|
19
10
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
def code_block(language: str, code: str, **options: str) -> str:
|
28
|
-
"""Format code as a code block.
|
29
|
-
|
30
|
-
Parameters:
|
31
|
-
language: The code block language.
|
32
|
-
code: The source code to format.
|
33
|
-
**options: Additional options passed from the source, to add back to the generated code block.
|
34
|
-
|
35
|
-
Returns:
|
36
|
-
The formatted code block.
|
37
|
-
"""
|
38
|
-
opts = " ".join(f'{opt_name}="{opt_value}"' for opt_name, opt_value in options.items())
|
39
|
-
return f"````````{language} {opts}\n{code}\n````````"
|
40
|
-
|
41
|
-
|
42
|
-
def tabbed(*tabs: tuple[str, str]) -> str:
|
43
|
-
"""Format tabs using `pymdownx.tabbed` extension.
|
44
|
-
|
45
|
-
Parameters:
|
46
|
-
*tabs: Tuples of strings: title and text.
|
47
|
-
|
48
|
-
Returns:
|
49
|
-
The formatted tabs.
|
50
|
-
"""
|
51
|
-
parts = []
|
52
|
-
for title, text in tabs:
|
53
|
-
title = title.replace(r"\|", "|").strip() # noqa: PLW2901
|
54
|
-
parts.append(f'=== "{title}"')
|
55
|
-
parts.append(indent(text, prefix=" " * 4))
|
56
|
-
parts.append("")
|
57
|
-
return "\n".join(parts)
|
58
|
-
|
59
|
-
|
60
|
-
def _hide_lines(source: str) -> str:
|
61
|
-
return "\n".join(line for line in source.split("\n") if "markdown-exec: hide" not in line).strip()
|
62
|
-
|
63
|
-
|
64
|
-
def add_source(
|
65
|
-
*,
|
66
|
-
source: str,
|
67
|
-
location: str,
|
68
|
-
output: str,
|
69
|
-
language: str,
|
70
|
-
tabs: tuple[str, str],
|
71
|
-
result: str = "",
|
72
|
-
**extra: str,
|
73
|
-
) -> str:
|
74
|
-
"""Add source code block to the output.
|
75
|
-
|
76
|
-
Parameters:
|
77
|
-
source: The source code block.
|
78
|
-
location: Where to add the source (above, below, tabbed-left, tabbed-right, console).
|
79
|
-
output: The current output.
|
80
|
-
language: The code language.
|
81
|
-
tabs: Tabs titles (if used).
|
82
|
-
result: Syntax to use when concatenating source and result with "console" location.
|
83
|
-
**extra: Extra options added back to source code block.
|
84
|
-
|
85
|
-
Raises:
|
86
|
-
ValueError: When the given location is not supported.
|
87
|
-
|
88
|
-
Returns:
|
89
|
-
The updated output.
|
90
|
-
"""
|
91
|
-
source = _hide_lines(source)
|
92
|
-
if location == "console":
|
93
|
-
return code_block(result or language, source + "\n" + output, **extra)
|
94
|
-
|
95
|
-
source_block = code_block(language, source, **extra)
|
96
|
-
if location == "above":
|
97
|
-
return source_block + "\n\n" + output
|
98
|
-
if location == "below":
|
99
|
-
return output + "\n\n" + source_block
|
100
|
-
if location == "material-block":
|
101
|
-
return source_block + f'\n\n<div class="result" markdown="1" >\n\n{output}\n\n</div>'
|
102
|
-
|
103
|
-
source_tab_title, result_tab_title = tabs
|
104
|
-
if location == "tabbed-left":
|
105
|
-
return tabbed((source_tab_title, source_block), (result_tab_title, output))
|
106
|
-
if location == "tabbed-right":
|
107
|
-
return tabbed((result_tab_title, output), (source_tab_title, source_block))
|
108
|
-
|
109
|
-
raise ValueError(f"unsupported location for sources: {location}")
|
110
|
-
|
111
|
-
|
112
|
-
class MarkdownConfig:
|
113
|
-
"""This class returns a singleton used to store Markdown extensions configuration.
|
114
|
-
|
115
|
-
You don't have to instantiate the singleton yourself:
|
116
|
-
we provide it as [`markdown_config`][markdown_exec.rendering.markdown_config].
|
117
|
-
"""
|
118
|
-
|
119
|
-
_singleton: MarkdownConfig | None = None
|
120
|
-
|
121
|
-
def __new__(cls) -> MarkdownConfig: # noqa: D102,PYI034
|
122
|
-
if cls._singleton is None:
|
123
|
-
cls._singleton = super().__new__(cls)
|
124
|
-
return cls._singleton
|
125
|
-
|
126
|
-
def __init__(self) -> None: # noqa: D107
|
127
|
-
self.exts: list[str] | None = None
|
128
|
-
self.exts_config: dict[str, dict[str, Any]] | None = None
|
129
|
-
|
130
|
-
def save(self, exts: list[str], exts_config: dict[str, dict[str, Any]]) -> None:
|
131
|
-
"""Save Markdown extensions and their configuration.
|
132
|
-
|
133
|
-
Parameters:
|
134
|
-
exts: The Markdown extensions.
|
135
|
-
exts_config: The extensions configuration.
|
136
|
-
"""
|
137
|
-
self.exts = exts
|
138
|
-
self.exts_config = exts_config
|
139
|
-
|
140
|
-
def reset(self) -> None:
|
141
|
-
"""Reset Markdown extensions and their configuration."""
|
142
|
-
self.exts = None
|
143
|
-
self.exts_config = None
|
144
|
-
|
145
|
-
|
146
|
-
markdown_config = MarkdownConfig()
|
147
|
-
"""This object can be used to save the configuration of your Markdown extensions.
|
148
|
-
|
149
|
-
For example, since we provide a MkDocs plugin, we use it to store the configuration
|
150
|
-
that was read from `mkdocs.yml`:
|
151
|
-
|
152
|
-
```python
|
153
|
-
from markdown_exec.rendering import markdown_config
|
154
|
-
|
155
|
-
# ...in relevant events/hooks, access and modify extensions and their configs, then:
|
156
|
-
markdown_config.save(extensions, extensions_config)
|
157
|
-
```
|
158
|
-
|
159
|
-
See the actual event hook: [`on_config`][markdown_exec.mkdocs_plugin.MarkdownExecPlugin.on_config].
|
160
|
-
See the [`save`][markdown_exec.rendering.MarkdownConfig.save]
|
161
|
-
and [`reset`][markdown_exec.rendering.MarkdownConfig.reset] methods.
|
162
|
-
|
163
|
-
Without it, Markdown Exec will rely on the `registeredExtensions` attribute
|
164
|
-
of the original Markdown instance, which does not forward everything
|
165
|
-
that was configured, notably extensions like `tables`. Other extensions
|
166
|
-
such as `attr_list` are visible, but fail to register properly when
|
167
|
-
reusing their instances. It means that the rendered HTML might differ
|
168
|
-
from what you expect (tables not rendered, attribute lists not injected,
|
169
|
-
emojis not working, etc.).
|
170
|
-
"""
|
171
|
-
|
172
|
-
# FIXME: When a heading contains an XML entity such as —,
|
173
|
-
# the entity is stashed and replaced with a placeholder.
|
174
|
-
# The heading therefore contains this placeholder.
|
175
|
-
# When reporting the heading to the upper conversion layer (for the ToC),
|
176
|
-
# the placeholder gets unstashed using the upper Markdown instance
|
177
|
-
# instead of the neste one. If the upper instance doesn't know the placeholder,
|
178
|
-
# nothing happens. But if it knows it, we then get a heading with garbabe/previous
|
179
|
-
# contents within it, messing up the ToC.
|
180
|
-
# We should fix this somehow. In the meantime, the workaround is to avoid
|
181
|
-
# XML entities that get stashed in headings.
|
182
|
-
|
183
|
-
|
184
|
-
@cache
|
185
|
-
def _register_headings_processors(md: Markdown) -> None:
|
186
|
-
md.treeprocessors.register(
|
187
|
-
InsertHeadings(md),
|
188
|
-
InsertHeadings.name,
|
189
|
-
priority=75, # right before markdown.blockprocessors.HashHeaderProcessor
|
11
|
+
def __getattr__(name: str) -> Any:
|
12
|
+
warnings.warn(
|
13
|
+
"Importing from `markdown_exec.rendering` is deprecated. Import from `markdown_exec` directly.",
|
14
|
+
DeprecationWarning,
|
15
|
+
stacklevel=2,
|
190
16
|
)
|
191
|
-
|
192
|
-
RemoveHeadings(md),
|
193
|
-
RemoveHeadings.name,
|
194
|
-
priority=4, # right after toc
|
195
|
-
)
|
196
|
-
|
197
|
-
|
198
|
-
def _mimic(md: Markdown, headings: list[Element], *, update_toc: bool = True) -> Markdown:
|
199
|
-
new_md = Markdown()
|
200
|
-
extensions: list[Extension | str] = markdown_config.exts or md.registeredExtensions # type: ignore[assignment]
|
201
|
-
extensions_config: dict[str, dict[str, Any]] = markdown_config.exts_config or {}
|
202
|
-
new_md.registerExtensions(extensions, extensions_config)
|
203
|
-
new_md.treeprocessors.register(
|
204
|
-
IdPrependingTreeprocessor(md, ""),
|
205
|
-
IdPrependingTreeprocessor.name,
|
206
|
-
priority=4, # right after 'toc' (needed because that extension adds ids to headings)
|
207
|
-
)
|
208
|
-
new_md._original_md = md # type: ignore[attr-defined]
|
209
|
-
|
210
|
-
if update_toc:
|
211
|
-
_register_headings_processors(md)
|
212
|
-
new_md.treeprocessors.register(
|
213
|
-
HeadingReportingTreeprocessor(new_md, headings),
|
214
|
-
HeadingReportingTreeprocessor.name,
|
215
|
-
priority=1, # Close to the end.
|
216
|
-
)
|
217
|
-
|
218
|
-
return new_md
|
219
|
-
|
220
|
-
|
221
|
-
@contextmanager
|
222
|
-
def _id_prefix(md: Markdown, prefix: str | None) -> Iterator[None]:
|
223
|
-
MarkdownConverter.counter += 1
|
224
|
-
id_prepending_processor = md.treeprocessors[IdPrependingTreeprocessor.name]
|
225
|
-
id_prepending_processor.id_prefix = prefix if prefix is not None else f"exec-{MarkdownConverter.counter}--" # type: ignore[attr-defined]
|
226
|
-
try:
|
227
|
-
yield
|
228
|
-
finally:
|
229
|
-
id_prepending_processor.id_prefix = "" # type: ignore[attr-defined]
|
230
|
-
|
231
|
-
|
232
|
-
class MarkdownConverter:
|
233
|
-
"""Helper class to avoid breaking the original Markdown instance state."""
|
234
|
-
|
235
|
-
counter: int = 0
|
236
|
-
|
237
|
-
def __init__(self, md: Markdown, *, update_toc: bool = True) -> None: # noqa: D107
|
238
|
-
self._md_ref: Markdown = md
|
239
|
-
self._headings: list[Element] = []
|
240
|
-
self._update_toc = update_toc
|
241
|
-
|
242
|
-
@property
|
243
|
-
def _original_md(self) -> Markdown:
|
244
|
-
return getattr(self._md_ref, "_original_md", self._md_ref)
|
245
|
-
|
246
|
-
def _report_headings(self, markup: Markup) -> None:
|
247
|
-
self._original_md.treeprocessors[InsertHeadings.name].headings[markup] = self._headings # type: ignore[attr-defined]
|
248
|
-
self._headings = []
|
249
|
-
|
250
|
-
def convert(self, text: str, stash: dict[str, str] | None = None, id_prefix: str | None = None) -> Markup:
|
251
|
-
"""Convert Markdown text to safe HTML.
|
252
|
-
|
253
|
-
Parameters:
|
254
|
-
text: Markdown text.
|
255
|
-
stash: An HTML stash.
|
256
|
-
|
257
|
-
Returns:
|
258
|
-
Safe HTML.
|
259
|
-
"""
|
260
|
-
md = _mimic(self._original_md, self._headings, update_toc=self._update_toc)
|
261
|
-
|
262
|
-
# convert markdown to html
|
263
|
-
with _id_prefix(md, id_prefix):
|
264
|
-
converted = md.convert(text)
|
265
|
-
|
266
|
-
# restore html from stash
|
267
|
-
for placeholder, stashed in (stash or {}).items():
|
268
|
-
converted = converted.replace(placeholder, stashed)
|
269
|
-
|
270
|
-
markup = Markup(converted)
|
271
|
-
|
272
|
-
# pass headings to upstream conversion layer
|
273
|
-
if self._update_toc:
|
274
|
-
self._report_headings(markup)
|
275
|
-
|
276
|
-
return markup
|
17
|
+
return getattr(rendering, name)
|
@@ -1,10 +1,11 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: markdown-exec
|
3
|
-
Version: 1.10.
|
3
|
+
Version: 1.10.3
|
4
4
|
Summary: Utilities to execute code blocks in Markdown files.
|
5
5
|
Keywords: markdown,python,exec,shell,bash,mkdocs
|
6
6
|
Author-Email: =?utf-8?q?Timoth=C3=A9e_Mazzucotelli?= <dev@pawamoy.fr>
|
7
|
-
License: ISC
|
7
|
+
License-Expression: ISC
|
8
|
+
License-File: LICENSE
|
8
9
|
Classifier: Development Status :: 4 - Beta
|
9
10
|
Classifier: Intended Audience :: Developers
|
10
11
|
Classifier: Programming Language :: Python
|
@@ -0,0 +1,42 @@
|
|
1
|
+
markdown_exec-1.10.3.dist-info/METADATA,sha256=RLkgpHa2gX3EqT_tjHkU4wlU8UI8X2BikXW-y74CILk,4967
|
2
|
+
markdown_exec-1.10.3.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
|
3
|
+
markdown_exec-1.10.3.dist-info/entry_points.txt,sha256=fjbdFnhAdp5BS5JSD_VVuTX4Kz9ZjWMqg3QcxOrKuw8,101
|
4
|
+
markdown_exec-1.10.3.dist-info/licenses/LICENSE,sha256=eZQBcJKqlN0QepmOi0u09hlqKMPFdzWjY6NUWYeJGZs,754
|
5
|
+
markdown_exec/__init__.py,sha256=yS0iGXTaZvvPUYC2ZgpAzYJqwxtvHe9Yr__r2sjB8ig,1341
|
6
|
+
markdown_exec/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
+
markdown_exec/_internal/debug.py,sha256=bdTv2PPqPKMxvFlQI4LDkVddGp1_EO6HY3brvdXqzsU,2827
|
8
|
+
markdown_exec/_internal/formatters/__init__.py,sha256=BiGAHQU1_x75VeGVipSgGvxOabYnMaaVt6b7owTS1NY,47
|
9
|
+
markdown_exec/_internal/formatters/_exec_python.py,sha256=B6aW5Ns8vI6WeqVZ4xPSvGfmmLMwYyYqv-BjrkF1zVs,313
|
10
|
+
markdown_exec/_internal/formatters/base.py,sha256=-kF1QYj6EsrgawxdDZTrFkXqRlrJhV6LjLqJWaJLceE,6255
|
11
|
+
markdown_exec/_internal/formatters/bash.py,sha256=4BF-CE_CqdtjGB-d7qdh9PpzczTQYKsa2ILK1Awoh-M,911
|
12
|
+
markdown_exec/_internal/formatters/console.py,sha256=C9Y5cHwZrzLCTbLPmoHUPfxR02nDnnYmsrtyIL24JoU,842
|
13
|
+
markdown_exec/_internal/formatters/markdown.py,sha256=n8qqWujozy9tjEyfjLCpXV6_Quqv_ZQXOGq4mYZXIO0,282
|
14
|
+
markdown_exec/_internal/formatters/pycon.py,sha256=TGvcVNv66ESdpfkiHInPfBPyIoM3nJUK26HqQYWqSSw,795
|
15
|
+
markdown_exec/_internal/formatters/pyodide.py,sha256=kbf4H4rE3m40im_i8-nG4-H08Wu4scxTGK3B34R0HNQ,3266
|
16
|
+
markdown_exec/_internal/formatters/python.py,sha256=9VFhDX9iBK9mAsUF7fOKFERTp8kZV8SCCVf9fjjharc,3224
|
17
|
+
markdown_exec/_internal/formatters/sh.py,sha256=qImNvcF_3P9VsMEAj3wWdhg_i_FSBnZiT-5JPqME1kk,901
|
18
|
+
markdown_exec/_internal/formatters/tree.py,sha256=6tf52dV5xAUHbxRxh8CLhhhFA0ill3g02JGxwKmlMMA,2052
|
19
|
+
markdown_exec/_internal/logger.py,sha256=a7HHV4dL8vC0EZQZxgx179Q36X_Ny1U5h4PsiZDWyWA,2407
|
20
|
+
markdown_exec/_internal/main.py,sha256=C7CdLTiuU1CDC5kybokumX5FZFUBmNw0jeKnmy4pD7M,4260
|
21
|
+
markdown_exec/_internal/mkdocs_plugin.py,sha256=dsXgAjlGjcYREo4HKsUJ4Vd4PGpit9SA-nzSCPDRleg,5429
|
22
|
+
markdown_exec/_internal/processors.py,sha256=hu_occeaz2SymdREwHul-boniv42RfNkY84ROICUEME,4783
|
23
|
+
markdown_exec/_internal/rendering.py,sha256=aCLsbWcez5Mbp3SBYQaqhVCehX_cchCAMuvxp5AzknA,9599
|
24
|
+
markdown_exec/assets/ansi.css,sha256=6PTJxTSsExVgPbMySCuKjih0gr-fdfx2aZ9--u7zWf0,8090
|
25
|
+
markdown_exec/assets/pyodide.css,sha256=lan5A3qEGA4ABTrXPOWJX8kezQp7naH305NKVTSObhM,954
|
26
|
+
markdown_exec/assets/pyodide.js,sha256=g5eWWVP7-8mA2DQvj-a34I167CRP7yMAVykR13CUWp4,4240
|
27
|
+
markdown_exec/formatters/__init__.py,sha256=bH4xBv9gRcYMvDYvW2yEK9AMl-tpXKJ8XifxCxHTJCc,429
|
28
|
+
markdown_exec/formatters/base.py,sha256=tYWDIAgopl7P3cIJllXcf9j2ruFl9vKqk2_ZGUz4YvM,433
|
29
|
+
markdown_exec/formatters/bash.py,sha256=EtAbQrAsLCRfTbdB-b_5dOJvw-Bxkw7MT9F7RFusve0,433
|
30
|
+
markdown_exec/formatters/console.py,sha256=O7j7C5R5sa-PxhVBKbUhMsC8ucXX1Oug9ZKKVsW6F_s,442
|
31
|
+
markdown_exec/formatters/markdown.py,sha256=ILz1F88IV34E8x8P-X-RDaKvUR1YkzkQjqOBZP2GBG4,445
|
32
|
+
markdown_exec/formatters/pycon.py,sha256=uY2dyq4szXmJ_n3XOI84fXP6zWF1Bt7ElawRzmB8HqU,436
|
33
|
+
markdown_exec/formatters/pyodide.py,sha256=nVnVDuisJAAa0OP5AiR_d3CO1RLAmRzdRH78kRXwk9E,442
|
34
|
+
markdown_exec/formatters/python.py,sha256=JGya3n3cnwNgl1nPSF34XXfHpC95-p9MCkcRwyvkkjc,439
|
35
|
+
markdown_exec/formatters/sh.py,sha256=l2SR1VugKTdZQIQF84ikuYKYTtiryhcH-TDr6suOwNY,427
|
36
|
+
markdown_exec/formatters/tree.py,sha256=qqeR5mHmTzNJjnliYgjTdF2uYCnFZrnMb-xUluCvsPA,433
|
37
|
+
markdown_exec/logger.py,sha256=48y5W371J6GpUS-ofvaBoODfVnT3kyCMpb1cM2tokvg,417
|
38
|
+
markdown_exec/mkdocs_plugin.py,sha256=jwYOBaHDaDsKVC7RuvCQaFWqTQWQWYtojEUb0RhOnfg,438
|
39
|
+
markdown_exec/processors.py,sha256=m4bm4d23X4RMh9mVgYuIxfJZnS4HwlY4Te3UMLpyjBA,429
|
40
|
+
markdown_exec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
|
+
markdown_exec/rendering.py,sha256=bsetG1hv6S_VcF4ZqtqTMTOhgEs2RmYVNCaK4MqiDx4,426
|
42
|
+
markdown_exec-1.10.3.dist-info/RECORD,,
|
@@ -1,26 +0,0 @@
|
|
1
|
-
markdown_exec-1.10.1.dist-info/METADATA,sha256=yDCifhFAab-n1BJXKMhlgGKzO9rIVJf8adp2T-_n5XE,4934
|
2
|
-
markdown_exec-1.10.1.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
|
3
|
-
markdown_exec-1.10.1.dist-info/entry_points.txt,sha256=ZRi29BtVWZN8GHI2Cc-lN2vEvHrmg9Q-mnY_7ZIlf_c,115
|
4
|
-
markdown_exec-1.10.1.dist-info/licenses/LICENSE,sha256=eZQBcJKqlN0QepmOi0u09hlqKMPFdzWjY6NUWYeJGZs,754
|
5
|
-
markdown_exec/__init__.py,sha256=imnxEGJ4SCay2aeK-IMv5lnSwi7NurpPaoETXJZRsIk,4675
|
6
|
-
markdown_exec/ansi.css,sha256=6PTJxTSsExVgPbMySCuKjih0gr-fdfx2aZ9--u7zWf0,8090
|
7
|
-
markdown_exec/debug.py,sha256=dy0bTd9mTTyTaWuUGNkH0UUdMp2ZThsmGh5q9wt9O0c,2840
|
8
|
-
markdown_exec/formatters/__init__.py,sha256=w8ui1JaGUA5SCyWd2pPAAopQ5y6QYtDvOUHUa7KW2Wg,51
|
9
|
-
markdown_exec/formatters/_exec_python.py,sha256=Gnstq7GFFXKuG8VZEHiT53wacKHR2UcpIrCgrTIwIIM,317
|
10
|
-
markdown_exec/formatters/base.py,sha256=yTjHiBBGp_KGocV5ORcPBAbjSSBFRNlkzi3ru8EgPyw,6142
|
11
|
-
markdown_exec/formatters/bash.py,sha256=zICzmzzd-jTw0fiFv9K4SP-VI5iBM9KrVzX0E6fua5U,895
|
12
|
-
markdown_exec/formatters/console.py,sha256=D2JBIC4MU0ct2MiRCkBO-qo4MiH6Hjy6LXjYAsRmuRA,815
|
13
|
-
markdown_exec/formatters/markdown.py,sha256=pd0akvFGUXrc41NABcHUTTkKFA3k5Ju8im-b3kzOvIw,276
|
14
|
-
markdown_exec/formatters/pycon.py,sha256=F9xpSRKFWsVpGu5XXybtCkMMJ_PAfyd48Qqo1SWl6RA,854
|
15
|
-
markdown_exec/formatters/pyodide.py,sha256=twAY0PWge5svRNjMOi1f0wEuWU9R-K8qIKmsaTBSA_Y,3253
|
16
|
-
markdown_exec/formatters/python.py,sha256=11q2UH9kMRl1TUUkEJqsstOvDIzaIIY128CS6Drp4MI,3198
|
17
|
-
markdown_exec/formatters/sh.py,sha256=9bMFM5OP7znDg93qkQxETCTIaHWlRRfsVg4C8fz7UEE,885
|
18
|
-
markdown_exec/formatters/tree.py,sha256=4XU1KaNqChkkNxMYanwy6glTE2uwcY8Mz9jBZiIf3zY,2046
|
19
|
-
markdown_exec/logger.py,sha256=V8b_D19B0NkZuLr6cBQJnQgHAlz6NyqeENqHKWvTk5M,2422
|
20
|
-
markdown_exec/mkdocs_plugin.py,sha256=3Gz-9I-6uclzOzUjRs0SN0FmEbQ4L_Pbf-9lT1AMQss,5323
|
21
|
-
markdown_exec/processors.py,sha256=sE7ZWz_NisdcOdzQStqzPgvz7qnPkzNy4mqHLy6bugM,4411
|
22
|
-
markdown_exec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
|
-
markdown_exec/pyodide.css,sha256=lan5A3qEGA4ABTrXPOWJX8kezQp7naH305NKVTSObhM,954
|
24
|
-
markdown_exec/pyodide.js,sha256=6iL-9xA4b9UeZgsxVYq_BiCE-Bwu58NfYwYCzz9C9j0,3845
|
25
|
-
markdown_exec/rendering.py,sha256=1Az4xcmEN6TSIoD4liYzpfNhZlnOCwUcH05gFWQd11Y,9468
|
26
|
-
markdown_exec-1.10.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|