Skip to content

Commit 0407932

Browse files
committed
allow users to feed mermaid diagrams into html-macros
Provide support to allow a user to configure this extension to wrap raw Mermaid diagrams into an HTML macro block, instead of forcing to use either `png` or `svg` formats. This is only support for Confluence instances that support an HTML macro. Signed-off-by: James Knight <[email protected]>
1 parent 7edabcf commit 0407932

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

sphinxcontrib/confluencebuilder/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,10 @@ def setup(app):
244244
# Remove a detected title from generated documents.
245245
cm.add_conf_bool('confluence_remove_title', 'confluence')
246246

247+
# (configuration - third-party related)
248+
# Wrap Mermaid nodes into HTML macros.
249+
cm.add_conf_bool('confluence_mermaid_html_macro', 'confluence')
250+
247251
# (configuration - undocumented)
248252
# Enablement for bulk archiving of packages (for premium environments).
249253
cm.add_conf_bool('confluence_adv_bulk_archiving')

sphinxcontrib/confluencebuilder/transmute/ext_sphinxcontrib_mermaid.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from docutils import nodes
55
from sphinxcontrib.confluencebuilder.compat import docutils_findall as findall
66
from sphinxcontrib.confluencebuilder.logger import ConfluenceLogger
7+
from sphinxcontrib.confluencebuilder.nodes import confluence_html
78

89
# ##############################################################################
910
# disable import/except warnings for third-party modules
@@ -50,12 +51,20 @@ def __init__(self, builder):
5051
self.builder = builder
5152
mock_translator = MockTranslator(builder)
5253

54+
# if a user configures to use a mermaid/html-macro hint, we will
55+
# instead leave the raw content as is and wrap things in an HTML macro
56+
format_ = builder.config.mermaid_output_format
57+
if not builder.config.confluence_mermaid_html_macro and format_ == 'raw':
58+
format_ = 'png'
59+
5360
for node in findall(doctree, mermaid):
54-
try:
55-
format_ = builder.config.mermaid_output_format
56-
if format_ == 'raw':
57-
format_ = 'png'
61+
if format_ == 'raw':
62+
raw_html = f'<div class="mermaid">{node["code"]}</div>'
63+
new_node = confluence_html(rawsource=raw_html)
64+
node.replace_self(new_node)
65+
continue
5866

67+
try:
5968
fname, _ = mermaid_render(mock_translator,
6069
node['code'], node['options'], format_, 'mermaid')
6170
if not fname:

0 commit comments

Comments
 (0)