
    $d{*                     D    d dl Z d dlZddlmZ d dl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     %share/glib-2.0/codegen/codegen_rst.py__init__zRstCodeGenerator.__init__   s!    ##%%%%%    c                    g }t          j        |                              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   )textwrapdedentsplitrstrip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#   OA&&,,T22 	 	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_dicts2   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... _r2   r   =z-----------Descriptionz Description:TzInterface available since: r0   ).. warning::r   z    This interface is deprecated.r   r   r   )	lenr4   doc_string_briefstripr,   
doc_stringsince
deprecatedr&   )r
   iface
header_lenr)   s       r   _generate_headerz!RstCodeGenerator._generate_headerS   s    __
 5:   *J*,5:,,,"((**LL)400!
$ ; 	<ek<<< C  	    C 	tyy~~r   c                     d| d| dddt          |          z  |dt          |          z  ddg}d                    |          S )z)Generates a section with the given title.r>    r2   r   -r   )rB   r&   )r
   titler4   r)   s       r   _generate_sectionz"RstCodeGenerator._generate_sectionx   s[     #4""%"""#e**#e**
 yy~~r   c                    g }|j         D ]}|j         d|j         }|j        r
|j        rd}n|j        rd}nd}|d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.r2   	readwritewritablereadable.. _{title}:r   ^r1       rL   TzProperty available since: r0   )rA   r   z   This property is deprecated.r   r   r   )r7   r4   rS   rR   rB   	signaturer,   rE   rF   rG   r&   )r
   rH   r)   r<   rN   accesss         r   _generate_propertiesz%RstCodeGenerator._generate_properties   s<   ! #	 #	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.r1   r   r   rV    () (r   z	      IN rL   ,z
      OUT     )r   )rB   in_argsout_argsr4   	enumeraterW   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                 4   g }|j         D ]}|j         d|j         }|dd|dt          |          z  d|                     |          d|                     |j        d          dg	z  }|j        D ].}|                     |j        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.r0   rT   r   rU   T  zMethod available since: )rA   r   z   This method is deprecated.r   r   r   )r5   r4   rB   rg   r,   rE   r_   r`   rF   rG   r&   )r
   rH   r)   r   rN   aarg_descs          r   _generate_methodsz"RstCodeGenerator._generate_methods   s    )	 )	Az,,AF,,Ec%jj //22Q\400
 
C Y  <<d;;vK#OO 
 Z  <<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.r1   r   r   rV   r[   r\   r   z      rL   r]   r^   r   )rB   argsr4   ra   rW   r&   )r
   signalr)   n_argsre   rf   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d|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.r1   rT   r   rU   Tri   zSignal available since: r0   )rA   r   z   This signal is deprecated.r   r   r   )
r6   r4   rB   rq   r,   rE   rn   rF   rG   r&   )r
   rH   r)   r'   rN   rj   rk   s          r   _generate_signalsz"RstCodeGenerator._generate_signals%  sK    "	 "	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.rM   z.rstwr   
PropertiesMethodsSignalsN)r   openospathr&   r4   writerJ   rB   r7   rO   rY   r5   rl   r6   rs   )r
   rstoutdirr:   outfiles        r   generatezRstCodeGenerator.generateM  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	   rJ   rO   rY   rg   rl   rq   rs   r    r   r   r   r      s        ==& & &  8
 
 
B# # #J  ' ' 'R' ' 'R- - -^  >& & &P= = = = =r   r   )rz   r$   r   r   r   r   r   r   r   <module>r      sp   
 
			 				       K= K= K= K= K= K= K= K= K= K=r   