
    ?eN4              
       j   d dl mZmZ ddlmZmZ ddlmZmZ ddl	m
Z
mZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZ dZd	 ZddZd ZddZddZd Z ddZ!d Z"ej#        ej$        ej%        ej&        ej'        ej(        ej)        ej*        ej+        ej,        f
Z-d Z.ddZ/	 	 ddZ0ej1        dfdZ2d
S )    )Element
SubElement   )is_number_slotreflected_slot)
ScopedNameSTRIP_GLOBAL)AccessSpecifierArgumentTypeArrayArgumentIfaceFileTypeKwArgsPyQtMethodSpecifierPySlotTransfer   )ArgumentFormatterClassFormatterEnumFormatterformat_scoped_py_nameSignatureFormatterValueListFormatterVariableFormatter0c                    | j         }|j        |k    rdS t          dt          |j                  }| j        D ])}|j        j         |u r|j        st          || ||           *|j        D ]}t          || ||           t          || |           t          || |           |j        D ]}t          || ||j                   |S )z9 Return the root Module element of the XML for a module. NModule)versionname)modulepy_namer   _XML_VERSION_NRclasses
iface_fileexternal_classproxies_enums
_variablesglobal_functions	_function	overloads)specmodule_namer   rootklassmembers         >lib/python3.11/site-packages/sipbuild/generator/outputs/xml.py
output_xmlr2   (   s    
 [F~$$t8_6>JJJD . ."f,,U^,4vu--- * *tT65))))
4vtT6""") 8 8$ff&67777K    Nc                     | |}nHt          | t                    r| }n| j        j        }|                    t
                    }||d|z   z  }|S )zL Return a 'realname' attribute containing a fully qualified C/C++ name.
    Nz::)
isinstancer   r#   fq_cpp_namecpp_strippedr	   )scoper0   r6   s      r1   	_realnamer9   D   sa     }eZ(( 	7KK*6K!..|<<4&=(Kr3   c           	      0   |j         r%t          | dt          |          j                  S |j        r| }ni }|j        d|d<   |j        d|d<   |j        d|d<   |j        |j        j	        j
        j        |d<   |j        d	                    |j                  |d
<   t          |j                  dk    r)d	                    fd|j        D                       |d<   t          | d|t          |          j        t!          |j	        j                            }|j        D ]'}|j        t(          j        urt-          |||           (t/          |||           t1          |||           |j        D ]}t5          |||j        |           dS )z Output the XML for a class. OpaqueClass)r   N1pickleconvertconvertfromextends 
flagsenumsr   c                 T    g | ]$}t          |                                          %S  )r   as_rest_ref).0sr,   s     r1   
<listcomp>z_class.<locals>.<listcomp>v   s?     9 9 9 ! $D!,,88:: 9 9 9r3   inheritsClassr   realname)	is_opaquer   r   
fq_py_nameis_hidden_namespacepickle_codeconvert_to_type_codeconvert_from_type_code
real_classr#   r   r    pyqt_flags_enumsjoinlensuperclassesr9   r6   ctorsaccess_specifierr
   PRIVATE_ctorr'   r(   membersr*   r+   )parentr,   r   r/   parent_klassattribctorr0   s    `      r1   r%   r%   Y   s      =&-#D%00;= = = 	=   B("F8%1 #F9'3$'F=!' % 0 ; B JF9!-#&88E,B#C#CF< u!""a''!$9 9 9 9%*%79 9 9": ":F: "&'6#D%00;"5#3#?@@B B B  3 3 (???,eT222
<vu---|T65111- F F,feouEEEEF Fr3   c                 J   |j         D ]}|j        |u r|j        |u r|j        U|j        D ]L}t          | dt          |j        |j        j                  t          |j        |j	                  dd           Mst          | dt          |j        |j        j                  t          |j
                            }|j        D ]\}t          |j        |j        j                  dz   |j        j        z   }t          |d	|t          |j
        |j	                             ]dS )
z. Output the XML for all the enums in a scope. NMemberr<   int)r   rL   consttypenameEnumrK   .
EnumMember)enumsr   r8   r    r\   r   r   r   r9   cpp_namer6   )r]   r,   r   r8   enumr0   enum_elr   s           r1   r'   r'      s[    
 6 6;&  TZ5%8%8|#"l 7 7Fvx!6tz$*N$7"9 "9%.tz6?%K%K"%	7 7 7 7 77 %VV24: $ 13 3!*4+;!<!<> > >
 #l 6 6F0T\=NOORUUX^XfXkkDw4%.t/?$*O&5 &56 6 6 6 6%6 6r3   c                    |j         D ]}|j        |u ry|j        |u rpt          ||          }i }|j        j        s|d|d<   |j        rd|d<   t          | d||j        t          |j
                  t          ||j                             dS )z2 Output the XML for all the variables in a scope. Nr<   rd   staticrb   )r   rL   re   )	variablesr   r8   r   typeis_const	is_staticr   rN   r9   r6   	_typename)r]   r,   r   r8   variable	formatterr_   s          r1   r(   r(      s     N = =?f$$5)@)@)$99IF}% &"%w! '#&x vxi6J&x';<<&tX];;= = = == =r3   c           
      \   i }t          |j                  rt          ||j                  |d<   t          | d|t	          |d          t          |d                    }|j        j        D ]@}|j        rt          ||||j
                   |j        rt          ||||j
        d           AdS )z Output the XML for a ctor. cppsigFunction__init__rK   ToutN)_has_cpp_signaturecpp_signature_cpp_signaturer   r   r9   py_signatureargsis_in	_argumentkw_argsis_out)r]   r,   r8   r`   r_   function_elargs          r1   r[   r[      s     F$,-- D)$0BCCxVZ&uj99uj113 3 3K  % F F9 	<k4dl;;;: 	Fk4dlEEEEF Fr3   c                    |D ]F}|j         |u r9|j        t          j        ur%|j        t
          j        u ri }t          |j                  rt          ||j                  |d<   t          | d|t          ||j        j                  t          ||j                            }|j        j        D ]}t%          ||||j                   d}	|du p|j        j        t,          j        u p|j        }
|C|j        <|j        j        d         j        t4          j        u r|j        j        d         j        }	d}
t;          | ||||	|
           HdS )z  Output the XML for a function. rw   SignalrK   Nr   F)commonrY   r
   rZ   pyqt_method_specifierr   SIGNALr|   r}   r~   r   r   r    r   r9   rj   r   r   r   r   r#   rp   r   	NAMESPACErr   py_slotr   CLASS
definition	_overload)r]   r,   r0   r+   r8   overloadr_   	signal_elr   r@   rr   s              r1   r*   r*      s     # #?f$$)B/Ja)a)a-1D1KKK%h&<== 4'5d$2(4 (4F8$ 'vx25&.:MNN!*5(2C!D!DF F F	 $05 F FCisH4DEEEEF "d]te.>.C}G^.^tbjbt	=V^%?HDYD^_`DaDfjvj|D|D|&38;FG %I&$x!# # #/# #r3   c           
         |j         rt          |j        j                  }nd}||j        j        j        }|j        }n|}i }t          |j                  rt          ||j        |j
                  |d<   |j        rd|d<   |rd|d<   |j        t          j        u rd|d<   |j        rd|d<   |t!          ||          j        |d	<   t%          | d
|t'          ||          t)          ||                    }	|j        j        }
|
j        |
j        j        |
j        j        dk    rd}n+|
j        t4          j        u ot9          |
j                  dk    }|s:t=          |	||j        j        t>          j         d|j!        tD          j#        u            tI          |j        j                  ot9          |j        j%                  dk    }tM          |j        j%                  D ]a\  }}|r|dk    r|j         s|dk    r|j         r#|j'        rt=          |	|||j(                   |j)        rt=          |	|||j(        d           bdS )z! Output the XML for an overload. N)rq   rw   r<   abstractrn   slotvirtualr@   rx   rK    Tr   )r{   transfer_resultr   r   rz   )*is_reflectedr   r   r   r    r   rj   r|   r}   r~   rq   is_abstractr   r   SLOT
is_virtualr   rN   r   r   r9   r   result
type_hintshint_outrp   r   VOIDrV   derefsr   r   NONEtransferr   TRANSFER_BACKr   r   	enumerater   r   r   )r]   r,   r8   r   r@   rr   r   rj   r_   r   r   	no_resultmight_ignorear   s                  r1   r   r      s     ho566|&+$F(011 ,)$0F!*, , ,x  ! z x%)<)AAAv  y*499DyVZ&ud33uh//1 1 1K
 ")F$):)C)OTZTeTnrtTtTt		[L$55Q#fm:L:LPQ:Q	 M+tX%:%A6; ( 1X5K K	M 	M 	M 	M #8?#:;;dHDYD^@_@_cd@dLH1677 J J3 	Avvh3vAvv(/v9 	@k4h.>???: 	Jk4h.>DIIIIJ Jr3   c                 D    | dS | j         D ]}|j        t          v r dS dS )z, Return True if there is a C/C++ signature. NFT)r   rp   _HANDWRITTEN_CODE_TYPES)	signaturer   s     r1   r|   r|   =  sC     u ~  8...55 / 4r3   Fc                 x    t          | |          }|                    t          dd          }|rdnd}d| d| S )z% Return the XML for a C++ signature. T)stripmake_publicas_xmlz constr   ())r   cpp_argumentsr	   )r,   r   rq   ru   r   rd   s         r1   r~   r~   L  sX     #433I""4 #  D (HHbEter3   c                 N   |j         t          j        uri }|sI|j        rd|d<   |j        rd|d<   |j        t          j        u rd|d<   n|j        t          j        u rd|d<   |s|j        t          j	        u rd|d<   t          | |rdnd	|t          ||||
                     dS dS )z  Ouput the XML for an argument. r<   	allownonedisallownonetor   thisbackReturnArgument)r   r{   )re   N)arrayr   
ARRAY_SIZE
allow_nonedisallow_noner   r   TRANSFERTRANSFER_THISr   r   rs   )r]   r,   r   r   r{   r   r_   s          r1   r   r   X  s     y000 
	,~ *&){#  -),~&|x000%)z""!777%+z" 	(clh.DDD!'F:6s:88
F"4g3GGG	I 	I 	I 	I 	I 	I% 10r3   c                    d}|s<|j         5|t          j        u s|t          j        u r|j        ||j         j         dz   z  }t          | |          }|                    |d          }||z  }|sX|j         Q|j        J|dz  }t          | |j                                                  }||                    |d          }||z  }|S )z Return the XML for a type. r   Nz: T)r   z = )	r   r   ALLOPTIONALdefault_valuer   rE   r   py_default_value)r,   r   r   r{   rG   arg_formatterarg_rest_refrest_refs           r1   rs   rs   r  s     	A  &38'fj  W%?%?CDUDa%%A%dC00M ,,S,>>LA 
38'C,=,I	U
 &dC,=>>JJLL$55l 6 ! !H 	
XHr3   )N)F)FF)3xml.etree.ElementTreer   r   python_slotsr   r   scoped_namer   r	   specificationr
   r   r   r   r   r   r   r   
formattersr   r   r   r   r   r   r   r!   r2   r9   r%   r'   r(   r[   r*   r   PYOBJECTPYTUPLEPYLISTPYDICT
PYCALLABLEPYSLICEPYTYPEPYBUFFERPYENUMCAPSULEr   r|   r~   r   r   rs   rD   r3   r1   <module>r      sr  0 6 5 5 5 5 5 5 5 9 9 9 9 9 9 9 9 2 2 2 2 2 2 2 2F F F F F F F F F F F F F F F F F F F F                    8   *,F ,F ,F^6 6 6 64= = = =(F F F(# # # #<DJ DJ DJR    	 	 	 	 /4I I I I4 "(%      r3   