Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-mdit-py-plugins for
openSUSE:Factory checked in at 2024-07-01 11:21:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-mdit-py-plugins (Old)
and /work/SRC/openSUSE:Factory/.python-mdit-py-plugins.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-mdit-py-plugins"
Mon Jul 1 11:21:46 2024 rev:5 rq:1184138 version:0.4.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-mdit-py-plugins/python-mdit-py-plugins.changes
2023-11-23 21:38:35.758955897 +0100
+++
/work/SRC/openSUSE:Factory/.python-mdit-py-plugins.new.18349/python-mdit-py-plugins.changes
2024-07-01 11:22:37.399979217 +0200
@@ -1,0 +2,6 @@
+Sun Jun 30 20:34:50 UTC 2024 - Dirk Müller <[email protected]>
+
+- update to 0.4.1:
+ * Add option for footnotes references to always be matched
+
+-------------------------------------------------------------------
Old:
----
python-mdit-py-plugins-0.4.0.tar.gz
New:
----
python-mdit-py-plugins-0.4.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-mdit-py-plugins.spec ++++++
--- /var/tmp/diff_new_pack.gpggFw/_old 2024-07-01 11:22:37.951999196 +0200
+++ /var/tmp/diff_new_pack.gpggFw/_new 2024-07-01 11:22:37.951999196 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-mdit-py-plugins
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-mdit-py-plugins
-Version: 0.4.0
+Version: 0.4.1
Release: 0
Summary: Collection of plugins for markdown-it-py
License: MIT
++++++ python-mdit-py-plugins-0.4.0.tar.gz ->
python-mdit-py-plugins-0.4.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/.coveragerc
new/mdit-py-plugins-0.4.1/.coveragerc
--- old/mdit-py-plugins-0.4.0/.coveragerc 1970-01-01 01:00:00.000000000
+0100
+++ new/mdit-py-plugins-0.4.1/.coveragerc 2024-05-12 22:13:45.000000000
+0200
@@ -0,0 +1,4 @@
+[report]
+exclude_lines =
+ pragma: no cover
+ if TYPE_CHECKING:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/.github/workflows/tests.yml
new/mdit-py-plugins-0.4.1/.github/workflows/tests.yml
--- old/mdit-py-plugins-0.4.0/.github/workflows/tests.yml 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/.github/workflows/tests.yml 2024-05-12
22:13:45.000000000 +0200
@@ -17,12 +17,12 @@
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set up Python 3.8
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.8
- - uses: pre-commit/[email protected]
+ - uses: pre-commit/[email protected]
tests:
@@ -30,12 +30,12 @@
strategy:
fail-fast: false
matrix:
- python-version: ['pypy-3.8', '3.8', '3.9', '3.10', '3.11']
+ python-version: ['pypy-3.8', '3.8', '3.9', '3.10', '3.11', '3.12']
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
@@ -48,6 +48,7 @@
- name: Upload to Codecov
uses: codecov/codecov-action@v3
with:
+ token: ${{ secrets.CODECOV_TOKEN }}
name: mdit-py-plugins-pytests
flags: pytests
file: ./coverage.xml
@@ -69,9 +70,9 @@
runs-on: ubuntu-latest
steps:
- name: Checkout source
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Set up Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: "3.8"
- name: install flit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/.pre-commit-config.yaml
new/mdit-py-plugins-0.4.1/.pre-commit-config.yaml
--- old/mdit-py-plugins-0.4.0/.pre-commit-config.yaml 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/.pre-commit-config.yaml 2024-05-12
22:13:45.000000000 +0200
@@ -12,30 +12,22 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.4.0
+ rev: v4.6.0
hooks:
- id: check-json
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- - repo: https://github.com/PyCQA/isort
- rev: 5.12.0
+ - repo: https://github.com/astral-sh/ruff-pre-commit
+ rev: v0.4.4
hooks:
- - id: isort
-
- - repo: https://github.com/psf/black
- rev: 23.3.0
- hooks:
- - id: black
-
- - repo: https://github.com/charliermarsh/ruff-pre-commit
- rev: v0.0.270
- hooks:
- - id: ruff
+ - id: ruff
+ args: [--fix]
+ - id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v1.3.0
+ rev: v1.10.0
hooks:
- id: mypy
additional_dependencies: [markdown-it-py~=3.0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/.readthedocs.yml
new/mdit-py-plugins-0.4.1/.readthedocs.yml
--- old/mdit-py-plugins-0.4.0/.readthedocs.yml 2023-06-05 21:25:03.000000000
+0200
+++ new/mdit-py-plugins-0.4.1/.readthedocs.yml 2024-05-12 22:13:45.000000000
+0200
@@ -1,7 +1,11 @@
version: 2
+build:
+ os: ubuntu-22.04
+ tools:
+ python: "3.8"
+
python:
- version: "3.8"
install:
- method: pip
path: .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/CHANGELOG.md
new/mdit-py-plugins-0.4.1/CHANGELOG.md
--- old/mdit-py-plugins-0.4.0/CHANGELOG.md 2023-06-05 21:25:03.000000000
+0200
+++ new/mdit-py-plugins-0.4.1/CHANGELOG.md 2024-05-12 22:13:45.000000000
+0200
@@ -1,5 +1,11 @@
# Change Log
+## 0.4.1 - 2024-05-12
+
+* ð Add option for footnotes references to always be matched
+
+ Usually footnote references are only matched when a footnote definition of
the same label has already been found. If `always_match_refs=True`, any
`[^...]` syntax will be treated as a footnote.
+
## 0.4.0 - 2023-06-05
* â¬ï¸ UPGRADE: Drop python 3.7 and support 3.11
([#77](https://github.com/executablebooks/mdit-py-plugins/pull/77))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/mdit_py_plugins/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/__init__.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/__init__.py 2024-05-12
22:13:45.000000000 +0200
@@ -1 +1 @@
-__version__ = "0.4.0"
+__version__ = "0.4.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/admon/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/admon/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/admon/__init__.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/admon/__init__.py 2024-05-12
22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import admon_plugin # noqa: F401
+from .index import admon_plugin
+
+__all__ = ("admon_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/mdit_py_plugins/admon/index.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/admon/index.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/admon/index.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/admon/index.py 2024-05-12
22:13:45.000000000 +0200
@@ -1,6 +1,9 @@
# Process admonitions and pass to cb.
+
from __future__ import annotations
+from contextlib import suppress
+import re
from typing import TYPE_CHECKING, Callable, Sequence
from markdown_it import MarkdownIt
@@ -14,20 +17,34 @@
from markdown_it.utils import EnvType, OptionsDict
-def _get_tag(params: str) -> tuple[str, str]:
+def _get_multiple_tags(params: str) -> tuple[list[str], str]:
+ """Check for multiple tags when the title is double quoted."""
+ re_tags = re.compile(r'^\s*(?P<tokens>[^"]+)\s+"(?P<title>.*)"\S*$')
+ match = re_tags.match(params)
+ if match:
+ tags = match["tokens"].strip().split(" ")
+ return [tag.lower() for tag in tags], match["title"]
+ raise ValueError("No match found for parameters")
+
+
+def _get_tag(_params: str) -> tuple[list[str], str]:
"""Separate the tag name from the admonition title."""
- if not params.strip():
- return "", ""
+ params = _params.strip()
+ if not params:
+ return [""], ""
+
+ with suppress(ValueError):
+ return _get_multiple_tags(params)
- tag, *_title = params.strip().split(" ")
+ tag, *_title = params.split(" ")
joined = " ".join(_title)
title = ""
if not joined:
title = tag.title()
- elif joined != '""':
+ elif joined != '""': # Specifically check for no title
title = joined
- return tag.lower(), title
+ return [tag.lower()], title
def _validate(params: str) -> bool:
@@ -125,12 +142,13 @@
# this will prevent lazy continuations from ever going past our end marker
state.lineMax = next_line
- tag, title = _get_tag(params)
+ tags, title = _get_tag(params)
+ tag = tags[0]
token = state.push("admonition_open", "div", 1)
token.markup = markup
token.block = True
- token.attrs = {"class": " ".join(["admonition", tag,
*_extra_classes(markup)])}
+ token.attrs = {"class": " ".join(["admonition", *tags,
*_extra_classes(markup)])}
token.meta = {"tag": tag}
token.content = title
token.info = params
@@ -194,7 +212,7 @@
_options: OptionsDict,
env: EnvType,
) -> str:
- return self.renderToken(tokens, idx, _options, env) # type: ignore
+ return self.renderToken(tokens, idx, _options, env) # type:
ignore[attr-defined,no-any-return]
render = render or renderDefault
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/amsmath/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/amsmath/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/amsmath/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/amsmath/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1,8 +1,9 @@
"""An extension to capture amsmath latex environments."""
+
from __future__ import annotations
import re
-from typing import TYPE_CHECKING, Callable, Optional, Sequence
+from typing import TYPE_CHECKING, Callable, Sequence
from markdown_it import MarkdownIt
from markdown_it.common.utils import escapeHtml
@@ -57,7 +58,7 @@
def amsmath_plugin(
- md: MarkdownIt, *, renderer: Optional[Callable[[str], str]] = None
+ md: MarkdownIt, *, renderer: Callable[[str], str] | None = None
) -> None:
"""Parses TeX math equations, without any surrounding delimiters,
only for top-level `amsmath <https://ctan.org/pkg/amsmath>`__ environments:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/anchors/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/anchors/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/anchors/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/anchors/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import anchors_plugin # noqa F401
+from .index import anchors_plugin
+
+__all__ = ("anchors_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/attrs/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/attrs/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/attrs/__init__.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/attrs/__init__.py 2024-05-12
22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import attrs_block_plugin, attrs_plugin # noqa: F401
+from .index import attrs_block_plugin, attrs_plugin
+
+__all__ = ("attrs_block_plugin", "attrs_plugin")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/mdit_py_plugins/attrs/index.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/attrs/index.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/attrs/index.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/attrs/index.py 2024-05-12
22:13:45.000000000 +0200
@@ -140,7 +140,7 @@
state.pos = labelStart
state.posMax = labelEnd
token = state.push("span_open", "span", 1)
- token.attrs = attrs # type: ignore
+ token.attrs = attrs # type: ignore[assignment]
state.md.inline.tokenize(state)
token = state.push("span_close", "span", -1)
@@ -190,7 +190,7 @@
return True
token = state.push("attrs_block", "", 0)
- token.attrs = attrs # type: ignore
+ token.attrs = attrs # type: ignore[assignment]
token.map = [startLine, startLine + 1]
state.line = startLine + 1
@@ -211,9 +211,9 @@
# classes are appended
if "class" in state.tokens[i].attrs and "class" in
next_token.attrs:
- state.tokens[i].attrs[
- "class"
- ] = f"{state.tokens[i].attrs['class']}
{next_token.attrs['class']}"
+ state.tokens[i].attrs["class"] = (
+ f"{state.tokens[i].attrs['class']}
{next_token.attrs['class']}"
+ )
if next_token.type == "attrs_block":
# subsequent attribute blocks take precedence, when merging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/mdit_py_plugins/attrs/parse.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/attrs/parse.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/attrs/parse.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/attrs/parse.py 2024-05-12
22:13:45.000000000 +0200
@@ -19,6 +19,7 @@
bareval <- (ASCII_ALPHANUM | ':' | '_' | '-')+
quotedval <- '"' ([^"] | '\"') '"'
"""
+
from __future__ import annotations
from enum import Enum
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/container/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/container/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/container/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/container/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import container_plugin # noqa F401
+from .index import container_plugin
+
+__all__ = ("container_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/container/index.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/container/index.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/container/index.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/container/index.py
2024-05-12 22:13:45.000000000 +0200
@@ -1,4 +1,5 @@
"""Process block-level custom containers."""
+
from __future__ import annotations
from math import floor
@@ -56,7 +57,7 @@
if tokens[idx].nesting == 1:
tokens[idx].attrJoin("class", name)
- return self.renderToken(tokens, idx, _options, env) # type: ignore
+ return self.renderToken(tokens, idx, _options, env) # type:
ignore[attr-defined,no-any-return]
min_markers = 3
marker_str = marker
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/deflist/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/deflist/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/deflist/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/deflist/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import deflist_plugin # noqa F401
+from .index import deflist_plugin
+
+__all__ = ("deflist_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/deflist/index.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/deflist/index.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/deflist/index.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/deflist/index.py 2024-05-12
22:13:45.000000000 +0200
@@ -1,4 +1,5 @@
"""Process definition lists."""
+
from markdown_it import MarkdownIt
from markdown_it.rules_block import StateBlock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/dollarmath/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/dollarmath/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/dollarmath/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/dollarmath/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import dollarmath_plugin # noqa F401
+from .index import dollarmath_plugin
+
+__all__ = ("dollarmath_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/dollarmath/index.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/dollarmath/index.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/dollarmath/index.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/dollarmath/index.py
2024-05-12 22:13:45.000000000 +0200
@@ -1,7 +1,7 @@
from __future__ import annotations
import re
-from typing import TYPE_CHECKING, Any, Callable, Dict, Optional, Sequence
+from typing import TYPE_CHECKING, Any, Callable, Sequence
from markdown_it import MarkdownIt
from markdown_it.common.utils import escapeHtml, isWhiteSpace
@@ -24,9 +24,9 @@
allow_digits: bool = True,
allow_blank_lines: bool = True,
double_inline: bool = False,
- label_normalizer: Optional[Callable[[str], str]] = None,
- renderer: Optional[Callable[[str, Dict[str, Any]], str]] = None,
- label_renderer: Optional[Callable[[str], str]] = None,
+ label_normalizer: Callable[[str], str] | None = None,
+ renderer: Callable[[str, dict[str, Any]], str] | None = None,
+ label_renderer: Callable[[str], str] | None = None,
) -> None:
"""Plugin for parsing dollar enclosed math,
e.g. inline: ``$a=1$``, block: ``$$b=2$$``
@@ -53,7 +53,7 @@
"""
if label_normalizer is None:
- label_normalizer = lambda label: re.sub(r"\s+", "-", label)
+ label_normalizer = lambda label: re.sub(r"\s+", "-", label) # noqa:
E731
md.inline.ruler.before(
"escape",
@@ -76,8 +76,8 @@
_label_renderer: Callable[[str], str]
if label_renderer is None:
- _label_renderer = (
- lambda label: f'<a href="#{label}" class="mathlabel"
title="Permalink to this equation">¶</a>' # noqa: E501
+ _label_renderer = ( # noqa: E731
+ lambda label: f'<a href="#{label}" class="mathlabel"
title="Permalink to this equation">¶</a>'
)
else:
_label_renderer = label_renderer
@@ -286,7 +286,7 @@
def math_block_dollar(
allow_labels: bool = True,
- label_normalizer: Optional[Callable[[str], str]] = None,
+ label_normalizer: Callable[[str], str] | None = None,
allow_blank_lines: bool = False,
) -> Callable[[StateBlock, int, int, bool], bool]:
"""Generate block dollar rule."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/field_list/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/field_list/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/field_list/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/field_list/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1,4 +1,5 @@
"""Field list plugin"""
+
from contextlib import contextmanager
from typing import Iterator, Optional, Tuple
@@ -176,7 +177,7 @@
has_first_line = contentStart < maximum
if block_indent is None: # no body content
- if not has_first_line: # noqa SIM108
+ if not has_first_line: # noqa: SIM108
# no body or first line, so just use default
block_indent = 2
else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/footnote/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/footnote/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/footnote/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/footnote/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import footnote_plugin # noqa: F401
+from .index import footnote_plugin
+
+__all__ = ("footnote_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/footnote/index.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/footnote/index.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/footnote/index.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/footnote/index.py 2024-05-12
22:13:45.000000000 +0200
@@ -1,7 +1,9 @@
"""Process footnotes"""
+
from __future__ import annotations
-from typing import TYPE_CHECKING, List, Optional, Sequence
+from functools import partial
+from typing import TYPE_CHECKING, Sequence, TypedDict
from markdown_it import MarkdownIt
from markdown_it.helpers import parseLinkLabel
@@ -17,7 +19,13 @@
from markdown_it.utils import EnvType, OptionsDict
-def footnote_plugin(md: MarkdownIt) -> None:
+def footnote_plugin(
+ md: MarkdownIt,
+ *,
+ inline: bool = True,
+ move_to_end: bool = True,
+ always_match_refs: bool = False,
+) -> None:
"""Plugin ported from
`markdown-it-footnote
<https://github.com/markdown-it/markdown-it-footnote>`__.
@@ -37,13 +45,22 @@
Subsequent paragraphs are indented to show that they
belong to the previous footnote.
+ :param inline: If True, also parse inline footnotes (^[...]).
+ :param move_to_end: If True, move footnote definitions to the end of the
token stream.
+ :param always_match_refs: If True, match references, even if the footnote
is not defined.
+
"""
md.block.ruler.before(
"reference", "footnote_def", footnote_def, {"alt": ["paragraph",
"reference"]}
)
- md.inline.ruler.after("image", "footnote_inline", footnote_inline)
- md.inline.ruler.after("footnote_inline", "footnote_ref", footnote_ref)
- md.core.ruler.after("inline", "footnote_tail", footnote_tail)
+ _footnote_ref = partial(footnote_ref, always_match=always_match_refs)
+ if inline:
+ md.inline.ruler.after("image", "footnote_inline", footnote_inline)
+ md.inline.ruler.after("footnote_inline", "footnote_ref", _footnote_ref)
+ else:
+ md.inline.ruler.after("image", "footnote_ref", _footnote_ref)
+ if move_to_end:
+ md.core.ruler.after("inline", "footnote_tail", footnote_tail)
md.add_render_rule("footnote_ref", render_footnote_ref)
md.add_render_rule("footnote_block_open", render_footnote_block_open)
@@ -57,6 +74,29 @@
md.add_render_rule("footnote_anchor_name", render_footnote_anchor_name)
+class _RefData(TypedDict, total=False):
+ # standard
+ label: str
+ count: int
+ # inline
+ content: str
+ tokens: list[Token]
+
+
+class _FootnoteData(TypedDict):
+ refs: dict[str, int]
+ """A mapping of all footnote labels (prefixed with ``:``) to their ID (-1
if not yet set)."""
+ list: dict[int, _RefData]
+ """A mapping of all footnote IDs to their data."""
+
+
+def _data_from_env(env: EnvType) -> _FootnoteData:
+ footnotes = env.setdefault("footnotes", {})
+ footnotes.setdefault("refs", {})
+ footnotes.setdefault("list", {})
+ return footnotes # type: ignore[no-any-return]
+
+
# ## RULES ##
@@ -96,7 +136,8 @@
pos += 1
label = state.src[start + 2 : pos - 2]
- state.env.setdefault("footnotes", {}).setdefault("refs", {})[":" + label]
= -1
+ footnote_data = _data_from_env(state.env)
+ footnote_data["refs"][":" + label] = -1
open_token = Token("footnote_reference_open", "", 1)
open_token.meta = {"label": label}
@@ -181,10 +222,10 @@
# so all that's left to do is to call tokenizer.
#
if not silent:
- refs = state.env.setdefault("footnotes", {}).setdefault("list", {})
+ refs = _data_from_env(state.env)["list"]
footnoteId = len(refs)
- tokens: List[Token] = []
+ tokens: list[Token] = []
state.md.inline.parse(
state.src[labelStart:labelEnd], state.md, state.env, tokens
)
@@ -199,7 +240,9 @@
return True
-def footnote_ref(state: StateInline, silent: bool) -> bool:
+def footnote_ref(
+ state: StateInline, silent: bool, *, always_match: bool = False
+) -> bool:
"""Process footnote references ([^...])"""
maximum = state.posMax
@@ -209,7 +252,9 @@
if start + 3 > maximum:
return False
- if "footnotes" not in state.env or "refs" not in state.env["footnotes"]:
+ footnote_data = _data_from_env(state.env)
+
+ if not (always_match or footnote_data["refs"]):
return False
if state.src[start] != "[":
return False
@@ -218,9 +263,7 @@
pos = start + 2
while pos < maximum:
- if state.src[pos] == " ":
- return False
- if state.src[pos] == "\n":
+ if state.src[pos] in (" ", "\n"):
return False
if state.src[pos] == "]":
break
@@ -233,22 +276,19 @@
pos += 1
label = state.src[start + 2 : pos - 1]
- if (":" + label) not in state.env["footnotes"]["refs"]:
+ if ((":" + label) not in footnote_data["refs"]) and not always_match:
return False
if not silent:
- if "list" not in state.env["footnotes"]:
- state.env["footnotes"]["list"] = {}
-
- if state.env["footnotes"]["refs"][":" + label] < 0:
- footnoteId = len(state.env["footnotes"]["list"])
- state.env["footnotes"]["list"][footnoteId] = {"label": label,
"count": 0}
- state.env["footnotes"]["refs"][":" + label] = footnoteId
+ if footnote_data["refs"].get(":" + label, -1) < 0:
+ footnoteId = len(footnote_data["list"])
+ footnote_data["list"][footnoteId] = {"label": label, "count": 0}
+ footnote_data["refs"][":" + label] = footnoteId
else:
- footnoteId = state.env["footnotes"]["refs"][":" + label]
+ footnoteId = footnote_data["refs"][":" + label]
- footnoteSubId = state.env["footnotes"]["list"][footnoteId]["count"]
- state.env["footnotes"]["list"][footnoteId]["count"] += 1
+ footnoteSubId = footnote_data["list"][footnoteId]["count"]
+ footnote_data["list"][footnoteId]["count"] += 1
token = state.push("footnote_ref", "", 0)
token.meta = {"id": footnoteId, "subId": footnoteSubId, "label": label}
@@ -270,7 +310,7 @@
if "footnotes" not in state.env:
return
- current: List[Token] = []
+ current: list[Token] = []
tok_filter = []
for tok in state.tokens:
if tok.type == "footnote_reference_open":
@@ -290,18 +330,18 @@
if insideRef:
current.append(tok)
- tok_filter.append((not insideRef))
+ tok_filter.append(not insideRef)
state.tokens = [t for t, f in zip(state.tokens, tok_filter) if f]
- if "list" not in state.env.get("footnotes", {}):
+ footnote_data = _data_from_env(state.env)
+ if not footnote_data["list"]:
return
- foot_list = state.env["footnotes"]["list"]
token = Token("footnote_block_open", "", 1)
state.tokens.append(token)
- for i, foot_note in foot_list.items():
+ for i, foot_note in footnote_data["list"].items():
token = Token("footnote_open", "", 1)
token.meta = {"id": i, "label": foot_note.get("label", None)}
# TODO propagate line positions of original foot note
@@ -325,11 +365,11 @@
tokens.append(token)
elif "label" in foot_note:
- tokens = refTokens[":" + foot_note["label"]]
+ tokens = refTokens.get(":" + foot_note["label"], [])
state.tokens.extend(tokens)
if state.tokens[len(state.tokens) - 1].type == "paragraph_close":
- lastParagraph: Optional[Token] = state.tokens.pop()
+ lastParagraph: Token | None = state.tokens.pop()
else:
lastParagraph = None
@@ -482,4 +522,4 @@
ident += ":" + str(tokens[idx].meta["subId"])
# â© with escape code to prevent display as Apple Emoji on iOS
- return ' <a href="#fnref' + ident + '"
class="footnote-backref">\u21a9\uFE0E</a>'
+ return ' <a href="#fnref' + ident + '"
class="footnote-backref">\u21a9\ufe0e</a>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/front_matter/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/front_matter/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/front_matter/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/front_matter/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import front_matter_plugin # noqa: F401
+from .index import front_matter_plugin
+
+__all__ = ("front_matter_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/front_matter/index.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/front_matter/index.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/front_matter/index.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/front_matter/index.py
2024-05-12 22:13:45.000000000 +0200
@@ -1,4 +1,5 @@
"""Process front matter."""
+
from markdown_it import MarkdownIt
from markdown_it.rules_block import StateBlock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/myst_blocks/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/myst_blocks/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/myst_blocks/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/myst_blocks/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import myst_block_plugin # noqa: F401
+from .index import myst_block_plugin
+
+__all__ = ("myst_block_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/myst_role/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/myst_role/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/myst_role/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/myst_role/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import myst_role_plugin # noqa: F401
+from .index import myst_role_plugin
+
+__all__ = ("myst_role_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/texmath/__init__.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/texmath/__init__.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/texmath/__init__.py
2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/texmath/__init__.py
2024-05-12 22:13:45.000000000 +0200
@@ -1 +1,3 @@
-from .index import texmath_plugin # noqa F401
+from .index import texmath_plugin
+
+__all__ = ("texmath_plugin",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mdit-py-plugins-0.4.0/mdit_py_plugins/texmath/index.py
new/mdit-py-plugins-0.4.1/mdit_py_plugins/texmath/index.py
--- old/mdit-py-plugins-0.4.0/mdit_py_plugins/texmath/index.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/mdit_py_plugins/texmath/index.py 2024-05-12
22:13:45.000000000 +0200
@@ -228,7 +228,7 @@
"rex": re.compile(
r"^`{3}math\s+?([^`]+?)\s+?`{3}\s*?\(([^)$\r\n]+?)\)", re.M
),
- "tmpl": '<section
class="eqno">\n<eqn>{0}</eqn><span>({1})</span>\n</section>\n', # noqa: E501
+ "tmpl": '<section
class="eqno">\n<eqn>{0}</eqn><span>({1})</span>\n</section>\n',
"tag": "```math",
},
{
@@ -328,7 +328,7 @@
{
"name": "math_block_eqno",
"rex": re.compile(r"^\${2}([^$]*?)\${2}\s*?\(([^)$\r\n]+?)\)",
re.M),
- "tmpl": '<section
class="eqno">\n<eqn>{0}</eqn><span>({1})</span>\n</section>\n', # noqa: E501
+ "tmpl": '<section
class="eqno">\n<eqn>{0}</eqn><span>({1})</span>\n</section>\n',
"tag": "$$",
},
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/pyproject.toml
new/mdit-py-plugins-0.4.1/pyproject.toml
--- old/mdit-py-plugins-0.4.0/pyproject.toml 2023-06-05 21:25:03.000000000
+0200
+++ new/mdit-py-plugins-0.4.1/pyproject.toml 2024-05-12 22:13:45.000000000
+0200
@@ -18,6 +18,7 @@
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Software Development :: Libraries :: Python Modules",
@@ -53,15 +54,30 @@
"tests/",
]
-[tool.isort]
-profile = "black"
-force_sort_within_sections = true
-known_first_party = ["mdit_py_plugins", "tests"]
-
-[tool.ruff]
-line-length = 110
-extend-select = ["B0", "C4", "ICN", "ISC", "N", "RUF", "SIM"]
-extend-ignore = ["E731", "N802", "N803", "N806"]
+[tool.ruff.lint]
+extend-select = [
+ "B", # flake8-bugbear
+ "C4", # flake8-comprehensions
+ "I", # isort
+ "ICN", # flake8-import-conventions
+ "ISC", # flake8-implicit-str-concat
+ "N", # pep8-naming
+ "PERF", # perflint (performance anti-patterns)
+ "PGH", # pygrep-hooks
+ "PIE", # flake8-pie
+ "PTH", # flake8-use-pathlib
+ "RUF", # Ruff-specific rules
+ "SIM", # flake8-simplify
+ "UP", # pyupgrade
+ "T20", # flake8-print
+]
+extend-ignore = ["ISC001", "N802", "N803", "N806"]
+
+[tool.ruff.lint.per-file-ignores]
+"tests/**.py" = ["T201"]
+
+[tool.ruff.lint.isort]
+force-sort-within-sections = true
[tool.mypy]
show_error_codes = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/tests/fixtures/admon.md
new/mdit-py-plugins-0.4.1/tests/fixtures/admon.md
--- old/mdit-py-plugins-0.4.0/tests/fixtures/admon.md 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/tests/fixtures/admon.md 2024-05-12
22:13:45.000000000 +0200
@@ -53,6 +53,32 @@
.
+Removes extra quotes from the title
+.
+!!! danger "Don't try this at home"
+ ...
+
+.
+<div class="admonition danger">
+<p class="admonition-title">Don't try this at home</p>
+<p>...</p>
+</div>
+.
+
+
+Parse additional classes to support Python markdown
(https://github.com/executablebooks/mdit-py-plugins/issues/93#issuecomment-1601822723)
+.
+!!! a b c d inline-classes "Note: note about "foo""
+ ...
+
+.
+<div class="admonition a b c d inline-classes">
+<p class="admonition-title">Note: note about "foo"</p>
+<p>...</p>
+</div>
+.
+
+
Closes block after 2 empty lines
.
!!! note
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/tests/fixtures/footnote.md
new/mdit-py-plugins-0.4.1/tests/fixtures/footnote.md
--- old/mdit-py-plugins-0.4.0/tests/fixtures/footnote.md 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/tests/fixtures/footnote.md 2024-05-12
22:13:45.000000000 +0200
@@ -372,3 +372,23 @@
</ol>
</section>
.
+
+refs with no definition standard
+.
+[^1] [^1]
+.
+<p>[^1] [^1]</p>
+.
+
+refs with no definition, ALWAYS_MATCH-REFS
+.
+[^1] [^1]
+.
+<p><sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> <sup
class="footnote-ref"><a href="#fn1" id="fnref1:1">[1:1]</a></sup></p>
+<hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1" class="footnote-item"> <a href="#fnref1"
class="footnote-backref">â©ï¸</a> <a href="#fnref1:1"
class="footnote-backref">â©ï¸</a></li>
+</ol>
+</section>
+.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/tests/test_footnote.py
new/mdit-py-plugins-0.4.1/tests/test_footnote.py
--- old/mdit-py-plugins-0.4.0/tests/test_footnote.py 2023-06-05
21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/tests/test_footnote.py 2024-05-12
22:13:45.000000000 +0200
@@ -96,7 +96,7 @@
"hidden": False,
},
]
- assert state.env == {"footnotes": {"refs": {":a": -1}}}
+ assert state.env == {"footnotes": {"refs": {":a": -1}, "list": {}}}
def test_footnote_ref():
@@ -188,89 +188,79 @@
tokens = [
Token(
- **{
- "type": "footnote_reference_open",
- "tag": "",
- "nesting": 1,
- "attrs": None,
- "map": None,
- "level": 0,
- "children": None,
- "content": "",
- "markup": "",
- "info": "",
- "meta": {"label": "a"},
- "block": False,
- "hidden": False,
- }
- ),
- Token(
- **{
- "type": "paragraph_open",
- "tag": "p",
- "nesting": 1,
- "attrs": None,
- "map": [0, 1],
- "level": 1,
- "children": None,
- "content": "",
- "markup": "",
- "info": "",
- "meta": {},
- "block": True,
- "hidden": False,
- }
- ),
- Token(
- **{
- "type": "inline",
- "tag": "",
- "nesting": 0,
- "attrs": None,
- "map": [0, 1],
- "level": 2,
- "children": [],
- "content": "xyz",
- "markup": "",
- "info": "",
- "meta": {},
- "block": True,
- "hidden": False,
- }
- ),
- Token(
- **{
- "type": "paragraph_close",
- "tag": "p",
- "nesting": -1,
- "attrs": None,
- "map": None,
- "level": 1,
- "children": None,
- "content": "",
- "markup": "",
- "info": "",
- "meta": {},
- "block": True,
- "hidden": False,
- }
- ),
- Token(
- **{
- "type": "footnote_reference_close",
- "tag": "",
- "nesting": -1,
- "attrs": None,
- "map": None,
- "level": 0,
- "children": None,
- "content": "",
- "markup": "",
- "info": "",
- "meta": {},
- "block": False,
- "hidden": False,
- }
+ type="footnote_reference_open",
+ tag="",
+ nesting=1,
+ attrs=None,
+ map=None,
+ level=0,
+ children=None,
+ content="",
+ markup="",
+ info="",
+ meta={"label": "a"},
+ block=False,
+ hidden=False,
+ ),
+ Token(
+ type="paragraph_open",
+ tag="p",
+ nesting=1,
+ attrs=None,
+ map=[0, 1],
+ level=1,
+ children=None,
+ content="",
+ markup="",
+ info="",
+ meta={},
+ block=True,
+ hidden=False,
+ ),
+ Token(
+ type="inline",
+ tag="",
+ nesting=0,
+ attrs=None,
+ map=[0, 1],
+ level=2,
+ children=[],
+ content="xyz",
+ markup="",
+ info="",
+ meta={},
+ block=True,
+ hidden=False,
+ ),
+ Token(
+ type="paragraph_close",
+ tag="p",
+ nesting=-1,
+ attrs=None,
+ map=None,
+ level=1,
+ children=None,
+ content="",
+ markup="",
+ info="",
+ meta={},
+ block=True,
+ hidden=False,
+ ),
+ Token(
+ type="footnote_reference_close",
+ tag="",
+ nesting=-1,
+ attrs=None,
+ map=None,
+ level=0,
+ children=None,
+ content="",
+ markup="",
+ info="",
+ meta={},
+ block=False,
+ hidden=False,
),
Token("other", "", 0),
]
@@ -443,14 +433,16 @@
</li>
</ol>
</section>
- """ # noqa: E501
+ """
)
)
@pytest.mark.parametrize("line,title,input,expected",
read_fixture_file(FIXTURE_PATH))
def test_all(line, title, input, expected):
- md = MarkdownIt("commonmark").use(footnote_plugin)
+ md = MarkdownIt().use(
+ footnote_plugin, always_match_refs="ALWAYS_MATCH-REFS" in title
+ )
if "DISABLE-CODEBLOCKS" in title:
md.disable("code")
md.options["xhtmlOut"] = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mdit-py-plugins-0.4.0/tox.ini
new/mdit-py-plugins-0.4.1/tox.ini
--- old/mdit-py-plugins-0.4.0/tox.ini 2023-06-05 21:25:03.000000000 +0200
+++ new/mdit-py-plugins-0.4.1/tox.ini 2024-05-12 22:13:45.000000000 +0200
@@ -9,7 +9,7 @@
[testenv]
usedevelop = true
-[testenv:py{37,38,39,310,311}]
+[testenv:py{38,39,310,311,312}]
extras = testing
commands = pytest {posargs}