X-Git-Url: https://git.madduck.net/etc/neomutt.git/blobdiff_plain/429c18815c5cdddb5ae4bed838e357cc1d7ad6d9..196bfe3dcb9613d859690330868277a20472ba23:/.config/neomutt/buildmimetree.py diff --git a/.config/neomutt/buildmimetree.py b/.config/neomutt/buildmimetree.py index 1ff0cb0..f10158f 100755 --- a/.config/neomutt/buildmimetree.py +++ b/.config/neomutt/buildmimetree.py @@ -54,7 +54,11 @@ from contextlib import contextmanager from collections import namedtuple, OrderedDict from markdown.extensions import Extension from markdown.blockprocessors import BlockProcessor -from markdown.inlinepatterns import ImageInlineProcessor, IMAGE_LINK_RE +from markdown.inlinepatterns import ( + SimpleTextInlineProcessor, + ImageInlineProcessor, + IMAGE_LINK_RE, +) from email.utils import make_msgid from urllib import request @@ -176,7 +180,6 @@ def parse_cli_args(*args, **kwargs): class File: - class Op(enum.Enum): R = enum.auto() W = enum.auto() @@ -195,10 +198,7 @@ class File: if content and not re.search(r"[r+]", mode): raise RuntimeError("Cannot specify content without read mode") - self._cache = { - File.Op.R: [content] if content else [], - File.Op.W: [] - } + self._cache = {File.Op.R: [content] if content else [], File.Op.W: []} self._lastop = None self._mode = mode self._kwargs = kwargs @@ -250,7 +250,6 @@ class File: return self._file.read() def write(self, s, *, cache=True): - if self._lastop == File.Op.R: try: self._file.seek(0) @@ -476,11 +475,22 @@ def apply_styling(html, css): ) +# [ FORMAT=FLOWED HANDLING ] ################################################## + + +class FormatFlowedNewlineExtension(Extension): + FFNL_RE = r"(?!\S)(\s)\n" + + def extendMarkdown(self, md): + ffnl = SimpleTextInlineProcessor(self.FFNL_RE) + md.inlinePatterns.register(ffnl, "ffnl", 125) + + # [ QUOTE HANDLING ] ########################################################## class QuoteToAdmonitionExtension(Extension): - class EmailQuoteBlockProcessor(BlockProcessor): + class BlockProcessor(BlockProcessor): RE = re.compile(r"(?:^|\n)>\s*(.*)") def __init__(self, parser): @@ -528,9 +538,7 @@ class QuoteToAdmonitionExtension(Extension): admonition[0].set("class", "admonition-title") with self.disable(): - self.parser.parseChunk( - admonition, "\n".join(quotelines) - ) + self.parser.parseChunk(admonition, "\n".join(quotelines)) @contextmanager def disable(self): @@ -545,7 +553,7 @@ class QuoteToAdmonitionExtension(Extension): def extendMarkdown(self, md): md.registerExtension(self) - email_quote_proc = self.EmailQuoteBlockProcessor(md.parser) + email_quote_proc = self.BlockProcessor(md.parser) md.parser.blockprocessors.register(email_quote_proc, "emailquote", 25) @@ -700,6 +708,7 @@ def convert_markdown_to_html( ] = _CODEHILITE_CLASS extensions = extensions or [] + extensions.append(FormatFlowedNewlineExtension()) extensions.append(QuoteToAdmonitionExtension()) draft = draft_f.read() @@ -1768,7 +1777,7 @@ try: with ( File() as draft_f, File(mode="w") as cmd_f, - File(content=css) as css_f + File(content=css) as css_f, ): do_massage( draft_f=draft_f, @@ -1916,9 +1925,7 @@ try: "This is the plain-text version", ) htmlsig = "HTML Signature from {path} but as a string" - html = ( - f'
{htmlsig.format(path=fakepath2)}
{htmlsig.format(path=fakepath2)}