o
    D@¡c„$  ã                   @   s*   d Z ddlZddlmZ G dd„ dƒZdS )z-useful functions when we don't know the impnaé    N)ÚRexerc                   @   s€   e Zd Zddd„Zdd„ Zddd	„Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
d dd„Zdd„ Zddd„Zd!dd„Zd!dd„ZdS )"ÚAbovoNFc                 C   sx   || _ d | _i | _t| ƒ| _i | _|  ¡  |  ¡  |  ¡  |  	d¡ |  
¡  |  ¡ D ]}|  	|¡ q*|  ¡  |  ¡  d S )NÚtop)ÚeÚ
given_fufiÚdirsr   ÚrexerÚ	constantsÚread_constantsÚset_namespacesÚset_system_constantsÚset_dirsÚ
set_stagesÚforked_dirnasÚ
set_learstÚset_resigndirs)Úselfr   Ú
do_verboseÚkind© r   ú!/home/ernad/ernad/python/abovo.pyÚ__init__   s   

zAbovo.__init__c                 C   s’   g | _ i | _| jD ]}|dd… dkrq	|d }|dd … }|| j|< q	t| jƒD ]}| j  |¡ q)| j ¡ }|D ]}|| j|| < | j|= q9d S )Nr   é   Ústages_é	   )ÚstagesÚstager	   ÚsortedÚappendÚcopy)r   ÚconstantÚnumberÚnameÚstages_copyr   r   r   r      s   


þzAbovo.set_stagesúxslt/constants.xslt.xmlc                 C   s¸   d}dt jv rt jd }|| _|d | _| jd | }t j |¡s'td| ƒ‚t|dƒ}| ¡ }i }|D ]}| j	j
d  |¡}|d u rDq4| d¡}	| d	¡}
|
||	< q4|d
krZ|| _|S )Nz/home/ernadÚHOMEz/ernadú/zI can't with with no ÚrÚis_constants_lineé   é   r$   )ÚosÚenvironÚhome_dirÚnase_dirÚpathÚisfileÚ	ExceptionÚopenÚ	readlinesr   ÚrsÚmatchÚgroupr	   )r   Úfinar-   Úconstants_fufiÚconstants_fileÚconstants_linesr	   Úconstants_lineÚmatchedÚvariable_attrÚselect_attrr   r   r   r
   .   s*   






zAbovo.read_constantsc                 C   s,   i | _ | jd | j d< | jd | j d< | j S )z*set the namespaces, hardcodes the prefixesÚns_amfÚaÚns_ernadr   )Únsmapr	   )r   r   r   r   r   G   s   zAbovo.set_namespacesc                 C   sd   | j }i }i }|D ] }| d¡r|| ||dd … < | d¡r)|| ||dd … < q	|| _|| _d S )NÚext_é   Úns_é   )r	   Ú
startswithÚextÚns)r   r	   rH   rI   r    r   r   r   r   N   s   

€
zAbovo.set_system_constantsc                 C   sN   g }| j D ]}d|vrq| d¡rq| d¡}|d }||vr$| |¡ q|S )zby implementation directoriesÚdir_r   r   )r	   rG   Úsplitr   )r   Ú
bymip_dirsr"   ÚpartsÚstartr   r   r   r   Z   s   



€zAbovo.forked_dirnasc                 C   sl   g }| j D ]}| d¡sq| |dd… ¡ q|| _g }| j D ]}| d¡s'q| |dd… ¡ q|| _dS )z#learn stages for issues and reportsÚlearist_é   NÚlearest_)r	   rG   r   ÚlearistsÚlearests)r   rR   r"   rS   r   r   r   r   h   s   



zAbovo.set_learstc                 C   sz   | j }i }|D ].}|dd… |d krq|dd … }| jd ur5|| }| jd | ||< | d¡r5|||< q|| j|< d S )Nr   é   Údirr   r&   )r	   r   r.   rG   r   )r   r   r	   r   r    r"   Útargetr   r   r   r   x   s   

€zAbovo.set_dirsc                 C   sf   | j j}| j}| jD ]&}|dd… dkrq
|dd… }| j dur0|| }| j jd d | ||< q
|S )zsets the blatt dirsr   rT   Úblatt_é
   NÚblattr&   )r   r   r	   )r   r   r   r	   r    r"   rV   r   r   r   Úset_blatt_dirs‡   s   

€zAbovo.set_blatt_dirsc                 C   sn   | j }i }|D ](}|dd… dkrq|dd … }|| jd vr'td|› dƒ‚|| }|||< q|| jd< d S )Nr   rT   Úresignr   r   zYour resigndir z must be a topdir)r	   r   r1   )r   r	   r   r    r"   rV   r   r   r   r   ”   s   
zAbovo.set_resigndirsc                 C   s  d}dt jv rt jd }|dur%t|ƒdkr#|d }t j |¡r#|| _|S |du s/t|ƒdkr6tdƒ tƒ  |d }|  |¡rE|| j	_
|S d|v rY|d| d¡… }|  |¡rY|S | j||d}|du rntd|› ƒ tƒ  |du rxtd| ƒ‚|  |¡sŒtd	| d
 ƒ tdƒ tƒ  |S )z/we guess the impna from the first argument onlyNÚIMPNAr   zAbovo can't see your impna.ú-)r   zI can not get an impna from z'Fix me: I can't deal with the argument zYour impna z is not valid.z#Abovo can't see your impna by file.)r+   r,   Úlenr/   r0   r   ÚprintÚquitÚis_impna_validr   ÚimpnaÚindexÚimpna_from_fufir1   )r   Úbipasr   r   Ú	impna_envÚhintÚpart_before_dashÚcand_impna_from_filer   r   r   Úguess_impna¡   sB   



ÿ
zAbovo.guess_impnac                 C   s^   t |ƒdkrdS | jd d }|d | }tj |¡r%|r#td| ƒ dS |r-t|d ƒ dS )	Nr   Fr   Ústyler&   zabovo sees Tz can't be seen by abovo)r^   r   r+   r/   Úisdirr_   )r   Ústringr   Ú	style_dirÚcand_dirr   r   r   ra   Ç   s   zAbovo.is_impna_validc                 C   sB  t j |¡}|rtd| ƒ |d u rt|d ƒ d S t j |¡s(td| ƒ d S || _| | j¡sL| d¡D ]}| j	 
|¡rK|d | d¡… }|  S q6|rTtd| ƒ | jd D ]#}| jd | }|rht|ƒ | |d d¡}|rvt|ƒ ||kr| nqY|r…td	| ƒ | d¡}	|d
|	… }
|r˜td|
 ƒ |  |
¡rŸ|
S d S )Nzabovo tries from fufi z is not a fufizI don't see r&   r]   zI have a fufi r   Ú zrumpfi r   zThe cand_impna is )r+   r/   Úabspathr_   r0   r   rG   r.   rK   r   Ú
is_repcoderc   r   ÚreplaceÚfindra   )r   rg   r   ÚfufiÚfolderrh   Ú	top_dirnaÚtop_fudiÚrumpfiÚpos_of_slashÚ
cand_impnar   r   r   rd   Ô   sJ   þþ

ÿzAbovo.impna_from_fufi)NF)r$   )N)F)Ú__name__Ú
__module__Ú__qualname__r   r   r
   r   r   r   r   r   rZ   r   rj   ra   rd   r   r   r   r   r      s    




&r   )Ú__doc__r+   r   r   r   r   r   r   r   Ú<module>   s    