2626
2727
2828INDENT = " " # doc is indented by four spaces
29- DUMMYHOOK = lambda a ,x : None
30- class _Flags (Enum ): NONE = 0 # for no value in dict
29+ RAW_ANCHOR = True # whether to use raw html anchors or RST ones
30+
31+
32+ _DUMMYHOOK = lambda a ,x : None # for doing nothing in traversing
33+ class _Flags (Enum ): NONE = 0 # for no value in dict (when optional)
34+
3135
3236class Argument :
3337 """Define possible arguments and their types and properties."""
@@ -168,10 +172,10 @@ def flatten_sub(self, value: dict) -> Dict[str, "Argument"]:
168172 return flat_subs
169173
170174 def traverse (self , argdict : dict ,
171- key_hook : Callable [["Argument" , dict ], None ] = DUMMYHOOK ,
172- value_hook : Callable [["Argument" , Any ], None ] = DUMMYHOOK ,
173- sub_hook : Callable [["Argument" , dict ], None ] = DUMMYHOOK ,
174- variant_hook : Callable [["Variant" , dict ], None ] = DUMMYHOOK ):
175+ key_hook : Callable [["Argument" , dict ], None ] = _DUMMYHOOK ,
176+ value_hook : Callable [["Argument" , Any ], None ] = _DUMMYHOOK ,
177+ sub_hook : Callable [["Argument" , dict ], None ] = _DUMMYHOOK ,
178+ variant_hook : Callable [["Variant" , dict ], None ] = _DUMMYHOOK ):
175179 # first, do something with the key
176180 # then, take out the vaule and do something with it
177181 key_hook (self , argdict )
@@ -181,10 +185,10 @@ def traverse(self, argdict: dict,
181185 key_hook , value_hook , sub_hook , variant_hook )
182186
183187 def traverse_value (self , value : Any ,
184- key_hook : Callable [["Argument" , dict ], None ] = DUMMYHOOK ,
185- value_hook : Callable [["Argument" , Any ], None ] = DUMMYHOOK ,
186- sub_hook : Callable [["Argument" , dict ], None ] = DUMMYHOOK ,
187- variant_hook : Callable [["Variant" , dict ], None ] = DUMMYHOOK ):
188+ key_hook : Callable [["Argument" , dict ], None ] = _DUMMYHOOK ,
189+ value_hook : Callable [["Argument" , Any ], None ] = _DUMMYHOOK ,
190+ sub_hook : Callable [["Argument" , dict ], None ] = _DUMMYHOOK ,
191+ variant_hook : Callable [["Variant" , dict ], None ] = _DUMMYHOOK ):
188192 # this is not private, and can be called directly
189193 # in the condition where there is no leading key
190194 value_hook (self , value )
@@ -197,10 +201,10 @@ def traverse_value(self, value: Any,
197201 key_hook , value_hook , sub_hook , variant_hook )
198202
199203 def _traverse_sub (self , value : dict ,
200- key_hook : Callable [["Argument" , dict ], None ] = DUMMYHOOK ,
201- value_hook : Callable [["Argument" , Any ], None ] = DUMMYHOOK ,
202- sub_hook : Callable [["Argument" , dict ], None ] = DUMMYHOOK ,
203- variant_hook : Callable [["Variant" , dict ], None ] = DUMMYHOOK ):
204+ key_hook : Callable [["Argument" , dict ], None ] = _DUMMYHOOK ,
205+ value_hook : Callable [["Argument" , Any ], None ] = _DUMMYHOOK ,
206+ sub_hook : Callable [["Argument" , dict ], None ] = _DUMMYHOOK ,
207+ variant_hook : Callable [["Variant" , dict ], None ] = _DUMMYHOOK ):
204208 assert isinstance (value , dict )
205209 sub_hook (self , value )
206210 for subvrnt in self .sub_variants .values ():
@@ -220,13 +224,13 @@ def check(self, argdict: dict, strict: bool = False):
220224 self .traverse (argdict ,
221225 key_hook = Argument ._check_exist ,
222226 value_hook = Argument ._check_value ,
223- sub_hook = Argument ._check_strict if strict else DUMMYHOOK )
227+ sub_hook = Argument ._check_strict if strict else _DUMMYHOOK )
224228
225229 def check_value (self , argdict : dict , strict : bool = False ):
226230 self .traverse_value (argdict ,
227231 key_hook = Argument ._check_exist ,
228232 value_hook = Argument ._check_value ,
229- sub_hook = Argument ._check_strict if strict else DUMMYHOOK )
233+ sub_hook = Argument ._check_strict if strict else _DUMMYHOOK )
230234
231235 def _check_exist (self , argdict : dict ):
232236 if self .optional is True :
@@ -544,13 +548,14 @@ def _make_cpath(self, cname: str,
544548def make_rst_refid (name ):
545549 if not isinstance (name , str ):
546550 name = '/' .join (name )
547- return f'.. raw:: html\n \n <a id="{ name } "></a>'
551+ return (f'.. _`{ name } `: \n ' if not RAW_ANCHOR
552+ else f'.. raw:: html\n \n <a id="{ name } "></a>' )
548553
549554
550555def make_ref_pair (path , text = None , prefix = None ):
551556 if not isinstance (path , str ):
552557 path = '/' .join (path )
553- url = "#" + path
558+ url = f"` { path } `_" if not RAW_ANCHOR else f"# { path } "
554559 ref = ("" if not prefix else f"{ prefix } :" ) + path
555560 inline = f'`{ ref } `_' if not text else f'|{ ref } |_'
556561 target = f'.. _`{ ref } `: { url } '
0 commit comments