o
    MKd(                     @   s.   d dl Z d dlZddlmZ G dd dZdS )    N   )utilsc                   @   sh   e Zd Z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S )RstCodeGeneratorz3Generates documentation in reStructuredText format.c                 C   s   || _ |   d S )N)ifaces_generate_expand_dicts)selfr    r   */usr/share/glib-2.0/codegen/codegen_rst.py__init__   s   zRstCodeGenerator.__init__c                 C   s   g }| dD ]G}| }|dkr|d q| jD ]}||| j| }q| jD ]}||| j| }q)|rIt	ddd |}t	ddd |}|| qd
|S )z)Expands parameters and constant literals.
 z@[a-zA-Z0-9_]*c                 S      d|  ddd   d S Nz``r   r   groupmr   r   r	   <lambda>%       z*RstCodeGenerator._expand.<locals>.<lambda>z%[a-zA-Z0-9_]*c                 S   r   r   r   r   r   r   r	   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keyr   r   r	   _expand   s.   



zRstCodeGenerator._expandc                 C   s  i | _ i | _| jD ]n}d|j }d|j d}|| j|< |jD ]}d|j|jf }d|j d|j d}|| j |< q |jD ]}d|j|jf }d|j d|j d}|| j |< q>|jD ]}d|j|jf }d|j d	|j d}|| j |< q\q	t| j  d
d| _	t| j d
d| _
dS )z9Generates the dictionaries used to expand gtk-doc sigils.#`z`_z%s.%s().z#%s::%s::z#%s:%s:T)reverseN)r   r   r   namemethodssignals
propertiessortedkeysr   r   )r   ir$   valuer   r    pr   r   r	   r   1   s2   






z'RstCodeGenerator._generate_expand_dictsc                 C   s   t |j}d|j ddd| |jd| dddddd|j dd|j d| |jddg}|jr<|d	|j d
dg7 }|jrE|g d7 }|dg7 }d|S )z2Generates the header and preamble of the document.z.. _r*   r   =z-----------Descriptionz Description:TzInterface available since: r(   ).. warning::r   z    This interface is deprecated.r   r   r   )	lenr,   doc_string_briefr   r%   
doc_stringsince
deprecatedr   )r   iface
header_lenr"   r   r   r	   _generate_headerR   s6   


z!RstCodeGenerator._generate_headerc              	   C   s:   dt | |dt | dd| d| dddg}d|S )z)Generates a section with the given title.-r   z..  r*   r   )r8   r   )r   titler,   r"   r   r   r	   _generate_sectionw   s   


	z"RstCodeGenerator._generate_sectionc                 C   s   g }|j D ]Z}|j d|j }|jr|jrd}n|jrd}nd}||dt| dddd|j d	| d	|j dd| |jd
dg
7 }|jrQ|d|j ddg7 }|j	rZ|g d7 }|dg7 }qd
|S )z!Generates the properties section.r*   	readwritewritablereadable^r   r)       rA   TzProperty available since: r(   )r7   r   z   This property is deprecated.r   r   r   )r/   r,   rF   rE   r8   	signaturer%   r:   r;   r<   r   )r   r=   r"   r4   rB   accessr   r   r	   _generate_properties   s:   


z%RstCodeGenerator._generate_propertiesc                 C   s.  ddg}t |j}t |j}|dkr!|dkr!|d|j dg7 }nl|d|j dg7 }t|jD ]*\}}||d krL|dkrL|d|j d	|j g7 }q0|d|j d	|j d
g7 }q0t|jD ]&\}}||d krx|d|j d	|j g7 }q`|d|j d	|j d
g7 }q`|ddg7 }|dg7 }d|S )z/Generates the method signature as a code block.r)   r   r   rH    () (r   z	      IN rA   ,z
      OUT     )r   )r8   in_argsout_argsr,   	enumeraterI   r   )r   methodr"   	n_in_args
n_out_argsidxargr   r   r	   _generate_method_signature   sD   



z+RstCodeGenerator._generate_method_signaturec                 C   s   g }|j D ]\}|j d|j }||dt| d| |d| |jddg7 }|jD ]}| |jd}||j d| dg7 }q*|dg7 }|jrS|d|j ddg7 }|jr\|g d7 }|dg7 }qd	|S )	zGenerates the methods section.r(   rG   r   T  zMethod available since: )r7   r   z   This method is deprecated.r   r   r   )
r-   r,   r8   rX   r%   r:   rP   r;   r<   r   )r   r=   r"   r   rB   aarg_descr   r   r	   _generate_methods   :   


	

z"RstCodeGenerator._generate_methodsc                 C   s   ddg}t |j}|dkr|d|j dg7 }n<|d|j dg7 }t|jD ]&\}}||d kr?|d|j d	|j g7 }q'|d|j d	|j d
g7 }q'|ddg7 }|dg7 }d|S )zGenerates the signal signature.r)   r   r   rH   rL   rM   r   z      rA   rN   rO   r   )r8   argsr,   rR   rI   r   )r   signalr"   n_argsrV   rW   r   r   r	   _generate_signal_signature   s2   


z+RstCodeGenerator._generate_signal_signaturec                 C   s   g }|j D ]\}|j d|j }||dt| d| |d| |jddg7 }|jD ]}| |jd}||j d| dg7 }q*|dg7 }|jrS|d|j ddg7 }|jr\|g d7 }|dg7 }qd		|S )
zGenerates the signals section.r)   rG   r   TrY   zSignal available since: r(   )r7   r   z   This signal is deprecated.r   r   r   )
r.   r,   r8   ra   r%   r:   r^   r;   r<   r   )r   r=   r"   r    rB   rZ   r[   r   r   r	   _generate_signals  r]   z"RstCodeGenerator._generate_signalsc              	   C   s   | j D ]v}ttj|| d|j dd[}|| | t|j	dkr8|| 
d|j || | t|jdkrQ|| 
d|j || | t|jdkrj|| 
d|j || | W d   n1 stw   Y  qdS )	z7Generates the reStructuredText file for each interface.r@   z.rstwr   
PropertiesMethodsSignalsN)r   openospathr   r,   writer?   r8   r/   rC   rK   r-   r\   r.   rb   )r   rstoutdirr2   outfiler   r   r	   generate?  s    
$zRstCodeGenerator.generateN)__name__
__module____qualname____doc__r
   r%   r   r?   rC   rK   rX   r\   ra   rb   rn   r   r   r   r	   r      s    !%')&&r   )rh   r   r   r   r   r   r   r   r	   <module>   s   