
    pc(                     <    d dl Z d dlZddlmZ  G d d          ZdS )    N   )utilsc                   T    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )RstCodeGeneratorz3Generates documentation in reStructuredText format.c                 <    || _         |                                  d S )N)ifaces_generate_expand_dicts)selfr   s     */usr/share/glib-2.0/codegen/codegen_rst.py__init__zRstCodeGenerator.__init__   s!    ##%%%%%    c                    g }|                     d          D ]}|                                }|dk    r|                    d           2| j        D ]#}|                    || j        |                   }$| j        D ]#}|                    || j        |                   }$|r.t          j	        dd |          }t          j	        dd |          }|                    |           d
                    |          S )z)Expands parameters and constant literals.
 z@[a-zA-Z0-9_]*c                 H    d|                      d          dd          z   dz   S Nz``r   r   groupms    r   <lambda>z*RstCodeGenerator._expand.<locals>.<lambda>%   "    dQWWQZZ^3d: r   z%[a-zA-Z0-9_]*c                 H    d|                      d          dd          z   dz   S r   r   r   s    r   r   z*RstCodeGenerator._expand.<locals>.<lambda>+   r   r   )splitstripappend_expand_member_dict_keysreplace_expand_member_dict_expand_iface_dict_keys_expand_iface_dictresubjoin)r
   sexpandParamsAndConstantsreslinekeys         r   _expandzRstCodeGenerator._expand   s   GGDMM 	 	D::<<Drzz

24 H H||C)A#)FGG3 G G||C)@)EFF' v$::  v$:: 
 JJtyy~~r   c                 ~   i | _         i | _        | j        D ]}d|j         }d|j         d}|| j        |<   |j        D ]1}|j        d|j        d}d|j         d|j         d}|| j         |<   2|j        D ]1}d|j        d|j        }d|j         d|j         d}|| j         |<   2|j        D ]1}d|j        d|j        }d|j         d|j         d}|| j         |<   2t          | j                                         d	          | _	        t          | j                                        d	          | _
        d
S )z9Generates the dictionaries used to expand gtk-doc sigils.#`z`_.z():::T)reverseN)r   r!   r   namemethodssignals
propertiessortedkeysr   r    )r
   ir)   valuer   r%   ps          r   r	   z'RstCodeGenerator._generate_expand_dicts1   s   #% "$ 	6 	6Aaf,,C"NNNE+0D#C(Y 6 6#$66616662/AF//QV///05(--Y 6 6#$66616620AF00af00005(--\ 6 6"#&&&!&&1/AF//QV///05(--6 )/$))++T)
 )
 )
% (.#((**D(
 (
 (
$$$r   c                 h   t          |j                  }d|j         ddd|z  |j        d|z  dddddd|j         dd|j                                        d|                     |j        d          dg}|j        r|d	|j         d
dgz  }|j        r|g dz  }|dgz  }d                    |          S )z2Generates the header and preamble of the document.z.. _r0   r   =z-----------Descriptionz Description:TzInterface available since: r.   ).. warning::r   z    This interface is deprecated.r   r   r   )	lenr2   doc_string_briefr   r*   
doc_stringsince
deprecatedr$   )r
   iface
header_lenr'   s       r   _generate_headerz!RstCodeGenerator._generate_headerR   s    __
 5:   *J*,5:,,,"((**LL)400!
$ ; 	<ek<<< C  	    C 	tyy~~r   c           	          dt          |          z  |dt          |          z  dd| d| dddg}d                    |          S )z)Generates a section with the given title.-r   z..  r0   r   )r?   r$   )r
   titler2   r'   s       r   _generate_sectionz"RstCodeGenerator._generate_sectionw   s[     #e**#e**!$!!!!!
 yy~~r   c                    g }|j         D ]}|j         d|j         }|j        r
|j        rd}n|j        rd}nd}||dt	          |          z  dddd|j         d	| d	|j         dd|                     |j        d
          dg
z  }|j        r|d|j         ddgz  }|j	        r|g dz  }|dgz  }d
                    |          S )z!Generates the properties section.r0   	readwritewritablereadable^r   r/       rI   TzProperty available since: r.   )r>   r   z   This property is deprecated.r   r   r   )r5   r2   rO   rN   r?   	signaturer*   rA   rB   rC   r$   )r
   rD   r'   r:   rJ   accesss         r   _generate_propertiesz%RstCodeGenerator._generate_properties   s6   ! !	 !	Az,,AF,,Ez $aj $$ $##c%jj 6qv666666Q\400 C w ;;;;  |      B4KCCyy~~r   c                 D   ddg}t          |j                  }t          |j                  }|dk    r|dk    r|d|j         dgz  }n|d|j         dgz  }t	          |j                  D ]B\  }}||dz
  k    r|dk    r|d|j         d	|j         gz  }+|d|j         d	|j         d
gz  }Ct	          |j                  D ]<\  }}||dz
  k    r|d|j         d	|j         gz  }%|d|j         d	|j         d
gz  }=|ddgz  }|dgz  }d                    |          S )z/Generates the method signature as a code block.r/   r   r   rQ    () (r   z	      IN rI   ,z
      OUT     )r   )r?   in_argsout_argsr2   	enumeraterR   r$   )r
   methodr'   	n_in_args
n_out_argsidxargs          r   _generate_method_signaturez+RstCodeGenerator._generate_method_signature   s    
 ''	))
>>jAoo'v{''' CC &v{&&& C &fn55  S)a-''J!OO>CH>>s}>> CC ?CH??s}??? CC &fo66  S*q.((?SX???? CC @SX@@@@@ CC  C 	tyy~~r   c                    g }|j         D ]}|j         d|j         }||dt          |          z  d|                     |          d|                     |j        d          dgz  }|j        D ].}|                     |j        d          }||j         d| dgz  }/|dgz  }|j        r|d|j         ddgz  }|j        r|g dz  }|dgz  }d	                    |          S )	zGenerates the methods section.r.   rP   r   T  zMethod available since: )r>   r   z   This method is deprecated.r   r   r   )
r3   r2   r?   rb   r*   rA   rZ   rB   rC   r$   )r
   rD   r'   r   rJ   aarg_descs          r   _generate_methodsz"RstCodeGenerator._generate_methods   sE     	  	Az,,AF,,Ec%jj //22Q\400 C Y  <<d;;vK#OO 
 B4KCw 9qw999  |      B4KCCyy~~r   c                 b   ddg}t          |j                  }|dk    r|d|j         dgz  }ng|d|j         dgz  }t          |j                  D ]<\  }}||dz
  k    r|d|j         d	|j         gz  }%|d|j         d	|j         d
gz  }=|ddgz  }|dgz  }d                    |          S )zGenerates the signal signature.r/   r   r   rQ   rV   rW   r   z      rI   rX   rY   r   )r?   argsr2   r\   rR   r$   )r
   signalr'   n_argsr`   ra   s         r   _generate_signal_signaturez+RstCodeGenerator._generate_signal_signature   s$    
 V[!!Q;;'v{''' CC &v{&&& C &fk22  S&1*$$;;;CM;; CC <<<CM<<< CC  C 	tyy~~r   c                    g }|j         D ]}|j         d|j         }||dt          |          z  d|                     |          d|                     |j        d          dgz  }|j        D ].}|                     |j        d          }||j         d| dgz  }/|dgz  }|j        r|d|j         ddgz  }|j        r|g dz  }|dgz  }d		                    |          S )
zGenerates the signals section.r/   rP   r   Trd   zSignal available since: r.   )r>   r   z   This signal is deprecated.r   r   r   )
r4   r2   r?   rl   r*   rA   ri   rB   rC   r$   )r
   rD   r'   r%   rJ   re   rf   s          r   _generate_signalsz"RstCodeGenerator._generate_signals  sE     	  	Az--QV--Ec%jj //22Q\400 C V  <<d;;vK#OO 
 B4KCw 9qw999  |      B4KCCyy~~r   c           
         | j         D ]}t          t          j                            || d|j         d          d          5 }|                    |                     |                     t          |j	                  dk    rV|                    | 
                    d|j                             |                    |                     |                     t          |j                  dk    rV|                    | 
                    d|j                             |                    |                     |                     t          |j                  dk    rV|                    | 
                    d|j                             |                    |                     |                     ddd           n# 1 swxY w Y   dS )	z7Generates the reStructuredText file for each interface.rH   z.rstwr   
PropertiesMethodsSignalsN)r   openospathr$   r2   writerF   r?   r5   rK   rT   r3   rg   r4   rn   )r
   rstoutdirr8   outfiles        r   generatezRstCodeGenerator.generate?  s    	= 	=Abgll6c+@+@AF+@+@+@AA3GG 
=7d33A66777q|$$q((MM$"8"8qv"N"NOOOMM$";";A">">???qy>>A%%MM$"8"8AF"K"KLLLMM$"8"8";";<<<qy>>A%%MM$"8"8AF"K"KLLLMM$"8"8";";<<<
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
=	= 	=s   E3GG	
G	N)__name__
__module____qualname____doc__r   r*   r	   rF   rK   rT   rb   rg   rl   rn   r{    r   r   r   r      s        ==& & &  8
 
 
B# # #J  % % %N' ' 'R$ $ $L  >$ $ $L= = = = =r   r   )ru   r"   r   r   r   r   r   r   <module>r      sg   
 
			 				      ~= ~= ~= ~= ~= ~= ~= ~= ~= ~=r   