trentm / python-markdown2

markdown2: A fast and complete implementation of Markdown in Python
Other
2.64k stars 431 forks source link

fenced-code-blocks fails with empty blocks #505

Closed mhils closed 1 year ago

mhils commented 1 year ago

Repro:

printf "```shell\n```" > repro.md
python -m markdown2 -x fenced-code-blocks foo.md

Error:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 3094, in <module>
    sys.exit(main(sys.argv))
             ^^^^^^^^^^^^^^
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 3070, in main
    html = markdown(text,
           ^^^^^^^^^^^^^^
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 170, in markdown
    use_file_vars=use_file_vars, cli=cli).convert(text)
                                          ^^^^^^^^^^^^^
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 355, in convert
    text = self._do_fenced_code_blocks(text)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 2092, in _do_fenced_code_blocks
    return self._fenced_code_block_re.sub(self._fenced_code_block_sub, text)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 2088, in _fenced_code_block_sub
    return self._code_block_sub(match, is_fenced_code_block=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 1989, in _code_block_sub
    return self._code_block_with_lexer_sub(codeblock, leading_indent, lexer, is_fenced_code_block)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 2037, in _code_block_with_lexer_sub
    _, codeblock = self._uniform_outdent(codeblock, max_outdent=leading_indent)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/venv/lib/python3.11/site-packages/markdown2.py", line 2614, in _uniform_outdent
    outdent = min(i for i in whitespace if i is not None)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: min() arg is an empty sequence

Filing this as I'm on the run, happy to come back to this with a fix in a week or so unless someone beats me to it. Should be straightforward. :)

refs https://github.com/mitmproxy/pdoc/issues/535

nicholasserra commented 1 year ago

Thank you!