@@ -166,16 +166,14 @@ def patch_docutils(confdir: Optional[str] = None) -> Generator[None, None, None]
166166 yield
167167
168168
169- class ElementLookupError (Exception ):
170- pass
171-
169+ class CustomReSTDispatcher :
170+ """Custom reST's mark-up dispatcher.
172171
173- class sphinx_domains :
174- """Monkey-patch directive and role dispatch, so that domain-specific
175- markup takes precedence.
172+ This replaces docutils's directives and roles dispatch mechanism for reST parser
173+ by original one temporarily.
176174 """
177- def __init__ ( self , env : "BuildEnvironment" ) -> None :
178- self . env = env
175+
176+ def __init__ ( self ) -> None :
179177 self .directive_func : Callable = lambda * args : (None , [])
180178 self .roles_func : Callable = lambda * args : (None , [])
181179
@@ -189,13 +187,35 @@ def enable(self) -> None:
189187 self .directive_func = directives .directive
190188 self .role_func = roles .role
191189
192- directives .directive = self .lookup_directive
193- roles .role = self .lookup_role
190+ directives .directive = self .directive
191+ roles .role = self .role
194192
195193 def disable (self ) -> None :
196194 directives .directive = self .directive_func
197195 roles .role = self .role_func
198196
197+ def directive (self ,
198+ directive_name : str , language_module : ModuleType , document : nodes .document
199+ ) -> Tuple [Optional [Type [Directive ]], List [system_message ]]:
200+ return self .directive_func (directive_name , language_module , document )
201+
202+ def role (self , role_name : str , language_module : ModuleType , lineno : int , reporter : Reporter
203+ ) -> Tuple [RoleFunction , List [system_message ]]:
204+ return self .role_func (role_name , language_module , lineno , reporter )
205+
206+
207+ class ElementLookupError (Exception ):
208+ pass
209+
210+
211+ class sphinx_domains (CustomReSTDispatcher ):
212+ """Monkey-patch directive and role dispatch, so that domain-specific
213+ markup takes precedence.
214+ """
215+ def __init__ (self , env : "BuildEnvironment" ) -> None :
216+ self .env = env
217+ super ().__init__ ()
218+
199219 def lookup_domain_element (self , type : str , name : str ) -> Any :
200220 """Lookup a markup element (directive or role), given its name which can
201221 be a full name (with domain).
@@ -226,17 +246,20 @@ def lookup_domain_element(self, type: str, name: str) -> Any:
226246
227247 raise ElementLookupError
228248
229- def lookup_directive (self , directive_name : str , language_module : ModuleType , document : nodes .document ) -> Tuple [Optional [Type [Directive ]], List [system_message ]]: # NOQA
249+ def directive (self ,
250+ directive_name : str , language_module : ModuleType , document : nodes .document
251+ ) -> Tuple [Optional [Type [Directive ]], List [system_message ]]:
230252 try :
231253 return self .lookup_domain_element ('directive' , directive_name )
232254 except ElementLookupError :
233- return self . directive_func (directive_name , language_module , document )
255+ return super (). directive (directive_name , language_module , document )
234256
235- def lookup_role (self , role_name : str , language_module : ModuleType , lineno : int , reporter : Reporter ) -> Tuple [RoleFunction , List [system_message ]]: # NOQA
257+ def role (self , role_name : str , language_module : ModuleType , lineno : int , reporter : Reporter
258+ ) -> Tuple [RoleFunction , List [system_message ]]:
236259 try :
237260 return self .lookup_domain_element ('role' , role_name )
238261 except ElementLookupError :
239- return self . role_func (role_name , language_module , lineno , reporter )
262+ return super (). role (role_name , language_module , lineno , reporter )
240263
241264
242265class WarningStream :
0 commit comments