
[}?                 @   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 Gd 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   | |  _  |  j   d  S)N)ifacesgenerate_expand_dicts)selfr	    r   )share/glib-2.0/codegen/codegen_docbook.py__init__"   s    	zDocbookCodeGenerator.__init__c       	      C   s  d } | r; xD | j  D] } t t | j  |  } q Wn t t | j  |  } d } | r x | j  D]^ } x) | j D] } t t | j  |  } qy Wx) | j D] } t t | j  |  } q Wqi WnX x) | j D] } t t | j  |  } q Wx) | j D] } t t | j  |  } qW| rq|  j j d t	 j
 | j  | j | j | t | j  d f  n- |  j j d | j | t | j  d f  d } xx | j D]m } | d k r|  j j d | d d f  |  j j d | j | t | j  d | j f  | d } qWxx | j D]m } | d k rY|  j j d | d d f  |  j j d	 | j | t | j  d | j f  | d } q)W|  j 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_lenZ_mmax_signature_lenacountr   r   r   print_method_prototype&   sB    #9!33z+DocbookCodeGenerator.print_method_prototypec       	      C   s  d } | r; xD | j  D] } t t | j  |  } q Wn t t | j  |  } d } | r xl | j  D]2 } x) | j D] } t t | j  |  } qy Wqi Wn, x) | j D] } t t | j  |  } q W| r|  j j d t j	 | j  | j | j | t | j  d f  n- |  j j d | j | t | j  d f  d } xx | j D]m } | d k r|  j j d | d d f  |  j j d | j | t | j  d | j f  | d } qVW|  j 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_prototypeN   s0    #9!3z+DocbookCodeGenerator.print_signal_prototypec             C   sr  d } | r; xD | j  D] } t t | j  |  } q Wn t t | j  |  } d } | r xD | j  D] } t t | j  |  } qi Wn t t | j  |  } | r |  j j d t j | j  | j | j | t | j  d f  n- |  j j d | j | t | j  d f  | j	 r9| j
 r9d } n | j	 rKd } n d } |  j 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*    9!			z-DocbookCodeGenerator.print_property_prototypec             C   s   |  j  j d f   |  j  j d f   |  j  j d f   x' | j D] } |  j | | d d qF W|  j  j d f   |  j  j d f   d  S)Nz#  <refsynopsisdiv role="synopsis">
z1    <title role="synopsis.title">Methods</title>
z    <synopsis>
r   Tz</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  j d f   |  j  j d f   |  j  j d f   x' | j D] } |  j | | d d qF W|  j  j d f   |  j  j d f   d  S)Nz!  <refsect1 role="signal_proto">
z5    <title role="signal_proto.title">Signals</title>
z    <synopsis>
r   Tz</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  j d f   |  j  j d f   |  j  j d f   x' | j D] } |  j | | d d qF W|  j  j d f   |  j  j d f   d  S)Nz  <refsect1 role="properties">
z6    <title role="properties.title">Properties</title>
z    <synopsis>
r   Tz</synopsis>
z  </refsect1>
)r   r   r&   r+   )r   r   r)   r   r   r   print_synopsis_properties   s    z.DocbookCodeGenerator.print_synopsis_propertiesc             C   sj  |  j  j d t j | j  | j f  |  j  j d | j  |  j  j d t j | j  | j | j | j | j | j f  |  j  j d  |  j | | d d |  j  j d  |  j  j d |  j | j d	   | j	 s | j
 r
|  j  j d
  x| | j	 D]q } |  j  j d f   |  j  j d | j | j f  |  j  j d |  j | j d	   |  j  j d f   qWx| | j
 D]q } |  j  j d f   |  j  j d | j | j f  |  j  j d |  j | j d	   |  j  j d f   qW|  j  j d  t | j  d k r6|  j  j d | j  | j rV|  j  j d | j  |  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>
r   Fz</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   s2    )A# # #	z!DocbookCodeGenerator.print_methodc             C   s  |  j  j d t j | j  | j f  |  j  j d | j  |  j  j d t j | j  | j | j | j | j | j f  |  j  j d  |  j | | d d |  j  j d  |  j  j d |  j | j d	   | j	 r|  j  j d
  x| | j	 D]q } |  j  j d f   |  j  j d | j
 | j f  |  j  j d |  j | j d	   |  j  j d f   q W|  j  j d  t | j  d k r|  j  j d | j  | j r|  j  j d | j  |  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>
r   Fz</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%   r0   r1   r#   r   r   r2   r3   )r   r   r$   r   r   r   r   print_signal   s(    )A#	 #	z!DocbookCodeGenerator.print_signalc             C   s:  |  j  j d t j | j  | j f  |  j  j d | j  |  j  j d t j | j  | j | j | j | j | j f  |  j  j d  |  j | | d d |  j  j d  |  j  j d |  j | j d	   t	 | j
  d
 k r|  j  j d | j
  | j r&|  j  j d | j  |  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>
r   Fz</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+   r0   r1   r   r2   r3   )r   r   r)   r   r   r   print_property   s    )A#	z#DocbookCodeGenerator.print_propertyc             C   s   x* |  j  D] } | j | |  j |  } q
 Wx* |  j D] } | j | |  j |  } q7 W| r t j d d d   |  } t j d d d   |  } | S)Nz@[a-zA-Z0-9_]*c             S   s   d |  j  d  d d   d S)Nz<parameter>r   r   z</parameter>)group)r   r   r   r   <lambda>   s    z-DocbookCodeGenerator.expand.<locals>.<lambda>z%[a-zA-Z0-9_]*c             S   s   d |  j  d  d d   d S)Nz
<constant>r   r   z</constant>)r7   )r   r   r   r   r8      s    )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   s5   |  j  | |  j   } | j d  s1 d | } | S)Nz<paraz<para>%s</para>)rB   strip
startswith)r   r$   r@   r   r   r   r0      s    
z!DocbookCodeGenerator.expand_parasc             C   s  i  |  _  i  |  _ x^|  j D]S} d | j } d t j | j  | j f } | |  j | <xY | j D]N } d | j | j f } d t j | j  | j | j f } | |  j  | <qe WxY | j D]N } d | j | j f } d t j | j  | j | j f } | |  j  | <q WxY | j D]N } d | j | j f } d t j | j  | j | j f } | |  j  | <qWq Wt	 |  j  j
   d	 d
 |  _ t	 |  j 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>reverseT)r;   r=   r	   r   r   r   r   r"   r&   sortedkeysr9   r<   )r   r   rA   valuer   r$   r)   r   r   r   r
      s(    		%%%z*DocbookCodeGenerator.generate_expand_dictsc             C   s9  x2|  j  D]'} t t j | d | | j f  d  |  _ |  j j d f   |  j j d f   |  j j d f   |  j j d f   |  j j d f   |  j j d | j  |  j j d	 f   |  j j d
 t j | j  | j f  |  j j d t j | j  | j	 | j f  |  j j d f   |  j j d f   |  j j d | j  |  j j d | j
  |  j j d f   t | j  d k r|  j |  t | j  d k r|  j |  t | j  d k r|  j |  |  j j d t j | j   |  j j d f   |  j j d |  j | j d   t | j  d k ru|  j j d | j  | j r|  j j d | j  |  j j d f   t | j  d k r!|  j j d | j  |  j j d f   x! | j D] } |  j | |  qW|  j j d f   t | j  d k r|  j j d | j  |  j j d f   x! | j D] } |  j | |  qkW|  j j d f   t | j  d k r|  j j d | j  |  j j d f   x! | j D] } |  j | |  qW|  j j d f   |  j j d  |  j j d   q
 Wd  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.   r0   r1   r2   r3   r4   r5   r6   )r   ZdocbookZoutdirr   r   r$   r   r   r   generate  sd    +)/ #	zDocbookCodeGenerator.generateN)__name__
__module____qualname__r   r!   r%   r+   r,   r-   r.   r4   r5   r6   rB   r0   r
   rM   r   r   r   r   r   !   s   (			r   )
sysr>   osr   r   r   r   r   r   r   r   r   r   r   <module>   s   