a
    ½Ða|"  ã                   @   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                   @   sx   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d„Z
dd„ Zddd„Zd dd„Zd!dd„ZdS )"ÚAbovoNFc                 C   sp   || _ d | _i | _t| ƒ| _i | _|  ¡  |  ¡  |  d¡ |  	¡  |  
¡ D ]}|  |¡ qL|  ¡  |  ¡  d S )NÚtop)ÚeÚ
given_fufiÚdirsr   ÚrexerÚ	constantsÚread_constantsÚ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 ]4}|dd… dkr(q|d }|dd … }|| j|< qt| jƒD ]}| j  |¡ qR| j ¡ }|D ]}|| j|| < | j|= qrd S )Nr   é   Zstages_é	   )ZstagesZstager	   ÚsortedÚappendÚcopy)r   ÚconstantZnumberÚnameZ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 |¡sNtd| ƒ‚t|dƒ}| ¡ }i }|D ]<}| j	j
d  |¡}|d u rˆqh| d¡}	| d	¡}
|
||	< qh|d
kr´|| _|S )Nz/home/ernadÚHOMEz/ernadú/zI can't with with no ÚrZis_constants_lineé   é   r   )ÚosÚenvironÚhome_dirÚnase_dirÚpathÚisfileÚ	ExceptionÚopenÚ	readlinesr   ÚrsÚmatchÚgroupr	   )r   Zfinar&   Zconstants_fufiZconstants_fileZconstants_linesr	   Zconstants_lineZmatchedZvariable_attrZselect_attrr   r   r   r
   -   s*    






zAbovo.read_constantsc                 C   sd   | j }i }i }|D ]@}| d¡r4|| ||dd … < | d¡r|| ||dd … < q|| _|| _d S )NZext_é   Zns_é   )r	   Ú
startswithÚextÚns)r   r	   r3   r4   r   r   r   r   r   F   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	   r2   Úsplitr   )r   Z
bymip_dirsr   ÚpartsÚstartr   r   r   r   R   s    


zAbovo.forked_dirnasc                 C   sl   g }| j D ]"}| d¡sq
| |dd… ¡ q
|| _g }| j D ]"}| d¡sNq>| |dd… ¡ q>|| _dS )z#learn stages for issues and reportsZlearist_é   NZlearest_)r	   r2   r   ÚlearistsÚlearests)r   r:   r   r;   r   r   r   r   `   s    



zAbovo.set_learstc                 C   sz   | j }i }|D ]\}|dd… |d kr(q|dd … }| jd ur|| }| jd | ||< | d¡r|||< q|| j|< d S )Nr   é   Údirr   r    )r	   r   r'   r2   r   )r   r   r	   r   r   r   Útargetr   r   r   r   p   s    


zAbovo.set_dirsc                 C   sf   | j j}| j}| jD ]L}|dd… dkr*q|dd… }| j dur|| }| j jd d | ||< q|S )zsets the blatt dirsr   r<   Zblatt_é
   NÚblattr    )r   r   r	   )r   r   r   r	   r   r   r>   r   r   r   Úset_blatt_dirs   s    

zAbovo.set_blatt_dirsc                 C   sn   | j }i }|D ]P}|dd… dkr$q|dd … }|| jd vrNtd|› dƒ‚|| }|||< q|| jd< d S )Nr   r<   Úresignr   r   zYour resigndir z must be a topdir)r	   r   r*   )r   r	   r   r   r   r>   r   r   r   r   Œ   s    
zAbovo.set_resigndirsc                 C   sö   d}dt jv rt jd }|dur$|S |du s8t|ƒdkrFtdƒ tƒ  |d }|  |¡rd|| j_|S d|v rŒ|d| d¡… }|  |¡rŒ|S | j	||d}|du r¶td|› ƒ tƒ  |du rÊt
d| ƒ‚|  |¡sòtd	| d
 ƒ tdƒ tƒ  |S )z/we guess the impna from the first argument onlyNZ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%   ÚlenÚprintÚquitÚis_impna_validr   ÚimpnaÚindexÚimpna_from_fufir*   )r   Úbipasr   r   Z	impna_envÚhintÚpart_before_dashZcand_impna_from_filer   r   r   Úguess_impna™   s:    



ÿ
zAbovo.guess_impnac                 C   sN   | j d d }|d | }tj |¡r:|r6td| ƒ dS |rJt|d ƒ dS )Nr   Ústyler    zabovo sees Tz can't be seen by abovoF)r   r$   r(   ÚisdirrE   )r   Ústringr   Z	style_dirZcand_dirr   r   r   rG   º   s    zAbovo.is_impna_validc                 C   sH  t j |¡}|rtd| ƒ |d u r4t|d ƒ d S t j |¡sPtd| ƒ d S || _| | j¡s˜| d¡D ]*}| j	 
|¡rl|d | d¡… }|  S ql|r¨td| ƒ | jd D ]F}| jd | }|rÐt|ƒ | |d d¡}|rìt|ƒ ||kr² qúq²|rtd	| ƒ | d¡}	|d
|	… }
|r4td|
 ƒ |  |
¡rD|
S d S )Nzabovo tries from fufi z is not a fufizI don't see r    rC   zI have a fufi r   Ú zrumpfi r   zThe cand_impna is )r$   r(   ÚabspathrE   r)   r   r2   r'   r6   r   Z
is_repcoderI   r   ÚreplaceÚfindrG   )r   rL   r   ÚfufiÚfolderrM   Z	top_dirnaZtop_fudiZrumpfiZpos_of_slashZ
cand_impnar   r   r   rJ   Å   sD    

zAbovo.impna_from_fufi)NF)r   )N)NF)F)F)Ú__name__Ú
__module__Ú__qualname__r   r   r
   r   r   r   r   rA   r   rN   rG   rJ   r   r   r   r   r      s   



!
r   )Ú__doc__r$   r   r   r   r   r   r   r   Ú<module>   s   