
    $|f                     H    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y)z,comman function between collection and users    Nc                   J    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y)Idrefc                 R    || _         || _        g d| _        g d| _        i | _        y )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__   s(    $<
=
    c                 D    | j                   D ]  }i | j                  |<    y )N)r   r   )r   nouns     r   clearzIdref.clear   s#    JJ 	#D "DKK	#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   s?    xx}&&tzz!(/zz#r   c                     d| j                   j                  d   z   dz   }|j                  |      sy|dd  }|| j                  v ryy)N{amf}F   T)r   ns
startswithr   )r   string	amf_starts      r   is_verbzIdref.is_verb$   sL    $&&))E**S0	  +TZZr   c                     d|j                   v r|j                   d   S d|j                   v r#|j                   d   j                  d      d   }|S y)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   sO    CJJ::e$$3::**T"((-b1CJr   c                 L    | j                   D ]  }|| j                   |   v s y y)NTF)r   )r   r.   kinds      r   
has_it_refzIdref.has_it_refT   s.    KK 	Ddkk$''	 r   c                 >   d}|j                  |      }t        |      dk(  r,t        d|j                  z   dz   t        j
                         y t        |      dkD  r+t        d|j                  z   dz   t        j
                         |d   }| j                  |      }|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 )dll*_<zz#{a)dll*-BBzz#1~&&t,r   c                    d}|j                  |      }i }|D ]-  }|j                  d   j                  d      d   }||vs)d||<   / | j                  |      }|d||<   t	        |      dk(  ry|D ]O  }d|z   d	z   }|j                  |      D ]1  }	|	j                         }
|
j                         j                  |
       3 Q y)
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)//4R8FW$"&		' S!"GFOw<1 	.F'$.BB .~~' ''-.	. r   c                    d|j                         j                  vrt        dt        j                         y |j                         j                  d   j                  d      d   }d}g }|j                  |      }|D ]:  }|j                  d   j                  d      d   }||k(  s*|j                  |       < |D ]4  }|j                         }	|	|	j                         j                  |	       6 |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zz#%%d+11#6r:	;;v& 	*G^^D)//4R8F  )		*
  	*D>>#D|NN##D)		*
 r   c                 0   d}g }|j                  |      }|D ]"  }|j                  d   }|j                  |       $ |D ]T  }d|z   dz   }|j                  |      dd  }|D ]1  }	|	j                         }
|
j                         j	                  |
       3 V |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NN4(EU#	$  	.E%,BKKOAB'E .~~' ''-.	. 
r   N)F)__name__
__module____qualname__r   r   r   r,   r4   r7   rA   rM   rE   rT    r   r   r   r      s5    #N4,r   r   )	__doc__osglobr    docing
lxml.etreeetreer   r   rX   r   r   <module>r_      s%    2 	  
  X Xr   