o
    b]                      @   s  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i 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   sf   |   }t|d }|rt|dr|jS |tjkr/|  }| }|s'| 	 S d|
 |f S | 	 S )N__name__z%s.%s)get_tag_type_tag_to_py_typegethasattrr   r   	INTERFACEget_interfaceget_nameget_tag_as_stringget_namespace)gi_typetype_tagpy_typeiface	info_namer   r   r   _get_pytype_hint\   s   
r"   c                 C   s  g }t | trdg}nt | tr|  rdg}|  }d}t }t }|D ]}||  || 	  ||
  q%t|D ]?\}}| tjkrOqC||v rTqC| }t| }	|	|vrh|d|	 7 }| sp||v ru|d7 }n| r}|d7 }|| qCd|}
g }t|  }|  s|r||vr|}|  r|d7 }|| t|D ]*\}}| tjkrq||v rq| }t| }	|	|vr|d|	 7 }|| q|rd| j|
d|f S d	| j|
f S )
Nself)void:z=Nonez=<optional>z, z or Nonez%s(%s) -> %sz%s(%s))
isinstancer   r   	is_methodget_argumentssetaddget_destroyget_typeget_array_lengthget_closure	enumerateget_directionr   OUTr   r"   may_be_nullis_optionalappendjoinget_return_typeskip_returnmay_return_nullINr   )r   in_args_strsargshint_blacklistignore_indicesuser_data_indicesargiargstrhintin_args_strout_args_strsreturn_hintr   r   r   _generate_callable_info_docn   sb   




rF   c                 C   s   d}d}t | tr|  dkr|d|   d 7 }n
|d|   d 7 }|  D ]}| r8|dt| d 7 }q(|r?|| S dS )Nz
:Constructors:

::

     z    z()
z(**properties)

)r&   r   get_sizer   get_methodsis_constructorrF   )r   headerdocmethod_infor   r   r   _generate_class_info_doc   s   
rP   c                 C   s,   t | ttfrt| S t | trt| S dS )NrG   )r&   r   r   rP   r   rF   r   r   r   r   _generate_doc_dispatch   s
   
rQ   )-_gir   r   r   r   r   r   r   r
   r   r   r   BOOLEANboolINT8intUINT8INT16UINT16INT32UINT32INT64UINT64FLOATfloatDOUBLEGLISTlistGSLISTARRAYGHASHdictUTF8strFILENAMEUNICHARr   GTYPEERRORVOIDr   r"   rF   rP   rQ   r   r   r   r   <module>   sb   $

	
@
