Skip to content

Commit

Permalink
fix: usr: fixed working with Markdown 3.3 (fixes #39)
Browse files Browse the repository at this point in the history
  • Loading branch information
Michele Tessaro committed Dec 12, 2020
1 parent 980cbd9 commit 0128009
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 7 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ python:
- 3.6
- 3.7
- 3.8
- 3.9

env:
- MARKDOWN_VER=2.6.8
- MARKDOWN_VER=3.0.1
- MARKDOWN_VER=3.3.3

install:
- sudo apt-get install graphviz
Expand Down
5 changes: 3 additions & 2 deletions plantuml_markdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@
from plantuml import PlantUML
import logging
import markdown
from markdown.util import etree, AtomicString
from markdown.util import AtomicString #, etree
from xml.etree import ElementTree as etree


logger = logging.getLogger('MARKDOWN')
Expand Down Expand Up @@ -305,7 +306,7 @@ def extendMarkdown(self, md, md_globals=None):
blockprocessor.config = self.getConfigs()
# need to go before both fenced_code_block and things like retext's PosMapMarkPreprocessor.
# Need to go after mdx_include.
if markdown.version_info[0] < 3:
if markdown.__version_info__[0] < 3:
md.preprocessors.add('plantuml', blockprocessor, '_begin')
else:
md.preprocessors.register(blockprocessor, 'plantuml', int(blockprocessor.config['priority']))
Expand Down
2 changes: 1 addition & 1 deletion test/data/svg_object_diag.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<p><object alt="uml diagram" class="uml" data="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBjb250ZW50U2NyaXB0VHlwZT0iYXBwbGljYXRpb24vZWNtYXNjcmlwdCIgY29udGVudFN0eWxlVHlwZT0idGV4dC9jc3MiIGhlaWdodD0iMTEycHgiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiIHN0eWxlPSJ3aWR0aDo3OXB4O2hlaWdodDoxMTJweDsiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDc5IDExMiIgd2lkdGg9Ijc5cHgiIHpvb21BbmRQYW49Im1hZ25pZnkiPjxkZWZzPjxmaWx0ZXIgaGVpZ2h0PSIzMDAlIiBpZD0iZjFlbHJvc3VmNnJkZHgiIHdpZHRoPSIzMDAlIiB4PSItMSIgeT0iLTEiPjxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImJsdXJPdXQiIHN0ZERldmlhdGlvbj0iMi4wIi8+PGZlQ29sb3JNYXRyaXggaW49ImJsdXJPdXQiIHJlc3VsdD0iYmx1ck91dDIiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAuNCAwIi8+PGZlT2Zmc2V0IGR4PSI0LjAiIGR5PSI0LjAiIGluPSJibHVyT3V0MiIgcmVzdWx0PSJibHVyT3V0MyIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQzIiBtb2RlPSJub3JtYWwiLz48L2ZpbHRlcj48L2RlZnM+PGc+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDUuMCw1LjA7IiB4MT0iMjEiIHgyPSIyMSIgeTE9IjM4LjA5ODYiIHkyPSI3Mi4wOTg2Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDUuMCw1LjA7IiB4MT0iNTgiIHgyPSI1OCIgeTE9IjM4LjA5ODYiIHkyPSI3Mi4wOTg2Ii8+PHJlY3QgZmlsbD0iI0ZFRkVDRSIgZmlsdGVyPSJ1cmwoI2YxZWxyb3N1ZjZyZGR4KSIgaGVpZ2h0PSIzMC4wOTg2IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSIyMyIgeD0iOCIgeT0iMyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjkiIHg9IjE1IiB5PSIyMy4zNjA4Ij5BPC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmMWVscm9zdWY2cmRkeCkiIGhlaWdodD0iMzAuMDk4NiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjU7IiB3aWR0aD0iMjMiIHg9IjgiIHk9IjcxLjA5ODYiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI5IiB4PSIxNSIgeT0iOTEuNDU5NSI+QTwvdGV4dD48cmVjdCBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjFlbHJvc3VmNnJkZHgpIiBoZWlnaHQ9IjMwLjA5ODYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS41OyIgd2lkdGg9IjIzIiB4PSI0NSIgeT0iMyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjkiIHg9IjUyIiB5PSIyMy4zNjA4Ij5CPC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmMWVscm9zdWY2cmRkeCkiIGhlaWdodD0iMzAuMDk4NiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjU7IiB3aWR0aD0iMjMiIHg9IjQ1IiB5PSI3MS4wOTg2Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iOSIgeD0iNTIiIHk9IjkxLjQ1OTUiPkI8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI0Ni41LDUwLjA5ODYsNTYuNSw1NC4wOTg2LDQ2LjUsNTguMDk4Niw1MC41LDU0LjA5ODYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiAyLjAsMi4wOyIgeDE9IjIxLjUiIHgyPSI1Mi41IiB5MT0iNTQuMDk4NiIgeTI9IjU0LjA5ODYiLz48IS0tCkBzdGFydHVtbA0KQSAtIC0+IEINCg0KQGVuZHVtbA0KClBsYW50VU1MIHZlcnNpb24gMS4yMDE4LjAyKEZyaSBNYXIgMDkgMTg6MjA6NDQgQ0VUIDIwMTgpCihHUEwgc291cmNlIGRpc3RyaWJ1dGlvbikKSmF2YSBSdW50aW1lOiBKYXZhKFRNKSBTRSBSdW50aW1lIEVudmlyb25tZW50CkpWTTogSmF2YSBIb3RTcG90KFRNKSA2NC1CaXQgU2VydmVyIFZNCkphdmEgVmVyc2lvbjogMS44LjBfMjUtYjE3Ck9wZXJhdGluZyBTeXN0ZW06IExpbnV4Ck9TIFZlcnNpb246IDQuMTQuMC1zYWJheW9uCkRlZmF1bHQgRW5jb2Rpbmc6IFVURi04Ckxhbmd1YWdlOiBpdApDb3VudHJ5OiBJVAotLT48L2c+PC9zdmc+" title="" /></p>
<object alt="uml diagram" class="uml" data="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBjb250ZW50U2NyaXB0VHlwZT0iYXBwbGljYXRpb24vZWNtYXNjcmlwdCIgY29udGVudFN0eWxlVHlwZT0idGV4dC9jc3MiIGhlaWdodD0iMTEycHgiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiIHN0eWxlPSJ3aWR0aDo3OXB4O2hlaWdodDoxMTJweDsiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDc5IDExMiIgd2lkdGg9Ijc5cHgiIHpvb21BbmRQYW49Im1hZ25pZnkiPjxkZWZzPjxmaWx0ZXIgaGVpZ2h0PSIzMDAlIiBpZD0iZjFlbHJvc3VmNnJkZHgiIHdpZHRoPSIzMDAlIiB4PSItMSIgeT0iLTEiPjxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImJsdXJPdXQiIHN0ZERldmlhdGlvbj0iMi4wIi8+PGZlQ29sb3JNYXRyaXggaW49ImJsdXJPdXQiIHJlc3VsdD0iYmx1ck91dDIiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAuNCAwIi8+PGZlT2Zmc2V0IGR4PSI0LjAiIGR5PSI0LjAiIGluPSJibHVyT3V0MiIgcmVzdWx0PSJibHVyT3V0MyIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQzIiBtb2RlPSJub3JtYWwiLz48L2ZpbHRlcj48L2RlZnM+PGc+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDUuMCw1LjA7IiB4MT0iMjEiIHgyPSIyMSIgeTE9IjM4LjA5ODYiIHkyPSI3Mi4wOTg2Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDUuMCw1LjA7IiB4MT0iNTgiIHgyPSI1OCIgeTE9IjM4LjA5ODYiIHkyPSI3Mi4wOTg2Ii8+PHJlY3QgZmlsbD0iI0ZFRkVDRSIgZmlsdGVyPSJ1cmwoI2YxZWxyb3N1ZjZyZGR4KSIgaGVpZ2h0PSIzMC4wOTg2IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSIyMyIgeD0iOCIgeT0iMyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjkiIHg9IjE1IiB5PSIyMy4zNjA4Ij5BPC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmMWVscm9zdWY2cmRkeCkiIGhlaWdodD0iMzAuMDk4NiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjU7IiB3aWR0aD0iMjMiIHg9IjgiIHk9IjcxLjA5ODYiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI5IiB4PSIxNSIgeT0iOTEuNDU5NSI+QTwvdGV4dD48cmVjdCBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjFlbHJvc3VmNnJkZHgpIiBoZWlnaHQ9IjMwLjA5ODYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS41OyIgd2lkdGg9IjIzIiB4PSI0NSIgeT0iMyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjkiIHg9IjUyIiB5PSIyMy4zNjA4Ij5CPC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmMWVscm9zdWY2cmRkeCkiIGhlaWdodD0iMzAuMDk4NiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjU7IiB3aWR0aD0iMjMiIHg9IjQ1IiB5PSI3MS4wOTg2Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iOSIgeD0iNTIiIHk9IjkxLjQ1OTUiPkI8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI0Ni41LDUwLjA5ODYsNTYuNSw1NC4wOTg2LDQ2LjUsNTguMDk4Niw1MC41LDU0LjA5ODYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiAyLjAsMi4wOyIgeDE9IjIxLjUiIHgyPSI1Mi41IiB5MT0iNTQuMDk4NiIgeTI9IjU0LjA5ODYiLz48IS0tCkBzdGFydHVtbA0KQSAtIC0+IEINCg0KQGVuZHVtbA0KClBsYW50VU1MIHZlcnNpb24gMS4yMDE4LjAyKEZyaSBNYXIgMDkgMTg6MjA6NDQgQ0VUIDIwMTgpCihHUEwgc291cmNlIGRpc3RyaWJ1dGlvbikKSmF2YSBSdW50aW1lOiBKYXZhKFRNKSBTRSBSdW50aW1lIEVudmlyb25tZW50CkpWTTogSmF2YSBIb3RTcG90KFRNKSA2NC1CaXQgU2VydmVyIFZNCkphdmEgVmVyc2lvbjogMS44LjBfMjUtYjE3Ck9wZXJhdGluZyBTeXN0ZW06IExpbnV4Ck9TIFZlcnNpb246IDQuMTQuMC1zYWJheW9uCkRlZmF1bHQgRW5jb2Rpbmc6IFVURi04Ckxhbmd1YWdlOiBpdApDb3VudHJ5OiBJVAotLT48L2c+PC9zdmc+" title="" />
12 changes: 8 additions & 4 deletions test/test_plantuml.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,13 @@ def setUpClass(cls):
def setUp(self):
self.md = markdown.Markdown(extensions=['markdown.extensions.fenced_code',
'admonition', 'pymdownx.snippets',
'plantuml_markdown'])
'plantuml_markdown'],
extension_configs={
# fix for fences in Markdown 3.3
'markdown.extensions.fenced_code': {
'lang_prefix': ''
}
})
self.text_builder = None

def _load_file(self, filename):
Expand Down Expand Up @@ -52,7 +58,7 @@ def sort_attributes(groups):
html = "<img{}{}{}{}{}/>".format(alt, title, classes, style, src)
return cls.BASE64_REGEX.sub(r'\1%s' % cls.FAKE_IMAGE, html)

return cls.IMAGE_REGEX.sub(lambda x: sort_attributes(x.groups()), html)
return cls.IMAGE_REGEX.sub(lambda x: sort_attributes(x.groups()), html.replace('\n\n', '\n'))

FAKE_SVG = '...svg-body...'
SVG_REGEX = re.compile(r'<(?:\w+:)?svg(?:( alt=".*?")|( class=".*?")|( title=".*?")|( style=".*?")|(?:.*?))+>.*</(?:\w+:)?svg>')
Expand Down Expand Up @@ -411,13 +417,11 @@ def test_multiple_fences(self):
A --&gt; B
```
</code></pre>
<p><img alt="uml diagram" title="" class="uml" src="data:image/png;base64,%s"/></p>
<pre><code class="markdown"> ```uml
A &lt;-- B
```
</code></pre>
<p><img alt="uml diagram" title="" class="uml" src="data:image/png;base64,%s"/></p>''' %
(self.FAKE_IMAGE, self.FAKE_IMAGE), self._stripImageData(self.md.convert(text)))

Expand Down
3 changes: 3 additions & 0 deletions test/test_plantuml_legacy.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ def setUp(self):
# Setup testing with old block delimiter (I don't remember where I've seen this syntax)
self.text_builder = MarkdownBuilder('::uml::')

def test_multiple_fences(self):
pass # this test has non sense with legacy diagram delimiter


if __name__ == '__main__':
unittest.main()

0 comments on commit 0128009

Please sign in to comment.