markdown-exec 1.10.1__py3-none-any.whl → 1.10.2__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.
Files changed (43) hide show
  1. markdown_exec/__init__.py +50 -138
  2. markdown_exec/_internal/__init__.py +0 -0
  3. markdown_exec/{debug.py → _internal/debug.py} +13 -15
  4. markdown_exec/_internal/formatters/__init__.py +1 -0
  5. markdown_exec/{formatters → _internal/formatters}/_exec_python.py +1 -1
  6. markdown_exec/_internal/formatters/base.py +191 -0
  7. markdown_exec/_internal/formatters/bash.py +32 -0
  8. markdown_exec/_internal/formatters/console.py +29 -0
  9. markdown_exec/_internal/formatters/markdown.py +11 -0
  10. markdown_exec/_internal/formatters/pycon.py +26 -0
  11. markdown_exec/_internal/formatters/pyodide.py +73 -0
  12. markdown_exec/_internal/formatters/python.py +85 -0
  13. markdown_exec/_internal/formatters/sh.py +32 -0
  14. markdown_exec/_internal/formatters/tree.py +60 -0
  15. markdown_exec/_internal/logger.py +89 -0
  16. markdown_exec/_internal/main.py +123 -0
  17. markdown_exec/_internal/mkdocs_plugin.py +143 -0
  18. markdown_exec/_internal/processors.py +136 -0
  19. markdown_exec/_internal/rendering.py +280 -0
  20. markdown_exec/{pyodide.js → assets/pyodide.js} +12 -6
  21. markdown_exec/formatters/__init__.py +17 -1
  22. markdown_exec/formatters/base.py +12 -183
  23. markdown_exec/formatters/bash.py +10 -25
  24. markdown_exec/formatters/console.py +12 -24
  25. markdown_exec/formatters/markdown.py +11 -5
  26. markdown_exec/formatters/pycon.py +12 -24
  27. markdown_exec/formatters/pyodide.py +12 -65
  28. markdown_exec/formatters/python.py +11 -79
  29. markdown_exec/formatters/sh.py +10 -25
  30. markdown_exec/formatters/tree.py +12 -55
  31. markdown_exec/logger.py +12 -87
  32. markdown_exec/mkdocs_plugin.py +11 -135
  33. markdown_exec/processors.py +12 -118
  34. markdown_exec/rendering.py +11 -270
  35. {markdown_exec-1.10.1.dist-info → markdown_exec-1.10.2.dist-info}/METADATA +4 -3
  36. markdown_exec-1.10.2.dist-info/RECORD +42 -0
  37. markdown_exec-1.10.2.dist-info/entry_points.txt +7 -0
  38. markdown_exec-1.10.1.dist-info/RECORD +0 -26
  39. markdown_exec-1.10.1.dist-info/entry_points.txt +0 -7
  40. /markdown_exec/{ansi.css → assets/ansi.css} +0 -0
  41. /markdown_exec/{pyodide.css → assets/pyodide.css} +0 -0
  42. {markdown_exec-1.10.1.dist-info → markdown_exec-1.10.2.dist-info}/WHEEL +0 -0
  43. {markdown_exec-1.10.1.dist-info → markdown_exec-1.10.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,123 +1,17 @@
1
- """This module contains a Markdown extension allowing to integrate generated headings into the ToC."""
1
+ """Deprecated. Import from `markdown_exec` directly."""
2
2
 
3
- from __future__ import annotations
3
+ # YORE: Bump 2: Remove file.
4
4
 
5
- import copy
6
- import re
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 markdown.treeprocessors import Treeprocessor
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
- # code taken from mkdocstrings, credits to @oprypin
19
- class IdPrependingTreeprocessor(Treeprocessor):
20
- """Prepend the configured prefix to IDs of all HTML elements."""
21
-
22
- name = "markdown_exec_ids"
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)
@@ -1,276 +1,17 @@
1
- """Markdown extensions and helpers."""
1
+ """Deprecated. Import from `markdown_exec` directly."""
2
2
 
3
- from __future__ import annotations
3
+ # YORE: Bump 2: Remove file.
4
4
 
5
- from contextlib import contextmanager
6
- from functools import cache
7
- from textwrap import indent
8
- from typing import TYPE_CHECKING, Any
5
+ import warnings
6
+ from typing import Any
9
7
 
10
- from markdown import Markdown
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
- if TYPE_CHECKING:
21
- from collections.abc import Iterator
22
- from xml.etree.ElementTree import Element
23
-
24
- from markdown import Extension
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 &mdash;,
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
- md.treeprocessors.register(
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
1
+ Metadata-Version: 2.4
2
2
  Name: markdown-exec
3
- Version: 1.10.1
3
+ Version: 1.10.2
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.2.dist-info/METADATA,sha256=p_03bcEee3LVhFXFkmBPpnEa2kXPtRxHJLmhst3j-L4,4967
2
+ markdown_exec-1.10.2.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
+ markdown_exec-1.10.2.dist-info/entry_points.txt,sha256=fjbdFnhAdp5BS5JSD_VVuTX4Kz9ZjWMqg3QcxOrKuw8,101
4
+ markdown_exec-1.10.2.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=-7_W_7lTz2nUNixWbpgleDnr109Ca9TTSKJ9VzgdoJE,4176
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.2.dist-info/RECORD,,
@@ -0,0 +1,7 @@
1
+ [console_scripts]
2
+
3
+ [gui_scripts]
4
+
5
+ [mkdocs.plugins]
6
+ markdown-exec = markdown_exec:MarkdownExecPlugin
7
+
@@ -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,,
@@ -1,7 +0,0 @@
1
- [console_scripts]
2
-
3
- [gui_scripts]
4
-
5
- [mkdocs.plugins]
6
- markdown-exec = markdown_exec.mkdocs_plugin:MarkdownExecPlugin
7
-
File without changes
File without changes