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=""foo"><code class="language-"weird" bar="">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> + """ + ) + )