Skip to content

Commit

Permalink
Merge branch 'master' into fix-link-patterns-issue287
Browse files Browse the repository at this point in the history
  • Loading branch information
nicholasserra committed Apr 10, 2023
2 parents d7d6471 + d657fca commit 01a98a1
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 27 deletions.
2 changes: 2 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

- [pull #500] Add `<thead>` tag to html-classes extra
- [pull #501] Fix link patterns extra matching against internal hashes
- [pull #502] Replace deprecated `optparse` with `argparse`
- [pull #506] Fix `_uniform_outdent` failing with empty strings (issue #505)


## python-markdown2 2.4.8
Expand Down
66 changes: 39 additions & 27 deletions lib/markdown2.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,14 @@
__version__ = '.'.join(map(str, __version_info__))
__author__ = "Trent Mick"

import sys
import re
import logging
from hashlib import sha256
import optparse
from random import random, randint
import argparse
import codecs
import logging
import re
import sys
from collections import defaultdict
from hashlib import sha256
from random import randint, random

# ---- globals

Expand Down Expand Up @@ -2612,12 +2612,17 @@ def _uniform_outdent(self, text, min_outdent=None, max_outdent=None):
re.findall(r'^[ \t]*', line)[0] if line else None
for line in text.splitlines()
]
whitespace_not_empty = [i for i in whitespace if i is not None]

# if no whitespace detected (ie: no lines in code block, issue #505)
if not whitespace_not_empty:
return '', text

# get minimum common whitespace
outdent = min(i for i in whitespace if i is not None)
outdent = min(whitespace_not_empty)
# adjust min common ws to be within bounds
if min_outdent is not None:
outdent = min([i for i in whitespace if i is not None and i >= min_outdent] or [min_outdent])
outdent = min([i for i in whitespace_not_empty if i >= min_outdent] or [min_outdent])
if max_outdent is not None:
outdent = min(outdent, max_outdent)

Expand Down Expand Up @@ -2972,8 +2977,8 @@ def _html_escape_url(attr, safe_mode=False):

# ---- mainline

class _NoReflowFormatter(optparse.IndentedHelpFormatter):
"""An optparse formatter that does NOT reflow the description."""
class _NoReflowFormatter(argparse.RawDescriptionHelpFormatter):
"""An argparse formatter that does NOT reflow the description."""
def format_description(self, description):
return description or ""

Expand All @@ -2989,38 +2994,45 @@ def main(argv=None):
if not logging.root.handlers:
logging.basicConfig()

usage = "usage: %prog [PATHS...]"
version = "%prog "+__version__
parser = optparse.OptionParser(prog="markdown2", usage=usage,
version=version, description=cmdln_desc,
formatter=_NoReflowFormatter())
parser.add_option("-v", "--verbose", dest="log_level",
parser = argparse.ArgumentParser(
prog="markdown2", description=cmdln_desc, usage='%(prog)s [PATHS...]',
formatter_class=_NoReflowFormatter
)
parser.add_argument('--version', action='version',
version='%(prog)s {version}'.format(version=__version__))
parser.add_argument('paths', nargs='*',
help=(
'optional list of files to convert.'
'If none are given, stdin will be used'
))
parser.add_argument("-v", "--verbose", dest="log_level",
action="store_const", const=logging.DEBUG,
help="more verbose output")
parser.add_option("--encoding",
parser.add_argument("--encoding",
help="specify encoding of text content")
parser.add_option("--html4tags", action="store_true", default=False,
parser.add_argument("--html4tags", action="store_true", default=False,
help="use HTML 4 style for empty element tags")
parser.add_option("-s", "--safe", metavar="MODE", dest="safe_mode",
parser.add_argument("-s", "--safe", metavar="MODE", dest="safe_mode",
help="sanitize literal HTML: 'escape' escapes "
"HTML meta chars, 'replace' replaces with an "
"[HTML_REMOVED] note")
parser.add_option("-x", "--extras", action="append",
parser.add_argument("-x", "--extras", action="append",
help="Turn on specific extra features (not part of "
"the core Markdown spec). See above.")
parser.add_option("--use-file-vars",
parser.add_argument("--use-file-vars",
help="Look for and use Emacs-style 'markdown-extras' "
"file var to turn on extras. See "
"<https://github.com/trentm/python-markdown2/wiki/Extras>")
parser.add_option("--link-patterns-file",
parser.add_argument("--link-patterns-file",
help="path to a link pattern file")
parser.add_option("--self-test", action="store_true",
parser.add_argument("--self-test", action="store_true",
help="run internal self-tests (some doctests)")
parser.add_option("--compare", action="store_true",
parser.add_argument("--compare", action="store_true",
help="run against Markdown.pl as well (for testing)")
parser.set_defaults(log_level=logging.INFO, compare=False,
encoding="utf-8", safe_mode=None, use_file_vars=False)
opts, paths = parser.parse_args()
opts = parser.parse_args()
paths = opts.paths
log.setLevel(opts.log_level)

if opts.self_test:
Expand Down Expand Up @@ -3062,7 +3074,7 @@ def main(argv=None):
else:
link_patterns = None

from os.path import join, dirname, abspath, exists
from os.path import abspath, dirname, exists, join
markdown_pl = join(dirname(dirname(abspath(__file__))), "test",
"Markdown.pl")
if not paths:
Expand All @@ -3075,7 +3087,7 @@ def main(argv=None):
text = fp.read()
fp.close()
if opts.compare:
from subprocess import Popen, PIPE
from subprocess import PIPE, Popen
print("==== Markdown.pl ====")
p = Popen('perl %s' % markdown_pl, shell=True, stdin=PIPE, stdout=PIPE, close_fds=True)
p.stdin.write(text.encode('utf-8'))
Expand Down
20 changes: 20 additions & 0 deletions test/tm-cases/empty_fenced_code_blocks.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<div class="codehilite">
<pre><span></span><code>
</code></pre>
</div>

<pre><code>
</code></pre>

<p>Pygments removes the empty line whitespace from the next code block</p>

<div class="codehilite">
<pre><span></span><code>
</code></pre>
</div>

<pre><code>



</code></pre>
1 change: 1 addition & 0 deletions test/tm-cases/empty_fenced_code_blocks.opts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"extras": ["fenced-code-blocks"]}
20 changes: 20 additions & 0 deletions test/tm-cases/empty_fenced_code_blocks.text
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
```shell
```

```
```

Pygments removes the empty line whitespace from the next code block
```shell




```

```




```

0 comments on commit 01a98a1

Please sign in to comment.