1212from markdown .preprocessors import Preprocessor
1313
1414
15- class MermaidDataURIPreprocessor (Preprocessor ):
16- """Preprocessor to convert mermaid code blocks to SVG/PNG images ."""
15+ class MermaidProcessor (Preprocessor ):
16+ """Preprocessor to convert mermaid code blocks to SVG/PNG image Data URIs ."""
1717
1818 KROKI_URL = 'https://kroki.io'
1919
20+ MIME_TYPES = {
21+ 'svg' : 'image/svg+xml' ,
22+ 'png' : 'image/png' ,
23+ }
24+
2025 def __init__ (self , md , config ):
2126 super ().__init__ (md )
2227 self .kroki_url = config .get ('kroki_url' , self .KROKI_URL )
@@ -52,13 +57,10 @@ def run(self, lines: List[str]) -> List[str]:
5257 else :
5358 image_type = 'svg'
5459
55- base64image = self ._mermaid2base64image (mermaid_code , image_type )
60+ base64image = self ._get_base64image (mermaid_code , image_type )
5661 if base64image :
5762 # Build the <img> tag with extracted options
58- if image_type == 'svg' :
59- img_tag = f'<img src="data:image/svg+xml;base64,{ base64image } "'
60- else :
61- img_tag = f'<img src="data:image/png;base64,{ base64image } "'
63+ img_tag = f'<img src="data:{ self .MIME_TYPES [image_type ]} ;base64,{ base64image } "'
6264 for key , value in option_dict .items ():
6365 img_tag += f' { key } ={ value } '
6466 img_tag += ' />'
@@ -76,15 +78,14 @@ def run(self, lines: List[str]) -> List[str]:
7678
7779 return new_lines
7880
79- def _mermaid2base64image (self , mermaid_code : str , image_type : str ) -> str :
81+ def _get_base64image (self , mermaid_code : str , image_type : str ) -> str :
8082 """Convert mermaid code to SVG/PNG."""
81- # Use Kroki or mmdc (Mermaid CLI) to convert mermaid code to image
8283 if not self .mermaid_cli :
83- return self ._mermaid2base64image_kroki (mermaid_code , image_type )
84+ return self ._get_base64image_kroki (mermaid_code , image_type )
8485 else :
85- return self ._mermaid2base64image_mmdc (mermaid_code , image_type )
86+ return self ._get_base64image_mmdc (mermaid_code , image_type )
8687
87- def _mermaid2base64image_kroki (self , mermaid_code : str , image_type : str ) -> str :
88+ def _get_base64image_kroki (self , mermaid_code : str , image_type : str ) -> str :
8889 """Convert mermaid code to SVG/PNG using Kroki."""
8990 kroki_url = f'{ self .kroki_url } /mermaid/{ image_type } '
9091 headers = {'Content-Type' : 'text/plain' }
@@ -100,7 +101,7 @@ def _mermaid2base64image_kroki(self, mermaid_code: str, image_type: str) -> str:
100101 return base64image
101102 return ''
102103
103- def _mermaid2base64image_mmdc (self , mermaid_code : str , image_type : str ) -> str :
104+ def _get_base64image_mmdc (self , mermaid_code : str , image_type : str ) -> str :
104105 """Convert mermaid code to SVG/PNG using mmdc (Mermaid CLI)."""
105106 with tempfile .NamedTemporaryFile (mode = 'w' , suffix = '.mmd' , delete = False ) as tmp_mmd :
106107 tmp_mmd .write (mermaid_code )
@@ -147,7 +148,7 @@ def _mermaid2base64image_mmdc(self, mermaid_code: str, image_type: str) -> str:
147148 return base64image
148149
149150
150- class MermaidDataURIExtension (Extension ):
151+ class MermaidExtension (Extension ):
151152 """Markdown Extension to support Mermaid diagrams."""
152153
153154 def __init__ (self , ** kwargs ):
@@ -161,11 +162,11 @@ def __init__(self, **kwargs):
161162 def extendMarkdown (self , md ):
162163 config = self .getConfigs ()
163164 final_config = {** config , ** self .extension_configs }
164- mermaid_preprocessor = MermaidDataURIPreprocessor (md , final_config )
165+ mermaid_preprocessor = MermaidProcessor (md , final_config )
165166 md .preprocessors .register (mermaid_preprocessor , 'markdown_mermaid_data_udi' , 50 )
166167
167168
168169# pylint: disable=C0103
169170def makeExtension (** kwargs ):
170- """Create an instance of the MermaidDataURIExtension ."""
171- return MermaidDataURIExtension (** kwargs )
171+ """Create an instance of the MermaidExtension ."""
172+ return MermaidExtension (** kwargs )
0 commit comments