Closed
Description
In [8]: import markdown
In [9]: some_text = """
...: !!! danger "Danger"
...: don't try this at home.
...:
...: """
In [10]: markdown.markdown(some_text, tab_length=2, extensions=['admonition'])
Out[10]: '<div class="admonition danger">\n<p class="admonition-title">Danger<p>don\'t try this at home.</p>\n</p>\n</div>'
- A paragraph inside a paragraph is invalid html and etree parser complains!
- the simple solution of turning the title paragraph into a div will work, but it wraps the inner paragraph, resulting in a CSS mess.
Recommended working solution:
CLASSNAME_TITLE = 'admonition-title'
+ CLASSNAME_BODY = 'admonition-body'
RE = re.compile(r'(?:^|\n)!!! ?([\w\-]+(?: +[\w\-]+)*)(?: +"(.*?)")? *(?:\n|$)')
@@ -130,9 +134,11 @@ class AdmonitionProcessor(BlockProcessor):
div = etree.SubElement(parent, 'div')
div.set('class', '{} {}'.format(self.CLASSNAME, klass))
if title:
- p = etree.SubElement(div, 'p')
+ p = etree.SubElement(div, 'div')
p.text = title
p.set('class', self.CLASSNAME_TITLE)
+ p = etree.SubElement(div, 'div')
+ p.set('class', self.CLASSNAME_BODY)
Note: the
parse_content()
method of your admonition extension is an unreadable code-mess ;-)