B
    ¿ÐaÀH  ã               @   s2   d dl Z d dlmZ ddlmZ G dd„ dƒZdS )é    N)Úpathé   )Úutilsc               @   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*x0|j D ]}tt|jƒ|ƒ}qW ntt|jƒ|ƒ}d}|r”x|j D ]D}x|jD ]}tt|jƒ|ƒ}qVW x|jD ]}tt|jƒ|ƒ}qvW qJW n@x|jD ]}tt|jƒ|ƒ}qœW x|jD ]}tt|jƒ|ƒ}q¼W |r| j dt	 
|j¡|j|j|t|jƒ df ¡ n"| j d|j|t|jƒ df ¡ d}x`|jD ]V}|dkr`| j d|d df ¡ | j d|j|t|jƒ d|jf ¡ |d }q:W x`|jD ]V}|dkrÂ| j d|d df ¡ | j d	|j|t|jƒ d|jf ¡ |d }qœW | j d
¡ d S )Nr   z1<link linkend="gdbus-method-%s.%s">%s</link>%*s (Ú z%s%*s (z,
%*sé   zIN  %s%*s %sr   zOUT %s%*s %sz);
)Ú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(   sR    
"

z+DocbookCodeGenerator.print_method_prototypec       	   	   C   s`  d}|r*x0|j D ]}tt|jƒ|ƒ}qW ntt|jƒ|ƒ}d}|rtxP|j D ]$}x|jD ]}tt|jƒ|ƒ}qVW qJW n x|jD ]}tt|jƒ|ƒ}q|W |rÊ| j dt 	|j¡|j|j|t|jƒ df ¡ n"| j d|j|t|jƒ df ¡ d}x^|jD ]T}|dkr| j d|d df ¡ | j d|j|t|jƒ d|jf ¡ |d }qøW | j d	¡ d S )
Nr   z1<link linkend="gdbus-signal-%s.%s">%s</link>%*s (r   z%s%*s (z,
%*sr   z%s%*s %sr   z);
)
Úsignalsr   r   r   Úargsr   r   r   r   r   )	r   r   Úsr   Zmax_signal_lenZ_sr   r   r   r	   r	   r
   Úprint_signal_prototype]   s<    
"
z+DocbookCodeGenerator.print_signal_prototypec          	   C   s  d}|r*x0|j D ]}tt|jƒ|ƒ}qW ntt|jƒ|ƒ}d}|rdx0|j D ]}tt|jƒ|ƒ}qJW n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_prototype†   s2    
"z-DocbookCodeGenerator.print_property_prototypec             C   s`   | j  d¡ | j  d¡ | j  d¡ x|jD ]}| j||dd q,W | j  d¡ | j  d¡ d S )Nz#  <refsynopsisdiv role="synopsis">
z1    <title role="synopsis.title">Methods</title>
z    <synopsis>
T)r   z</synopsis>
z  </refsynopsisdiv>
)r   r   r   r   )r   r   r   r	   r	   r
   Úprint_synopsis_methodsª   s    z+DocbookCodeGenerator.print_synopsis_methodsc             C   s`   | j  d¡ | j  d¡ | j  d¡ x|jD ]}| j||dd q,W | j  d¡ | j  d¡ d S )Nz!  <refsect1 role="signal_proto">
z5    <title role="signal_proto.title">Signals</title>
z    <synopsis>
T)r   z</synopsis>
z  </refsect1>
)r   r   r    r#   )r   r   r"   r	   r	   r
   Úprint_synopsis_signals³   s    z+DocbookCodeGenerator.print_synopsis_signalsc             C   s`   | j  d¡ | j  d¡ | j  d¡ x|jD ]}| j||dd q,W | j  d¡ | j  d¡ d S )Nz  <refsect1 role="properties">
z6    <title role="properties.title">Properties</title>
z    <synopsis>
T)r   z</synopsis>
z  </refsect1>
)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
¡ xX|j	D ]N}| j  d¡ | j  d|j|jf ¡ | j  d|  |jd	¡ ¡ | j  d¡ qÂW xZ|j
D ]P}| j  d¡ | j  d|j|jf ¡ | j  d|  |jd	¡ ¡ | j  d¡ qW | 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>
z<programlisting>
F)r   z</programlisting>
z%s
Tz<variablelist role="params">
z<varlistentry>
zC  <term><literal>IN %s <parameter>%s</parameter></literal>:</term>
z  <listitem>%s</listitem>
z</varlistentry>
zD  <term><literal>OUT %s <parameter>%s</parameter></literal>:</term>
z</variablelist>
r   z#<para role="since">Since %s</para>
z><warning><para>The %s() method is deprecated.</para></warning>z</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Å   sX    

z!DocbookCodeGenerator.print_methodc          	   C   sf  | 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
¡ xX|j	D ]N}| j  d¡ | j  d|j
|jf ¡ | j  d|  |jd	¡ ¡ | j  d¡ q¼W | j  d¡ t|jƒdkr<| j  d|j ¡ |jrV| 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>
z<programlisting>
F)r   z</programlisting>
z%s
Tz<variablelist role="params">
z<varlistentry>
z@  <term><literal>%s <parameter>%s</parameter></literal>:</term>
z  <listitem>%s</listitem>
z</varlistentry>
z</variablelist>
r   z#<para role="since">Since %s</para>
z><warning><para>The "%s" signal is deprecated.</para></warning>z</refsect2>
)r   r   r   r   r   r-   r#   r.   r/   r!   r   r   r0   r1   )r   r   r"   r   r	   r	   r
   Úprint_signalü   sF    

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>
z<programlisting>
F)r   z</programlisting>
z%s
Tr   z#<para role="since">Since %s</para>
z@<warning><para>The "%s" property is deprecated.</para></warning>z</refsect2>
)r   r   r   r   r   r-   r)   r.   r/   r   r0   r1   )r   r   r'   r	   r	   r
   Úprint_property(  s.    

z#DocbookCodeGenerator.print_propertyc             C   sp   x | j D ]}| || j| ¡}qW x | jD ]}| || j| ¡}q*W |rlt 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>O  ó    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>)r5   )r   r	   r	   r
   r6   U  r7   )Úexpand_member_dict_keysÚreplaceÚexpand_member_dictÚexpand_iface_dict_keysÚexpand_iface_dictÚreÚsub)r   r"   ÚexpandParamsAndConstantsÚkeyr	   r	   r
   ÚexpandF  s    zDocbookCodeGenerator.expandc             C   s&   |   ||¡ ¡ }| d¡s"d| }|S )Nz<paraz<para>%s</para>)rA   ÚstripÚ
startswith)r   r"   r?   r	   r	   r
   r.   Z  s    
z!DocbookCodeGenerator.expand_parasc             C   s@  i | _ i | _x| jD ]ú}d|j }dt |j¡|jf }|| j|< xB|jD ]8}d|j|jf }dt |j¡|j|jf }|| j |< qLW xB|jD ]8}d|j|jf }dt |j¡|j|jf }|| j |< qW xB|jD ]8}d|j|jf }dt |j¡|j|jf }|| j |< qÔW qW 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)r:   r<   r   r   r   r   r   r    r$   ÚsortedÚkeysr8   r;   )r   r   r@   Úvaluer   r"   r'   r	   r	   r
   r   `  sB    









z*DocbookCodeGenerator.generate_expand_dictsc             C   s  x| j D ]ø}tt |d||jf ¡dƒ| _| j d¡ | j d¡ | j d¡ | j d¡ | j d¡ | j d|j ¡ | j d	¡ | j d
t |j¡|jf ¡ | j dt |j¡|j	|jf ¡ | j d¡ | j d¡ | j d|j ¡ | j d|j
 ¡ | j d¡ t|jƒdkr*|  |¡ t|jƒdkrD|  |¡ t|jƒdkr^|  |¡ | j dt |j¡ ¡ | j d¡ | j d|  |jd¡ ¡ t|jƒdkr¾| j d|j ¡ |jrØ| j d|j ¡ | j d¡ t|jƒdkr<| j d|j ¡ | j d¡ x|jD ]}|  ||¡ qW | j d¡ t|jƒdkr”| j d|j ¡ | j d¡ x|jD ]}|  ||¡ qrW | j d¡ t|jƒdkrì| j d|j ¡ | j d¡ x|jD ]}|  ||¡ qÊW | j d¡ | j d¡ | j d ¡ q
W d S )!Nz	%s-%s.xmlÚwr   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   r-   Zdoc_string_briefr   r   r*   r    r+   r$   r,   r.   r/   r0   r1   r2   r3   r4   )r   ZdocbookZoutdirr   r   r"   r	   r	   r
   Úgenerate‹  s€    



zDocbookCodeGenerator.generateN)Ú__name__Ú
__module__Ú__qualname__r   r   r#   r)   r*   r+   r,   r2   r3   r4   rA   r.   r   rL   r	   r	   r	   r
   r   #   s   5)$			7,+r   )r=   Úosr   r   r   r   r	   r	   r	   r
   Ú<module>   s   
