'''
Preprocess the signature before markdown processing.
'''
- return sig
+ return f"```\n{sig}\n```"
def _preprocess_markdown(mdwn):
'''
# when used around email addresses. Note that this needs a postprocessing
# hack because the pandoc autolink converted includes the ambersand
# (https://github.com/jgm/pandoc/issues/7398).
- ret = re.sub(r'<([^@]+@.+\.[^>]+)>', r'<\g<1> -PANDOC_BUG_7398->', ret)
-
+ ret = re.sub(r'<([^@]+@\S+)>', r'<\g<1> PANDOC_BUG_7398 >', ret)
return ret
def _convert_with_pandoc(mdwn, inputfmt='markdown', outputfmt='html5',
ext_enabled=None, ext_disabled=None,
- standalone=True, selfcontained=True, title=None):
+ standalone=True, selfcontained=True, title='Untitled'):
'''
Invoke pandoc to do the actual conversion of Markdown to HTML5.
'''
if not ext_enabled:
ext_enabled = [ 'backtick_code_blocks',
- 'line_blocks',
- 'fancy_lists',
- 'startnum',
- 'definition_lists',
- 'example_lists',
- 'table_captions',
- 'simple_tables',
- 'multiline_tables',
- 'grid_tables',
- 'pipe_tables',
- 'all_symbols_escapable',
- 'intraword_underscores',
- 'strikeout',
- 'superscript',
- 'subscript',
- 'fenced_divs',
- 'bracketed_spans',
- 'footnotes',
- 'inline_notes',
- 'emoji',
- 'tex_math_double_backslash',
- 'autolink_bare_uris'
- ]
+ 'line_blocks',
+ 'fancy_lists',
+ 'startnum',
+ 'definition_lists',
+ 'example_lists',
+ 'table_captions',
+ 'simple_tables',
+ 'multiline_tables',
+ 'grid_tables',
+ 'pipe_tables',
+ 'all_symbols_escapable',
+ 'intraword_underscores',
+ 'strikeout',
+ 'superscript',
+ 'subscript',
+ 'fenced_divs',
+ 'bracketed_spans',
+ 'footnotes',
+ 'inline_notes',
+ 'emoji',
+ 'tex_math_double_backslash',
+ 'autolink_bare_uris'
+ ]
if not ext_disabled:
ext_disabled = [ 'tex_math_single_backslash',
'tex_math_dollars',
if selfcontained:
args.append('--self-contained')
if title:
- args.append(f'--metadata=pagetitle:"{title}"')
+ args.append(f'--metadata=title:{title}')
return pypandoc.convert_text(mdwn, format=inputfmt, to=outputfmt,
extra_args=args)
# Preprocessing leaves a sentinel to work around
# https://github.com/jgm/pandoc/issues/7398, and so we need to remove it:
- html = html.replace('</a> -PANDOC_BUG_7398->', '</a>>')
+ html = html.replace(' PANDOC_BUG_7398 ', '')
return html
Converts the input Markdown to HTML, handling separately the body, as well
as an optional signature.
'''
- parts = re.split(r'^-- $', mdwn, 1, flags=re.MULTILINE)
+ parts = re.split(r'^-- \n', mdwn, 1, flags=re.MULTILINE)
body = parts[0]
if len(parts) == 2:
sig = parts[1]
body = _preprocess_markdown(body)
body = _identify_quotes_for_later(body)
html = _convert_with_pandoc(body, standalone=True, selfcontained=True,
- title=None)
- html = html.replace('<title>Untitled</title>\n','')
+ title="Body")
+ html = html.replace('<title>Body</title>\n','')
html = _reformat_quotes(html)
if sig:
sig = _preprocess_signature(sig)
sig = _preprocess_markdown(sig)
- sig = _convert_with_pandoc(sig, standalone=False, selfcontained=False)
- sig = SIGNATURE_HTML.format(sig='<br/>'.join(sig.splitlines()))
+ sig = _convert_with_pandoc(sig, standalone=False, selfcontained=False,
+ title="Signature")
+ sig = SIGNATURE_HTML.format(sig=sig)
eob = html.find('</body>')
html = f'{html[:eob]}{sig}\n{html[eob:]}'