U
    
a2                     @   s:   d dl ZddlmZ ddlmZ G dd dZdd ZdS )	    N   )	dbustypes)print_errorc                   @   sj   e Zd ZdZdZdZdZdZdZdZ	dZ
d	ZdddZdZdZdZdZdd Zdd Zdd Zdd ZdS )DBusXMLParsertopZnodeZ	interfacemethodsignalpropertyargZ
annotationZignoredTc                 C   sx   t jj | _| j| j_| j| j_| j	| j_
| j| j_g | _d | _tj| _g | _d | _g | _d| _|| _| j| d S )N )xmlZparsersZexpatZParserCreateZ_parserhandle_commentZCommentHandlerhandle_char_dataZCharacterDataHandlerhandle_start_elementZStartElementHandlerhandle_end_elementZEndElementHandlerparsed_interfaces_cur_objectr   	STATE_TOPstatestate_stack_cur_object_stackdoc_comment_last_symbol_h_type_implies_unix_fdZParse)selfxml_datah_type_implies_unix_fd r    share/glib-2.0/codegen/parser.py__init__'   s    



zDBusXMLParser.__init__Zbeginparamsbodyskipc                 C   s  t j}|d}d}d}d}i }|D ]}|}	| }|t jkrt|dkr|d}
|
dkr|dr|dt|d  }t j}qt j}nB|d|
 }||
d	 d  	 }t|dkr|d
| d 7 }t j}q$|t jkr||
drH|d}
|
dkr"t j}|s|d
7 }d}||	d 7 }n$|d|
 }||
d	 d  }|||< n2t j}t|dkr|sn|d
7 }d}||	d 7 }q$|t jkr$t|dkr|s|d
7 }d}||	d 7 }q$|r$|d7 }d}q$|r|d7 }|dkr|| _|| _|| _d S )N
r   Fr   z: :r      z<para>z</para>@T)r   COMMENT_STATE_BEGINsplitlstriplenfindendswithCOMMENT_STATE_PARAMSCOMMENT_STATE_SKIPstrip
startswithCOMMENT_STATE_BODYr   doc_comment_paramsdoc_comment_body)r   dataZcomment_statelinesZsymbolr    Zin_parar   lineZ	orig_lineZcolon_indexZrest_of_lineZparamZdocsr   r   r   r   A   sn    









zDBusXMLParser.handle_commentc                 C   s   d S Nr   )r   r4   r   r   r   r      s    zDBusXMLParser.handle_char_datac                 C   s  | j }| j}| j tjkr$tj| _ n| j tjkrP|tjkrDtj| _ ntj| _ n| j tjkr:|tjkrtj| _ t|d }|| _| j	
| nD|tjkrtj| _ t|d |d }| jj
| || _ntj| _ d|kr| j|d kr| j| j_d| jkr| jd }|| j_d| jkr| jd  | j_n| j tjkr|tjkrtj| _ tj|d | jd}| jj
| || _n|tjkrtj| _ t|d }	| jj
|	 |	| _n|tjkrtj| _ t|d |d |d }
| jj
|
 |
| _nF|tjkr@tj| _ t|d |d }| jj
| || _ntj| _ d|kr| j|d kr| j| j_d| jkr| jd  | j_np| j tjkr|tjkr,tj| _ d }d|kr|d }t ||d }|!dd	}|d	kr| jj"
| n(|d
kr| jj#
| nt$d%| || _nF|tjkrjtj| _ t|d |d }| jj
| || _ntj| _ | j|j&krd|kr|d | jkr| j|d  }|d k	r|| j_d| jkr| jd  | j_n"| j tjkr|tjkr:tj| _ d }d|kr|d }t ||d }| jj'
| || _nF|tjkrxtj| _ t|d |d }| jj
| || _ntj| _ | j|j&krd|kr|d | jkr| j|d  }|d k	r|| j_d| jkr| jd  | j_n| j tjkr@|tjkr6tj| _ t|d |d }| jj
| || _ntj| _ n| j tjkr|tjkrtj| _ t|d |d }| jj
| || _ntj| _ nh| j tjkr|tjkrtj| _ t|d |d }| jj
| || _ntj| _ nt$d%| j | | j(
| | j)
| d S )Nnamevalueshort_descriptionsince)r   typeaccess	directioninoutzInvalid direction "{}"z:Unhandled state "{}" while entering element with name "{}")*r   r   r   STATE_IGNOREDr   
STATE_NODESTATE_INTERFACEr   Z	Interfacer   appendSTATE_ANNOTATIONZ
AnnotationZannotationsr   r3   
doc_stringr2   Zdoc_string_briefr/   r;   STATE_METHODZMethodr   methodsSTATE_SIGNALZSignalZsignalsSTATE_PROPERTYZPropertyZ
properties	STATE_ARGZArggetZin_argsZout_argsr   formatr8   argsr   r   )r   r8   ZattrsZ	old_stateZold_cur_objectZifaceZannor:   r   r   ZpropZarg_namer
   r>   rF   r   r   r   r      s   





 









 z"DBusXMLParser.handle_start_elementc                 C   s   | j  | _| j | _d S r7   )r   popr   r   r   )r   r8   r   r   r   r   (  s    z DBusXMLParser.handle_end_elementN)T)__name__
__module____qualname__r   rB   rC   rG   rI   rJ   rK   rE   rA   r   r'   r-   r1   r.   r   r   r   r   r   r   r   r   r      s&   
? %r   c                 C   s   t | |}|jS r7   )r   r   )r   r   parserr   r   r   parse_dbus_xml-  s    
rT   )Zxml.parsers.expatr   r   r   Zutilsr   r   rT   r   r   r   r   <module>   s     