
V               ,   @   sh  d  d l  m Z m Z m Z m Z m Z m Z m Z d a d d   Z	 d d   Z
 d d   Z e j e e j e e j e e j e e j e e j e e j e e j e e j e e j e e j e e j e e j e e j e e j e e j  e! e j" e! e j# e! e j$ d e j% d e j& d e j' d i Z( d	 d
   Z) d d   Z* d d   Z+ d d   Z, e	 e,  d S)   )	VFuncInfoFunctionInfoCallableInfo
ObjectInfo
StructInfo	DirectionTypeTagNc             C   s
   |  a  d S)zSet doc string generator function

    :param callable func:
        Callable which takes a GIInfoStruct and returns documentation for it.
    N)_generate_doc_string_func)func r   ./usr/lib/python3/dist-packages/gi/docstring.pyset_doc_string_generator%   s    r   c               C   s   t  S)z6Returns the currently registered doc string generator.)r	   r   r   r   r   get_doc_string_generator/   s    r   c             C   s
   t  |   S)aE  Generate a doc string given a GIInfoStruct.

    :param gi.types.BaseInfo info:
        GI info instance to generate documentation for.
    :returns:
        Generated documentation as a string.
    :rtype: str

    This passes the info struct to the currently registered doc string
    generator and returns the result.
    )r	   )infor   r   r   generate_doc_string4   s    r   c             C   s   |  j    } t j | d   } | r: t | d  r: | j S| t j k r |  j   } | j   } | sq |  j	   Sd | j
   | f S|  j	   S)N__name__z%s.%s)Zget_tag_type_tag_to_py_typegethasattrr   r   	INTERFACEZget_interfaceget_nameZget_tag_as_stringZget_namespace)Zgi_typeZtype_tagZpy_typeZifaceZ	info_namer   r   r   _get_pytype_hint\   s    
r   c             C   s  g  } t  |  t  r! d g } n$ t  |  t  rE |  j   rE d g } |  j   } d
 } t   } t   } xM | D]E } | j | j    | j | j   j	    | j | j
    qp Wx t |  D] \ } } | j   t j k r q | | k r q | j   } t | j    }	 |	 | k r1| d |	 7} | j   sI| | k rV| d 7} n | j   rl| d 7} | j |  q Wd j |  }
 g  } t |  j    } |  j   r| r| | k r| } |  j   r| d 7} | j |  x t |  D]x \ } } | j   t j k rq| | k r,q| j   } t | j    }	 |	 | k rd| d |	 7} | j |  qW| rd |  j |
 d j |  f Sd	 |  j |
 f Sd  S)Nselfvoid:z=Nonez=<optional>z, z or Nonez%s(%s) -> %sz%s(%s))zvoid)
isinstancer   r   Z	is_methodZget_argumentssetaddZget_destroyZget_typeZget_array_lengthZget_closure	enumerateZget_directionr   ZOUTr   r   Zmay_be_nullZis_optionalappendjoinZget_return_typeZskip_returnZmay_return_nullINr   )r   Zin_args_strsargsZhint_blacklistZignore_indicesZuser_data_indicesargiZargstrZhintZin_args_strZout_args_strsZreturn_hintr   r   r   _generate_callable_info_docn   sb    			

r%   c             C   s   d } d } t  |  t  rH |  j   d k r` | d |  j   d 7} n | d |  j   d 7} x8 |  j   D]* } | j   rm | d t |  d 7} qm W| r | | Sd Sd  S)Nz
:Constructors:

::

     z    z()
z(**properties)

)r   r   Zget_sizer   Zget_methodsZis_constructorr%   )r   headerdocZmethod_infor   r   r   _generate_class_info_doc   s    r+   c             C   s<   t  |  t t f  r t |   St  |  t  r8 t |   Sd S)Nr&   )r   r   r   r+   r   r%   )r   r   r   r   _generate_doc_dispatch   s
    

r,   )-Z_gir   r   r   r   r   r   r   r	   r   r   r   ZBOOLEANboolZINT8intZUINT8ZINT16ZUINT16ZINT32ZUINT32ZINT64ZUINT64ZFLOATfloatZDOUBLEZGLISTlistZGSLISTZARRAYZGHASHdictZUTF8strZFILENAMEZUNICHARr   ZGTYPEZERRORZVOIDr   r   r%   r+   r,   r   r   r   r   <module>   s>   4
																					@
