Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-Markdown for openSUSE:Factory 
checked in at 2022-05-08 21:52:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Markdown (Old)
 and      /work/SRC/openSUSE:Factory/.python-Markdown.new.1538 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-Markdown"

Sun May  8 21:52:19 2022 rev:38 rq:975264 version:3.3.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Markdown/python-Markdown.changes  
2021-11-27 00:51:38.670735745 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-Markdown.new.1538/python-Markdown.changes    
    2022-05-08 21:52:27.847471555 +0200
@@ -1,0 +2,13 @@
+Thu May  5 21:23:17 UTC 2022 - Matej Cepl <mc...@suse.com>
+
+- Clean up the SPEC file.
+
+-------------------------------------------------------------------
+Thu May  5 20:08:38 UTC 2022 - Beno??t Monin <benoit.mo...@gmx.fr>
+
+- update to version 3.3.7: bug-fix release
+  * Disallow square brackets in reference link ids (#1209)
+  * Retain configured pygments_style after first code block (#1240)
+  * Ensure fenced code attributes are properly escaped (#1247)
+
+-------------------------------------------------------------------

Old:
----
  Markdown-3.3.6.tar.gz

New:
----
  Markdown-3.3.7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-Markdown.spec ++++++
--- /var/tmp/diff_new_pack.KPcsGZ/_old  2022-05-08 21:52:28.367472210 +0200
+++ /var/tmp/diff_new_pack.KPcsGZ/_new  2022-05-08 21:52:28.371472214 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-Markdown
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define oldpython python
 Name:           python-Markdown
-Version:        3.3.6
+Version:        3.3.7
 Release:        0
 Summary:        Python implementation of Markdown
 License:        BSD-3-Clause
@@ -30,7 +30,9 @@
 Patch0:         markdown-3.0-python37.patch
 BuildRequires:  %{python_module PyYAML}
 BuildRequires:  %{python_module importlib-metadata >= 4.4}
+BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module setuptools}
+BuildRequires:  %{python_module wheel}
 BuildRequires:  %{python_module xml}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
@@ -49,20 +51,19 @@
 supported by the [Available Extensions][].
 
 %prep
-%setup -q -n Markdown-%{version}
-%autopatch -p1
+%autosetup -p1 -n Markdown-%{version}
 
 %build
-%python_build
+%pyproject_wheel
 
 %install
-%python_install
+%pyproject_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %python_clone -a %{buildroot}%{_bindir}/markdown_py
 
 %check
-%python_exec -m unittest discover
+%pyunittest discover -v
 
 %post
 %python_install_alternative markdown_py
@@ -74,7 +75,7 @@
 %license LICENSE.md
 %doc README.md docs/*
 %python_alternative %{_bindir}/markdown_py
-%{python_sitelib}/Markdown-%{version}-py%{python_version}.egg-info
+%{python_sitelib}/Markdown-%{version}*-info
 %{python_sitelib}/markdown
 
 %changelog

++++++ Markdown-3.3.6.tar.gz -> Markdown-3.3.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/Markdown.egg-info/PKG-INFO 
new/Markdown-3.3.7/Markdown.egg-info/PKG-INFO
--- old/Markdown-3.3.6/Markdown.egg-info/PKG-INFO       2021-11-17 
16:59:40.000000000 +0100
+++ new/Markdown-3.3.7/Markdown.egg-info/PKG-INFO       2022-05-05 
21:08:36.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: Markdown
-Version: 3.3.6
+Version: 3.3.7
 Summary: Python implementation of Markdown.
 Home-page: https://Python-Markdown.github.io/
 Author: Manfred Stienstra, Yuri takhteyev and Waylan limberg
@@ -104,4 +104,3 @@
 and mailing lists is expected to follow the [Code of Conduct].
 
 
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/Markdown.egg-info/entry_points.txt 
new/Markdown-3.3.7/Markdown.egg-info/entry_points.txt
--- old/Markdown-3.3.6/Markdown.egg-info/entry_points.txt       2021-11-17 
16:59:40.000000000 +0100
+++ new/Markdown-3.3.7/Markdown.egg-info/entry_points.txt       2022-05-05 
21:08:36.000000000 +0200
@@ -20,4 +20,3 @@
 tables = markdown.extensions.tables:TableExtension
 toc = markdown.extensions.toc:TocExtension
 wikilinks = markdown.extensions.wikilinks:WikiLinkExtension
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/PKG-INFO new/Markdown-3.3.7/PKG-INFO
--- old/Markdown-3.3.6/PKG-INFO 2021-11-17 16:59:40.000000000 +0100
+++ new/Markdown-3.3.7/PKG-INFO 2022-05-05 21:08:36.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: Markdown
-Version: 3.3.6
+Version: 3.3.7
 Summary: Python implementation of Markdown.
 Home-page: https://Python-Markdown.github.io/
 Author: Manfred Stienstra, Yuri takhteyev and Waylan limberg
@@ -104,4 +104,3 @@
 and mailing lists is expected to follow the [Code of Conduct].
 
 
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/README.md new/Markdown-3.3.7/README.md
--- old/Markdown-3.3.6/README.md        2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/README.md        2022-05-05 21:08:30.000000000 +0200
@@ -62,4 +62,3 @@
 
 Everyone interacting in the Python-Markdown project's codebases, issue 
trackers,
 and mailing lists is expected to follow the [Code of Conduct].
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/docs/change_log/index.md 
new/Markdown-3.3.7/docs/change_log/index.md
--- old/Markdown-3.3.6/docs/change_log/index.md 2021-11-17 16:59:35.000000000 
+0100
+++ new/Markdown-3.3.7/docs/change_log/index.md 2022-05-05 21:08:30.000000000 
+0200
@@ -3,6 +3,12 @@
 Python-Markdown Change Log
 =========================
 
+May 5, 2022: version 3.3.7 (a bug-fix release).
+
+* Disallow square brackets in reference link ids (#1209).
+* Retain configured `pygments_style` after first code block (#1240).
+* Ensure fenced code attributes are properly escaped (#1247).
+
 Nov 17, 2021: version 3.3.6 (a bug-fix release).
 
 * Fix a dependency issue (#1195, #1196).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/docs/extensions/api.md 
new/Markdown-3.3.7/docs/extensions/api.md
--- old/Markdown-3.3.6/docs/extensions/api.md   2021-11-17 16:59:35.000000000 
+0100
+++ new/Markdown-3.3.7/docs/extensions/api.md   2022-05-05 21:08:30.000000000 
+0200
@@ -5,11 +5,11 @@
 Python-Markdown includes an API for extension writers to plug their own custom 
functionality and syntax into the
 parser. An extension will patch into one or more stages of the parser:
 
-* [*Preprocessors*](#preprocessors) alter the source before it is passed to 
the parser. 
+* [*Preprocessors*](#preprocessors) alter the source before it is passed to 
the parser.
 * [*Block Processors*](#blockprocessors) work with blocks of text separated by 
blank lines.
 * [*Tree Processors*](#treeprocessors) modify the constructed ElementTree
-* [*Inline Processors*](#inlineprocessors) are common tree processors for 
inline elements, such as `*strong*`. 
-* [*Postprocessors*](#postprocessors) munge of the output of the parser just 
before it is returned. 
+* [*Inline Processors*](#inlineprocessors) are common tree processors for 
inline elements, such as `*strong*`.
+* [*Postprocessors*](#postprocessors) munge of the output of the parser just 
before it is returned.
 
 The parser loads text, applies the preprocessors, creates and builds an 
[ElementTree][ElementTree] object from the
 block processors and inline processors, renders the ElementTree object as 
Unicode text, and then then applies the
@@ -45,9 +45,9 @@
         new_lines = []
         for line in lines:
             m = re.search("NO RENDER", line)
-            if not m:    
+            if not m:
                 # any line without NO RENDER is passed through
-                new_lines.append(line)  
+                new_lines.append(line)
         return new_lines
 ```
 
@@ -72,19 +72,19 @@
 ### Block Processors {: #blockprocessors }
 
 A block processor parses blocks of text and adds new elements to the 
`ElementTree`. Blocks of text, separated from
-other text by blank lines, may have a different syntax and produce a 
differently structured tree than other Markdown. 
+other text by blank lines, may have a different syntax and produce a 
differently structured tree than other Markdown.
 Block processors excel at code formatting, equation layouts, and tables.
 
 Block processors inherit from `markdown.blockprocessors.BlockProcessor`, are 
passed `md.parser` on initialization, and
-implement both the `test` and `run` methods:  
+implement both the `test` and `run` methods:
 
 * `test(self, parent, block)` takes two parameters: `parent` is the parent 
`ElementTree` element and `block` is a
   single, multi-line, Unicode string of the current block. `test`, often a 
regular expression match, returns a true
-  value if the block processor's `run` method should be called to process 
starting at that block.  
+  value if the block processor's `run` method should be called to process 
starting at that block.
 * `run(self, parent, blocks)` has the same `parent` parameter as `test`; and 
`blocks` is the list of all remaining
   blocks in the document, starting with the `block` passed to `test`. `run` 
may return `False` (not `None`) to signal
   failure, meaning that it did not process the blocks after all. On success, 
`run` is expected to `pop` one or more
-  blocks from the front of `blocks` and attach new nodes to `parent`.  
+  blocks from the front of `blocks` and attach new nodes to `parent`.
 
 Crafting block processors is more involved and flexible than the other 
processors, involving controlling recursive
 parsing of the block's contents and managing state across invocations. For 
example, a blank line is allowed in
@@ -97,12 +97,12 @@
 
 * `lastChild(parent)` returns the last child of the given element or `None` if 
it has no children.
 * `detab(text)` removes one level of indent (four spaces by default) from the 
front of each line of the given
-  multi-line, text string, until a non-blank line is indented less. 
+  multi-line, text string, until a non-blank line is indented less.
 * `looseDetab(text, level)` removes multiple levels
-  of indent from the front of each line of `text` but does not affect lines 
indented less.  
+  of indent from the front of each line of `text` but does not affect lines 
indented less.
 
 Also, `BlockProcessor` provides the fields `self.tab_length`, the tab length 
(default 4), and `self.parser`, the
-current `BlockParser` instance.  
+current `BlockParser` instance.
 
 #### BlockParser
 
@@ -119,9 +119,9 @@
 * `parseDocument(lines)` parses a list of lines, each a single-line Unicode 
string, returning a complete
   `ElementTree`.
 * `parseChunk(parent, text)` parses a single, multi-line, possibly 
multi-block, Unicode string `text` and attaches the
-  resulting tree to `parent`.  
+  resulting tree to `parent`.
 * `parseBlocks(parent, blocks)` takes a list of `blocks`, each a multi-line 
Unicode string without blank lines, and
-  attaches the resulting tree to `parent`.   
+  attaches the resulting tree to `parent`.
 
 For perspective, Markdown calls `parseDocument` which calls `parseChunk` which 
calls `parseBlocks` which calls your
 block processor, which, in turn, might call one of these routines.
@@ -130,7 +130,7 @@
 
 This example calls out important paragraphs by giving them a border.  It looks 
for a fence line of exclamation points
 before and after and renders the fenced blocks into a new, styled `div`.  If 
it does not find the ending fence line,
-it does nothing.  
+it does nothing.
 
 Our code, like most block processors, is longer than other examples:
 
@@ -185,7 +185,7 @@
 
 The fenced text adds one node with two children to the tree:
 
-* `div`, with a `style` attribute.  It renders as 
+* `div`, with a `style` attribute.  It renders as
   `<div style="display: inline-block; border: 1px solid red;">...</div>`
     * `p` with text `First paragraph of wrapped text.`
     * `p` with text `Second Paragraph of **wrapped** text`.  The conversion to 
a `<strong>` tag will happen when
@@ -277,14 +277,14 @@
 
 *   `__init__(self, pattern, md=None)` is the inherited constructor.  You do 
not need to implement your own.
     * `pattern` is the regular expression string that must match the code 
block in order for the `handleMatch` method
-      to be called.   
+      to be called.
     * `md`, an optional parameter, is a pointer to the instance of 
`markdown.Markdown` and is available as `self.md`
       on the `InlineProcessor` instance.
 
 *   `handleMatch(self, m, data)` must be implemented in all `InlineProcessor` 
subclasses.
-    * `m` is the regular expression [match object][] found by the `pattern` 
passed to `__init__`.   
+    * `m` is the regular expression [match object][] found by the `pattern` 
passed to `__init__`.
     * `data` is a single, multi-line, Unicode string containing the entire 
block of text around the pattern.  A block
-      is text set apart by blank lines.  
+      is text set apart by blank lines.
     * Returns either `(None, None, None)`, indicating the provided match was 
rejected or `(el, start, end)`, if the
       match was successfully processed.  On success, `el` is the element being 
added the tree, `start` and `end` are
       indexes in `data` that were "consumed" by the pattern.  The "consumed" 
span will be replaced by a placeholder.
@@ -348,10 +348,10 @@
       `First line of the block.\nThis is --strike one--.\nThis is --strike 
two--.\nEnd of the block.`
 
     Because the match was successful, the region between the returned `start` 
and `end` are replaced with a
-    placeholder token and the new element is added to the tree.    
+    placeholder token and the new element is added to the tree.
 
 * On the second call to `handleMatch`
-    * `m` will be the match for `--strike two--` 
+    * `m` will be the match for `--strike two--`
     * `data` will be the string
       `First line of the block.\nThis is klzzwxh:0000.\nThis is --strike 
two--.\nEnd of the block.`
 
@@ -417,7 +417,7 @@
 
     This allows handling of more complex constructs than regular expressions 
can handle, e.g., matching nested
     brackets, and explicit control of the span "consumed" by the processor.
-    
+
 #### Inline Patterns
 
 Inline Patterns can implement inline HTML element syntax for Markdown such as 
`*emphasis*` or
@@ -499,12 +499,12 @@
 | [`amp_substitute`][p2]        | built-in  | Convert ampersand substitutes to 
`&`; used in links |
 | [`unescape`][p3]              | built-in  | Convert some escaped characters 
back from integers; used in links |
 | [`FootnotePostProcessor`][p4] | extension | Replace footnote placeholders 
with html entities; as set by other stages |
- 
+
  [p1]: 
https://github.com/Python-Markdown/markdown/blob/master/markdown/postprocessors.py
  [p2]: 
https://github.com/Python-Markdown/markdown/blob/master/markdown/postprocessors.py
  [p3]: 
https://github.com/Python-Markdown/markdown/blob/master/markdown/postprocessors.py
  [p4]: 
https://github.com/Python-Markdown/markdown/blob/master/markdown/extensions/footnotes.py
- 
+
 
 ## Working with the ElementTree {: #working_with_et }
 
@@ -852,7 +852,7 @@
     * `priority`: An integer or float used to sort against all items.
 
     If an item is registered with a "name" which already exists, the existing 
item is replaced with the new item.
-    Tread carefully as the old item is lost with no way to recover it. The new 
item will be sorted according to its
+    Be careful as the old item is lost with no way to recover it. The new item 
will be sorted according to its
     priority and will **not** retain the position of the old item.
 
 ### `Registry.deregister(self, name, strict=True)`  {: #registry.deregister 
data-toc-label='Registry.deregister'}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/__meta__.py 
new/Markdown-3.3.7/markdown/__meta__.py
--- old/Markdown-3.3.6/markdown/__meta__.py     2021-11-17 16:59:35.000000000 
+0100
+++ new/Markdown-3.3.7/markdown/__meta__.py     2022-05-05 21:08:30.000000000 
+0200
@@ -26,7 +26,7 @@
 # (1, 2, 0, 'beta', 2) => "1.2b2"
 # (1, 2, 0, 'rc', 4) => "1.2rc4"
 # (1, 2, 0, 'final', 0) => "1.2"
-__version_info__ = (3, 3, 6, 'final', 0)
+__version_info__ = (3, 3, 7, 'final', 0)
 
 
 def _get_version(version_info):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/blockprocessors.py 
new/Markdown-3.3.7/markdown/blockprocessors.py
--- old/Markdown-3.3.6/markdown/blockprocessors.py      2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/blockprocessors.py      2022-05-05 
21:08:30.000000000 +0200
@@ -286,7 +286,7 @@
         m = self.RE.search(block)
         if m:
             before = block[:m.start()]  # Lines before blockquote
-            # Pass lines before blockquote in recursively for parsing forst.
+            # Pass lines before blockquote in recursively for parsing first.
             self.parser.parseBlocks(parent, [before])
             # Remove ``> `` from beginning of each line.
             block = '\n'.join(
@@ -321,7 +321,7 @@
 
     TAG = 'ol'
     # The integer (python string) with which the lists starts (default=1)
-    # Eg: If list is intialized as)
+    # Eg: If list is initialized as)
     #   3. Item
     # The ol tag will get starts="3" attribute
     STARTSWITH = '1'
@@ -559,7 +559,7 @@
 class ReferenceProcessor(BlockProcessor):
     """ Process link references. """
     RE = re.compile(
-        r'^[ ]{0,3}\[([^\]]*)\]:[ ]*\n?[ ]*([^\s]+)[ ]*(?:\n[ 
]*)?((["\'])(.*)\4[ ]*|\((.*)\)[ ]*)?$', re.MULTILINE
+        r'^[ ]{0,3}\[([^\[\]]*)\]:[ ]*\n?[ ]*([^\s]+)[ ]*(?:\n[ 
]*)?((["\'])(.*)\4[ ]*|\((.*)\)[ ]*)?$', re.MULTILINE
     )
 
     def test(self, parent, block):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/__init__.py 
new/Markdown-3.3.7/markdown/extensions/__init__.py
--- old/Markdown-3.3.6/markdown/extensions/__init__.py  2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/__init__.py  2022-05-05 
21:08:30.000000000 +0200
@@ -26,7 +26,7 @@
 class Extension:
     """ Base class for extensions to subclass. """
 
-    # Default config -- to be overriden by a subclass
+    # Default config -- to be overridden by a subclass
     # Must be of the following format:
     #     {
     #       'key': ['value', 'description']
@@ -90,9 +90,9 @@
 
     def extendMarkdown(self, md):
         """
-        Add the various proccesors and patterns to the Markdown Instance.
+        Add the various processors and patterns to the Markdown Instance.
 
-        This method must be overriden by every extension.
+        This method must be overridden by every extension.
 
         Keyword arguments:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/codehilite.py 
new/Markdown-3.3.7/markdown/extensions/codehilite.py
--- old/Markdown-3.3.6/markdown/extensions/codehilite.py        2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/codehilite.py        2022-05-05 
21:08:30.000000000 +0200
@@ -221,7 +221,7 @@
 
 
 class HiliteTreeprocessor(Treeprocessor):
-    """ Hilight source code in code blocks. """
+    """ Highlight source code in code blocks. """
 
     def code_unescape(self, text):
         """Unescape code."""
@@ -237,11 +237,12 @@
         blocks = root.iter('pre')
         for block in blocks:
             if len(block) == 1 and block[0].tag == 'code':
+                local_config = self.config.copy()
                 code = CodeHilite(
                     self.code_unescape(block[0].text),
                     tab_length=self.md.tab_length,
-                    style=self.config.pop('pygments_style', 'default'),
-                    **self.config
+                    style=local_config.pop('pygments_style', 'default'),
+                    **local_config
                 )
                 placeholder = self.md.htmlStash.store(code.hilite())
                 # Clear codeblock in etree instance
@@ -253,7 +254,7 @@
 
 
 class CodeHiliteExtension(Extension):
-    """ Add source code hilighting to markdown codeblocks. """
+    """ Add source code highlighting to markdown codeblocks. """
 
     def __init__(self, **kwargs):
         # define default configs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/def_list.py 
new/Markdown-3.3.7/markdown/extensions/def_list.py
--- old/Markdown-3.3.6/markdown/extensions/def_list.py  2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/def_list.py  2022-05-05 
21:08:30.000000000 +0200
@@ -87,7 +87,7 @@
 class DefListIndentProcessor(ListIndentProcessor):
     """ Process indented children of definition list items. """
 
-    # Defintion lists need to be aware of all list types
+    # Definition lists need to be aware of all list types
     ITEM_TYPES = ['dd', 'li']
     LIST_TYPES = ['dl', 'ol', 'ul']
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/extra.py 
new/Markdown-3.3.7/markdown/extensions/extra.py
--- old/Markdown-3.3.6/markdown/extensions/extra.py     2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/extra.py     2022-05-05 
21:08:30.000000000 +0200
@@ -16,7 +16,7 @@
 are not part of PHP Markdown Extra, and therefore, not part of
 Python-Markdown Extra. If you really would like Extra to include
 additional extensions, we suggest creating your own clone of Extra
-under a differant name. You could also edit the `extensions` global
+under a different name. You could also edit the `extensions` global
 variable defined below, but be aware that such changes may be lost
 when you upgrade to any future version of Python-Markdown.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/fenced_code.py 
new/Markdown-3.3.7/markdown/extensions/fenced_code.py
--- old/Markdown-3.3.6/markdown/extensions/fenced_code.py       2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/fenced_code.py       2022-05-05 
21:08:30.000000000 +0200
@@ -22,6 +22,7 @@
 from .codehilite import CodeHilite, CodeHiliteExtension, parse_hl_lines
 from .attr_list import get_attrs, AttrListExtension
 from ..util import parseBoolValue
+from ..serializers import _escape_attrib_html
 import re
 
 
@@ -120,30 +121,24 @@
                 else:
                     id_attr = lang_attr = class_attr = kv_pairs = ''
                     if lang:
-                        lang_attr = ' 
class="{}{}"'.format(self.config.get('lang_prefix', 'language-'), lang)
+                        prefix = self.config.get('lang_prefix', 'language-')
+                        lang_attr = f' 
class="{prefix}{_escape_attrib_html(lang)}"'
                     if classes:
-                        class_attr = ' class="{}"'.format(' '.join(classes))
+                        class_attr = f' class="{_escape_attrib_html(" 
".join(classes))}"'
                     if id:
-                        id_attr = ' id="{}"'.format(id)
+                        id_attr = f' id="{_escape_attrib_html(id)}"'
                     if self.use_attr_list and config and not 
config.get('use_pygments', False):
                         # Only assign key/value pairs to code element if 
attr_list ext is enabled, key/value pairs
                         # were defined on the code block, and the 
`use_pygments` key was not set to True. The
                         # `use_pygments` key could be either set to False or 
not defined. It is omitted from output.
-                        kv_pairs = ' ' + ' '.join(
-                            '{k}="{v}"'.format(k=k, v=v) for k, v in 
config.items() if k != 'use_pygments'
+                        kv_pairs = ''.join(
+                            f' {k}="{_escape_attrib_html(v)}"' for k, v in 
config.items() if k != 'use_pygments'
                         )
-                    code = 
'<pre{id}{cls}><code{lang}{kv}>{code}</code></pre>'.format(
-                        id=id_attr,
-                        cls=class_attr,
-                        lang=lang_attr,
-                        kv=kv_pairs,
-                        code=self._escape(m.group('code'))
-                    )
+                    code = self._escape(m.group('code'))
+                    code = 
f'<pre{id_attr}{class_attr}><code{lang_attr}{kv_pairs}>{code}</code></pre>'
 
                 placeholder = self.md.htmlStash.store(code)
-                text = '{}\n{}\n{}'.format(text[:m.start()],
-                                           placeholder,
-                                           text[m.end():])
+                text = f'{text[:m.start()]}\n{placeholder}\n{text[m.end():]}'
             else:
                 break
         return text.split("\n")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/footnotes.py 
new/Markdown-3.3.7/markdown/extensions/footnotes.py
--- old/Markdown-3.3.6/markdown/extensions/footnotes.py 2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/footnotes.py 2022-05-05 
21:08:30.000000000 +0200
@@ -228,7 +228,7 @@
                 # Any content before match is continuation of this footnote, 
which may be lazily indented.
                 before = therest[:m2.start()].rstrip('\n')
                 fn_blocks[0] = '\n'.join([fn_blocks[0], 
self.detab(before)]).lstrip('\n')
-                # Add back to blocks everything from begining of match forward 
for next iteration.
+                # Add back to blocks everything from beginning of match 
forward for next iteration.
                 blocks.insert(0, therest[m2.start():])
             else:
                 # All remaining lines of block are continuation of this 
footnote, which may be lazily indented.
@@ -264,7 +264,7 @@
                     # Any content before match is continuation of this 
footnote, which may be lazily indented.
                     before = block[:m.start()].rstrip('\n')
                     fn_blocks.append(self.detab(before))
-                    # Add back to blocks everything from begining of match 
forward for next iteration.
+                    # Add back to blocks everything from beginning of match 
forward for next iteration.
                     blocks.insert(0, block[m.start():])
                     # End of this footnote.
                     break
@@ -355,7 +355,7 @@
         self.offset = 0
         for div in root.iter('div'):
             if div.attrib.get('class', '') == 'footnote':
-                # Footnotes shoul be under the first orderd list under
+                # Footnotes should be under the first ordered list under
                 # the footnote div.  So once we find it, quit.
                 for ol in div.iter('ol'):
                     self.handle_duplicates(ol)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/legacy_attrs.py 
new/Markdown-3.3.7/markdown/extensions/legacy_attrs.py
--- old/Markdown-3.3.6/markdown/extensions/legacy_attrs.py      2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/legacy_attrs.py      2022-05-05 
21:08:30.000000000 +0200
@@ -26,7 +26,7 @@
 Prior to Python-Markdown version 3.0, the Markdown class had an 
`enable_attributes`
 keyword which was on by default and provided for attributes to be defined for 
elements
 using the format `{@key=value}`. This extension is provided as a replacement 
for
-backward compatability. New documents should be authored using attr_lists. 
However,
+backward compatibility. New documents should be authored using attr_lists. 
However,
 numerious documents exist which have been using the old attribute format for 
many
 years. This extension can be used to continue to render those documents 
correctly.
 """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/legacy_em.py 
new/Markdown-3.3.7/markdown/extensions/legacy_em.py
--- old/Markdown-3.3.6/markdown/extensions/legacy_em.py 2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/legacy_em.py 2022-05-05 
21:08:30.000000000 +0200
@@ -2,7 +2,7 @@
 Legacy Em Extension for Python-Markdown
 =======================================
 
-This extention provides legacy behavior for _connected_words_.
+This extension provides legacy behavior for _connected_words_.
 
 Copyright 2015-2018 The Python Markdown Project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/md_in_html.py 
new/Markdown-3.3.7/markdown/extensions/md_in_html.py
--- old/Markdown-3.3.6/markdown/extensions/md_in_html.py        2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/md_in_html.py        2022-05-05 
21:08:30.000000000 +0200
@@ -248,11 +248,11 @@
 
     def parse_element_content(self, element):
         """
-        Resursively parse the text content of an etree Element as Markdown.
+        Recursively parse the text content of an etree Element as Markdown.
 
         Any block level elements generated from the Markdown will be inserted 
as children of the element in place
         of the text content. All `markdown` attributes are removed. For any 
elements in which Markdown parsing has
-        been dissabled, the text content of it and its chidlren are wrapped in 
an `AtomicString`.
+        been disabled, the text content of it and its chidlren are wrapped in 
an `AtomicString`.
         """
 
         md_attr = element.attrib.pop('markdown', 'off')
@@ -268,7 +268,7 @@
             for child in list(element):
                 self.parse_element_content(child)
 
-            # Parse Markdown text in tail of children. Do this seperate to 
avoid raw HTML parsing.
+            # Parse Markdown text in tail of children. Do this separate to 
avoid raw HTML parsing.
             # Save the position of each item to be inserted later in reverse.
             tails = []
             for pos, child in enumerate(element):
@@ -329,7 +329,7 @@
                 # Cleanup stash. Replace element with empty string to avoid 
confusing postprocessor.
                 self.parser.md.htmlStash.rawHtmlBlocks.pop(index)
                 self.parser.md.htmlStash.rawHtmlBlocks.insert(index, '')
-                # Comfirm the match to the blockparser.
+                # Confirm the match to the blockparser.
                 return True
         # No match found.
         return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/tables.py 
new/Markdown-3.3.7/markdown/extensions/tables.py
--- old/Markdown-3.3.6/markdown/extensions/tables.py    2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/tables.py    2022-05-05 
21:08:30.000000000 +0200
@@ -200,7 +200,7 @@
             if not throw_out:
                 good_pipes.append(pipe)
 
-        # Split row according to table delimeters.
+        # Split row according to table delimiters.
         pos = 0
         for pipe in good_pipes:
             elements.append(row[pos:pipe])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/extensions/toc.py 
new/Markdown-3.3.7/markdown/extensions/toc.py
--- old/Markdown-3.3.6/markdown/extensions/toc.py       2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/extensions/toc.py       2022-05-05 
21:08:30.000000000 +0200
@@ -365,7 +365,7 @@
         self.reset()
         tocext = self.TreeProcessorClass(md, self.getConfigs())
         # Headerid ext is set to '>prettify'. With this set to '_end',
-        # it should always come after headerid ext (and honor ids assinged
+        # it should always come after headerid ext (and honor ids assigned
         # by the header id extension) if both are used. Same goes for
         # attr_list extension. This must come last because we don't want
         # to redefine ids after toc is created. But we do want toc prettified.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/htmlparser.py 
new/Markdown-3.3.7/markdown/htmlparser.py
--- old/Markdown-3.3.6/markdown/htmlparser.py   2021-11-17 16:59:35.000000000 
+0100
+++ new/Markdown-3.3.7/markdown/htmlparser.py   2022-05-05 21:08:30.000000000 
+0200
@@ -113,7 +113,7 @@
                 return m.end()
             else:  # pragma: no cover
                 # Value of self.lineno must exceed total number of lines.
-                # Find index of begining of last line.
+                # Find index of beginning of last line.
                 return self.rawdata.rfind('\n')
         return 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/inlinepatterns.py 
new/Markdown-3.3.7/markdown/inlinepatterns.py
--- old/Markdown-3.3.6/markdown/inlinepatterns.py       2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/inlinepatterns.py       2022-05-05 
21:08:30.000000000 +0200
@@ -673,7 +673,7 @@
                         bracket_count -= 1
                     elif backtrack_count > 0:
                         backtrack_count -= 1
-                        # We've found our backup end location if the title 
doesn't reslove.
+                        # We've found our backup end location if the title 
doesn't resolve.
                         if backtrack_count == 0:
                             last_bracket = index + 1
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/test_tools.py 
new/Markdown-3.3.7/markdown/test_tools.py
--- old/Markdown-3.3.6/markdown/test_tools.py   2021-11-17 16:59:35.000000000 
+0100
+++ new/Markdown-3.3.7/markdown/test_tools.py   2022-05-05 21:08:30.000000000 
+0200
@@ -42,7 +42,7 @@
 
     The `assertMarkdownRenders` method accepts the source text, the expected
     output, and any keywords to pass to Markdown. The `default_kwargs` are used
-    except where overridden by `kwargs`. The ouput and expected ouput are 
passed
+    except where overridden by `kwargs`. The output and expected output are 
passed
     to `TestCase.assertMultiLineEqual`. An AssertionError is raised with a diff
     if the actual output does not equal the expected output.
 
@@ -195,7 +195,7 @@
     text-based test files and define various behaviors/defaults for those 
tests.
     The following properties are supported:
 
-    location: A path to the directory fo test files. An absolute path is 
preferred.
+    location: A path to the directory of test files. An absolute path is 
preferred.
     exclude: A list of tests to exclude. Each test name should comprise the 
filename
              without an extension.
     normalize: A boolean value indicating if the HTML should be normalized.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/treeprocessors.py 
new/Markdown-3.3.7/markdown/treeprocessors.py
--- old/Markdown-3.3.6/markdown/treeprocessors.py       2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/treeprocessors.py       2022-05-05 
21:08:30.000000000 +0200
@@ -331,7 +331,7 @@
 
         Iterate over ElementTree, find elements with inline tag, apply inline
         patterns and append newly created Elements to tree.  If you don't
-        want to process your data with inline paterns, instead of normal
+        want to process your data with inline patterns, instead of normal
         string, use subclass AtomicString:
 
             node.text = markdown.AtomicString("This will not be processed.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/markdown/util.py 
new/Markdown-3.3.7/markdown/util.py
--- old/Markdown-3.3.6/markdown/util.py 2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/markdown/util.py 2022-05-05 21:08:30.000000000 +0200
@@ -174,7 +174,7 @@
 
 
 def nearing_recursion_limit():
-    """Return true if current stack depth is withing 100 of maximum limit."""
+    """Return true if current stack depth is within 100 of maximum limit."""
     return sys.getrecursionlimit() - _get_stack_depth() < 100
 
 
@@ -349,7 +349,7 @@
         * `priority`: An integer or float used to sort against all items.
 
         If an item is registered with a "name" which already exists, the
-        existing item is replaced with the new item. Tread carefully as the
+        existing item is replaced with the new item. Treat carefully as the
         old item is lost with no way to recover it. The new item will be
         sorted according to its priority and will **not** retain the position
         of the old item.
@@ -388,7 +388,7 @@
     # Deprecated Methods which provide a smooth transition from OrderedDict
 
     def __setitem__(self, key, value):
-        """ Register item with priorty 5 less than lowest existing priority. 
"""
+        """ Register item with priority 5 less than lowest existing priority. 
"""
         if isinstance(key, str):
             warnings.warn(
                 'Using setitem to register a processor or pattern is 
deprecated. '
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/setup.py new/Markdown-3.3.7/setup.py
--- old/Markdown-3.3.6/setup.py 2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/setup.py 2022-05-05 21:08:30.000000000 +0200
@@ -49,7 +49,7 @@
 DEVSTATUS = dev_status_map[__version_info__[3]]
 
 # The command line script name.  Currently set to "markdown_py" so as not to
-# conflict with the perl implimentation (which uses "markdown").
+# conflict with the perl implementation (which uses "markdown").
 SCRIPT_NAME = 'markdown_py'
 
 with open('README.md') as f:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/tests/test_apis.py 
new/Markdown-3.3.7/tests/test_apis.py
--- old/Markdown-3.3.6/tests/test_apis.py       2021-11-17 16:59:35.000000000 
+0100
+++ new/Markdown-3.3.7/tests/test_apis.py       2022-05-05 21:08:30.000000000 
+0200
@@ -272,11 +272,11 @@
         self.assertEqual(len(r), 2)
         r.deregister('c', strict=False)
         self.assertEqual(len(r), 1)
-        # deregister non-existant item with strict=False
+        # deregister non-existent item with strict=False
         r.deregister('d', strict=False)
         self.assertEqual(len(r), 1)
         with self.assertRaises(ValueError):
-            # deregister non-existant item with strict=True
+            # deregister non-existent item with strict=True
             r.deregister('e')
         self.assertEqual(list(r), ['a'])
 
@@ -455,7 +455,7 @@
         self.assertRaises(TypeError, markdown.Markdown, extensions=[object])
 
     def testDotNotationExtensionWithBadClass(self):
-        """ Test Extension loading with non-existant class name 
(`path.to.module:Class`). """
+        """ Test Extension loading with non-existent class name 
(`path.to.module:Class`). """
         self.assertRaises(
             AttributeError,
             markdown.Markdown,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/tests/test_extensions.py 
new/Markdown-3.3.7/tests/test_extensions.py
--- old/Markdown-3.3.6/tests/test_extensions.py 2021-11-17 16:59:35.000000000 
+0100
+++ new/Markdown-3.3.7/tests/test_extensions.py 2022-05-05 21:08:30.000000000 
+0200
@@ -106,11 +106,11 @@
     def testNestedAbbr(self):
         """ Test Nested Abbreviations. """
         text = '[ABBR](/foo) and _ABBR_\n\n' + \
-               '*[ABBR]: Abreviation'
+               '*[ABBR]: Abbreviation'
         self.assertEqual(
             self.md.convert(text),
-            '<p><a href="/foo"><abbr title="Abreviation">ABBR</abbr></a> '
-            'and <em><abbr title="Abreviation">ABBR</abbr></em></p>'
+            '<p><a href="/foo"><abbr title="Abbreviation">ABBR</abbr></a> '
+            'and <em><abbr title="Abbreviation">ABBR</abbr></em></p>'
         )
 
 
@@ -175,7 +175,7 @@
         self.assertEqual(self.md.Meta, {})
 
     def testMetaDataWithoutNewline(self):
-        """ Test doocument with only metadata and no newline at end."""
+        """ Test document with only metadata and no newline at end."""
         text = 'title: No newline'
         self.assertEqual(self.md.convert(text), '')
         self.assertEqual(self.md.Meta, {'title': ['No newline']})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Markdown-3.3.6/tests/test_legacy.py 
new/Markdown-3.3.7/tests/test_legacy.py
--- old/Markdown-3.3.6/tests/test_legacy.py     2021-11-17 16:59:35.000000000 
+0100
+++ new/Markdown-3.3.7/tests/test_legacy.py     2022-05-05 21:08:30.000000000 
+0200
@@ -44,7 +44,7 @@
     """
     Notes on "excluded" tests:
 
-    Quotes in attributes: attributes get output in differant order
+    Quotes in attributes: attributes get output in different order
 
     Inline HTML (Span): Backtick in raw HTML attribute TODO: fixme
 
@@ -60,7 +60,7 @@
 
     Mixed OLs and ULs: We match markdown.pl here. I think PHP is wrong here
 
-    Emphasis: We have various minor differances in combined & incorrect em 
markup.
+    Emphasis: We have various minor differences in combined & incorrect em 
markup.
     Maybe fix a few of them - but most aren't too important
 
     Code block in a list item: We match markdown.pl - not sure how php gets 
that output??
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Markdown-3.3.6/tests/test_syntax/blocks/test_blockquotes.py 
new/Markdown-3.3.7/tests/test_syntax/blocks/test_blockquotes.py
--- old/Markdown-3.3.6/tests/test_syntax/blocks/test_blockquotes.py     
2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/tests/test_syntax/blocks/test_blockquotes.py     
2022-05-05 21:08:30.000000000 +0200
@@ -28,7 +28,7 @@
 
     def test_nesting_limit(self):
         # Test that the nesting limit is within 100 levels of recursion limit. 
Future code changes could cause the
-        # recursion limit to need adjusted here. We need to acocunt for all of 
Markdown's internal calls. Finally, we
+        # recursion limit to need adjusted here. We need to account for all of 
Markdown's internal calls. Finally, we
         # need to account for the 100 level cushion which we are testing.
         with recursionlimit(120):
             self.assertMarkdownRenders(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Markdown-3.3.6/tests/test_syntax/blocks/test_headers.py 
new/Markdown-3.3.7/tests/test_syntax/blocks/test_headers.py
--- old/Markdown-3.3.6/tests/test_syntax/blocks/test_headers.py 2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/tests/test_syntax/blocks/test_headers.py 2022-05-05 
21:08:30.000000000 +0200
@@ -583,7 +583,7 @@
         )
 
     # TODO: Possibly change the following behavior. While this follows the 
behavior
-    # of markdown.pl, it is rather uncommon and not nessecarily intuitive.
+    # of markdown.pl, it is rather uncommon and not necessarily intuitive.
     # See: 
https://johnmacfarlane.net/babelmark2/?normalize=1&text=%23+This+is+an+H1+%23+
     def test_hash_h1_closed_trailing_space(self):
         self.assertMarkdownRenders(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Markdown-3.3.6/tests/test_syntax/blocks/test_html_blocks.py 
new/Markdown-3.3.7/tests/test_syntax/blocks/test_html_blocks.py
--- old/Markdown-3.3.6/tests/test_syntax/blocks/test_html_blocks.py     
2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/tests/test_syntax/blocks/test_html_blocks.py     
2022-05-05 21:08:30.000000000 +0200
@@ -1546,7 +1546,7 @@
         )
 
     def test_hr_start_and_end(self):
-        # Browers ignore ending hr tags, so we don't try to do anything to 
handle them special.
+        # Browsers ignore ending hr tags, so we don't try to do anything to 
handle them special.
         self.assertMarkdownRenders(
             self.dedent(
                 """
@@ -1566,7 +1566,7 @@
         )
 
     def test_hr_only_end(self):
-        # Browers ignore ending hr tags, so we don't try to do anything to 
handle them special.
+        # Browsers ignore ending hr tags, so we don't try to do anything to 
handle them special.
         self.assertMarkdownRenders(
             self.dedent(
                 """
@@ -1585,7 +1585,7 @@
         )
 
     def test_hr_with_content(self):
-        # Browers ignore ending hr tags, so we don't try to do anything to 
handle them special.
+        # Browsers ignore ending hr tags, so we don't try to do anything to 
handle them special.
         # Content is not allowed and will be treated as normal content between 
two hr tags.
         self.assertMarkdownRenders(
             self.dedent(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Markdown-3.3.6/tests/test_syntax/extensions/test_code_hilite.py 
new/Markdown-3.3.7/tests/test_syntax/extensions/test_code_hilite.py
--- old/Markdown-3.3.6/tests/test_syntax/extensions/test_code_hilite.py 
2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/tests/test_syntax/extensions/test_code_hilite.py 
2022-05-05 21:08:30.000000000 +0200
@@ -30,7 +30,7 @@
     has_pygments = False
 
 # The version required by the tests is the version specified and installed in 
the 'pygments' tox env.
-# In any environment where the PYGMENTS_VERSION environment variabe is either 
not defined or doesn't
+# In any environment where the PYGMENTS_VERSION environment variable is either 
not defined or doesn't
 # match the version of Pygments installed, all tests which rely in pygments 
will be skipped.
 required_pygments_version = os.environ.get('PYGMENTS_VERSION', '')
 
@@ -644,3 +644,35 @@
             expected,
             extensions=[CodeHiliteExtension(unknown='some value')],
         )
+
+    def testMultipleBlocksSameStyle(self):
+        if has_pygments:
+            # See also: https://github.com/Python-Markdown/markdown/issues/1240
+            expected = (
+                '<div class="codehilite" style="background: #202020"><pre 
style="line-height: 125%; margin: 0;">'
+                '<span></span><code><span style="color: #999999; font-style: 
italic"># First Code Block</span>\n'
+                '</code></pre></div>\n\n'
+                '<p>Normal paragraph</p>\n'
+                '<div class="codehilite" style="background: #202020"><pre 
style="line-height: 125%; margin: 0;">'
+                '<span></span><code><span style="color: #999999; font-style: 
italic"># Second Code Block</span>\n'
+                '</code></pre></div>'
+            )
+        else:
+            expected = (
+                '<pre class="codehilite"><code class="language-python"># First 
Code Block\n'
+                '</code></pre>\n\n'
+                '<p>Normal paragraph</p>\n'
+                '<pre class="codehilite"><code class="language-python"># 
Second Code Block\n'
+                '</code></pre>'
+            )
+        self.assertMarkdownRenders(
+            (
+                '\t:::Python\n'
+                '\t# First Code Block\n\n'
+                'Normal paragraph\n\n'
+                '\t:::Python\n'
+                '\t# Second Code Block'
+            ),
+            expected,
+            extensions=[CodeHiliteExtension(pygments_style="native", 
noclasses=True)]
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Markdown-3.3.6/tests/test_syntax/extensions/test_def_list.py 
new/Markdown-3.3.7/tests/test_syntax/extensions/test_def_list.py
--- old/Markdown-3.3.6/tests/test_syntax/extensions/test_def_list.py    
2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/tests/test_syntax/extensions/test_def_list.py    
2022-05-05 21:08:30.000000000 +0200
@@ -287,7 +287,7 @@
 
                         term
 
-                        :   defintion
+                        :   definition
 
                             1.  list
 
@@ -305,7 +305,7 @@
                 <dl>
                 <dt>term</dt>
                 <dd>
-                <p>defintion</p>
+                <p>definition</p>
                 <ol>
                 <li>
                 <p>list</p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Markdown-3.3.6/tests/test_syntax/extensions/test_fenced_code.py 
new/Markdown-3.3.7/tests/test_syntax/extensions/test_fenced_code.py
--- old/Markdown-3.3.6/tests/test_syntax/extensions/test_fenced_code.py 
2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/tests/test_syntax/extensions/test_fenced_code.py 
2022-05-05 21:08:30.000000000 +0200
@@ -30,7 +30,7 @@
     has_pygments = False
 
 # The version required by the tests is the version specified and installed in 
the 'pygments' tox env.
-# In any environment where the PYGMENTS_VERSION environment variabe is either 
not defined or doesn't
+# In any environment where the PYGMENTS_VERSION environment variable is either 
not defined or doesn't
 # match the version of Pygments installed, all tests which rely in pygments 
will be skipped.
 required_pygments_version = os.environ.get('PYGMENTS_VERSION', '')
 
@@ -374,6 +374,24 @@
             
extensions=[markdown.extensions.fenced_code.FencedCodeExtension(lang_prefix='lang-')]
         )
 
+    def testFencedCodeEscapedAttrs(self):
+        self.assertMarkdownRenders(
+            self.dedent(
+                '''
+                ``` { ."weird #"foo bar=">baz }
+                # Some python code
+                ```
+                '''
+            ),
+            self.dedent(
+                '''
+                <pre id="&quot;foo"><code class="language-&quot;weird" 
bar="&quot;&gt;baz"># Some python code
+                </code></pre>
+                '''
+            ),
+            extensions=['fenced_code', 'attr_list']
+        )
+
 
 class TestFencedCodeWithCodehilite(TestCase):
 
@@ -781,3 +799,48 @@
             expected,
             extensions=['codehilite', 'fenced_code']
         )
+
+    def testFencedMultpleBlocksSameStyle(self):
+        if has_pygments:
+            # See also: https://github.com/Python-Markdown/markdown/issues/1240
+            expected = (
+                '<div class="codehilite" style="background: #202020"><pre 
style="line-height: 125%; margin: 0;">'
+                '<span></span><code><span style="color: #999999; font-style: 
italic"># First Code Block</span>\n'
+                '</code></pre></div>\n\n'
+                '<p>Normal paragraph</p>\n'
+                '<div class="codehilite" style="background: #202020"><pre 
style="line-height: 125%; margin: 0;">'
+                '<span></span><code><span style="color: #999999; font-style: 
italic"># Second Code Block</span>\n'
+                '</code></pre></div>'
+            )
+        else:
+            expected = '''
+            <pre class="codehilite"><code class="language-python"># First Code 
Block
+            </code></pre>
+
+            <p>Normal paragraph</p>
+            <pre class="codehilite"><code class="language-python"># Second 
Code Block
+            </code></pre>
+            '''
+
+        self.assertMarkdownRenders(
+            self.dedent(
+                '''
+                ``` { .python }
+                # First Code Block
+                ```
+
+                Normal paragraph
+
+                ``` { .python }
+                # Second Code Block
+                ```
+                '''
+            ),
+            self.dedent(
+                expected
+            ),
+            extensions=[
+                
markdown.extensions.codehilite.CodeHiliteExtension(pygments_style="native", 
noclasses=True),
+                'fenced_code'
+            ]
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Markdown-3.3.6/tests/test_syntax/extensions/test_md_in_html.py 
new/Markdown-3.3.7/tests/test_syntax/extensions/test_md_in_html.py
--- old/Markdown-3.3.6/tests/test_syntax/extensions/test_md_in_html.py  
2021-11-17 16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/tests/test_syntax/extensions/test_md_in_html.py  
2022-05-05 21:08:30.000000000 +0200
@@ -1066,7 +1066,7 @@
         )
 
     def test_md1_hr_start_and_end(self):
-        # Browers ignore ending hr tags, so we don't try to do anything to 
handle them special.
+        # Browsers ignore ending hr tags, so we don't try to do anything to 
handle them special.
         self.assertMarkdownRenders(
             self.dedent(
                 """
@@ -1086,7 +1086,7 @@
         )
 
     def test_md1_hr_only_end(self):
-        # Browers ignore ending hr tags, so we don't try to do anything to 
handle them special.
+        # Browsers ignore ending hr tags, so we don't try to do anything to 
handle them special.
         self.assertMarkdownRenders(
             self.dedent(
                 """
@@ -1105,7 +1105,7 @@
         )
 
     def test_md1_hr_with_content(self):
-        # Browers ignore ending hr tags, so we don't try to do anything to 
handle them special.
+        # Browsers ignore ending hr tags, so we don't try to do anything to 
handle them special.
         # Content is not allowed and will be treated as normal content between 
two hr tags
         self.assertMarkdownRenders(
             self.dedent(
@@ -1129,7 +1129,7 @@
         )
 
     def test_no_md1_hr_with_content(self):
-        # Browers ignore ending hr tags, so we don't try to do anything to 
handle them special.
+        # Browsers ignore ending hr tags, so we don't try to do anything to 
handle them special.
         # Content is not allowed and will be treated as normal content between 
two hr tags
         self.assertMarkdownRenders(
             self.dedent(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Markdown-3.3.6/tests/test_syntax/inline/test_links.py 
new/Markdown-3.3.7/tests/test_syntax/inline/test_links.py
--- old/Markdown-3.3.6/tests/test_syntax/inline/test_links.py   2021-11-17 
16:59:35.000000000 +0100
+++ new/Markdown-3.3.7/tests/test_syntax/inline/test_links.py   2022-05-05 
21:08:30.000000000 +0200
@@ -350,3 +350,37 @@
             '<p>I would like to tell you about the [code of</p>\n'
             '<p>conduct][] we are using in this project.</p>'
         )
+
+    def test_ref_link_nested_left_bracket(self):
+        self.assertMarkdownRenders(
+            self.dedent(
+                """
+                [Text[]
+
+                [Text[]: http://example.com
+                """
+            ),
+            self.dedent(
+                """
+                <p>[Text[]</p>
+                <p>[Text[]: http://example.com</p>
+                """
+            )
+        )
+
+    def test_ref_link_nested_right_bracket(self):
+        self.assertMarkdownRenders(
+            self.dedent(
+                """
+                [Text]]
+
+                [Text]]: http://example.com
+                """
+            ),
+            self.dedent(
+                """
+                <p>[Text]]</p>
+                <p>[Text]]: http://example.com</p>
+                """
+            )
+        )

Reply via email to