X-Git-Url: https://git.madduck.net/etc/mutt.git/blobdiff_plain/7013dfe93a05082153f79eca6c9e5c05b54d9d50..217ca153fe8a1cc6d92fbe549fff1d9bd5aaa35a:/.config/mutt/markdown2html diff --git a/.config/mutt/markdown2html b/.config/mutt/markdown2html index 309c22e..3762d5f 100755 --- a/.config/mutt/markdown2html +++ b/.config/mutt/markdown2html @@ -51,6 +51,7 @@ DEFAULT_CSS += ''' .block { padding: 0 0.5em; margin: 0; + font-style: italic; border-left: 2px solid #eee; } .quote, blockquote { @@ -104,14 +105,17 @@ if os.path.exists(STYLESHEET): DEFAULT_CSS += open(STYLESHEET).read() SIGNATURE_HTML = \ - '
-- {sig}
' +""" +
--
+{sig}
+""" def _preprocess_signature(sig): ''' Preprocess the signature before markdown processing. ''' - return sig + return f"```\n{sig}\n```" def _preprocess_markdown(mdwn): ''' @@ -135,8 +139,7 @@ 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 @@ -218,53 +221,54 @@ def _reformat_quotes(html): 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', 'smart', - 'raw_html' + 'raw_html', + 'yaml_metadata_block' ] enabled = '+'.join(ext_enabled) disabled = '-'.join(ext_disabled) inputfmt = f'{inputfmt}+{enabled}-{disabled}' - args = [] + args = ['--metadata=document-css:false'] if standalone: args.append('--standalone') 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) @@ -284,7 +288,7 @@ def _postprocess_html(html): # Preprocessing leaves a sentinel to work around # https://github.com/jgm/pandoc/issues/7398, and so we need to remove it: - html = html.replace(' -PANDOC_BUG_7398->', '>') + html = html.replace(' PANDOC_BUG_7398 ', '') return html @@ -293,7 +297,7 @@ def convert_markdown_to_html(mdwn): 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] @@ -306,14 +310,14 @@ def convert_markdown_to_html(mdwn): body = _identify_quotes_for_later(body) html = _convert_with_pandoc(body, standalone=True, selfcontained=True, title=None) - html = html.replace('Untitled\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='
'.join(sig.splitlines())) + sig = _convert_with_pandoc(sig, standalone=False, selfcontained=False, + title=None) + sig = SIGNATURE_HTML.format(sig=sig) eob = html.find('') html = f'{html[:eob]}{sig}\n{html[eob:]}' @@ -328,10 +332,11 @@ def main(): Convert text on stdin to HTML, and print it to stdout, like mutt would expect. ''' - html = convert_markdown_to_html(sys.stdin.read()) - if html: - # mutt expects the content type in the first line, so: - print(f'text/html\n\n{html}') + with open(sys.argv[1], 'r') if len(sys.argv) > 1 else sys.stdin as f: + html = convert_markdown_to_html(f.read()) + if html: + # mutt expects the content type in the first line, so: + print(f'text/html\n\n{html}') if __name__ == '__main__':