Coder Social home page Coder Social logo

plantuml-markdown's People

Contributors

anorm avatar bharatrajagopalan avatar bhenriet avatar daumalexande avatar freezed avatar gadamiak avatar howaryoo avatar itopaloglu83 avatar jean avatar karlssonjohan avatar kianmeng avatar kubilus1 avatar markmoretto avatar mathias-luedtke avatar mikitex70 avatar miyajan avatar mriedem avatar nejch avatar nickboldt avatar pahjbo avatar sgilson-wdc avatar stephane-mori avatar viccie30 avatar wilkolazki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

plantuml-markdown's Issues

Extension broken with Markdown 3

I am using the extension but with the release of Markdown 3.0.0 and 3.0.1 the extension is broken.
I didn't have time to look into the code.
For now, I have pinned to Markdown<3 and everything works.

Raise RuntimeError("UML block not closed") when a md file has two plantuml sections

Input

```plantuml format="png" classes="uml myDiagram" alt="My super diagram placeholder" title="My super diagram"
Bob->Alice : hello
```

```plantuml format="png" classes="uml myDiagram" alt="My super diagram placeholder" title="My super diagram"
Bob<-Alice : hello
```

Current Result

INFO    -  Building documentation... 
INFO    -  Cleaning site directory 
ERROR   -  Error building page design.md 
Traceback (most recent call last):
  File "/usr/local/bin/mkdocs", line 11, in 
    sys.exit(cli())
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/mkdocs/__main__.py", line 127, in serve_command
    livereload=livereload
  File "/usr/local/lib/python2.7/dist-packages/mkdocs/commands/serve.py", line 117, in serve
    config = builder()
  File "/usr/local/lib/python2.7/dist-packages/mkdocs/commands/serve.py", line 112, in builder
    build(config, live_server=live_server, dirty=dirty)
  File "/usr/local/lib/python2.7/dist-packages/mkdocs/commands/build.py", line 282, in build
    build_pages(config, dirty=dirty)
  File "/usr/local/lib/python2.7/dist-packages/mkdocs/commands/build.py", line 242, in build_pages
    _build_page(page, config, site_navigation, env)
  File "/usr/local/lib/python2.7/dist-packages/mkdocs/commands/build.py", line 137, in _build_page
    page.render(config, site_navigation)
  File "/usr/local/lib/python2.7/dist-packages/mkdocs/nav.py", line 295, in render
    self.content = md.convert(self.markdown)
  File "/usr/local/lib/python2.7/dist-packages/markdown/__init__.py", line 371, in convert
    root = self.parser.parseDocument(self.lines).getroot()
  File "/usr/local/lib/python2.7/dist-packages/markdown/blockparser.py", line 65, in parseDocument
    self.parseChunk(self.root, '\n'.join(lines))
  File "/usr/local/lib/python2.7/dist-packages/markdown/blockparser.py", line 80, in parseChunk
    self.parseBlocks(parent, text.split('\n\n'))
  File "/usr/local/lib/python2.7/dist-packages/markdown/blockparser.py", line 98, in parseBlocks
    if processor.run(parent, blocks) is not False:
  File "/usr/local/lib/python2.7/dist-packages/markdown/extensions/plantuml.py", line 98, in run
    raise RuntimeError("UML block not closed")
RuntimeError: UML block not closed

Expected result

  • Build succeed
  • Two plantuml parts is rendered correctly.

Rename attribute `classes` to `class`

First of all, thanks for the great plug-in. It makes using plantuml in my documenation workflow (using MkDocs) such a joy!

When I tried to style the generated UML diagram <img> a little bit, I noticed, that the plug-in creates an element attribute called classes if I specify classes in the plantuml code block.

```plantuml format="svg" classes="myClass"
class MyClass
...

generates

<img alt="uml diagram" classes="myClass" src="..."

when the attribute should be named class instead. As a result, my browser doesn't pick up that I wanted this element to be of the class myClass and doesn't apply the styles I defined for it.

Fixing the output will lead to correct behaviour in terms of HTML and browsers. The other question is, if the input parameter, i.e. ```plantuml classes=... should be adapted too. The plural reads more natural, but since its sole purpose is specify an HTML attribute of the name class, my personal preference would be to name the input parameter class as well.

plantuml inside admonitions rendered outside

Hey,

I've a problem using plantuml-renders inside of admonitions from python-markdown.
I asked in the python-markdown repo yet, but as it's only happening with the plantuml renders, they suspect it's up to this extension.

setup:

package version
python 3.8.5
markdown 3.3.3
plantuml-markdown 3.4.1
pymdown-extensions 8.0.1
mkdocs 1.1.2
mkdocs-material 6.1.6

problem:

If I write plantuml code,
inside a code block,
inside an admonition,
the picture from plantuml-markdown get's placed below the admonition in the generated html.

Normal code blocks are working fine,
but the as plantuml marked ones replaced by the render not.

example code:

!!! note
    ```plantuml
    A --> B
    ```

html output:

<div class="admonition note">
    <p class="admonition-title">Note</p>
</div>
<p><img src="data:image/svg+xml;base64,<data left out>" class="uml" alt="uml diagram" title=""></p>

desired behaviour:

The produced diagram should be inside the admonition.

html output:

<div class="admonition note">
    <p class="admonition-title">Note</p>
    <p><img src="data:image/svg+xml;base64,<data left out>" class="uml" alt="uml diagram" title=""></p>
</div>

how suppress message after loading plantuml-markdown?

hello,
i use python-markdown as my markdown inside emacs.
every preview contains the messages from python-markdown, that all modules successfully loaded.

here is the code: python3 -m markdown -x plantuml_markdown -x mdx_superscript -x mdx_subscript
if i run that from shell without emacs, there are also the messages.
that is annoying, because the generated html contains this.

is there a way to suppress it?
i tried it with >/dev/null
but with no luck.

Any ideas?
Regards
Poul

Gantt diagram fails to render

I'm trying to render a gantt diagram using MkDocs with plantuml-markdown extension at GitLab. The diagram renders succesfully on the .md file that contains the syntax, but it fails to render on GitLab pages which I create with MkDocs. It instead renders an image underscoring a line in the used syntax with "Syntax error?" text under it.

The syntax used is as follows:

```plantuml
[Prototype design] lasts 15 days
[Test prototype] lasts 10 days
```

Am I missing something here?

Multiple images in 1 file: legal?

Do you support multiple different UML blocks in the same MD file? I was not able to successfully embed two, or to successfully use two pairs of {@startuml, @enduml} in one block, either. If this is supposed to be supported, I'll add examples.

Thanks!

svg_inline bug

I'm using svg_inline with this markdown file:

# kek
```plantuml
  Goofy <-- MickeyMouse: responds
  Goofy ->  MickeyMouse: calls
```

When I call markdown_py -x plantuml_markdown -c /pymd_config.yml file > dest with this config:

plantuml_markdown:
  cachedir: /tmp                            # set a non-empty value to enable caching
  base_dir: /wiki                           # where to search for diagrams to include
  format: svg_inline                               # default diagram image format
  classes: UML                              # default diagram classes
  title: UML diagram                        # default title (tooltip) for diagram images
  alt: UML diagram image                    # default `alt` attribute for diagram images
  priority: 23                              # plugin priority; the higher, the sooner will be applied (default 23)

This happens:

Traceback (most recent call last):
  File "/usr/local/bin/markdown_py", line 8, in <module>
    sys.exit(run())
  File "/usr/local/lib/python3.9/site-packages/markdown/__main__.py", line 145, in run
    markdown.markdownFromFile(**options)
  File "/usr/local/lib/python3.9/site-packages/markdown/core.py", line 405, in markdownFromFile
    md.convertFile(kwargs.get('input', None),
  File "/usr/local/lib/python3.9/site-packages/markdown/core.py", line 334, in convertFile
    html = self.convert(text)
  File "/usr/local/lib/python3.9/site-packages/markdown/core.py", line 261, in convert
    self.lines = prep.run(self.lines)
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 124, in run
    text1, idx1 = self._replace_block(text[idx:])
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 194, in _replace_block
    img = etree.fromstring(data.encode('UTF-8'))
  File "/usr/local/lib/python3.9/xml/etree/ElementTree.py", line 1347, in XML
    parser.feed(text)
xml.etree.ElementTree.ParseError: syntax error: line 1, column 0

Cashing output or making an option to disable plugin

I use this plugin within mkdocs system.

I converted my custom plantuml build script to use this plugin. My script simply found all *.puml.md files, rendered them to svg files and I used linke to images.

Now I moved all those puml files into the documentation and rendering pages take a very long time. I have around 15 plantuml diagrams total (not much) and building static site takes around 30-s each time and this is particularly problematic with real time serving (each CTRL+S takes 30s to show in browser). With my previous setup this didn't happen as I regenerated SVGs only if original puml files changed.

So,

Is it possible to cache the output so that if there are no changes to the input, plugin will reuse last output.

If not, please provide option enable: true/false that can take input from environment variable. This is, for example, how mkdocs pdf export plugin solves the problem of slownes of pdf printing everything on each change - on dev machine this is disabled but on production deployment this is enabled. This way when you write other parts of documentation (not plantuml, which is 99% of the time) the speed of build and serve will be as fast as possible. When you want to view UML you can either use external app or enable the plugin in config again. Furthermore, this can be even better if there is direct option to override it like this:

```yaml
    - plantuml_markdown:        
        enable: false
```

```plantuml
A->B : THIS WILL NOT RENDER
```

```plantuml enable="true"
A->B: THIS WILL OVERRIDE CURRENT CONFIG VALUE
```

In this case we have best option - the stuff you currently work on can be seen ASAP in browser, the stuff you know is good is skipped, and everything is turned on/off any time.

python-plantuml as an optional dependency

@mikitex70 would you be willing for python-plantuml to be an optional depdency? You only need it if you want to render the diagrams on a server. As far as I can tell, if you want to render locally you don't need python-plantuml at all.

Confused with how to use !include/source

First of all thanks for this wonderful plugin!

I am trying to include a diagram within another diagram which is standard plantuml syntax like so on a remote plantuml server:

```plantuml
@startuml
title this contains only B and D
!includesub file1.puml!BASIC
@enduml

Now say my markdown lives in /home/user/doc/hello.md
and my plantuml file lives under /home/user/doc/file1.puml

What should my base_dir be set to?

because no matter what I do I can't get it to render

I looked at the code and I see you do something with "source" which isn't part of the plantuml syntax but I feel like I am meant to sure it like this:

@startuml
title this contains only B and D
!includesub file1.puml!BASIC
@enduml

If you could help me then I could add some documentation so one else has issues with this.

`Priority` property explanation, plantuml is not rendered with priority=23 and the latest mkdocs

Please elaborate on the property priority in the documentation to be able to troubleshoot around it, right now there is nothing to use to understand what's going on

My stack is:

  • mkdocs, version 1.3.0
    • monorepo plugin
    • search plugin
    • material theme
    • plantuml markdown extension (this)

I had

  • priority: 100
  • a plain *.md file with a plain plantuml inside it:

"""
plantuml
== I'm embedded plantuml ==
actor -> another_actor
"""

And it has never been rendered until I decided to tweak the magic priority, instance switch to 100 helped and I don't know why

"svg_object" generates an invalid self-closing HTML tag

Hi,

I've recently started using markdown for some docs (with mkdocs), and noticed an issue when svg_object is used as the output format for plantuml

As shown, when opened in firefox, all content in the generated page is truncated below the SVG.

image

I believe the issue is that the code shown above results in the following HTML:

<object alt="uml diagram" class="uml" data="data:image/svg+xml..(lots of data)..." title="" />

Note that the tag is self-closing.
Looking at the HTML spec section 3.2.2.1:

In HTML, the use of this syntax is restricted to void elements and foreign elements. If it is used for other elements, it is treated as a start tag. In XHTML, it is possible for any element to use this syntax. But note that it is only conforming for elements with content models that permit them to be empty.

So - the tag should be rendered as <object alt="..."...></object> rather than as a self-closing tag.

Firefox seems to be interpreting this strictly resulting in a truncated page (though, sometimes I have seen it not truncate as well!). If I modify the generated HTML to use a closing tag then the page displays fine.

obviously svg_inline could generally be used instead, but thought this was worth mentioning

Thanks

I can't import the extension after the rename to "plantuml-markdown"

I can't use the extension with the new name.

Error in the shell:

In [3]: import plantuml-markdown                                                                                                                                                                                               
  File "<ipython-input-3-116cbb124db8>", line 1
    import plantuml-markdown
                   ^
SyntaxError: invalid syntax

Error in mkdocs serve:

INFO    -  Building documentation... 
ERROR   -  Config value: 'markdown_extensions'. Error: Failed loading extension "plantuml-markdown". 

Aborted with 1 Configuration Errors!

Am I missing something? I'm feeling a bit dumb.
Thank you

Provide option to generate "Error images" on bad plantuml syntax instead of raising an error

Summary

I propose an mode of operation where syntax errors (or any plantuml errors) are encoded within the generated image itself.

Context

I am trying to use plantuml-markdown as an mkdocs plugin while performing live-reload editing via mkdocs serve. The implementation of mkdocs serve aborts on any raised python error (PlantUMLHTTPError in my case). This forces the user to restart the mkdocs server resulting in a very unpleasant user experience.

While you could argue this is a problem with mkdocs and not this plugin, I would counter that exposing errors message in place of the generated image would produce a very nice user experience for many use cases. In documents containing many diagrams, this would allow the user to receive inline error feedback instead if out-of-band feedback via error message and stack trace.

As another example use case, consider a CI/CD development pipeline where it is undesirable to fail an entire documentation build due to one line of bad syntax.

The approach I am suggesting is used by vscode-markdown-preview-enhanced and produces a very nice user experience. Below is an example screenshot:

Example inline plantuml error!

Remote end closed connection without response

I am encounter the following error when I use mkdocs's markdown_extensions.
However, I still don't know where the problem is.
Can you check it please. Thanks.

error message:

 [E 190911 07:25:26 ioloop:909] Exception in callback <bound method LiveReloadHandler.poll_tasks of <class 'livereload.handlers.LiveReloadHandler'>>
     Traceback (most recent call last):
       File "/usr/local/lib/python3.6/site-packages/tornado/ioloop.py", line 907, in _run
         return self.callback()
       File "/usr/local/lib/python3.6/site-packages/livereload-2.6.1-py3.6.egg/livereload/handlers.py", line 69, in poll_tasks
         filepath, delay = cls.watcher.examine()
       File "/usr/local/lib/python3.6/site-packages/livereload-2.6.1-py3.6.egg/livereload/watcher.py", line 105, in examine
         func()
       File "/usr/local/lib/python3.6/site-packages/mkdocs-1.0.4-py3.6.egg/mkdocs/commands/serve.py", line 114, in builder
         build(config, live_server=live_server, dirty=dirty)
       File "/usr/local/lib/python3.6/site-packages/mkdocs-1.0.4-py3.6.egg/mkdocs/commands/build.py", line 274, in build
         _populate_page(file.page, config, files, dirty)
       File "/usr/local/lib/python3.6/site-packages/mkdocs-1.0.4-py3.6.egg/mkdocs/commands/build.py", line 177, in _populate_page
         page.render(config, files)
       File "/usr/local/lib/python3.6/site-packages/mkdocs-1.0.4-py3.6.egg/mkdocs/structure/pages.py", line 184, in render
         self.content = md.convert(self.markdown)
       File "/usr/local/lib/python3.6/site-packages/Markdown-3.1.1-py3.6.egg/markdown/core.py", line 265, in convert
         self.lines = prep.run(self.lines)
       File "/usr/local/lib/python3.6/site-packages/plantuml_markdown.py", line 115, in run
         text, did_replace = self._replace_block(text)
       File "/usr/local/lib/python3.6/site-packages/plantuml_markdown.py", line 151, in _replace_block
         diagram = self._render_diagram(code, requested_format)
       File "/usr/local/lib/python3.6/site-packages/plantuml_markdown.py", line 214, in _render_diagram
         diagram = self._render_remote_uml_image(code, requested_format)
       File "/usr/local/lib/python3.6/site-packages/plantuml_markdown.py", line 243, in _render_remote_uml_image
         return PlantUML("%s/%s/" % (self.config['server'], img_format)).processes(plantuml_code)
       File "/usr/local/lib/python3.6/site-packages/plantuml.py", line 179, in processes
         response, content = self.http.request(url, **self.request_opts)
       File "/usr/local/lib/python3.6/site-packages/httplib2/__init__.py", line 1953, in request
         cachekey,
       File "/usr/local/lib/python3.6/site-packages/httplib2/__init__.py", line 1618, in _request
         conn, request_uri, method, body, headers
       File "/usr/local/lib/python3.6/site-packages/httplib2/__init__.py", line 1556, in _conn_request
         response = conn.getresponse()
       File "/usr/local/lib/python3.6/http/client.py", line 1331, in getresponse
         try:
       File "/usr/local/lib/python3.6/http/client.py", line 297, in begin
         # read until we get a non-100 response
       File "/usr/local/lib/python3.6/http/client.py", line 266, in _read_status
         # Presumably, the server closed the connection before
     http.client.RemoteDisconnected: Remote end closed connection without response

svg not clickable

It seems that the SVGs generated from plantuml diagrams with links do not produce diagrams with clickable links. I think it has to do with the html tags. Instead of an img tag there must be an object tag in order to make links clickable. Would it be possible to add or change the html tagging for the SVG case?

PlantUML/Markdown code

## link test 
``` plantuml
ref over A,B
link [[http://plantuml.com Hello]]
end ref


This seem to work:
```html
<p>
   <object data="data:image/svg+xml;base64,PD94bWwgdm .......Pg==">
</object>
</p>

plugin does not work with pymdownx.snippet

Due to the high priority of 100 of the plantuml extensions it does not work with the snippets extension which registers with a priority of 32.

Currently the plantuml extension processes the Snippets Notation as plantuml within fenced code blocks, instead of having snippets first be replaced.

e.g.

```plantuml
--8<-- "my-plantuml.puml"
```

will render as

plantuml

ascii/unicode error while processing plantuml diagrams containing unicode characters to svg_inline format

Hi,

I have stumbled upon an issue with non-ascii characters in plantuml diagrams embedded in the md files.

Error reading page 'README.md': 'ascii' codec can't encode character u'\u015b' in position 85: ordinal not in range(128)

The character in question is ล›, but this happpens with any Polish characters.

Let's assume following aaa.md file:

# some md file with diagram
```plantuml
@startuml
Alicja -> ลukasz: "Zaลผรณล‚ฤ‡ gฤ™ล›lฤ… jaลบล„"
@enduml
```

And following config:

plantuml-markdown:
  format: svg_inline

Trying to execute markdown_py resutlts with following error:

$ markdown_py -x plantuml-markdown -c config.yml  aaa.md  > aaa.html
Successfuly imported extension module "plantuml-markdown".
Successfully loaded extension "plantuml-markdown.PlantUMLMarkdownExtension".
Traceback (most recent call last):
  File "/usr/local/bin/markdown_py", line 11, in <module>
    sys.exit(run())
  File "/usr/local/lib/python2.7/dist-packages/markdown/__main__.py", line 138, in run
    markdown.markdownFromFile(**options)
  File "/usr/local/lib/python2.7/dist-packages/markdown/core.py", line 411, in markdownFromFile
    kwargs.get('encoding', None))
  File "/usr/local/lib/python2.7/dist-packages/markdown/core.py", line 338, in convertFile
    html = self.convert(text)
  File "/usr/local/lib/python2.7/dist-packages/markdown/core.py", line 265, in convert
    self.lines = prep.run(self.lines)
  File "/usr/local/lib/python2.7/dist-packages/plantuml-markdown.py", line 113, in run
    text, did_replace = self._replace_block(text)
  File "/usr/local/lib/python2.7/dist-packages/plantuml-markdown.py", line 165, in _replace_block
    img = etree.fromstring(data)
  File "<string>", line 124, in XML
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0141' in position 1714: ordinal not in range(128)

This error does not appear when using other formats, such as: jpg,png,svg,svg_object.
It errors only for svg_inline format.

The error appears regardles of using with plantuml binary or server.

 # pip show plantuml-markdown
Name: plantuml-markdown
Version: 2.0.1
...

# pip show plantuml
Name: plantuml
Version: 0.1.1
...

# pip show markdown
Name: Markdown
Version: 3.0.1
...

# python --version
Python 2.7.12
...

# uname -a
Linux LU-SWILKOLAZKI 4.15.0-43-generic #46~16.04.1-Ubuntu SMP Fri Dec 7 13:31:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Let me know if any other information is needed to resolve this issue.

Keeping the inline code when a source file is provided

Ability to provide a source file is a really useful feature. Current implementation ignores the inline code when a source file is provided and PlantUML !include doesn't work when a remote server is used. After asking a question about it on a closed issue, I went ahead and updated the code locally. Would you bu interested to add such functionality?

Here's how I changed the plantuml_markdown.py lines 153 trough 159.

code = ""

# Load diagram source from external file
if source and base_dir:
    with open(os.path.join(base_dir, source), 'r') as f:
        code += f.read()

# Add extracted diagram source from markdown text
code += m.group('code')

This might be really useful to include theme files etc.

Indented blocks are not processed

I find that indented or nested blocks are not parsed. They are parsed only when starting at beginning of the line. To illustrate, this block is processed correctly

```plantuml
A --> B : I am processed
```

while a block nested under a list item (or whatever) is not processed

  * A list item with nested block

    ```plantuml
    A --> B : I am not processed
    ```

Is it possible to enable processing of nested/indented blocks?

Failed to run plantuml

Traceback (most recent call last):
  File "/usr/local/bin/markdown_py", line 34, in <module>
    run()
  File "/Library/Python/2.7/site-packages/markdown/__main__.py", line 130, in run
    markdown.markdownFromFile(**options)
  File "/Library/Python/2.7/site-packages/markdown/__init__.py", line 529, in markdownFromFile
    kwargs.get('encoding', None))
  File "/Library/Python/2.7/site-packages/markdown/__init__.py", line 441, in convertFile
    html = self.convert(text)
  File "/Library/Python/2.7/site-packages/markdown/__init__.py", line 371, in convert
    root = self.parser.parseDocument(self.lines).getroot()
  File "/Library/Python/2.7/site-packages/markdown/blockparser.py", line 65, in parseDocument
    self.parseChunk(self.root, '\n'.join(lines))
  File "/Library/Python/2.7/site-packages/markdown/blockparser.py", line 80, in parseChunk
    self.parseBlocks(parent, text.split('\n\n'))
  File "/Library/Python/2.7/site-packages/markdown/blockparser.py", line 98, in parseBlocks
    if processor.run(parent, blocks) is not False:
  File "/Library/Python/2.7/site-packages/markdown/extensions/plantuml.py", line 97, in run
    diagram = self.generate_uml_image(text, imgformat)
  File "/Library/Python/2.7/site-packages/markdown/extensions/plantuml.py", line 140, in generate_uml_image
    raise Exception('Failed to run plantuml: %s' % exc)
Exception: Failed to run plantuml: [Errno 20] Not a directory
::uml:: format="png" classes="umlmyDiagram" alt="Mydiagram"

	Goofy ->  MickeyMouse: calls
	Goofy <-- MickeyMouse: responds

::end-uml::

External includes broken in 3.6.0

Issue

When trying to render diagrams with external icons mkdocs fails. This was working fine in the previous version.

ERROR    -  Error reading page 'cloud-architecture.md': [Errno 2] No such file or directory: 'AWSPuml/Containers/EKSCloud.puml'
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 431, in _readInclLine
    temp_file = self._read_incl_line_file(
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 458, in _read_incl_line_file
    with open(inc_file_abs, "r") as inc:
FileNotFoundError: [Errno 2] No such file or directory: 'AWSPuml/Containers/EKSCloud.puml'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/local/bin/mkdocs", line 8, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line [140], in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/mkdocs/__main__.py", line 192, in build_command
    build.build(config.load_config(**kwargs), dirty=not clean)
  File "/usr/local/lib/python3.9/site-packages/mkdocs/commands/build.py", line 292, in build
    _populate_page(file.page, config, files, dirty)
  File "/usr/local/lib/python3.9/site-packages/mkdocs/commands/build.py", line 174, in _populate_page
    page.render(config, files)
  File "/usr/local/lib/python3.9/site-packages/mkdocs/structure/pages.py", line 175, in render
    self.content = md.convert(self.markdown)
  File "/usr/local/lib/python3.9/site-packages/markdown/core.py", line 261, in convert
    self.lines = prep.run(self.lines)
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 126, in run
    text1, idx1 = self._replace_block(text[idx:])
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 184, in _replace_block
    diagram = self._render_diagram(code, requested_format, base_dir)
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 274, in _render_diagram
    diagram = self._render_remote_uml_image(code, requested_format, base_dir)
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 350, in _render_remote_uml_image
    temp_file = self._readFile(plantuml_code, base_dir, False)
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 385, in _readFile
    temp_file = "@startuml\n" + self._readFileRec(lines, "", directory, dark_mode) + "@enduml\n"
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 393, in _readFileRec
    temp_file = self._readInclLine(
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 444, in _readInclLine
    raise e2
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 439, in _readInclLine
    temp_file = self._read_incl_line_file(
  File "/usr/local/lib/python3.9/site-packages/plantuml_markdown.py", line 458, in _read_incl_line_file
    with open(inc_file_abs, "r") as inc:
FileNotFoundError: [Errno 2] No such file or directory: 'AWSPuml/Containers/EKSCloud.puml'

The page content:

```plantuml
@startuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v13.0/dist
!include <awslib/AWSCommon>
!include <awslib/Storage/S3Bucket>
!include AWSPuml/Containers/EKSCloud.puml
!include <awslib/Compute/Lambda>
!include <awslib/GroupIcons/VirtualPrivateCloudVPC>
!include <awslib/GroupIcons/VPCSubnetPublic>
!include <awslib/GroupIcons/VPCSubnetPrivate>
!include AWSPuml/NetworkingContentDelivery/ElasticLoadBalancingNetworkLoadBalancer.puml
!include AWSPuml/NetworkingContentDelivery/VPCNATGateway.puml
!include AWSPuml/NetworkingContentDelivery/TransitGateway.puml
!include <awslib/Database/RDS>
skinparam linetype ortho
...

Output format in the configuration

It would be nice to have an option to specify default output format, like this:

  - plantuml_markdown
       format: svg

I know that I can use format ="svg" but its errorprone and tiresome to put it in the every diagram.

raising an error with mkdocs

Hello,
I'm trying to use plantuml-markdown as mkdocs plugin but it raises an error:

ERROR   -  Error building page index.md 
Traceback (most recent call last):
  File "/home/ksimmi/projects/tw/tengri_docs/venv/bin/mkdocs", line 11, in <module>
    sys.exit(cli())
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/mkdocs/__main__.py", line 127, in serve_command
    livereload=livereload
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/mkdocs/commands/serve.py", line 110, in serve
    config = builder()
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/mkdocs/commands/serve.py", line 106, in builder
    build(config, live_server=live_server, dirty=dirty)
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/mkdocs/commands/build.py", line 380, in build
    build_pages(config, dirty=dirty)
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/mkdocs/commands/build.py", line 333, in build_pages
    dump_json)
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/mkdocs/commands/build.py", line 189, in _build_page
    site_navigation=site_navigation
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/mkdocs/commands/build.py", line 59, in convert_markdown
    extension_configs=config['mdx_configs']
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/mkdocs/utils/__init__.py", line 364, in convert_markdown
    extension_configs=extension_configs or {}
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/markdown/__init__.py", line 159, in __init__
    configs=kwargs.get('extension_configs', {}))
  File "/home/ksimmi/projects/tw/tengri_docs/venv/local/lib/python2.7/site-packages/markdown/__init__.py", line 187, in registerExtensions
    ext.extendMarkdown(self, globals())
TypeError: extendMarkdown() takes exactly 2 arguments (3 given)

My requirements.txt:

appdirs==1.4.3
click==6.7
Jinja2==2.9.6
livereload==2.5.1
Markdown==2.6.8
MarkupSafe==1.0
mkdocs==0.16.3
mkdocs-bootswatch==0.4.0
plantuml-markdown==3.1.0
packaging==16.8
Pygments==2.2.0
pymdown-extensions==4.7
pyparsing==2.2.0
PyYAML==3.12
six==1.10.0
tornado==4.5.1
markdown-include==0.5.1

My markdown_extensions section from mkdocs.yml:

markdown_extensions:
  - markdown.extensions.toc:
      permalink: true
  - pymdownx.details:
  - pymdownx.superfences:
  - markdown.extensions.attr_list:
  - markdown_include.include:
  - plantuml_markdown:
      server: "http://www.plantuml.com/plantuml"

Could you help me please?
Thank you.

Cannot get !include working!

I am attempting to get an include working, and failing.

In my mkdocs.yml I have the following:

markdown_extensions:
  - plantuml_markdown:
      server: "http://www.plantuml.com/plantuml"
      base_dir: "."

In my MwkrDown file I have the follwing:

```plantuml
@startuml
!include subFolder/myFile.plantUml!0
@enduml
```

I get the following error when running mkdocs serve:

[E 210625 12:42:58 ioloop:907] Exception in callback <bound method LiveReloadHandler.poll_tasks of <class 'livereload.handlers.LiveReloadHandler'>>
    Traceback (most recent call last):
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\tornado\ioloop.py", line 905, in _run
        return self.callback()
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\livereload\handlers.py", line 69, in poll_tasks
        filepath, delay = cls.watcher.examine()
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\livereload\watcher.py", line 119, in examine
        func()
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\mkdocs\commands\serve.py", line 114, in builder
        build(config, live_server=live_server, dirty=dirty)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\mkdocs\commands\build.py", line 274, in build
        _populate_page(file.page, config, files, dirty)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\mkdocs\commands\build.py", line 177, in _populate_page
        page.render(config, files)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\mkdocs\structure\pages.py", line 184, in render
        self.content = md.convert(self.markdown)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\markdown\core.py", line 261, in convert
        self.lines = prep.run(self.lines)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\plantuml_markdown.py", line 124, in run
        text1, idx1 = self._replace_block(text[idx:])
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\plantuml_markdown.py", line 181, in _replace_block
        diagram = self._render_diagram(code, requested_format)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\plantuml_markdown.py", line 251, in _render_diagram
        diagram = self._render_remote_uml_image(code, requested_format)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\plantuml_markdown.py", line 280, in _render_remote_uml_image
        return PlantUML("%s/%s/" % (self.config['server'], img_format)).processes(plantuml_code)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\plantuml.py", line 173, in processes
        raise PlantUMLHTTPError(response, content)
      File "c:\users\{myArea}\appdata\local\programs\python\python39\lib\site-packages\plantuml.py", line 56, in __init__
        if not self.message:
    AttributeError: 'PlantUMLHTTPError' object has no attribute 'message'

I've searched around other closed issues on similar topics. I've also done a more general search using Google. I've not been able to resolve. Please help!

Can't make plantuml-markdown work on Windows

I am trying to run the command markdown_py -x plantuml_markdown FMI.md > out.html on Windows, where FMI.md is a markdown file with a PlantUML diagram inside (attached to this issue). The command works fine on Linux.

Note that:

  • The PlantUML diagram is valid, as I can extract it from the markdown file and render it with the PlantUML installed on my computer through the help of a plantuml.bat script that calls the correct java command.
  • The _plantuml-markdown.py scrip_t has also been copied into the extensions directory of the markdown Python package.

FMI.md

I would like to add support for skins.

PlantUML supports importing common themes into your diagrams like so:

@startuml
!include  my_fav_skin.iuml
@enduml

Problem:

When you use this plugin with the server it can't read that file since it's local to the markdown file and not on the server it self.

You could include it by putting it in the "source" tag but that doesn't work if you are already including a file that you want to skin.

Proposal:

Add a "skin" tag which you can import the skin from. The logic would work exactly like "source" does today by reading the file and concatenating the text.

skin="my_fav_skin.iuml"
@startuml
!include my_fav_skin.iuml
@enduml

Having said the above I'm thinking why don't we just read the !includes line and read that file instead of using the tags? That way we can load files + skin params and anything else anyone includes?

svg_inline

Hi, maybe this is more of a support question I think.... anyway, I tried the svg_inline option but the a link in the diagram is not clickable. Do I need to add CSS to make it clickable? I am using Firefox 63.

`source` parameter unable to handle files with unicode content

Environment

Windows 10
Python 3.9.6
mkdocs 1.2.2
plantuml-markdown 3.4.2

Test cases

test1.puml:

@startuml actor
' ๅ„
actor me
rectangle box {
  me --> (item)
}
@enduml

test2.puml:

@startuml actor
actor ๆˆ‘
rectangle ๆ–นๆก† {
  ๆˆ‘ --> (้ …็›ฎ)
}
@enduml

Output

```plantuml source="test1.puml"
```
  File "C:\Users\9ao9ai9ar\miniconda3\envs\dev\lib\site-packages\plantuml_markdown.py", line 176, in _replace_block
    code += f.read()
  File "C:\Users\9ao9ai9ar\miniconda3\envs\dev\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 20: character maps to <undefined>
```plantuml source="test2.puml"
```
  File "C:\Users\9ao9ai9ar\miniconda3\envs\dev\lib\site-packages\plantuml_markdown.py", line 280, in _render_remote_uml_image
    return PlantUML("%s/%s/" % (self.config['server'], img_format)).processes(plantuml_code)
  File "C:\Users\9ao9ai9ar\miniconda3\envs\dev\lib\site-packages\plantuml.py", line 173, in processes
    raise PlantUMLHTTPError(response, content)
  File "C:\Users\9ao9ai9ar\miniconda3\envs\dev\lib\site-packages\plantuml.py", line 56, in __init__
    if not self.message:
AttributeError: 'PlantUMLHTTPError' object has no attribute 'message'

The test cases render fine if the code is inlined; this problem only manifests itself when using the source parameter.

PlantUMLIncluder#_readFileRec strip causes @startyaml broken

Reference to this official document of YAML data: https://plantuml.com/yaml, plantuml supports rendering YAML data.

But this project always trims spaces, this behavior causes the source YAML data will lost all leading indentations.

line = line.strip()

To be more compatible, maybe it can skip the trimming work once it meets a @startyaml tag? Or provide an explicit option specifying unnecessary to trim leading spaces?

Getting this working in a windows context

@mikitex70
I've been trying to get this working on windows 7, but am somehow stuck. Perhaps you may have some pointers.

The jar file is located here: c:\plantuml\plantuml.jar

I have created a bash file and saved it as c:\plantuml\plantuml.sh

#!/bin/bash
java -jar c:\\plantuml\\plantuml.jar ${@}

I'm running mkdocs in a conda environment called 'client-docs', so have copied plantuml.py to c:\Users\xxxx\AppData\Local\Continuum\Miniconda3\envs\client-docs\Lib\site-packages\markdown\extensions\plantuml.py.

In order to call the bash file above with a single plantuml command, I have set an alias using doskey:

doskey plantuml=bash "c:\plantuml\plantuml.sh"

In the mkdocs.yml, I have:

markdown_extensions:
  - plantuml

However, when I try to run mkdocs serve -a 0.0.0.0:8000, I get an exception from the plantuml.py above:

... plantuml.py, line 166, in generate_uml_image
raise Exception('Failed to run plantuml: %s' % exc)
Exception: Failed to run plantuml: [WinError 2] The system cannot find the file specified

Any thoughts on what I might be doing wrong here? Thanks

code blocks with plantuml example renders as an img element

Hi,

I'm trying to include examples of plantuml syntax in code blocks and from version 3.1.3 and above this seems to be broken. Instead of render the example snippet it renders the generated img element.

V.3.1.2
Screen Shot 2020-08-03 at 3 20 55 PM

V.3.3.0
Screen Shot 2020-08-03 at 3 34 10 PM

The usage of code block snippet

Screen Shot 2020-08-03 at 4 46 00 PM

There may be another way to use plantuml examples in code blocks that I'm not aware of, feel free to point me in the right direction if so.

Thanks!

'/' in 'alt' or 'title' prevents diagram from rendering

This diagram renders as preformatted text:

```plantuml format="svg" classes="uml" alt="Client/Server" title="Client/Server"
class Foo
```

This one renders fine:

```plantuml format="svg" classes="uml" alt="Client Server" title="Client Server"
class Foo
```

(This is using the PlantUML service for rendering.)

Support for sourcing plantuml code in another file?

Most editors like Intellij and vs code have plugins for locally rendering .puml files, side by side with the code.
This allows creating the plantuml diagram while viewing the output simultaneously.

Would you be open to supporting an additional parameter that can take in a source? I sort of got this working locally, but I am not too familiar with Python, so the code is very hacky...

Support PlantUML Server as renderer

Is it possible to use a locally running PlantUML Server for rendering instead of the plantuml executable? Maybe a setting to choose the executable or server?

Using the server is way faster than the binary.
The difference is highly noticeable when using this plugin from something like MkDocs with live reload.

For comparison, this Visual Code Plugin allows toggling the renderer.

Note: A PlantUML server can be run at port 8080 with docker run -d -p 8080:8080 plantuml/plantuml-server:jetty

Inconsistency with GitLab

Hi,

GitLab supports plantuml out-of-the-box, you need to run plantuml on top of tomcat and then just enable plantuml in GitLab admin page (https://docs.gitlab.com/ee/administration/integration/plantuml.html). The problem is that it can't recognize ::uml:: and ::end-uml::. Support for following syntax would be very nice:

```plantuml
Bob -> Alice : hello
Alice -> Bob : Go Away
```

My markdown documents are parsed both with GitLab and MkDocs (when my CI system generates documentation).

garbled code in image

When the plug-in is used to draw a picture, when non English appears in the plantuml picture, it will display garbled code.
like this:

@startuml
(ๆต‹่ฏ•) -> (็ป“ๆžœ)
@enduml

Unit test fail

PATH="$PATH:$PWD/test" python -m unittest discover -v -s test

I have the output:

% PATH="$PATH:$PWD/test" python -m unittest discover -v -s test                                                                            18633 22:58:56
skipped 'Base class'
skipped 'Base class'
test_arg_alt (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_alt_characters (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_alt_inline_svg (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_classes (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_classes_inline_svg (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_height_svg_inline (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_png (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_format_svg (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_format_svg_inline (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_svg_object (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_format_txt (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_width_and_height_svg_inline (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_width_svg_inline (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_height (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_height_percent (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_title (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_title_characters (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_title_inline_svg (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_width (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_width_and_height (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_with_percent (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_extended_header (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_indented_fenced_code (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_multidiagram (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_other_fenced_code (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_plantuml (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_priority_after_snippets (test_plantuml_fenced.PlantumlTest_fenced) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_priority_before_snippets (test_plantuml_fenced.PlantumlTest_fenced) ... ok
test_tildes (test_plantuml_fenced.PlantumlTest_fenced) ... FAIL
test_unicode_chars (test_plantuml_fenced.PlantumlTest_fenced)
indented_code ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
skipped 'Base class'
test_arg_alt (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_alt_characters (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_alt_inline_svg (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_classes (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_classes_inline_svg (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_height_svg_inline (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_png (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_format_svg (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_format_svg_inline (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_svg_object (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_format_txt (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_width_and_height_svg_inline (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_format_width_svg_inline (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_height (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_height_percent (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_title (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_title_characters (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_title_inline_svg (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_arg_width (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_width_and_height (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_arg_with_percent (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_indented_fenced_code (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_multidiagram (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_other_fenced_code (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
FAIL
test_priority_after_snippets (test_plantuml_legacy.PlantumlTest_legacy) ... /usr/lib/python3.8/site-packages/markdown/extensions/__init__.py:79: DeprecationWarning: 'version_info' is deprecated. Use '__version_info__' instead.
  self.extendMarkdown(md)
ok
test_priority_before_snippets (test_plantuml_legacy.PlantumlTest_legacy) ... ok
test_unicode_chars (test_plantuml_legacy.PlantumlTest_legacy)
indented_code ... ok

======================================================================
FAIL: test_arg_alt (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 142, in test_arg_alt
    self.assertEqual(
AssertionError: '<p><img alt="Diagram test" class="uml" src="data:[38 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[38 chars]</p>'
- <p><img alt="Diagram test" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="Diagram test" title="" /></p>


======================================================================
FAIL: test_arg_alt_characters (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 151, in test_arg_alt_characters
    self.assertEqual(
AssertionError: '<p><img alt="Diagram-test/%&amp;&quot;" class="um[51 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[51 chars]</p>'
- <p><img alt="Diagram-test/%&amp;&quot;" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="Diagram-test/%&amp;&quot;" title="" /></p>


======================================================================
FAIL: test_arg_classes (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 169, in test_arg_classes
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="class1 class2" s[47 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[47 chars]</p>'
- <p><img alt="uml diagram" class="class1 class2" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="class1 class2" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_format_png (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 187, in test_arg_format_png
    self.assertEqual(self._stripImageData(self._load_file('png_diag.html')),
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[37 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[37 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_format_svg (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 195, in test_arg_format_svg
    self.assertEqual(self._stripImageData(self._load_file('svg_diag.html')),
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[41 chars]</p>' != '<p><img src="data:image/svg+xml;base64,ABCDEF==" [41 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/svg+xml;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/svg+xml;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_format_svg_object (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 203, in test_arg_format_svg_object
    self.assertEqual(self._stripImageData(self._load_file('svg_object_diag.html')),
AssertionError: '<p><object alt="uml diagram" class="uml" data="data:[42 chars]</p>' != '<p><object data="data:image/svg+xml;base64,ABCDEF=="[42 chars]</p>'
- <p><object alt="uml diagram" class="uml" data="data:image/svg+xml;base64,ABCDEF==" title="" /></p>
+ <p><object data="data:image/svg+xml;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_height (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 245, in test_arg_height
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[75 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[75 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-height:120px" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-height:120px" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_height_percent (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 254, in test_arg_height_percent
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[73 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[73 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-height:50%" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-height:50%" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_title (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 115, in test_arg_title
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[49 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[49 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="Diagram test" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="Diagram test" /></p>


======================================================================
FAIL: test_arg_title_characters (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 124, in test_arg_title_characters
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[62 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[62 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="Diagram-test/%&amp;&quot;" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="Diagram-test/%&amp;&quot;" /></p>


======================================================================
FAIL: test_arg_width (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 227, in test_arg_width
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[74 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[74 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-width:120px" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-width:120px" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_width_and_height (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 263, in test_arg_width_and_height
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[91 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[91 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-width:120px;max-height:120px" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-width:120px;max-height:120px" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_with_percent (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 236, in test_arg_with_percent
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[72 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[72 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-width:70%" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-width:70%" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_extended_header (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml_fenced.py", line 42, in test_extended_header
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[49 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[49 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="Diagram test" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="Diagram test" /></p>


======================================================================
FAIL: test_indented_fenced_code (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 324, in test_indented_fenced_code
    self.assertEqual('''<ul>
AssertionError: '<ul>[29 chars]<img alt="uml diagram" class="uml" src="data:i[51 chars]/ul>' != '<ul>[29 chars]<img src="data:image/png;base64,ABCDEF==" clas[51 chars]/ul>'
  <ul>
  <li>
  <p>list item</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  </li>
  </ul>

======================================================================
FAIL: test_multidiagram (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 301, in test_multidiagram
    self.assertEqual(self._stripImageData(self._load_file('multiple_diag.html')),
AssertionError: '<p>P[25 chars]<img alt="uml diagram" class="uml" src="data:i[180 chars]</p>' != '<p>P[25 chars]<img src="data:image/png;base64,ABCDEF==" clas[180 chars]</p>'
  <p>Paragraph before.</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  <p>Middle paragraph.</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  <p>Paragraph after.</p>

======================================================================
FAIL: test_other_fenced_code (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 313, in test_other_fenced_code
    self.assertEqual(self._stripImageData(self._load_file('code_and_diag.html')),
AssertionError: '<pre[67 chars]<img alt="uml diagram" class="uml" src="data:i[63 chars]</p>' != '<pre[67 chars]<img src="data:image/png;base64,ABCDEF==" clas[63 chars]</p>'
  <pre><code class="bash">ls -l
  </code></pre>
  
  <p>A paragraph</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  <p>Another paragraph</p>

======================================================================
FAIL: test_plantuml (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml_fenced.py", line 33, in test_plantuml
    self.assertEqual(self._stripImageData(self._load_file('png_diag.html')),
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[37 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[37 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_tildes (test_plantuml_fenced.PlantumlTest_fenced)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml_fenced.py", line 23, in test_tildes
    self.assertEqual('<p>Paragraph before.</p>\n'
AssertionError: '<p>P[25 chars]<img alt="uml diagram" class="uml" src="data:i[62 chars]</p>' != '<p>P[25 chars]<img src="data:image/png;base64,ABCDEF==" clas[62 chars]</p>'
  <p>Paragraph before.</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  <p>Paragraph after.</p>

======================================================================
FAIL: test_arg_alt (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 142, in test_arg_alt
    self.assertEqual(
AssertionError: '<p><img alt="Diagram test" class="uml" src="data:[38 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[38 chars]</p>'
- <p><img alt="Diagram test" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="Diagram test" title="" /></p>


======================================================================
FAIL: test_arg_alt_characters (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 151, in test_arg_alt_characters
    self.assertEqual(
AssertionError: '<p><img alt="Diagram-test/%&amp;&quot;" class="um[51 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[51 chars]</p>'
- <p><img alt="Diagram-test/%&amp;&quot;" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="Diagram-test/%&amp;&quot;" title="" /></p>


======================================================================
FAIL: test_arg_classes (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 169, in test_arg_classes
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="class1 class2" s[47 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[47 chars]</p>'
- <p><img alt="uml diagram" class="class1 class2" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="class1 class2" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_format_png (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 187, in test_arg_format_png
    self.assertEqual(self._stripImageData(self._load_file('png_diag.html')),
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[37 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[37 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_format_svg (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 195, in test_arg_format_svg
    self.assertEqual(self._stripImageData(self._load_file('svg_diag.html')),
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[41 chars]</p>' != '<p><img src="data:image/svg+xml;base64,ABCDEF==" [41 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/svg+xml;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/svg+xml;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_format_svg_object (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 203, in test_arg_format_svg_object
    self.assertEqual(self._stripImageData(self._load_file('svg_object_diag.html')),
AssertionError: '<p><object alt="uml diagram" class="uml" data="data:[42 chars]</p>' != '<p><object data="data:image/svg+xml;base64,ABCDEF=="[42 chars]</p>'
- <p><object alt="uml diagram" class="uml" data="data:image/svg+xml;base64,ABCDEF==" title="" /></p>
+ <p><object data="data:image/svg+xml;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_height (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 245, in test_arg_height
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[75 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[75 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-height:120px" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-height:120px" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_height_percent (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 254, in test_arg_height_percent
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[73 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[73 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-height:50%" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-height:50%" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_title (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 115, in test_arg_title
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[49 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[49 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="Diagram test" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="Diagram test" /></p>


======================================================================
FAIL: test_arg_title_characters (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 124, in test_arg_title_characters
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[62 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" clas[62 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="Diagram-test/%&amp;&quot;" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="Diagram-test/%&amp;&quot;" /></p>


======================================================================
FAIL: test_arg_width (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 227, in test_arg_width
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[74 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[74 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-width:120px" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-width:120px" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_width_and_height (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 263, in test_arg_width_and_height
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[91 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[91 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-width:120px;max-height:120px" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-width:120px;max-height:120px" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_arg_with_percent (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 236, in test_arg_with_percent
    self.assertEqual(
AssertionError: '<p><img alt="uml diagram" class="uml" src="data:i[72 chars]</p>' != '<p><img src="data:image/png;base64,ABCDEF==" styl[72 chars]</p>'
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" style="max-width:70%" title="" width="100%" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" style="max-width:70%" width="100%" class="uml" alt="uml diagram" title="" /></p>


======================================================================
FAIL: test_indented_fenced_code (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 324, in test_indented_fenced_code
    self.assertEqual('''<ul>
AssertionError: '<ul>[29 chars]<img alt="uml diagram" class="uml" src="data:i[51 chars]/ul>' != '<ul>[29 chars]<img src="data:image/png;base64,ABCDEF==" clas[51 chars]/ul>'
  <ul>
  <li>
  <p>list item</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  </li>
  </ul>

======================================================================
FAIL: test_multidiagram (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 301, in test_multidiagram
    self.assertEqual(self._stripImageData(self._load_file('multiple_diag.html')),
AssertionError: '<p>P[25 chars]<img alt="uml diagram" class="uml" src="data:i[180 chars]</p>' != '<p>P[25 chars]<img src="data:image/png;base64,ABCDEF==" clas[180 chars]</p>'
  <p>Paragraph before.</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  <p>Middle paragraph.</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  <p>Paragraph after.</p>

======================================================================
FAIL: test_other_fenced_code (test_plantuml_legacy.PlantumlTest_legacy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/gabriele/builds/plantuml-markdown/src/plantuml-markdown-3.2.0/test/test_plantuml.py", line 313, in test_other_fenced_code
    self.assertEqual(self._stripImageData(self._load_file('code_and_diag.html')),
AssertionError: '<pre[67 chars]<img alt="uml diagram" class="uml" src="data:i[63 chars]</p>' != '<pre[67 chars]<img src="data:image/png;base64,ABCDEF==" clas[63 chars]</p>'
  <pre><code class="bash">ls -l
  </code></pre>
  
  <p>A paragraph</p>
- <p><img alt="uml diagram" class="uml" src="data:image/png;base64,ABCDEF==" title="" /></p>
+ <p><img src="data:image/png;base64,ABCDEF==" class="uml" alt="uml diagram" title="" /></p>
  <p>Another paragraph</p>

----------------------------------------------------------------------
Ran 57 tests in 21.695s

FAILED (failures=35, skipped=3)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.