MDit 0.0.0.dev53__tar.gz → 0.0.0.dev55__tar.gz

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 (50) hide show
  1. {mdit-0.0.0.dev53/src/MDit.egg-info → mdit-0.0.0.dev55}/PKG-INFO +4 -4
  2. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/pyproject.toml +4 -4
  3. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55/src/MDit.egg-info}/PKG-INFO +4 -4
  4. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/MDit.egg-info/requires.txt +3 -3
  5. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/element.py +18 -5
  6. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/generate.py +0 -1
  7. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/MANIFEST.in +0 -0
  8. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/README.md +0 -0
  9. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/setup.cfg +0 -0
  10. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/MDit.egg-info/SOURCES.txt +0 -0
  11. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/MDit.egg-info/dependency_links.txt +0 -0
  12. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/MDit.egg-info/not-zip-safe +0 -0
  13. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/MDit.egg-info/top_level.txt +0 -0
  14. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/__init__.py +0 -0
  15. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/container.py +0 -0
  16. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/__init__.py +0 -0
  17. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/file.py +0 -0
  18. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema/document.yaml +0 -0
  19. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema/element/badge.yaml +0 -0
  20. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema.py +0 -0
  21. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/badge/dynamic.yaml +0 -0
  22. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/create-badges.yaml +0 -0
  23. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/_to_review/coc_covenant.yaml +0 -0
  24. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/_to_review/heading.yaml +0 -0
  25. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/_to_review/highlights.yaml +0 -0
  26. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/_to_review/line.yaml +0 -0
  27. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/_to_review/newline.yaml +0 -0
  28. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/_to_review/paragraph.yaml +0 -0
  29. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/_to_review/paragraph_style.yaml +0 -0
  30. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/_to_review/spacer.yaml +0 -0
  31. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/badge/params.yaml +0 -0
  32. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/badges.yaml +0 -0
  33. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/element/image.yaml +0 -0
  34. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/html/attr/align.yaml +0 -0
  35. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/html/attr/size.yaml +0 -0
  36. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/html/attrs.yaml +0 -0
  37. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/html-document.yaml +0 -0
  38. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/pepy/badge-params.yaml +0 -0
  39. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/schema_/shields/badge-params.yaml +0 -0
  40. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/data/template/code_of_conduct/contributor_covenant.md +0 -0
  41. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/display.py +0 -0
  42. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/document.py +0 -0
  43. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/parse.py +0 -0
  44. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/protocol.py +0 -0
  45. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/render.py +0 -0
  46. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/renderable.py +0 -0
  47. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/target/__init__.py +0 -0
  48. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/target/md.py +0 -0
  49. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/target/rich.py +0 -0
  50. {mdit-0.0.0.dev53 → mdit-0.0.0.dev55}/src/mdit/template.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: MDit
3
- Version: 0.0.0.dev53
3
+ Version: 0.0.0.dev55
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: sphinx<8
6
6
  Requires-Dist: myst-nb<2,>1
@@ -23,9 +23,9 @@ Requires-Dist: rich>=13.8
23
23
  Requires-Dist: pydantic>=2.9
24
24
  Requires-Dist: referencing>=0.35.1
25
25
  Requires-Dist: PkgData==0.0.0.dev5
26
- Requires-Dist: PySerials==0.0.0.dev56
27
- Requires-Dist: PyBadger==0.0.0.dev50
26
+ Requires-Dist: PySerials==0.0.0.dev58
27
+ Requires-Dist: PyBadger==0.0.0.dev52
28
28
  Requires-Dist: PyColorIT==0.0.0.dev8
29
29
  Requires-Dist: ProtocolMan==0.0.0.dev2
30
30
  Requires-Dist: HTMP==0.0.0.dev5
31
- Requires-Dist: JSONSchemata==0.0.0.dev52
31
+ Requires-Dist: JSONSchemata==0.0.0.dev54
@@ -17,7 +17,7 @@ namespaces = true
17
17
  # ----------------------------------------- Project Metadata -------------------------------------
18
18
  #
19
19
  [project]
20
- version = "0.0.0.dev53"
20
+ version = "0.0.0.dev55"
21
21
  name = "MDit"
22
22
  requires-python = ">=3.10"
23
23
  dependencies = [
@@ -42,10 +42,10 @@ dependencies = [
42
42
  "pydantic >= 2.9",
43
43
  "referencing >= 0.35.1",
44
44
  "PkgData == 0.0.0.dev5",
45
- "PySerials == 0.0.0.dev56",
46
- "PyBadger == 0.0.0.dev50",
45
+ "PySerials == 0.0.0.dev58",
46
+ "PyBadger == 0.0.0.dev52",
47
47
  "PyColorIT == 0.0.0.dev8",
48
48
  "ProtocolMan == 0.0.0.dev2",
49
49
  "HTMP == 0.0.0.dev5",
50
- "JSONSchemata == 0.0.0.dev52",
50
+ "JSONSchemata == 0.0.0.dev54",
51
51
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: MDit
3
- Version: 0.0.0.dev53
3
+ Version: 0.0.0.dev55
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: sphinx<8
6
6
  Requires-Dist: myst-nb<2,>1
@@ -23,9 +23,9 @@ Requires-Dist: rich>=13.8
23
23
  Requires-Dist: pydantic>=2.9
24
24
  Requires-Dist: referencing>=0.35.1
25
25
  Requires-Dist: PkgData==0.0.0.dev5
26
- Requires-Dist: PySerials==0.0.0.dev56
27
- Requires-Dist: PyBadger==0.0.0.dev50
26
+ Requires-Dist: PySerials==0.0.0.dev58
27
+ Requires-Dist: PyBadger==0.0.0.dev52
28
28
  Requires-Dist: PyColorIT==0.0.0.dev8
29
29
  Requires-Dist: ProtocolMan==0.0.0.dev2
30
30
  Requires-Dist: HTMP==0.0.0.dev5
31
- Requires-Dist: JSONSchemata==0.0.0.dev52
31
+ Requires-Dist: JSONSchemata==0.0.0.dev54
@@ -19,9 +19,9 @@ rich>=13.8
19
19
  pydantic>=2.9
20
20
  referencing>=0.35.1
21
21
  PkgData==0.0.0.dev5
22
- PySerials==0.0.0.dev56
23
- PyBadger==0.0.0.dev50
22
+ PySerials==0.0.0.dev58
23
+ PyBadger==0.0.0.dev52
24
24
  PyColorIT==0.0.0.dev8
25
25
  ProtocolMan==0.0.0.dev2
26
26
  HTMP==0.0.0.dev5
27
- JSONSchemata==0.0.0.dev52
27
+ JSONSchemata==0.0.0.dev54
@@ -5,6 +5,7 @@ from types import FunctionType as _FunctionType
5
5
  from contextlib import contextmanager as _contextmanager
6
6
  import re as _re
7
7
  import copy as _copy
8
+ import html as _html
8
9
 
9
10
  import htmp as _htmp
10
11
  import pyserials as _ps
@@ -68,6 +69,17 @@ class Element(_Renderable):
68
69
  container_func = getattr(_htmp.element, str(container))
69
70
  return container_func(_htmp.elementor.markdown(content), attrs_container).source(indent=-1)
70
71
 
72
+ @staticmethod
73
+ def _escape(content: Stringable):
74
+ """Escape all ASCII punctuation characters in a Markdown string.
75
+
76
+ References
77
+ ----------
78
+ - [GFM Documentation](https://github.github.com/gfm/#backslash-escapes)
79
+ """
80
+ ascii_punctuation = r'!"#$%&\'()*+,\-./:;<=>?@[\\]^_`{|}~'
81
+ return _re.sub(f'([{_re.escape(ascii_punctuation)}])', r'\\\1', str(content))
82
+
71
83
 
72
84
  class Admonition(Element):
73
85
 
@@ -1180,7 +1192,8 @@ class InlineImage(Element):
1180
1192
 
1181
1193
  def _source_md(self, target: MDTargetConfig, filters: str | list[str] | None = None) -> str:
1182
1194
  if target.prefer_md:
1183
- image = f"![{self.alt or ""}]({self.src})"
1195
+ alt = self._escape(self.alt or "")
1196
+ image = f"![{alt}]({self.src})"
1184
1197
  if (self.height or self.width or self.align or self.classes or self.name) and target.attrs_inline:
1185
1198
  image = attribute(
1186
1199
  content=image,
@@ -1192,7 +1205,7 @@ class InlineImage(Element):
1192
1205
  target_default=self.target_default,
1193
1206
  ).source(target=target, filters=filters)
1194
1207
  if self.link:
1195
- image=f"[{image}]({self.link})"
1208
+ image=f"[{image}]({self.link}{f' "{self._escape(self.title)}"' if self.title else ""})"
1196
1209
  else:
1197
1210
  img_attrs = {
1198
1211
  "src": self.src,
@@ -2127,8 +2140,8 @@ def badge(
2127
2140
  image = inline_image(
2128
2141
  src=bdg.url(light=True),
2129
2142
  src_dark=bdg.url(light=False) if params_dark else None,
2130
- title=title or bdg.attrs_img.get("title"),
2131
- alt=alt or bdg.attrs_img.get("alt"),
2143
+ title=title if title is not None else bdg.attrs_img.get("title"),
2144
+ alt=alt if alt is not None else bdg.attrs_img.get("alt"),
2132
2145
  height=height,
2133
2146
  width=width,
2134
2147
  align=align,
@@ -2850,7 +2863,7 @@ def html(
2850
2863
  target_configs: TargetConfigs = None,
2851
2864
  target_default: str = "sphinx",
2852
2865
  ):
2853
- content = _mdit.container(
2866
+ content = _mdit.to_md_container(
2854
2867
  content,
2855
2868
  content_separator=content_separator,
2856
2869
  target_configs=target_configs,
@@ -62,7 +62,6 @@ class DocumentGenerator:
62
62
  generator = self._get_elem_generator(_mdit.template, template_name, "template")
63
63
  return generator(**config)
64
64
 
65
-
66
65
  def generate_container(self, container: str | list[str | dict | list[str | dict]]):
67
66
  if isinstance(container, str):
68
67
  return container
File without changes
File without changes
File without changes
File without changes