U
    	Ïu_}?  ã                   @   s^   d dl Z d dlZd dlmZ ddlmZ ddlmZ ddlmZ ddlmZ G dd	„ d	ƒZ	dS )
é    N)Úpathé   )Úconfig)Úutils)Ú	dbustypes)Úparserc                   @   s|   e 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d„ Zdd„ Zdd„ ZdS )ÚDocbookCodeGeneratorc                 C   s   || _ |  ¡  d S )N)ÚifacesÚgenerate_expand_dicts)Úselfr	   © r   ú./usr/share/glib-2.0/codegen/codegen_docbook.pyÚ__init__"   s    zDocbookCodeGenerator.__init__c           	   	   C   sä  d}|r&|j D ]}tt|jƒ|ƒ}qntt|jƒ|ƒ}d}|r„|j D ]<}|jD ]}tt|jƒ|ƒ}qN|jD ]}tt|jƒ|ƒ}qjqDn8|jD ]}tt|jƒ|ƒ}qŠ|jD ]}tt|jƒ|ƒ}q¦|rò| j dt	 
|j¡|j|j|t|jƒ df ¡ n"| j d|j|t|jƒ df ¡ d}|jD ]V}|dkrD| j d|d df ¡ | j d|j|t|jƒ d|jf ¡ |d }q|jD ]V}|dkr¢| j d|d df ¡ | j d	|j|t|jƒ d|jf ¡ |d }q|| j d
¡ d S )Nr   z1<link linkend="gdbus-method-%s.%s">%s</link>%*s (Ú ú%s%*s (ú,
%*sé   zIN  %s%*s %sr   zOUT %s%*s %sú);
)ÚmethodsÚmaxÚlenÚnameÚin_argsÚ	signatureÚout_argsÚoutÚwriter   Údots_to_hyphens)	r   ÚiÚmÚin_synopsisZmax_method_lenÚ_mÚmax_signature_lenÚaÚcountr   r   r   Úprint_method_prototype&   sF    





"ÿÿ

&

&z+DocbookCodeGenerator.print_method_prototypec           	   	   C   sL  d}|r&|j D ]}tt|jƒ|ƒ}qntt|jƒ|ƒ}d}|rh|j D ] }|jD ]}tt|jƒ|ƒ}qNqDn|jD ]}tt|jƒ|ƒ}qn|rº| j dt 	|j¡|j|j|t|jƒ df ¡ n"| j d|j|t|jƒ df ¡ d}|jD ]T}|dkr| j d|d df ¡ | j d|j|t|jƒ d|jf ¡ |d }qæ| j d	¡ d S )
Nr   z1<link linkend="gdbus-signal-%s.%s">%s</link>%*s (r   r   r   r   z%s%*s %sr   r   )
Úsignalsr   r   r   Úargsr   r   r   r   r   )	r   r   Úsr    Zmax_signal_lenZ_sr"   r#   r$   r   r   r   Úprint_signal_prototypeN   s4    



"ÿÿ

&
z+DocbookCodeGenerator.print_signal_prototypec              	   C   s   d}|r&|j D ]}tt|jƒ|ƒ}qntt|jƒ|ƒ}d}|r\|j D ]}tt|jƒ|ƒ}qDntt|jƒ|ƒ}|r¢| j dt |j¡|j|j|t|jƒ df ¡ n"| j d|j|t|jƒ df ¡ |j	rÖ|j
rÖd}n|j	râd}nd}| j d||jf ¡ d S )	Nr   z1<link linkend="gdbus-property-%s.%s">%s</link>%*sr   z%s%*sZ	readwritez	readable z	writable z	  %s  %s
)Ú
propertiesr   r   r   r   r   r   r   r   ÚreadableÚwritable)r   r   Úpr    Zmax_property_lenZ_pr"   Úaccessr   r   r   Úprint_property_prototypem   s.    

"ÿÿz-DocbookCodeGenerator.print_property_prototypec                 C   sp   | j  dd ¡ | j  dd ¡ | j  dd ¡ |jD ]}| j||dd q6| j  dd ¡ | j  dd ¡ d S )	Nz#  <refsynopsisdiv role="synopsis">
r   z1    <title role="synopsis.title">Methods</title>
ú    <synopsis>
T©r    ú</synopsis>
z  </refsynopsisdiv>
)r   r   r   r%   )r   r   r   r   r   r   Úprint_synopsis_methods‹   s    
z+DocbookCodeGenerator.print_synopsis_methodsc                 C   sp   | j  dd ¡ | j  dd ¡ | j  dd ¡ |jD ]}| j||dd q6| j  dd ¡ | j  dd ¡ d S )	Nz!  <refsect1 role="signal_proto">
r   z5    <title role="signal_proto.title">Signals</title>
r0   Tr1   r2   ú  </refsect1>
)r   r   r&   r)   )r   r   r(   r   r   r   Úprint_synopsis_signals”   s    
z+DocbookCodeGenerator.print_synopsis_signalsc                 C   sp   | j  dd ¡ | j  dd ¡ | j  dd ¡ |jD ]}| j||dd q6| j  dd ¡ | j  dd ¡ d S )	Nz  <refsect1 role="properties">
r   z6    <title role="properties.title">Properties</title>
r0   Tr1   r2   r4   )r   r   r*   r/   ©r   r   r-   r   r   r   Úprint_synopsis_properties   s    
z.DocbookCodeGenerator.print_synopsis_propertiesc              	   C   sÐ  | j  dt |j¡|jf ¡ | j  d|j ¡ | j  dt |j¡|j|j|j|j|jf ¡ | j  d¡ | j||dd | j  d¡ | j  d|  |jd	¡ ¡ |j	s®|j
r„| j  d
¡ |j	D ]V}| j  dd ¡ | j  d|j|jf ¡ | j  d|  |jd	¡ ¡ | j  dd ¡ qÀ|j
D ]X}| j  dd ¡ | j  d|j|jf ¡ | j  d|  |jd	¡ ¡ | j  dd ¡ q| j  d¡ t|jƒdkr¦| j  d|j ¡ |jrÀ| j  d|j ¡ | j  d¡ d S )Nz1<refsect2 role="method" id="gdbus-method-%s.%s">
z!  <title>The %s() method</title>
z]  <indexterm zone="gdbus-method-%s.%s"><primary sortas="%s.%s">%s.%s()</primary></indexterm>
ú<programlisting>
Fr1   ú</programlisting>
ú%s
Tú<variablelist role="params">
ú<varlistentry>
r   zC  <term><literal>IN %s <parameter>%s</parameter></literal>:</term>
ú  <listitem>%s</listitem>
ú</varlistentry>
zD  <term><literal>OUT %s <parameter>%s</parameter></literal>:</term>
ú</variablelist>
r   ú#<para role="since">Since %s</para>
z><warning><para>The %s() method is deprecated.</para></warning>ú</refsect2>
)r   r   r   r   r   Úname_without_prefixr%   Úexpand_parasÚ
doc_stringr   r   r   r   ÚsinceÚ
deprecated)r   r   r   r#   r   r   r   Úprint_method¦   s2    .

z!DocbookCodeGenerator.print_methodc              	   C   sj  | j  dt |j¡|jf ¡ | j  d|j ¡ | j  dt |j¡|j|j|j|j|jf ¡ | j  d¡ | j||dd | j  d¡ | j  d|  |jd	¡ ¡ |j	r| j  d
¡ |j	D ]V}| j  dd ¡ | j  d|j
|jf ¡ | j  d|  |jd	¡ ¡ | j  dd ¡ qº| j  d¡ t|jƒdkr@| j  d|j ¡ |jrZ| j  d|j ¡ | j  d¡ d S )Nz1<refsect2 role="signal" id="gdbus-signal-%s.%s">
z!  <title>The "%s" signal</title>
z]  <indexterm zone="gdbus-signal-%s.%s"><primary sortas="%s::%s">%s::%s</primary></indexterm>
r8   Fr1   r9   r:   Tr;   r<   r   z@  <term><literal>%s <parameter>%s</parameter></literal>:</term>
r=   r>   r?   r   r@   z><warning><para>The "%s" signal is deprecated.</para></warning>rA   )r   r   r   r   r   rB   r)   rC   rD   r'   r   r   rE   rF   )r   r   r(   r#   r   r   r   Úprint_signalÁ   s(    .
z!DocbookCodeGenerator.print_signalc              	   C   sè   | j  dt |j¡|jf ¡ | j  d|j ¡ | j  dt |j¡|j|j|j|j|jf ¡ | j  d¡ | j||dd | j  d¡ | j  d|  |jd	¡ ¡ t	|j
ƒd
krÀ| j  d|j
 ¡ |jrØ| j  d|j ¡ | j  d¡ d S )Nz5<refsect2 role="property" id="gdbus-property-%s.%s">
z#  <title>The "%s" property</title>
z]  <indexterm zone="gdbus-property-%s.%s"><primary sortas="%s:%s">%s:%s</primary></indexterm>
r8   Fr1   r9   r:   Tr   r@   z@<warning><para>The "%s" property is deprecated.</para></warning>rA   )r   r   r   r   r   rB   r/   rC   rD   r   rE   rF   r6   r   r   r   Úprint_property×   s    .z#DocbookCodeGenerator.print_propertyc                 C   sh   | j D ]}| || j| ¡}q| jD ]}| || j| ¡}q$|rdt ddd„ |¡}t ddd„ |¡}|S )Nz@[a-zA-Z0-9_]*c                 S   s   d|   d¡dd …  d S )Nz<parameter>r   r   z</parameter>©Úgroup©r   r   r   r   Ú<lambda>ì   ó    z-DocbookCodeGenerator.expand.<locals>.<lambda>z%[a-zA-Z0-9_]*c                 S   s   d|   d¡dd …  d S )Nz
<constant>r   r   z</constant>rJ   rL   r   r   r   rM   î   rN   )Úexpand_member_dict_keysÚreplaceÚexpand_member_dictÚexpand_iface_dict_keysÚexpand_iface_dictÚreÚsub)r   r(   ÚexpandParamsAndConstantsÚkeyr   r   r   Úexpandå   s    

zDocbookCodeGenerator.expandc                 C   s&   |   ||¡ ¡ }| d¡s"d| }|S )Nz<paraz<para>%s</para>)rX   ÚstripÚ
startswith)r   r(   rV   r   r   r   rC   ñ   s    
z!DocbookCodeGenerator.expand_parasc                 C   s.  i | _ i | _| jD ]î}d|j }dt |j¡|jf }|| j|< |jD ]8}d|j|jf }dt |j¡|j|jf }|| j |< qF|jD ]8}d|j|jf }dt |j¡|j|jf }|| j |< q†|jD ]8}d|j|jf }dt |j¡|j|jf }|| j |< qÆqt	| j  
¡ d	d
| _t	| j 
¡ d	d
| _d S )Nz#%sz8<link linkend="gdbus-interface-%s.top_of_page">%s</link>z%s.%s()z.<link linkend="gdbus-method-%s.%s">%s()</link>z#%s::%sz.<link linkend="gdbus-signal-%s.%s">"%s"</link>z#%s:%sz0<link linkend="gdbus-property-%s.%s">"%s"</link>T)Úreverse)rQ   rS   r	   r   r   r   r   r&   r*   ÚsortedÚkeysrO   rR   )r   r   rW   Úvaluer   r(   r-   r   r   r   r
   ÷   s(    





z*DocbookCodeGenerator.generate_expand_dictsc                 C   s>  | j D ]0}tt |d||jf ¡dƒ| _| j dd ¡ | j dd ¡ | j dd ¡ | j dd ¡ | j dd ¡ | j d	|j ¡ | j d
d ¡ | j dt |j¡|jf ¡ | j dt |j¡|j	|jf ¡ | j dd ¡ | j dd ¡ | j d|j ¡ | j d|j
 ¡ | j dd ¡ t|jƒdkrJ|  |¡ t|jƒdkrd|  |¡ t|jƒdkr~|  |¡ | j dt |j¡ ¡ | j dd ¡ | j d|  |jd¡ ¡ t|jƒdkrâ| j d|j ¡ |jrü| j d|j ¡ | j dd ¡ t|jƒdkrh| j d|j ¡ | j dd ¡ |jD ]}|  ||¡ qD| j dd ¡ t|jƒdkrÄ| j d|j ¡ | j dd ¡ |jD ]}|  ||¡ q | j dd ¡ t|jƒdkr | j d|j ¡ | j dd ¡ |jD ]}|  ||¡ qü| j dd ¡ | j d ¡ | j d!¡ qd S )"Nz	%s-%s.xmlÚwr   r   z'<?xml version="1.0" encoding="utf-8"?>
zA<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
zL               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
z]>
z<refentry id="gdbus-%s">
z  <refmeta>z]    <refentrytitle role="top_of_page" id="gdbus-interface-%s.top_of_page">%s</refentrytitle>
za  <indexterm zone="gdbus-interface-%s.top_of_page"><primary sortas="%s">%s</primary></indexterm>
z  </refmeta>z  <refnamediv>z    <refname>%s</refname>z    <refpurpose>%s</refpurpose>z  </refnamediv>r   z/<refsect1 role="desc" id="gdbus-interface-%s">
z/  <title role="desc.title">Description</title>
z  %s
Tz%  <para role="since">Since %s</para>
z?<warning><para>The %s interface is deprecated.</para></warning>z</refsect1>
z0<refsect1 role="details" id="gdbus-methods-%s">
z5  <title role="details.title">Method Details</title>
z0<refsect1 role="details" id="gdbus-signals-%s">
z5  <title role="details.title">Signal Details</title>
z3<refsect1 role="details" id="gdbus-properties-%s">
z7  <title role="details.title">Property Details</title>
z</refentry>
Ú
)r	   Úopenr   Újoinr   r   r   r   r   rB   Zdoc_string_briefr   r   r3   r&   r5   r*   r7   rC   rD   rE   rF   rG   rH   rI   )r   ZdocbookZoutdirr   r   r(   r   r   r   Úgenerate  sd    "





zDocbookCodeGenerator.generateN)Ú__name__Ú
__module__Ú__qualname__r   r%   r)   r/   r3   r5   r7   rG   rH   rI   rX   rC   r
   rc   r   r   r   r   r   !   s   (			r   )
ÚsysrT   Úosr   r   r   r   r   r   r   r   r   r   r   Ú<module>   s   