a
    h<p`¼  ã                   @   sj   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 dZ
e
d7 Z
e
d7 Z
G dd	„ d	ƒZdS )
é    )ÚetreeN)ÚDexis)ÚRixers   xmlns="http://amf.openlib.org" s6   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" s'   xmlns:ernad="http://ernad.openlib.org" c                   @   s*   e Zd Zd	dd„Zd
dd„Zddd„ZdS )ÚDedocFc                 C   sÐ   || _ t| j ƒ| _|| _|rVd}g | _| j t dtj¡¡ | j t |d tj¡¡ g }d}|d7 }| |¡ d}| |¡ d}| |¡ d}|d7 }| |¡ d}|d	7 }| |¡ d
}| |¡ || _	d S )Ns,   <amf:url xmlns:amf="http://amf.openlib.org">s   <url>.*</url>s   .*</amf:url>s%   <text xmlns="http://amf.openlib.org" s&   xmlns:ernad="http://ernad.openlib.org"s$   <text xmlns="http://amf.openlib.org"s(   <text xmlns:e="http://ernad.openlib.org"s"   xmlns:e="http://ernad.openlib.org"s5   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"s;   <text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance")
Úer   ÚxÚnormalize_deliveryÚnd_resÚappendÚreÚcompileÚDOTALLÚ
bad_starts)ÚselfÚerimpr   Zamf_url_tagr   Ústart© r   ú!/home/ernad/ernad/python/dedoc.pyÚ__init__   s8    ÿ





zDedoc.__init__c                 C   s¢  t j |¡std| ƒ‚dt j |¡v r4td| ƒ‚| d¡sJtd| ƒ‚|sZ|dd… }| jj}| |¡}t	| jƒ| _
| j
 |¡}|du rdS || _| j |¡| _g | _g | _| jD ]}	| j|	|d q¶tdtt| jƒƒ d	 tt| jƒƒ ƒ t |¡}
| jD ]V}	|	| jv r"t|	d
 ƒ q| jj |
|	¡}| d¡}|D ]}| ¡  |¡ q@q|rvtt |
¡ ¡ ƒ dS |r|
j|ddd dS |
j|dd |
S )z-runs the dedoc, saves as out_fufi without .gzzI don't see your file z/issues/zI refuse to dedoc your file z.gzNéýÿÿÿ)Ú
do_verbosezI found z	, I miss z is not foundz./*Té   )Úpretty_printÚcompression)r   )ÚosÚpathÚisfileÚ	ExceptionÚabspathÚendswithr   ÚRÚget_issuedater   ÚdexisZset_issuedateÚ	issuedater   ÚdocsÚ
found_refsÚmissing_refsÚ	check_refÚprintÚstrÚlenr   ÚparseÚ
doc_by_refÚfindallÚ	getparentÚremoveÚtostringÚdecodeÚwrite)r   Úin_fufir   Údo_overwriteÚno_writeZout_fufiÚrexerr#   ÚoutÚrefÚtreeZdoc_eleÚchildrenÚchildr   r   r   Úfrom_gz2   sP    


ÿ


zDedoc.from_gzc                 C   s  | j  |¡}|d u r@td| d | j tjd | j |¡ dS zt 	| j
| ¡}W n tjyj   Y dS 0 ||kr„| j |¡ dS | td¡}| jrò| jD ]T}| |¡}|d urÈ| d¡}| |d¡}| |¡}|d urœ| d¡}| |d¡}qœ| jD ]}| |d¡}qød	 | ¡ ¡}d	 | ¡ ¡}| d
d¡}| d
d¡}||krX| j |¡ dS |rnt|ƒ t|ƒ | ¡ }	| ¡ }
|	|
kr˜| j |¡ dS t |
¡}
|	|
kr¼| j |¡ dS t |	¡}	|	|
krà| j |¡ dS |rüt|	ƒ t|
ƒ tƒ  | j |¡ dS )Nzno dexis for z at )ÚfileFTó    r   s   <textó    s    <ó   <)r"   Zfetchr(   r#   ÚsysÚstderrr&   r
   r   r0   r$   ÚSerialisationErrorr%   ÚreplaceÚns_junkr   r	   ÚsearchÚgroupr   ÚjoinÚsplitr1   ÚhtmlZunescapeÚquit)r   r8   r   Zdexis_octetsZinfil_octetsZnd_reZinfil_deliveryZdexis_deliveryZ	bad_startZdexis_stringZinfil_stringr   r   r   r'   ^   sp    ÿ











zDedoc.check_refN)F)FFF)F)Ú__name__Ú
__module__Ú__qualname__r   r<   r'   r   r   r   r   r      s
   
  ÿ
,r   )Úlxmlr   r   rJ   r   rA   r"   r   Úrixerr   rE   r   r   r   r   r   Ú<module>   s   