Skip to content

Commit e098cbc

Browse files
committed
refactor: Check builder support by checking translation_handlers
1 parent 4db8cd4 commit e098cbc

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

src/sphinxnotes/strike/__init__.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@
1919
from sphinx.builders import Builder
2020
from sphinx.builders.html import StandaloneHTMLBuilder
2121
from sphinx.builders.latex import LaTeXBuilder
22+
from sphinx.util import logging
23+
from sphinx.environment import BuildEnvironment
2224

2325
from . import meta
2426

27+
logger = logging.getLogger(__name__)
2528

26-
# List of all builders that support render :class:`strike_node`.
29+
# NOTE: DEPRECATED since 1.3, DO NOT it.
2730
SUPPORTED_BUILDERS: list[type[Builder]] = [StandaloneHTMLBuilder, LaTeXBuilder]
2831

32+
2933
class strike_node(nodes.Inline, nodes.TextElement):
3034
pass
3135

@@ -39,10 +43,16 @@ def strike_role(
3943
options: Dict = {},
4044
content: List[str] = [],
4145
) -> Tuple[List[Node], List[system_message]]:
42-
env = inliner.document.settings.env # type: ignore
43-
44-
if not isinstance(env.app.builder, tuple(SUPPORTED_BUILDERS)):
45-
# Builder is not supported, fallback to text.
46+
env: BuildEnvironment = inliner.document.settings.env # type: ignore
47+
builder = env.app.builder
48+
49+
if not _is_supported_builder(builder):
50+
logger.warning(
51+
f'role {typ} is not supported for builder {builder.name}, fallback to text',
52+
location=(env.docname, lineno),
53+
type='strike',
54+
subtype='unspported_builder',
55+
)
4656
return [Text(unescape(text))], []
4757

4858
node = strike_node(rawtext, unescape(text))
@@ -74,6 +84,15 @@ def latext_depart_strike_node(self, node: strike_node) -> None:
7484
self.body.append('}')
7585

7686

87+
def _is_supported_builder(builder: Builder) -> bool:
88+
if isinstance(builder, tuple(SUPPORTED_BUILDERS)):
89+
return True # NOTE: Compatible with version 1.2.
90+
91+
# a dict of builder name -> dict of node name -> visitor and departure functions
92+
handlers = builder.app.registry.translation_handlers[builder.name]
93+
return handlers.get(strike_node.__name__) is not None
94+
95+
7796
def setup(app: Sphinx):
7897
"""Sphinx extension entrypoint."""
7998
meta.pre_setup(app)

0 commit comments

Comments
 (0)