
    @;fc&                     <    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)MdCodeGeneratorz+Generates documentation in Markdown format.c                 2    || _         | j                          y )N)ifaces_generate_expand_dicts)selfr   s     $share/glib-2.0/codegen/codegen_md.py__init__zMdCodeGenerator.__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 N`r   r   groupms    r   <lambda>z)MdCodeGenerator._expand.<locals>.<lambda>'       cAGGAJqrN2S8 r   z%[a-zA-Z0-9_]*c                 6    d| j                  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    OOA&,,T2 	D;;=Drz

244 H||C)A)A#)FGH33 G||C)@)@)EFG'vv$8 vv$8
 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.#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   #% "$ 	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                    t        |j                        }d|j                   dd|j                   dd|j                  z   ddd|j                  j	                         d| j                  |j                  d      dg}|j                  r|d|j                   d	dgz  }|j                  r|d
dgz  }|dgz  }dj                  |      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   name_without_prefixdoc_string_briefstripr-   
doc_stringsince
deprecatedr'   )r
   iface
header_lenr*   s       r   _generate_headerz MdCodeGenerator._generate_headerT   s    _
ejj\!12UZZL!5,,,""((*LL))40
 ;;-ekk]!< C : C 	tyy~r   c                 2    d|z   dg}dj                  |      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                    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                  |j                  d
      dgz  }|j                  r|d|j                   ddgz  }|j                  r|ddgz  }|dgz  } dj                  |      S )z!Generates the properties section.r2   	readwritewritablereadablerI   r   ```     TzProperty available since: r0   z'*Warning*: This property is deprecated.r   )
r7   r4   rO   rN   	signaturer-   rB   rC   rD   r'   )r
   rE   r*   r<   rJ   accesss         r   _generate_propertiesz$MdCodeGenerator._generate_propertiesy   s   !! 	Azzl!AFF8,Ezzajj$##qvvhaxq6Q\\40	 	C ww0	;  ||=  B4KC9	: 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 ]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gz  }|dgz  }dj                  |      S )z/Generates the method signature as a code block.rP   r   rQ    () (r   z	      IN rR   ,z
      OUT     )r   )r>   in_argsout_argsr4   	enumeraterS   r'   )r
   methodr*   	n_in_args
n_out_argsidxargs          r   _generate_method_signaturez*MdCodeGenerator._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 	wyy~r   c           
         g }|j                   D ]  }|j                   d|j                   }|d|z   d| j                  |      d| j                  |j                  d      dgz  }|j
                  D ]5  }| j                  |j                  d      }|d|j                   d| dgz  }7 |dgz  }|j                  r|d|j                   ddgz  }|j                  r|ddgz  }|dgz  } d	j                  |      S )
zGenerates the methods section.r0   rI   r   Tz* z: zMethod available since: z%*Warning*: This method is deprecated.r   )	r5   r4   rc   r-   rB   r[   rC   rD   r'   )r
   rE   r*   r   rJ   aarg_descs          r   _generate_methodsz!MdCodeGenerator._generate_methods   s1    	Azzl!AFF8,E//2Q\\40 C YY <<d;8*-  B4KCww.qwwiq9  ||;  B4KC7	8 yy~r   c                    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
gz  }|dgz  }dj                  |      S )zGenerates the signal signature.rP   r   rQ   rW   rX   r   z      rR   rY   rZ   r   )r>   argsr4   r]   rS   r'   )r
   signalr*   n_argsra   rb   s         r   _generate_signal_signaturez*MdCodeGenerator._generate_signal_signature   s    
 V[[!Q;v{{m3' C v{{m2& C &fkk2 S&1*$ 
!CMM?; C  
!CMM?!< C  C 	wyy~r   c           
         g }|j                   D ]  }|j                   d|j                   }|d|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|ddgz  }|dgz  } d	j                  |      S )
zGenerates the signals section.r1   rI   r   Tz  zSignal available since: r0   z%*Warning*: This signal is deprecated.r   )	r6   r4   rl   r-   rB   ri   rC   rD   r'   )r
   rE   r*   r(   rJ   re   rf   s          r   _generate_signalsz!MdCodeGenerator._generate_signals   s/    	Azzl"QVVH-E//2Q\\40 C VV <<d;vvh
O  B4KCww.qwwiq9  ||;  B4KC9	: 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)	z/Generates the Markdown file for each interface.-z.mdwr   
PropertiesMethodsSignalsN)r   openospathr'   r4   writerG   r>   r7   rK   rU   r5   rg   r6   rn   )r
   mdoutdirr:   outfiles        r   generatezMdCodeGenerator.generate"  s?    	=Abggll6bT166(#+>?E 
=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	   rG   rK   rU   rc   rg   rl   rn   r|    r   r   r   r      sA    5&8
B: D%NB: D=r   r   )rv   r%   r   r   r   r   r   r   r   <module>r      s    
 	  _= _=r   