B
    0ªa‘f  ã               @   sl   d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ ddlmZ ddlm	Z	 d	Z
G d
d„ de	ƒZdS )é    )Úwith_statement)Úabsolute_import)Údivision)Úprint_function)Úunicode_literalsé   )Úast)Ú	XMLWriterz1.2c                   sJ  e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdOdd„Zdd„ Zd d!„ Zd"d#„ ZdPd%d&„Zd'd(„ ZdQd*d+„Zd,d-„ Zd.d/„ ZdRd0d1„Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Z d@dA„ Z!dBdC„ Z"dDdE„ Z#g fdFdG„Z$dHdI„ Z%dSdKdL„Z&dMdN„ Z'‡  Z(S )TÚ	GIRWriterc                s&   t t| ƒ ¡  |  d¡ |  |¡ d S )NzªThis file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations. )Úsuperr
   Ú__init__Zwrite_commentÚ_write_repository)ÚselfÚ	namespace)Ú	__class__© ú5/usr/lib/gobject-introspection/giscanner/girwriter.pyr   &   s    zGIRWriter.__init__c          	   C   s¤   dt fdddg}|  d|¡~ xt|jƒD ]}|  |¡ q*W x tt|jƒƒD ]}|  |¡ qLW x tt|jƒƒD ]}|  	|¡ qnW || _
|  |¡ d | _
W d Q R X d S )NÚversion)Zxmlnsz)http://www.gtk.org/introspection/core/1.0)zxmlns:cz&http://www.gtk.org/introspection/c/1.0)z
xmlns:glibz)http://www.gtk.org/introspection/glib/1.0Z
repository)ÚCOMPATIBLE_GIR_VERSIONÚ
tagcontextÚsortedZincludesÚ_write_includeÚsetZexported_packagesÚ_write_pkgconfig_pkgZ
c_includesÚ_write_c_includeÚ
_namespaceÚ_write_namespace)r   r   ÚattrsÚincludeZpkgÚ	c_includer   r   r   r   .   s    
zGIRWriter._write_repositoryc             C   s$   d|j fd|jfg}|  d|¡ d S )NÚnamer   r   )r    r   Ú	write_tag)r   r   r   r   r   r   r   ?   s    zGIRWriter._write_includec             C   s   d|fg}|   d|¡ d S )Nr    Úpackage)r!   )r   r"   r   r   r   r   r   C   s    
zGIRWriter._write_pkgconfig_pkgc             C   s   d|fg}|   d|¡ d S )Nr    z	c:include)r!   )r   r   r   r   r   r   r   G   s    
zGIRWriter._write_c_includec          	   C   s†   d|j fd|jfdd |j¡fdd |j¡fdd |j¡fg}|  d|¡2 dd	„ }x"t| ¡ |d
D ]}|  	|¡ qfW W d Q R X d S )Nr    r   zshared-libraryú,zc:identifier-prefixeszc:symbol-prefixesr   c             S   s    t | tjƒrd| fS d| fS d S )Nr   r   )Ú
isinstancer   ÚAlias)Úvalr   r   r   ÚnscmpU   s    z)GIRWriter._write_namespace.<locals>.nscmp)Úkey)
r    r   ÚjoinZshared_librariesZidentifier_prefixesZsymbol_prefixesr   r   ÚvaluesÚ_write_node)r   r   r   r'   Únoder   r   r   r   K   s    zGIRWriter._write_namespacec             C   s  t |tjƒr|  |¡ nøt |tjƒr0|  |¡ nàt |tjƒrH|  |¡ nÈt |tjtj	fƒrf|  
|¡ nªt |tjƒr~|  |¡ n’t |tjƒr–|  |¡ nzt |tjƒr®|  |¡ nbt |tjƒrÆ|  |¡ nJt |tjƒrÔn<t |tjƒrì|  |¡ n$t |tjƒr|  |¡ n
td|ƒ d S )NzWRITER: Unhandled node)r$   r   ZFunctionÚ_write_functionÚEnumÚ_write_enumZBitfieldÚ_write_bitfieldÚClassÚ	InterfaceÚ_write_classÚCallbackÚ_write_callbackÚRecordÚ_write_recordÚUnionÚ_write_unionZBoxedÚ_write_boxedZMemberr%   Ú_write_aliasZConstantÚ_write_constantÚprint)r   r,   r   r   r   r+   ]   s.    zGIRWriter._write_nodec             C   s   |j r| d|j f¡ d S )Nr   )r   Úappend)r   r,   r   r   r   r   Ú_append_versionx   s    zGIRWriter._append_versionc             C   s¼   x.|j  ¡ D ] \}}|  dd|fd|fg¡ qW t|dƒrR|jrR|  ddg|j¡ t|dƒrt|jrt|  ddg|j¡ t|dƒr–|jr–|  d	dg|j¡ t|d
ƒr¸|jr¸|  ddg|j¡ d S )NZ	attributer    ÚvalueÚdoc)z	xml:spaceZpreserveÚversion_doczdoc-versionÚdeprecated_doczdoc-deprecatedÚstability_doczdoc-stability)Z
attributesÚitemsr!   ÚhasattrrA   rB   rC   rD   )r   r,   r(   r@   r   r   r   Ú_write_generic|   s    



zGIRWriter._write_genericc             C   s\   |j s|js| d¡ |js"|jr,| d¡ |jrB| d|jf¡ |jrX| d|jf¡ d S )N)ÚintrospectableÚ0)Ú
deprecatedÚ1zdeprecated-versionÚ	stability)ÚskiprH   r>   rJ   rC   rL   )r   r,   r   r   r   r   Ú_append_node_generic   s    

zGIRWriter._append_node_genericc             C   s   |j r| d¡ d S )N)ÚthrowsrK   )rO   r>   )r   Úfuncr   r   r   r   Ú_append_throws¡   s    zGIRWriter._append_throwsc          	   C   sd   d|j fg}|jd k	r&| d|jf¡ |  ||¡ |  d|¡ |  |¡ |  |j¡ W d Q R X d S )Nr    zc:typeÚalias)r    Úctyper>   rN   r   rG   Ú_write_type_refÚtarget)r   rR   r   r   r   r   r;   ¥   s    

zGIRWriter._write_aliasc          	   C   sz   d|j fg}| |¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡* |  |¡ | j|j|d |  	|¡ W d Q R X d S )Nr    )Úparent)
r    Úextendr?   rN   rQ   r   rG   Ú_write_return_typeÚretvalÚ_write_parameters)r   ÚcallableÚtag_nameÚextra_attrsr   r   r   r   Ú_write_callable®   s    

zGIRWriter._write_callableÚfunctionc             C   s‚   |j r
d S g }t|dƒr(| d|jf¡ |jr@| d|jf¡ n|jrV| d|jf¡ |jd k	rp| d|jf¡ |  |||¡ d S )NÚsymbolzc:identifierzshadowed-byÚshadowszmoved-to)Zinternal_skippedrF   r>   r`   Zshadowed_byra   Zmoved_tor^   )r   rP   r\   r   r   r   r   r-   ¹   s    

zGIRWriter._write_functionc             C   s   | j |dd d S )NÚmethod)r\   )r-   )r   rb   r   r   r   Ú_write_methodÇ   s    zGIRWriter._write_methodc             C   s   | j |dd d S )Nr_   )r\   )r-   )r   rb   r   r   r   Ú_write_static_methodÊ   s    zGIRWriter._write_static_methodc             C   s   | j |dd d S )NÚconstructor)r\   )r-   )r   rb   r   r   r   Ú_write_constructorÍ   s    zGIRWriter._write_constructorNc          	   C   s~   |sd S g }|j r"| d|j f¡ |jr2| d¡ |jrH|jsH| d¡ |  d|¡  |  |¡ | j|j|d W d Q R X d S )Nztransfer-ownership)rM   rK   )ÚnullablerK   zreturn-value)rV   )	Útransferr>   rM   rg   Únot_nullabler   rG   Ú_write_typeÚtype)r   Zreturn_rV   r   r   r   r   rX   Ð   s    


zGIRWriter._write_return_typec          	   C   s`   |j s|jd krd S |  d¡8 |jr6|  ||jd¡ x|j D ]}|  ||¡ q>W W d Q R X d S )NÚ
parameterszinstance-parameter)rl   Zinstance_parameterr   Ú_write_parameter)r   r[   Ú	parameterr   r   r   rZ   ß   s    zGIRWriter._write_parametersrn   c          	   C   sx  g }|j d k	r| d|j f¡ |jd k	rZ|jdkrZ| d|jf¡ | d|jrRdndf¡ |jrp| d|jf¡ |jrœ|jsœ| d¡ |jtjkrœ| d	¡ |j	rÂ| d
¡ |jtjkrÂ| d	¡ |j
rØ| d|j
f¡ |jd k	r| |j¡}| dd|f f¡ |jd k	r0| |j¡}| dd|f f¡ |jrB| d¡ |  ||¡  |  |¡ | j|j|d W d Q R X d S )Nr    ÚinÚ	directionzcaller-allocatesrK   rI   ztransfer-ownership)rg   rK   )z
allow-nonerK   )ÚoptionalrK   ÚscopeZclosurez%dZdestroy)rM   rK   )rV   )Úargnamer>   rp   Zcaller_allocatesrh   rg   ri   r   ZPARAM_DIRECTION_OUTrq   rr   Zclosure_nameÚget_parameter_indexZdestroy_namerM   r   rG   rj   rk   )r   rV   rn   Únodenamer   Úidxr   r   r   rm   è   s>    







zGIRWriter._write_parameterc             C   sH   |j std||jf ƒ‚| jjd }|j |¡rB|jt|ƒd … S |jS )Nz$Caught unresolved type %r (ctype=%r)Ú.)ZresolvedÚAssertionErrorrS   r   r    Útarget_ginameÚ
startswithÚlen)r   ZtypevalÚprefixr   r   r   Ú_type_to_name	  s    zGIRWriter._type_to_namec             C   sÔ   g }|j r | d|jp|j f¡ t|tjƒrN|jtjjkrÄ| dd|jf¡ nvt|tj	ƒrt|j
rÄ| dd|j
f¡ nPt|tjƒrŽ| dd¡ n6|jr¬| dd|  |¡f¡ n|jrÄ| dd|jf¡ |  d|¡ dS )zN Like _write_type, but only writes the type name rather than the full details zc:typer   r    )r    zGLib.HashTablerk   N)rS   r>   Úcomplete_ctyper$   r   ÚArrayÚ
array_typeÚCÚinsertÚListr    ÚMapry   r}   Útarget_fundamentalr!   )r   Úntyper   r   r   r   rT     s     zGIRWriter._write_type_refc          	   C   sN  g }|j r| d|j f¡ n|jr2| d|jf¡ t|tjƒrN|  dg ¡ nüt|tjƒrT|jtjj	kr|| 
dd|jf¡ |js| 
dd¡ n&|jr¶|jd k	sª|jd k	r¶| 
dd¡ |jd k	rÖ| dd|jf f¡ |jd k	r.t|tjƒrü| |j¡}nt|tjƒr| |j¡}n | 
dd	d|f f¡ |  d
|¡ |  |j¡ W d Q R X nöt|tjƒr¢|jr|| 
dd|jf¡ |  d|¡ |  |j¡ W d Q R X n¨t|tjƒrî| 
dd¡ |  d|¡ |  |j¡ |  |j¡ W d Q R X n\|jr| 
dd|  |¡f¡ n0|jr*| 
dd|jf¡ n|jr>| 
dd¡ |  d|¡ d S )Nzc:typeZvarargsr   r    )zzero-terminatedrI   )zzero-terminatedrK   z
fixed-sizez%dÚlengthZarrayrk   )r    zGLib.HashTable)ÚforeignrK   )r~   r>   rS   r$   r   ZVarargsr!   r   r€   r   r‚   ZzeroterminatedÚsizeZlength_param_nameÚCallablert   ZCompoundZget_field_indexr   rj   Zelement_typerƒ   r    r„   Zkey_typeÚ
value_typery   r}   r…   Ztarget_foreign)r   r†   ZrelationrV   r   r‡   r   r   r   rj   (  sT    
zGIRWriter._write_typec             C   s$   |j r | d|jfd|j fg¡ d S )Nzglib:type-namezglib:get-type)Úget_typerW   Ú
gtype_name)r   r,   r   r   r   r   Ú_append_registered^  s    zGIRWriter._append_registeredc          	   C   s´   d|j fg}|  ||¡ |  ||¡ |  ||¡ | d|jf¡ |jrV| d|jf¡ |  d|¡H |  |¡ x|j	D ]}|  
|¡ qvW xt|jƒD ]}|  |¡ q”W W d Q R X d S )Nr    zc:typezglib:error-domainÚenumeration)r    r?   rN   rŽ   r>   rS   Zerror_domainr   rG   ÚmembersÚ_write_memberr   Ústatic_methodsrd   )r   Úenumr   Úmemberrb   r   r   r   r/   d  s    
zGIRWriter._write_enumc          	   C   sž   d|j fg}|  ||¡ |  ||¡ |  ||¡ | d|jf¡ |  d|¡H |  |¡ x|jD ]}|  	|¡ q`W xt
|jƒD ]}|  |¡ q~W W d Q R X d S )Nr    zc:typeÚbitfield)r    r?   rN   rŽ   r>   rS   r   rG   r   r‘   r   r’   rd   )r   r•   r   r”   rb   r   r   r   r0   t  s    
zGIRWriter._write_bitfieldc          	   C   s`   d|j fdt|jƒfd|jfg}|jd k	r:| d|jf¡ |  d|¡ |  |¡ W d Q R X d S )Nr    r@   zc:identifierz	glib:nickr”   )r    Ústrr@   r`   Znickr>   r   rG   )r   r”   r   r   r   r   r‘     s    
zGIRWriter._write_memberc          	   C   sf   d|j fd|jfd|jfg}|  ||¡ |  ||¡ |  d|¡ |  |¡ |  |j¡ W d Q R X d S )Nr    r@   zc:typeÚconstant)	r    r@   rS   r?   rN   r   rG   rj   r‹   )r   r—   r   r   r   r   r<   Š  s    
zGIRWriter._write_constantc       
   	   C   sÌ  d|j fd|jfd|jfg}|  ||¡ |  ||¡ t|tjƒrvd}|jd k	rd| 	d|  
|j¡f¡ |jrz| 	d¡ nd}| 	d|jf¡ |jd k	r¤| 	d	|jf¡ |jd k	rÄ| 	d
|  
|j¡f¡ t|tjƒr@|jrâ| 	d¡ |jrø| 	d|jf¡ |jr| 	d|jf¡ |jr(| 	d|jf¡ |jr@| 	d|jf¡ |  ||¡t |  |¡ t|tjƒr–x,t|jƒD ]}|  dd|  
|¡fg¡ qtW t|tjƒrÒx,t|jƒD ]}|  dd|  
|¡fg¡ q°W t|tjƒr xt|jƒD ]}|  |¡ qìW xt|jƒD ]}|  |¡ qW xt|jƒD ]}|   |¡ q,W xt|j!ƒD ]}|  "|¡ qLW xt|j#ƒD ]}|  $|¡ qlW x|j%D ]}|  &||¡ qˆW xt|j'ƒD ]}	|  (|	¡ qªW W d Q R X d S )Nr    zc:symbol-prefixzc:typeÚclassrV   )ZabstractrK   Z	interfacezglib:type-namezglib:get-typezglib:type-struct)zglib:fundamentalrK   zglib:ref-funczglib:unref-funczglib:set-value-funczglib:get-value-funcZ
implementsZprerequisite))r    Úc_symbol_prefixrS   r?   rN   r$   r   r1   Zparent_typer>   r}   Zis_abstractr   rŒ   Zglib_type_structZfundamentalZref_funcZ
unref_funcZset_value_funcZget_value_funcr   rG   r   Z
interfacesr!   r2   ZprerequisitesÚconstructorsrf   r’   rd   Zvirtual_methodsÚ_write_vfuncÚmethodsrc   Z
propertiesÚ_write_propertyÚfieldsÚ_write_fieldZsignalsÚ_write_signal)
r   r,   r   r\   Zifacerb   ZvfuncÚpropÚfieldÚsignalr   r   r   r3   ”  sn    




zGIRWriter._write_classc          	   C   s²   d|j fg}|jd k	r&| d|jf¡ |  ||¡ |  d|¡j |  |¡ xt|jƒD ]}|  |¡ qVW xt|j	ƒD ]}|  
|¡ qtW xt|jƒD ]}|  |¡ q’W W d Q R X d S )Nz	glib:namezc:symbol-prefixz
glib:boxed)r    r™   r>   rŽ   r   rG   r   rš   rf   rœ   rc   r’   rd   )r   Zboxedr   rb   r   r   r   r:   Ï  s    

zGIRWriter._write_boxedc          	   C   s¬   d|j fg}|  ||¡ |  ||¡ |js4| d¡ |jrD| d¡ |jrT| d¡ |jrd| d¡ |jrz| d|jf¡ |  	d|¡ |  
|¡ |  |j¡ W d Q R X d S )Nr    )ÚreadablerI   )ÚwritablerK   )Ú	constructrK   )zconstruct-onlyrK   ztransfer-ownershipÚproperty)r    r?   rN   r¤   r>   r¥   r¦   Zconstruct_onlyrh   r   rG   rj   rk   )r   r¡   r   r   r   r   r   Ý  s     




zGIRWriter._write_propertyc             C   s,   g }|j r| d|j f¡ |  |d|¡ d S )NÚinvokerzvirtual-method)r¨   r>   r^   )r   Zvfr   r   r   r   r›   ð  s    zGIRWriter._write_vfuncc             C   s2   g }|j |jkr | d|j f¡ |  |d|¡ d S )Nzc:typeÚcallback)rS   r    r>   r^   )r   r©   r   r   r   r   r5   ö  s    zGIRWriter._write_callbackc          	   C   sh  d}t |ƒ}|jd k	r&| d|jf¡ |jd k	r@| d|jf¡ |jrP| d¡ |jr`| d¡ |jd k	r„d}| d|  |j¡f¡ |  ||¡ |  	||¡ |  
||¡ |jr¾| d|jf¡ |  d	|¡” |  |¡ |jrúx|jD ]}|  |||¡ qäW xt|jƒD ]}|  |¡ qW xt|jƒD ]}|  |¡ q&W xt|jƒD ]}|  |¡ qFW W d Q R X d S )
NFr    zc:type)Ú	disguisedrK   )rˆ   rK   Tzglib:is-gtype-struct-forzc:symbol-prefixÚrecord)Úlistr    r>   rS   rª   rˆ   Zis_gtype_struct_forr}   r?   rN   rŽ   r™   r   rG   rž   rŸ   r   rš   rf   rœ   rc   r’   rd   )r   r«   r]   Úis_gtype_structr   r¢   rb   r   r   r   r7   ü  s<    





zGIRWriter._write_recordc          	   C   s  g }|j d k	r| d|j f¡ |jd k	r8| d|jf¡ |  ||¡ |  ||¡ |  ||¡ |jrr| d|jf¡ |  d|¡Œ |  |¡ |j	r¬x|j	D ]}|  
||¡ q˜W xt|jƒD ]}|  |¡ q¸W xt|jƒD ]}|  |¡ qÖW xt|jƒD ]}|  |¡ qôW W d Q R X d S )Nr    zc:typezc:symbol-prefixÚunion)r    r>   rS   r?   rN   rŽ   r™   r   rG   rž   rŸ   r   rš   rf   rœ   rc   r’   rd   )r   r®   r   r¢   rb   r   r   r   r9     s*    


zGIRWriter._write_unionFc          	   C   s4  |j rœt|j tjƒrRd|jfg}|  ||¡ |  d|¡ |  |j ¡ W d Q R X nHt|j tjƒrn|  	|j ¡ n,t|j tj
ƒrŠ|  |j ¡ ntd|j f ƒ‚n”d|jfg}|  ||¡ |jsÄ| d¡ |jrÔ| d¡ |jrî| dt|jƒf¡ |jrþ| d¡ |  d|¡  |  |¡ | j|j|d W d Q R X d S )	Nr    r¢   zUnknown field anonymous: %r)r¤   rI   )r¥   rK   Úbits)ÚprivaterK   )rV   )Zanonymous_noder$   r   r4   r    rN   r   r5   r6   r7   r8   r9   rx   r¤   r>   r¥   r¯   r–   r°   rG   rj   rk   )r   r¢   rV   r­   r   r   r   r   rŸ   3  s0    



zGIRWriter._write_fieldc          	   C   s¶   d|j fg}|jr"| d|jf¡ |jr2| d¡ |jrB| d¡ |jrR| d¡ |jrb| d¡ |  ||¡ |  ||¡ |  	d|¡& |  
|¡ |  |j¡ |  |¡ W d Q R X d S )Nr    Úwhen)z
no-recurserK   )ÚdetailedrK   )ÚactionrK   )zno-hooksrK   zglib:signal)r    r±   r>   Z
no_recurser²   r³   Zno_hooksr?   rN   r   rG   rX   rY   rZ   )r   r£   r   r   r   r   r    Q  s"    




zGIRWriter._write_signal)r_   )N)rn   )NN)F))Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r+   r?   rG   rN   rQ   r;   r^   r-   rc   rd   rf   rX   rZ   rm   r}   rT   rj   rŽ   r/   r0   r‘   r<   r3   r:   r   r›   r5   r7   r9   rŸ   r    Ú__classcell__r   r   )r   r   r
   $   sJ   	

	
!	
6	
; 
r
   N)Z
__future__r   r   r   r   r   Ú r   Z	xmlwriterr	   r   r
   r   r   r   r   Ú<module>   s   