7
7
8
8
from . import version
9
9
from .domains import HoverXRefPythonDomainMixin , HoverXRefStandardDomainMixin
10
- from .translators import HoverXRefHTMLTranslator
10
+ from .translators import HoverXRefHTMLTranslatorMixin
11
11
12
12
ASSETS_FILES = [
13
13
'js/hoverxref.js_t' , # ``_t`` tells Sphinx this is a template
@@ -108,6 +108,42 @@ def setup_sphinx_tabs(app, config):
108
108
app .disconnect (listener_id )
109
109
110
110
111
+ def setup_translators (app ):
112
+ """
113
+ Override translators respecting the one defined (if any).
114
+
115
+ We create a new class by inheriting the Sphinx Translator already defined
116
+ and our own ``HoverXRefHTMLTranslatorMixin`` that includes the logic to
117
+ ``_hoverxref`` attributes.
118
+ """
119
+ if not app .registry .translators .items ():
120
+ translator = types .new_class (
121
+ 'HoverXRefHTMLTranslator' ,
122
+ (
123
+ HoverXRefHTMLTranslatorMixin ,
124
+ app .builder .default_translator_class ,
125
+ ),
126
+ {},
127
+ )
128
+ app .set_translator (app .builder .name , translator , override = True )
129
+ else :
130
+ for name , klass in app .registry .translators .items ():
131
+ if app .builder .format != 'html' :
132
+ # Skip translators that are not HTML
133
+ continue
134
+
135
+ translator = types .new_class (
136
+ 'HoverXRefHTMLTranslator' ,
137
+ (
138
+ HoverXRefHTMLTranslatorMixin ,
139
+ klass ,
140
+ ),
141
+ {},
142
+ )
143
+ app .set_translator (name , translator , override = True )
144
+
145
+
146
+
111
147
def setup (app ):
112
148
"""Setup ``hoverxref`` Sphinx extension."""
113
149
@@ -134,13 +170,7 @@ def setup(app):
134
170
app .add_config_value ('hoverxref_tooltip_content' , 'Loading...' , 'env' )
135
171
app .add_config_value ('hoverxref_tooltip_class' , 'rst-content' , 'env' )
136
172
137
- app .set_translator ('html' , HoverXRefHTMLTranslator , override = True )
138
-
139
- # Read the Docs use ``readthedocs`` as the name of the build, so we need to
140
- # replace this as well
141
- app .set_translator ('readthedocs' , HoverXRefHTMLTranslator , override = True )
142
- app .set_translator ('readthedocsdirhtml' , HoverXRefHTMLTranslator , override = True )
143
-
173
+ app .connect ('builder-inited' , setup_translators )
144
174
app .connect ('config-inited' , setup_domains )
145
175
app .connect ('config-inited' , setup_sphinx_tabs )
146
176
app .connect ('build-finished' , copy_asset_files )
0 commit comments