networkx_mermaid.formatters   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 12
dl 0
loc 47
rs 10
c 0
b 0
f 0
wmc 3

2 Functions

Rating   Name   Duplication   Size   Complexity  
A markdown() 0 5 1
A html() 0 12 2
1
from .typing import MermaidDiagram
2
3
HTML_TEMPLATE = """<!doctype html>
4
<html lang="en">
5
  <head>
6
    <link rel="icon" type="image/x-icon" href="https://mermaid.js.org/favicon.ico">
7
    <meta charset="utf-8">
8
    <title>Mermaid Diagram</title>
9
    <style>
10
    pre.mermaid {
11
      font-family: "Fira Mono", "Roboto Mono", "Source Code Pro", monospace;
12
    }
13
    </style>
14
  </head>
15
  <body>
16
    <pre class="mermaid">
17
    </pre>
18
    <script type="module">
19
      import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
20
      let config = { startOnLoad: true, flowchart: { useMaxWidth: false, htmlLabels: true } };
21
      mermaid.initialize(config);
22
    </script>
23
  </body>
24
</html>
25
"""
26
27
28
def markdown(diagram: MermaidDiagram) -> str:
29
    """
30
    Generate Markdown code for a Mermaid diagram.
31
    """
32
    return f"```mermaid\n{diagram}\n```"
33
34
35
def html(diagram: MermaidDiagram, title: str | None = None) -> str:
36
    """
37
    Generate HTML code for a Mermaid diagram.
38
    """
39
    output = HTML_TEMPLATE.replace(
40
        '<pre class="mermaid">', f'<pre class="mermaid">\n{diagram}'
41
    )
42
    if title:
43
        output = output.replace(
44
            "<title>Mermaid Diagram</title>", f"<title>{title}</title>"
45
        )
46
    return output
47