
    @;f*                     <    d dl Z d dlZddlmZ d dlZ G d d      Zy)    N   )utilsc                   R    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y)RstCodeGeneratorz3Generates documentation in reStructuredText format.c                 2    || _         | j                          y )N)ifaces_generate_expand_dicts)selfr   s     %share/glib-2.0/codegen/codegen_rst.py__init__zRstCodeGenerator.__init__   s    ##%    c                    g }t        j                  |      j                  d      D ]  }|j                         }|dk(  r|j	                  d       *| j
                  D ]!  }|j                  || j                  |         }# | j                  D ]!  }|j                  || j                  |         }# |r0t        j                  dd |      }t        j                  dd |      }|j	                  |        dj                  |      S )z)Expands parameters and constant literals.
 z@[a-zA-Z0-9_]*c                 6    d| j                  d      dd  z   dz   S Nz``r   r   groupms    r   <lambda>z*RstCodeGenerator._expand.<locals>.<lambda>&       dQWWQZ^3d: r   z%[a-zA-Z0-9_]*c                 6    d| j                  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    OOA&,,T2 	D;;=Drz

244 H||C)A)A#)FGH33 G||C)@)@)EFG'vv$: vv$:
 JJt-	. yy~r   c                 `   i | _         i | _        | j                  D ]<  }d|j                   }d|j                   d}|| j                  |<   |j                  D ]J  }|j                  d|j                  d}d|j                   d|j                   d}|| j                   |<   L |j
                  D ]J  }d|j                  d|j                  }d|j                   d|j                   d}|| j                   |<   L |j                  D ]J  }d|j                  d|j                  }d|j                   d|j                   d}|| j                   |<   L ? t        | j                   j                         d	      | _	        t        | j                  j                         d	      | _
        y
)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   #% "$ 	6AaffX,CxrNE+0D##C(YY 6#$661662AFF81QVVHB/05((-6
 YY 6#$661662AFF82affXR005((-6
 \\ 6"#&&!&&1AFF81QVVHB/05((-6	6, )/$$))+T)
% (.##((*D(
$r   c                    |j                   }t        |      }d|j                   ddd|z  |d|z  dddddd|j                   dd|j                  j	                         d| j                  |j                  d      dg}|j                  r|d	|j                   d
dgz  }|j                  r|g dz  }|dgz  }dj                  |      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   )
name_without_prefixlenr4   doc_string_briefstripr,   
doc_stringsince
deprecatedr&   )r
   iface
iface_name
header_lenr)   s        r   _generate_headerz!RstCodeGenerator._generate_headerS   s    ..
_
5::,a **5::,m,""((*LL))40!
$ ;;-ekk]!< C   C 	tyy~r   c                 t    d| d| dddt        |      z  |dt        |      z  ddg}dj                  |      S )z)Generates a section with the given title.r>    r2   r   -r   )rC   r&   )r
   titler4   r)   s       r   _generate_sectionz"RstCodeGenerator._generate_sectiony   sQ     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|dt	        |      z  dddd	|j                   d
| d
|j
                   dd| j                  |j                  d      dgz  }|j                  r|d|j                   ddgz  }|j                  r|g dz  }|dgz  } dj                  |      S )z!Generates the properties section.r2   	readwritewritablereadabler>   r   ^r1       rN   TzProperty available since: r0   )rA   r   z   This property is deprecated.r   r   r   )r7   r4   rU   rT   rC   	signaturer,   rF   rG   rH   r&   )r
   rI   r)   r<   rP   accesss         r   _generate_propertiesz%RstCodeGenerator._generate_properties   s'   !! #	Azzl!AFF8,Ezzajj$##ugQc%j qvvhaxq6Q\\40 C ww0	;  ||   B4KCG#	H yy~r   c                    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 ]T  \  }}||dz
  k(  r&|dk(  r!|d|j                   d	|j
                   gz  }4|d|j                   d	|j
                   d
gz  }V t	        |j                        D ]O  \  }}||dz
  k(  r!|d|j                   d	|j
                   gz  }/|d|j                   d	|j
                   d
gz  }Q |ddgz  }|dgz  }dj                  |      S )z/Generates the method signature as a code block.r1   r   r   rW    () (r   z	      IN rN   ,z
      OUT     )r   )rC   in_argsout_argsr4   	enumeraterX   r&   )r
   methodr)   	n_in_args
n_out_argsidxargs          r   _generate_method_signaturez+RstCodeGenerator._generate_method_signature   s    
 '	)
>jAov{{m3' C v{{m2& C &fnn5 S)a-'J!O#CHH:Qs}}o> C #CHH:Qs}}oQ? C &foo6 S*q.($SXXJa? C $SXXJaa@ C  C 	tyy~r   c                    g }|j                   D ]+  }|j                   d|j                   }|d| dd|dt        |      z  d| j                  |      d| j	                  |j
                  d      dg	z  }|j                  D ]4  }| j	                  |j
                  d      }||j                   d| dgz  }6 |j                  D ]4  }| j	                  |j
                  d      }||j                   d| dgz  }6 |dgz  }|j                  r|d|j                   ddgz  }|j                  r|g d	z  }|dgz  }. d
j                  |      S )zGenerates the methods section.r0   r>   r2   r   rV   T  zMethod available since: )rA   r   z   This method is deprecated.r   r   r   )r5   r4   rC   rh   r,   rF   r`   ra   rG   rH   r&   )r
   rI   r)   r   rP   aarg_descs          r   _generate_methodsz"RstCodeGenerator._generate_methods   s    )	Azzl!AFF8,EugQc%j //2Q\\40
 
C YY <<d;vvh
O  ZZ <<d;vvh
O  B4KCww.qwwiq9  ||   B4KCS)	T yy~r   c                    ddg}t        |j                        }|dk(  r|d|j                   dgz  }n|d|j                   dgz  }t        |j                        D ]O  \  }}||dz
  k(  r!|d|j                   d	|j                   gz  }/|d|j                   d	|j                   d
gz  }Q |ddgz  }|dgz  }dj                  |      S )zGenerates the signal signature.r1   r   r   rW   r\   r]   r   z      rN   r^   r_   r   )rC   argsr4   rb   rX   r&   )r
   signalr)   n_argsrf   rg   s         r   _generate_signal_signaturez+RstCodeGenerator._generate_signal_signature  s    
 V[[!Q;v{{m3' C v{{m2& C &fkk2 S&1*$ 
!CMM?; C  
!CMM?!< C  C 	tyy~r   c                    g }|j                   D ]  }|j                   d|j                   }|d| dd|dt        |      z  d| j                  |      d| j	                  |j
                  d      dg	z  }|j                  D ]4  }| j	                  |j
                  d      }||j                   d| dgz  }6 |dgz  }|j                  r|d|j                   d	dgz  }|j                  r|g d
z  }|dgz  } dj                  |      S )zGenerates the signals section.r1   r>   r2   r   rV   Trj   zSignal available since: r0   )rA   r   z   This signal is deprecated.r   r   r   )
r6   r4   rC   rr   r,   rF   ro   rG   rH   r&   )r
   rI   r)   r'   rP   rk   rl   s          r   _generate_signalsz"RstCodeGenerator._generate_signals&  sA    "	Azzl"QVVH-EugQc%j //2Q\\40
 
C VV <<d;vvh
O  B4KCww.qwwiq9  ||   B4KCE"	F yy~r   c           
      \   | j                   D ]  }t        t        j                  j	                  || d|j
                   d      d      5 }|j                  | j                  |             t        |j                        dkD  rK|j                  | j                  d|j
                               |j                  | j                  |             t        |j                        dkD  rK|j                  | j                  d|j
                               |j                  | j                  |             t        |j                        dkD  rK|j                  | j                  d|j
                               |j                  | j                  |             ddd        y# 1 sw Y   xY w)	z7Generates the reStructuredText file for each interface.rO   z.rstwr   
PropertiesMethodsSignalsN)r   openospathr&   r4   writerL   rC   r7   rQ   rZ   r5   rm   r6   rt   )r
   rstoutdirr:   outfiles        r   generatezRstCodeGenerator.generateN  s?    	=Abggll6cU!AFF84+@A3G 
=7d33A67q||$q(MM$"8"8qvv"NOMM$";";A">?qyy>A%MM$"8"8AFF"KLMM$"8"8";<qyy>A%MM$"8"8AFF"KLMM$"8"8";<
= 
=	=
= 
=s   E
F!!F+	N)__name__
__module____qualname____doc__r   r,   r	   rL   rQ   rZ   rh   rm   rr   rt   r    r   r   r   r      sB    =&8
B$L'R'R-^>&P=r   r   )r{   r$   r   r   r   r   r   r   r   <module>r      s   
 
 	  L= L=r   