
    $|f                     P    d Z ddlZddlZddlZddlZddlmZ  G d d          ZdS )z,comman function between collection and users    Nc                   L    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd ZdS )IdrefFc                 T    || _         || _        g d| _        g d| _        i | _        d S )N)
iseditorof	haseditorispartof)
collectionpersonorganization)e
do_verboseverbsnounsreffed)selferimpr   s      !/home/ernad/ernad/python/idref.py__init__zIdref.__init__   s6    $<<<
===
t    c                 .    | j         D ]}i | j        |<   d S )N)r   r   )r   nouns     r   clearzIdref.clear   s,    J 	# 	#D "DK	# 	#r   c                     t          j        |          j        }|| j        vrt	          d| t
          j                   |S )Nzidref: no such noun file)etQName	localnamer   printsysstderr)r   eler   s      r   r   z
Idref.noun   sK    x}}&tz!!///z# # # #r   c                     d| j         j        d         z   dz   }|                    |          sdS |dd          }|| j        v rdS dS )N{amf}F   T)r   ns
startswithr   )r   string	amf_starts      r   is_verbzIdref.is_verb$   sY    $&)E**S0	  ++ 	5TZ4ur   c                     d|j         v r|j         d         S d|j         v r(|j         d                             d          d         }|S dS )z? in case of both id and ref, id should really be returned firstrefid/N)attribsplit)r   r"   r.   s      r   handle_from_nounzIdref.handle_from_nounK   sR    CJ:e$$3:*T"((--b1CJtr   c                 >    | j         D ]}|| j         |         v r dS dS )NTF)r   )r   r.   kinds      r   
has_it_refzIdref.has_it_refT   s6    K 	 	Ddk$'''tt (ur   c                 V   d}|                     |          }t          |          dk    r(t          d|j        z   dz   t          j                   d S t          |          dk    r&t          d|j        z   dz   t          j                   |d         }|                     |          }|S )Nz./*r   zidref: z without nounr      z with several nouns)findalllenr   tagnamer    r!   r4   )r   verbxpfound_nounsr   handles         r   handle_from_verbzIdref.handle_from_verbZ   s    ll2&&{q  )dl*_<z# # # #4{a)dl*-BBz# # # #1~&&t,,r   c                    d}|                     |          }i }|D ]1}|j        d                             d          d         }||vrd||<   2|                     |          }|d||<   t	          |          dk    rdS |D ]]}d|z   d	z   }|                     |          D ]=}	|	                                }
|
                                                    |
           >^dS )
N	.//*[@id]r/   r0   r1   Tr   Fz.//*[@ref=''])r:   r2   r3   mainidr;   	getparentremove)r   docids_xpid_nounshandlesid_nounr@   rE   r>   r   r=   s              r   clear_refs_when_idzIdref.clear_refs_when_idh   s	   ;;v&& 	' 	'G^D)//44R8FW$$"&S!!"GFOw<<15 	. 	.F'$.BB . .~~''  ''----.
 tr   c                 *   d|                                 j        vrt          dt          j                   d S |                                 j        d                             d          d         }d}g }|                    |          }|D ]C}|j        d                             d          d         }||k    r|                    |           D|D ]@}|                                }	|	|	                                	                    |	           A|S )Nr/   zthe root element needs in idr   r0   r1   rC   )
getrootr2   r   r    r!   r3   r:   appendrF   rG   )
r   rH   rE   rI   	to_deleterJ   rL   r@   r   r=   s
             r   rE   zIdref.mainid   s   s{{}}+++0z# # # #4%d+11#66r:	;;v&& 	* 	*G^D)//44R8F  ))) 	* 	*D>>##D|NN##D))))r   c                 Z   d}g }|                     |          }|D ]$}|j        d         }|                    |           %|D ]g}d|z   dz   }|                     |          dd          }|D ]=}	|	                                }
|
                                                    |
           >h|S )NrC   r/   z
.//*[@id='rD   r9   )r:   r2   rP   rF   rG   )r   rH   rI   rQ   rJ   rL   amfidr>   r   r   r=   s              r   delete_by_subsequest_idzIdref.delete_by_subsequest_id   s    	;;v&& 	$ 	$GN4(EU#### 	. 	.E%,BKKOOABB'E . .~~''  ''----. 
r   N)F)__name__
__module____qualname__r   r   r   r,   r4   r7   rA   rM   rE   rT    r   r   r   r      s           # # #    N        4  ,    r   r   )	__doc__osglobr    docing
lxml.etreeetreer   r   rX   r   r   <module>r_      s    2 2 				  



       X X X X X X X X X Xr   