
    O&iI                     .   d Z ddlmZmZmZmZmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5  e(j6        e7          Z8 G d deee9e9f                            Z: G d de:          Z; G d de;          Z< G d de.          Z= G d de&          Z> G d d e          Z?d!ed"ee9ef         fd#Z@d$S )%zThe JavaScript domain.    )AnyDictIteratorListOptionalTuplecast)nodes)ElementNode)
directives)addnodes)desc_signaturepending_xref)Sphinx)Builder)ObjectDescription)DomainObjType)_pseudo_parse_arglist)BuildEnvironment)___)XRefRole)logging)FieldGroupedField
TypedField)SphinxDirectiveswitch_source_input)make_idmake_refnodenested_parse_with_titles)
OptionSpecc                   (   e Zd ZU dZdZdZej        ej        ej        dZe	e
d<   dee         fdZdededeeef         fd	Zd
edeedf         fdZdeeef         dededdfdZdedeeef         defdZddZddZdedefdZd
edefdZdS )JSObjectz-
    Description of a JavaScript object.
    F)noindexnoindexentrynocontentsentryoption_specreturnc                     g S N selfs    f/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/domains/javascript.pyget_display_prefixzJSObject.get_display_prefix.   s    	    sigsignodec           	         |                                 }d|v rX|dd         dk    rJ|                    dd          \  }}|                                 }|dd                                          }n|}d}| j        j                            dd          }| j        j                            d          }|}	 |                    dd          \  }}	n# t          $ r |}	d	}Y nw xY w|	}|r|rd                    ||g          }n0||r|}n)# |	}|r|rd                    ||g          }n||r|}w xY w|}
|rd                    ||g          }
||d
<   ||d<   |
|d<   |                                 }|r|t          j
        d	d	g|R  z  }d}|r|}n|r|}|rbt          j        d	d	          }|                    d          D ]2}|t          j        ||          z  }|t          j        dd          z  }3||z  }|t          j        d	d	t          j        ||                    z  }| j        r)|s|t          j                    z  }nt#          ||           |
|fS )zBreaks down construct signatures

        Parses out prefix and argument list from construct definition. The
        namespace and class will be determined by the nesting of domain
        directives.
        (N)   	js:object	js:module. moduleobjectfullname)stripsplitenvref_contextgetrsplit
ValueErrorjoinr2   r   desc_annotationdesc_addnamedesc_sig_namedesc_sig_punctuation	desc_namehas_argumentsdesc_parameterlistr   )r0   r4   r5   memberarglistprefixmod_namenamemember_prefixmember_namerA   display_prefixactual_prefixaddNameps                  r1   handle_signaturezJSObject.handle_signature2   s    iikk#::#bcc(c//!iiQ//OFG\\^^Fcrcl((**GGFG%))+t<<8'++K88
	')/sA)>)>&M;; 	 	 	KMMM	 D '- '6="9::M&	 D '- '6="9::M&&&&& 	0xx//H$"&
0022 	Ix/BHHHHHG 	%"MM 	%$M 	+B33G"((-- C C81!Q77788cBBBwG8%b"h.DT4.P.PQQQ 	8 886888%gw777s*   7C D
 C"D
 !C""D
 
&D0sig_node.c                     d|vrdS |                     d          }|d         }|r|g|                    d          R S t          |                    d                    S )NrA   r.   r?   r=   )rF   rC   tuple)r0   r]   modnamerA   s       r1   _object_hierarchy_partsz JSObject._object_hierarchy_partsp   sl    X%%2,,x((J' 	.2hnnS11222,,---r3   name_objNc                 H   | j         j                            d          }|r|dz   nd|d         z   }t          | j         | j        j        d|          }|d                             |           | j        j                            |           t          t          | j         
                    d                    }|                    || j        ||           d| j        vr?|                     ||          }|r)| j        d	                             d
||dd f           d S d S d S )Nr<   r=   r>   r   idsjslocationr(   entriessingle)rD   rE   rF   r!   statedocumentappendnote_explicit_targetr	   JavaScriptDomain
get_domainnote_objectobjtypeoptionsget_index_text	indexnode)	r0   rb   r4   r5   rT   rA   node_iddomain	indextexts	            r1   add_target_and_indexzJSObject.add_target_and_index{   s,   8'++K88&.6HsNNB(1+E$(DJ$7XFFg&&&
00999&(;(;D(A(ABB8T\7WMMM--++Hh??I [y)00(IwPRTX1YZZZZZ .-[ [r3   
objectnamec                 (   |\  }}| j         dk    r(|st          d          |z  S t          d          ||fz  S | j         dk    rt          d          |z  S | j         dk    rt          d          |z  S | j         dk    rt          d	          ||fz  S d
S )Nfunctionz%s() (built-in function)z%s() (%s method)classz%s() (class)dataz %s (global variable or constant)	attributez%s (%s attribute)r>   )rq   r   )r0   ry   rb   rU   objs        r1   rs   zJSObject.get_index_text   s    	c<:%% <344t;;'((D#;66\W$$^$$t++\V##7884??\[((())T3K77rr3   c                 6   d}| j         r>| j                                         \  }}|r|                    d          nd}| j        r|}|rM|| j        j        d<   | j        r9| j        j                            dg           }|                    |           dS dS dS )a  Handle object nesting before content

        :py:class:`JSObject` represents JavaScript language constructs. For
        constructs that are nestable, this method will build up a stack of the
        nesting hierarchy so that it can be later de-nested correctly, in
        :py:meth:`after_content`.

        For constructs that aren't nestable, the stack is bypassed, and instead
        only the most recent object is tracked. This object prefix name will be
        removed with :py:meth:`after_content`.

        The following keys are used in ``self.env.ref_context``:

            js:objects
                Stores the object prefix history. With each nested element, we
                add the object prefix to this list. When we exit that object's
                nesting level, :py:meth:`after_content` is triggered and the
                prefix is removed from the end of the list.

            js:object
                Current object prefix. This should generally reflect the last
                element in the prefix history
        Nr=   r;   
js:objects)namespoprB   allow_nestingrD   rE   
setdefaultrl   )r0   rS   obj_nameobj_name_prefixobjectss        r1   before_contentzJSObject.before_content   s    0 : 	"*.*..*:*:'X3BL_**3///F! "! 	'06DH -! '(.99,KKv&&&&&		' 	'' 'r3   c                     | j         j                            dg           }| j        r&	 |                                 n# t
          $ r Y nw xY wt          |          dk    r|d         nd| j         j        d<   dS )a^  Handle object de-nesting after content

        If this class is a nestable object, removing the last nested class prefix
        ends further nesting in the object.

        If this class is not a nestable object, the list of classes should not
        be altered as we didn't affect the nesting levels in
        :py:meth:`before_content`.
        r   r   r8   Nr;   )rD   rE   r   r   r   
IndexErrorlen)r0   r   s     r1   after_contentzJSObject.after_content   s     (&11,CC 	   <?LL1<L<LWR[[26 	[)))s   > 
A
ArA   c                 .    |                     dd          S )zGenerate old styled node_id for JS objects.

        .. note:: Old Styled node_id was used until Sphinx-3.0.
                  This will be removed in Sphinx-5.0.
        $_S_)replace)r0   rA   s     r1   make_old_idzJSObject.make_old_id   s     U+++r3   c                 v   |                     d          sdS | j        j        j        }|j                             d          }|j        r|dv rd}nd}|d         ^ }}|j        dk    r|                     d|          |z   S |j        dk    r||z   S |j        d	k    rd
                    |||z   gz             S dS )N
_toc_partsr>   rq   >   methodr{   ()rv   rA   hideallr=   )rF   rD   appconfigparentadd_function_parenthesestoc_object_entries_show_parentsrI   )r0   r]   r   rq   parensparentsrU   s          r1   _toc_entry_namezJSObject._toc_entry_name   s    ||L)) 	2$/%%i00* 	w:P/P/PFFF!,/$1X==<<
D11F::1V;;&= 1U::88Gtf}o5666rr3   )r+   N)__name__
__module____qualname____doc__rO   r   r   flagr*   r$   __annotations__r   r   r2   strr   r   r\   ra   rx   rs   r   r   r   r   r.   r3   r1   r&   r&      s         
 M M ?"%? K   DJ    < C < . < U3PS8_ <  <  <  < |	. 	.5c? 	. 	. 	. 	.[U38_ [3 [&4[9=[ [ [ [  c3h C    "' "' "' "'H8 8 8 8&,C ,C , , , , 3      r3   r&   c            	           e Zd ZdZdZ ed ed          ddd           ed	 ed
          ddd           ed ed          dd           ed ed          dd          gZ	dS )
JSCallablez<Description of a JavaScript function, method or constructor.T	arguments	Arguments)argumentarg	parameterparamfunc)	paramtypetype)labelr   typerolename	typenameserrorsThrows)throws)r   rolenamer   can_collapsereturnvalueReturnsF)returnsr+   )r   has_argr   
returntypezReturn type)rtypeN)
r   r   r   r   rO   r   r   r   r   doc_field_typesr.   r3   r1   r   r      s        FFM 	
;aannB &2G	I 	I 	I 	XQQx[[6'"&	( 	( 	( 	m11Y<<)	+ 	+ 	+l!!M"2"2E	  	  	 OOOr3   r   c                   .    e Zd ZdZdZdee         fdZdS )JSConstructorz,Like a callable but with a different prefix.Tr+   c                 R    t          j        dd          t          j                    gS )Nr|   )r   desc_sig_keyworddesc_sig_spacer/   s    r1   r2   z JSConstructor.get_display_prefix  s(    )'7;;'))+ 	+r3   N)r   r   r   r   r   r   r   r2   r.   r3   r1   r   r      s>        66M+DJ + + + + + +r3   r   c                   t    e Zd ZU dZdZdZdZdZej	        ej	        dZ
eed<   dee         fd	Zd
edefdZdS )JSModulea  
    Directive to mark description of a new JavaScript module.

    This directive specifies the module name that will be used by objects that
    follow this directive.

    Options
    -------

    noindex
        If the ``noindex`` option is specified, no linkable elements will be
        created, and the module won't be added to the global module index. This
        is useful for splitting up the module definition across multiple
        sections or files.

    :param mod_name: Module name
    Tr:   r   F)r'   r)   r*   r+   c                    | j         d                                         }|| j        j        d<   d| j        v }t          j                    }t          | j        | j	                  5  | j        j
        |_
        t          | j        | j	        |           d d d            n# 1 swxY w Y   g }|st          t          | j                            d                    }t          | j        | j        j
        d|          }|                    ||           |                    |d|| j        j        | j        f           t          j        dd|gd	          }| j        j
                            |           |                    |           t/          d
          |z  }t1          j        d||dd fg          }	|                    |	           |                    |j                   |S )Nr   r<   r'   re   r?   rf   r>   T)rd   ismodz%s (module)ri   )rh   )r   rB   rD   rE   rr   r
   sectionr    rj   contentrk   r#   r	   rn   ro   r!   note_modulerp   docnamelinenotargetrm   rl   r   r   indexextendchildren)
r0   rT   r'   content_noderetrv   ru   r   rw   inodes
             r1   runzJSModule.run$  s   >!$**,,,4[)t|+ % T\:: 	M 	M$(J$7L!$TZ|LLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M
  	*DH,?,?,E,EFFFdh
(;XxPPGx111 x7)-)94;(G  I I I \"bwitDDDFJ44V<<<JJv-((83INXy'2t,T+UVVVEJJu

<()))
s   %-BB"%B"r`   c                     d|z   S )zGenerate old styled node_id for JS modules.

        .. note:: Old Styled node_id was used until Sphinx-3.0.
                  This will be removed in Sphinx-5.0.
        zmodule-r.   )r0   r`   s     r1   r   zJSModule.make_old_idC  s     7""r3   N)r   r   r   r   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   r   r*   r$   r   r   r   r   r   r   r.   r3   r1   r   r     s          $ K %?%? K   
T$Z    >#3 #3 # # # # # #r3   r   c                   >    e Zd Zdedededededeeef         fdZdS )	
JSXRefRolerD   refnodehas_explicit_titletitler   r+   c                    |j                             d          |d<   |j                             d          |d<   |sj|                    d          }|                    d          }|dd         dk    r2|dd          }|                    d          }|dk    r||dz   d          }|dd         dk    r|dd          }d|d	<   ||fS )
Nr;   r<   r=   ~r   r:   r8   Trefspecific)rE   rF   lstriprfind)r0   rD   r   r   r   r   dots          r1   process_linkzJSXRefRole.process_linkM  s      #22;??"22;??! 	,LL%%E]]3''FQqSzS  abb	kk#&&"99!#'((OE!A#;#ABBZF%)GM"f}r3   N)	r   r   r   r   r   boolr   r   r   r.   r3   r1   r   r   L  sb         0 7 )-69CFKPQTVYQY?     r3   r   c                      e Zd ZU dZdZdZ e ed          d           e ed          d           e ed          d           e ed	          d	           e ed
          d           e ed          d          dZe	e	e
eeedZ ed           ed           ed           e             e             e            dZi i dZeeeeeeef         f         f         ed<   edeeeeeef         f         fd            Z	 d5dededededdf
dZedeeeeef         f         fd            ZdededdfdZdeddfd Zd!ee         d"eddfd#Z	 d6d%ed&ed'ed(ed)ed*edeeeeeef         f         fd+Z d%ed,ed-e!d)ed.ed/e"d0e#de$e#         fd1Z%d%ed,ed-e!d.ed/e"d0e#deeee#f                  fd2Z&de'eeeeeeef                  fd3Z(d/e#defd4Z)dS )7rn   zJavaScript language domain.re   
JavaScriptr{   r   r   methr|   r}   r~   attrr?   mod)r{   r   r|   r}   r~   r?   T)
fix_parens)r   r   r|   r}   r   r   )r   modulesinitial_datar+   c                 8    | j                             di           S )Nr   r}   r   r/   s    r1   r   zJavaScriptDomain.objects      y##Ir222r3   NrA   rq   ru   rg   c                     || j         v r@| j         |         d         }t                              t          d          |||||           | j        j        ||f| j         |<   d S )Nr   z.duplicate %s description of %s, other %s in %srf   )r   loggerwarningr   rD   r   )r0   rA   rq   ru   rg   r   s         r1   rp   zJavaScriptDomain.note_object  sr    t|##l8,Q/GNN2NOO"Hgw  S S S"&("2GW!EXr3   c                 8    | j                             di           S )Nr   r   r/   s    r1   r   zJavaScriptDomain.modules  r   r3   r`   c                 2    | j         j        |f| j        |<   d S r-   )rD   r   r   )r0   r`   ru   s      r1   r   zJavaScriptDomain.note_module  s    !%!17 ;Wr3   r   c                     t          | j                                                  D ]\  }\  }}}||k    r| j        |= t          | j                                                  D ]\  }\  }}||k    r| j        |= d S r-   )listr   itemsr   )r0   r   rA   pkg_docname_node_id_lr`   s          r1   	clear_doczJavaScriptDomain.clear_doc  s    59$,:L:L:N:N5O5O 	+ 	+1H1{Hbg%%L*04T\5G5G5I5I0J0J 	* 	*,G,k8g%%L)	* 	*r3   docnames	otherdatac                     |d                                          D ]\  }\  }}}||v r|||f| j        |<   |d                                          D ]\  }\  }}||v r||f| j        |<   d S )Nr   r   )r   r   r   )	r0   r  r  rA   fnru   rq   rT   r   s	            r1   merge_domaindataz!JavaScriptDomain.merge_domaindata  s    09)0D0J0J0L0L 	@ 	@,H,r7GX~~*,gw)?X&09)0D0J0J0L0L 	@ 	@,H,{Gh&&*5w)?X&	@ 	@r3   r   rD   rT   rS   rU   typsearchorderc                    |dd          dk    r
|d d         }g }|r-|r+|                     d                    |||g                     |r*|                     d                    ||g                     |r*|                     d                    ||g                     |                     |           |dk    r|                                 d }|D ]}	|	| j        v r|	}|| j                            |          fS )Nr   r=   r   )rl   rI   reverser   rF   )
r0   rD   rT   rS   rU   r  r  searchesnewnamesearch_names
             r1   find_objzJavaScriptDomain.find_obj  s#   99D 	@ 	@OOCHHh%=>>??? 	8OOCHHh%566777 	6OOCHHfd^44555!# 	& 	&Kdl**%((1111r3   fromdocnamebuilderr   nodecontnodec                 
   |                     d          }|                     d          }	|                    d          rdnd}
|                     |||	|||
          \  }}|sd S t          |||d         |d         ||          S )Nr<   r;   r   r:   r   )rF   hasattrr  r"   )r0   rD   r  r  r  r   r  r  rT   rS   r  rU   r   s                r1   resolve_xrefzJavaScriptDomain.resolve_xref  s     88K((+&&<<66=aaAMM#xkRR	c 	4G[#a&#a&(DQQQr3   c           	         |                     d          }|                     d          }|                     ||||d d          \  }	}
|
sg S d|                     |
d                   z   t          |||
d         |
d         ||	          fgS )Nr<   r;   r:   zjs:   r   )rF   r  role_for_objtyper"   )r0   rD   r  r  r   r  r  rT   rS   rU   r   s              r1   resolve_any_xrefz!JavaScriptDomain.resolve_any_xref  s     88K((+&&MM#xqII	c 	I..s1v666g{CFCFHdSSU V 	Vr3   c              #   ~   K   t          | j                                                  D ]\  }\  }}}|||||dfV  d S )Nr:   )r   r   r   )r0   refnamer   ru   r  s        r1   get_objectszJavaScriptDomain.get_objects  s]      04T\5G5G5I5I0J0J 	= 	=,G,gw7C'1<<<<<	= 	=r3   c                     |                     d          }|                     d          }|                     d          }|d S d                    t          d |||g                    S )Nr<   r;   	reftargetr=   )rF   rI   filter)r0   r  r`   rS   r   s        r1   get_full_qualified_namez(JavaScriptDomain.get_full_qualified_name  sb    ((;''+&&+&&>488F4'66)BCCDDDr3   r-   )r   )*r   r   r   r   rU   r   r   r   object_typesr   r   r&   r   r   r   rolesr   r   r   r   r   propertyr   r   rp   r   r   r   r   r  r   intr  r   r   r   r   r  r  r   r  r   r.   r3   r1   rn   rn   `  sE        %%DE WQQz]]V44WQQx[[V44WQQwZZW55WQQvYYV44WQQ{^^V44WQQx[[U33 L  " J t,,,t,,,t,,, E ; ;L$sDeCHo!5667   
 3c5c3#778 3 3 3 X3 %)F FC F# F F!F-1F F F F 3c5c?23 3 3 3 X3<3 < < < < < <* * * * * *@c @t @ @ @ @ @ /02 2, 2 2S 2PS 22(+249#uS#s]?S:S4T2 2 2 20	R 0 	Rs 	RW 	R	R'*	R2>	RJQ	R"7+	R 	R 	R 	R	V$4 	V3 	VQX 	V!$	V,8	VDK	V"5g#67	V 	V 	V 	V=XeCc3S,H&IJ = = = =EG E E E E E E Er3   rn   r   r+   c                 D    |                      t                     dddddS )Nbuiltinr  T)versionenv_versionparallel_read_safeparallel_write_safe)
add_domainrn   )r   s    r1   setupr,    s2    NN#$$$ "#	  r3   N)Ar   typingr   r   r   r   r   r   r	   docutilsr
   docutils.nodesr   r   docutils.parsers.rstr   sphinxr   sphinx.addnodesr   r   sphinx.applicationr   sphinx.buildersr   sphinx.directivesr   sphinx.domainsr   r   sphinx.domains.pythonr   sphinx.environmentr   sphinx.localer   r   sphinx.rolesr   sphinx.utilr   sphinx.util.docfieldsr   r   r   sphinx.util.docutilsr   r    sphinx.util.nodesr!   r"   r#   sphinx.util.typingr$   	getLoggerr   r   r   r&   r   r   r   r   rn   r,  r.   r3   r1   <module>rA     s.     C C C C C C C C C C C C C C C C C C       ( ( ( ( ( ( ( ( + + + + + +       8 8 8 8 8 8 8 8 % % % % % % # # # # # # / / / / / / * * * * * * * * 7 7 7 7 7 7 / / / / / /         ! ! ! ! ! !       A A A A A A A A A A E E E E E E E E M M M M M M M M M M ) ) ) ) ) )		8	$	$M M M M M sCx1 M M M`       $+ + + + +J + + +A# A# A# A# A# A# A# A#H       (E E E E Ev E E EDv $sCx.      r3   