
    $dT&                     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 )MdCodeGeneratorz+Generates documentation in Markdown format.c                 <    || _         |                                  d S )N)ifaces_generate_expand_dicts)selfr   s     $share/glib-2.0/codegen/codegen_md.py__init__zMdCodeGenerator.__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 N`r   r   groupms    r   <lambda>z)MdCodeGenerator._expand.<locals>.<lambda>'   "    cAGGAJJqrrN2S8 r   z%[a-zA-Z0-9_]*c                 H    d|                      d          dd          z   dz   S r   r   r   s    r   r   z)MdCodeGenerator._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MdCodeGenerator._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$88  v$88 
 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.#r   z`_.z():::T)reverseN)r"   r$   r   namemethodssignals
propertiessortedkeysr    r#   )r
   ir,   valuer   r(   ps          r   r	   z&MdCodeGenerator._generate_expand_dicts3   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                 V   t          |j                  }d|j         dd|j         dd|j        z   ddd|j                                        d|                     |j        d          dg}|j        r|d|j         d	dgz  }|j        r|d
dgz  }|dgz  }d                    |          S )z2Generates the header and preamble of the document.zTitle: z D-Bus InterfacezSlug: r   z# z## DescriptionTzInterface available since: r0   z(*Warning*: This interface is deprecated.r   )	lenr4   doc_string_briefstripr-   
doc_stringsince
deprecatedr'   )r
   iface
header_lenr*   s       r   _generate_headerz MdCodeGenerator._generate_headerT   s    __
2ej222!UZ!!5:"((**LL)400
 ; 	<ek<<< C  	: C 	tyy~~r   c                 :    d|z   dg}d                     |          S )z)Generates a section with the given title.### r   r   )r'   )r
   titler4   r*   s       r   _generate_sectionz!MdCodeGenerator._generate_sectionq   s'     UN
 yy~~r   c                 n   g }|j         D ]}|j         d|j         }|j        r
|j        rd}n|j        rd}nd}|d|z   ddd|j         d	| d	|j         dd|                     |j        d
          dgz  }|j        r|d|j         ddgz  }|j        r|ddgz  }|dgz  }d	                    |          S )z!Generates the properties section.r2   	readwritewritablereadablerH   r   ```     TzProperty available since: r0   z'*Warning*: This property is deprecated.r   )
r7   r4   rN   rM   	signaturer-   rA   rB   rC   r'   )r
   rD   r*   r<   rI   accesss         r   _generate_propertiesz$MdCodeGenerator._generate_propertiesy   s%   ! 	 	Az,,AF,,Ez $aj $$ $##6qv666666Q\400	 	C w ;;;;  | =  B4KCCyy~~r   c                 @   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gz  }|dgz  }d                    |          S )z/Generates the method signature as a code block.rO   r   rP    () (r   z	      IN rQ   ,z
      OUT     )r   )r>   in_argsout_argsr4   	enumeraterR   r'   )r
   methodr*   	n_in_args
n_out_argsidxargs          r   _generate_method_signaturez*MdCodeGenerator._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 	wyy~~r   c           
         g }|j         D ]}|j         d|j         }|d|z   d|                     |          d|                     |j        d          dgz  }|j        D ]/}|                     |j        d          }|d|j         d| dgz  }0|dgz  }|j        r|d|j         ddgz  }|j        r|ddgz  }|dgz  }d	                    |          S )
zGenerates the methods section.r0   rH   r   Tz* z: zMethod available since: z%*Warning*: This method is deprecated.r   )	r5   r4   rb   r-   rA   rZ   rB   rC   r'   )r
   rD   r*   r   rI   aarg_descs          r   _generate_methodsz!MdCodeGenerator._generate_methods   s<    	 	Az,,AF,,E//22Q\400 C Y  <<d;;---8--  B4KCw 9qw999  | ;  B4KCCyy~~r   c                 ^   dg}t          |j                  }|dk    r|d|j         dgz  }nf|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
gz  }|dgz  }d                    |          S )zGenerates the signal signature.rO   r   rP   rV   rW   r   z      rQ   rX   rY   r   )r>   argsr4   r\   rR   r'   )r
   signalr*   n_argsr`   ra   s         r   _generate_signal_signaturez*MdCodeGenerator._generate_signal_signature   s    
 V[!!Q;;'v{''' CC &v{&&& C &fk22  S&1*$$;;;CM;; CC <<<CM<<< CC  C 	wyy~~r   c           
         g }|j         D ]}|j         d|j         }|d|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|ddgz  }|dgz  }d	                    |          S )
zGenerates the signals section.r1   rH   r   Tz  zSignal available since: r0   z%*Warning*: This signal is deprecated.r   )	r6   r4   rk   r-   rA   rh   rB   rC   r'   )r
   rD   r*   r(   rI   rd   re   s          r   _generate_signalsz!MdCodeGenerator._generate_signals   s7    	 	Az--QV--E//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 )	z/Generates the Markdown file for each interface.-z.mdwr   
PropertiesMethodsSignalsN)r   openospathr'   r4   writerF   r>   r7   rJ   rT   r5   rf   r6   rm   )r
   mdoutdirr:   outfiles        r   generatezMdCodeGenerator.generate"  s    	= 	=Abgll6b+>+>16+>+>+>??EE 
=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   rJ   rT   rb   rf   rk   rm   r{    r   r   r   r      s        55& & &  8
 
 
B  :       D% % %N  B  :     D= = = = =r   r   )ru   r%   r   r   r   r   r   r   r   <module>r      sp    
			 				       _= _= _= _= _= _= _= _= _= _=r   