import xml.etree.ElementTree as etree
import io
import enum
+from contextlib import contextmanager
from collections import namedtuple, OrderedDict
from markdown.extensions import Extension
from markdown.blockprocessors import BlockProcessor
def __init__(self, parser):
super().__init__(parser)
self._title = None
+ self._disable = False
def test(self, parent, blocks):
+ if self._disable:
+ return False
+
if markdown.util.nearing_recursion_limit():
return False
self.parser.parseChunk(admonition, self._title)
admonition[0].set("class", "admonition-title")
- self.parser.parseChunk(
- admonition, "\n".join(self.clean(line) for line in quotelines)
- )
+ with self.disable():
+ self.parser.parseChunk(
+ admonition, "\n".join(quotelines)
+ )
+
+ @contextmanager
+ def disable(self):
+ self._disable = True
+ yield True
+ self._disable = False
@classmethod
def clean(klass, line):
p = quote.p.extract()
assert p.contents[1].name == "strong"
+ @pytest.mark.converter
+ def test_converter_attribution_to_admonition_with_blockquote(
+ self, fakepath, fakefilefactory
+ ):
+ mailparts = (
+ "Regarding whatever",
+ "> blockquote line1",
+ "> blockquote line2",
+ "> ",
+ "> new para with **bold** text",
+ )
+ with fakefilefactory(
+ fakepath, content="\n".join(mailparts)
+ ) as draft_f:
+ convert_markdown_to_html(draft_f, filefactory=fakefilefactory)
+
+ soup = bs4.BeautifulSoup(
+ fakefilefactory[fakepath.with_suffix(".html")].read(),
+ "html.parser",
+ )
+ quote = soup.select_one("div.admonition.quote")
+ assert quote.blockquote
+
@pytest.mark.converter
def test_converter_attribution_to_admonition_multiple(
self, fakepath, fakefilefactory
margin: 0.5em;
}
+.block {
+ padding: 0 0.5em;
+ margin: 0;
+ font-style: italic;
+ border-left: 2px solid #eee;
+}
+blockquote, .blockquote {
+ padding: 0 0.5em;
+ margin: 0;
+ font-style: italic;
+ border-left: 2px solid #666;
+ color: #666;
+ font-size: 80%;
+}
+
+.admonition blockquote {
+ font-size: inherit;
+ border-left: inherit;
+}
+
table, th, td {
border-collapse: collapse;
border: 1px solid #999;
a { text-decoration:none; color:#3a5dae; }
a:visited { color:#3a5dae; }
a:hover { text-decoration:underline; }
-.block {
- padding: 0 0.5em;
- margin: 0;
- font-style: italic;
- border-left: 2px solid #eee;
-}
-blockquote {
- padding: 0 0.5em;
- margin: 0;
- font-style: italic;
- border-left: 2px solid #666;
- color: #666;
- font-size: 80%;
-}
/*.quotelead {
margin-bottom: -1em;
font-size: 80%;