o
    ¾Ùøií,  ã                   @   s^  d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZ d dlmZ g d¢ZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdededefdd„Zdededefdd„Zdededefdd„Zdededefdd„Z d e!d!e"defd"d#„Z#e$e!eeB f Z%e$e!ee&e B e&e B f Z'e$e!eeB e"B e%B e'B f Z(G d$d%„ d%ƒZ)G d&d'„ d'ƒZ*dS )(é    N)ÚIterable)ÚcalcsizeÚpackÚunpack)ÚBinaryIOÚClassVarÚcast)ÚPDFValueError))ú>LÚnumber)ú>BÚflags)r   Úretention_flags)r   Ú
page_assoc)r
   Údata_lengthé€   é@   é?   éà   iÿÿÿé   l   ÿÿ é&   é1   é3   s   —JB2

é   Úbit_posÚvalueÚreturnc                 C   s   t || ? d@ ƒS )Nr   ©Úbool)r   r   © r   ú[/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/pdfminer/jbig2.pyÚbit_set(   s   r!   Úflagc                 C   s   t | |@ ƒS ©Nr   )r"   r   r   r   r    Ú
check_flag,   s   r$   Úmaskc                 C   s0   t dƒD ]}t|| ƒr|| @ |?   S qtdƒ‚©Né   zInvalid mask or value©Úranger!   r	   ©r%   r   r   r   r   r    Úmasked_value0   s
   
ÿr+   c                 C   s4   t dƒD ]}t|| ƒr|| |? @ |>   S qtdƒ‚r&   r(   r*   r   r   r    Ú
mask_value8   s
   
ÿr,   ÚformatÚbufferc                 C   s&   | dv sJ ‚t tt t| |ƒƒ\}|S )N>   r   ú>Ir
   )r   ÚtupleÚintr   )r-   r.   Úresultr   r   r    Ú
unpack_int@   s   r3   c                   @   sª   e Zd ZdZdeddfdd„Zdee fdd„Zde	fd	d
„Z
dedededefdd„Zdedededefdd„Zdedededefdd„Zdedededefdd„ZdS )ÚJBIG2StreamReaderz&Read segments from a JBIG2 byte streamÚstreamr   Nc                 C   ó
   || _ d S r#   ©r5   ©Úselfr5   r   r   r    Ú__init__Q   ó   
zJBIG2StreamReader.__init__c           	      C   s¢   g }|   ¡ sOi }tD ]6\}}t|ƒ}| j |¡}t|ƒ|k r$d|d<  nt||ƒ}t| d|› �d ƒ}t|ƒr<||||ƒ}|||< q
| 	d¡sK| 
|¡ |   ¡ r|S )NTÚ_errorÚparse_)Úis_eofÚ
SEG_STRUCTr   r5   ÚreadÚlenr3   ÚgetattrÚcallableÚgetÚappend)	r9   ÚsegmentsÚsegmentÚfield_formatÚnameÚ	field_lenÚfieldr   Úparserr   r   r    Úget_segmentsT   s$   



ñzJBIG2StreamReader.get_segmentsc                 C   s(   | j  d¡dkr
dS | j  dtj¡ dS )Nr   ó    TéÿÿÿÿF)r5   r@   ÚseekÚosÚSEEK_CUR)r9   r   r   r    r>   h   s   zJBIG2StreamReader.is_eofrG   r   rK   c                 C   s   t t|ƒt t|ƒtt|ƒdœS )N)ÚdeferredÚpage_assoc_longÚtype)r$   ÚHEADER_FLAG_DEFERREDÚHEADER_FLAG_PAGE_ASSOC_LONGr+   ÚSEG_TYPE_MASK)r9   rG   r   rK   r   r   r    Úparse_flagso   s   ýzJBIG2StreamReader.parse_flagsc                 C   s&  t t|ƒ}g }g }|tk rtdƒD ]
}| t||ƒ¡ qn:|| j d¡7 }td|ƒ}t t	|ƒ}t
 |d d ¡}t|ƒD ]}	td| j d¡ƒ}
tdƒD ]
}| t||
ƒ¡ qKq<|d }t|tƒsbJ ‚|d	krid}n	|d
krpd}nd}t|ƒ}t|ƒD ]}| j |¡}t||ƒ}| |¡ qz|||dœS )Né   é   r
   r   é   r   r   r   é   é   r/   )Ú	ref_countÚretain_segmentsÚref_segments)r+   ÚREF_COUNT_SHORT_MASKÚREF_COUNT_LONGr)   rE   r!   r5   r@   r3   ÚREF_COUNT_LONG_MASKÚmathÚceilÚ
isinstancer1   r   )r9   rG   r   rK   r_   r`   ra   r   Úret_bytes_countÚ_ret_byte_indexÚret_byteÚseg_numÚ
ref_formatÚref_sizeÚ
_ref_indexÚref_dataÚrefr   r   r    Úparse_retention_flags{   s@   
ÿ

ÿ
ýz'JBIG2StreamReader.parse_retention_flagsÚpagec                 C   s0   t t|d ƒd r|| j d¡7 }td|ƒ}|S )Nr   rT   r[   r
   )r   ÚJBIG2SegmentFlagsr5   r@   r3   )r9   rG   rr   rK   r   r   r    Úparse_page_assoc¨   s   
z"JBIG2StreamReader.parse_page_assocÚlengthc                 C   s>   |rt t|d ƒd tkr|tkrtdƒ‚| j |¡|d< |S )Nr   rU   z:Working with unknown segment length is not implemented yetÚraw_data)r   rs   ÚSEG_TYPE_IMMEDIATE_GEN_REGIONÚDATA_LEN_UNKNOWNÚNotImplementedErrorr5   r@   )r9   rG   ru   rK   r   r   r    Úparse_data_length®   s   ÿÿz#JBIG2StreamReader.parse_data_length)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r:   ÚlistÚJBIG2SegmentrM   r   r>   r1   Úbytesrs   rY   ÚJBIG2RetentionFlagsrq   rt   rz   r   r   r   r    r4   N   sB    þýü
ûþýü
û-þýüûr4   c                   @   s  e Zd ZU dZdeee g ƒeee g ƒdœZe	e
 ed< deddfdd	„Z	
d!dee dedefdd„Z	
d!dee dedefdd„Zdedefdd„Zdededefdd„Zde
dedefdd„Zdededefdd„Zdededefdd„Zdedefdd „ZdS )"ÚJBIG2StreamWriterz.Write JBIG2 segments to a file in JBIG2 formatr   )r_   ra   r`   ÚEMPTY_RETENTION_FLAGSr5   r   Nc                 C   r6   r#   r7   r8   r   r   r    r:   Ë   r;   zJBIG2StreamWriter.__init__TrF   Úfix_last_pagec           	      C   sÈ   d}d }d }|D ]8}|   |¡}| j |¡ |t|ƒ7 }ttd B |d ƒ}|r@tt| d¡ƒ}tt|d ƒd tkr<d }q|r@|}q|rb|rb|d urb|  	|d |¡}|   |¡}| j |¡ |t|ƒ7 }|S )Nr   r   r   r   rU   r   )
Úencode_segmentr5   ÚwriterA   r   r1   rD   rs   ÚSEG_TYPE_END_OF_PAGEÚget_eop_segment)	r9   rF   r…   Údata_lenÚcurrent_pagerk   rG   ÚdataÚseg_pager   r   r    Úwrite_segmentsÎ   s.   
ÿ€
z JBIG2StreamWriter.write_segmentsc                 C   s¨   t }t}|td|ƒ7 }tddƒ}||7 }| j |¡ t|ƒ}||  ||¡7 }d}|D ]	}tt|d ƒ}q*|r8dnd}	|  	||	 ¡}
|  
|
¡}| j |¡ |t|ƒ7 }|S )Nr   r
   r   r   r   é   )ÚFILE_HEADER_IDÚFILE_HEAD_FLAG_SEQUENTIALr   r5   r‡   rA   rŽ   r   r1   Úget_eof_segmentr†   )r9   rF   r…   ÚheaderÚheader_flagsÚnumber_of_pagesrŠ   rk   rG   Úseg_num_offsetÚeof_segmentrŒ   r   r   r    Ú
write_fileñ   s"   

zJBIG2StreamWriter.write_filerG   c                 C   sX   d}t D ]%\}}| |¡}t| d|› �d ƒ}t|ƒr |||ƒ}nt||ƒ}||7 }q|S )NrN   Úencode_)r?   rD   rB   rC   r   )r9   rG   rŒ   rH   rI   r   ÚencoderrK   r   r   r    r†     s   


z JBIG2StreamWriter.encode_segmentr   c                 C   sr   d}|  d¡r|tO }d|v r||d rtn|O }n|tt|  dd¡ƒdkr(tn|O }|tt|d ƒO }td|ƒS )Nr   rS   rT   rr   éÿ   rU   r   )rD   rV   rW   r   r1   r,   rX   r   )r9   r   rG   r   r   r   r    Úencode_flags  s   
ÿý
zJBIG2StreamWriter.encode_flagsc                 C   st  g }d}|d }t |tƒsJ ‚ttt | dg ¡ƒ}|dkr:tt|ƒ}t|ƒD ]\}}	|	r3|d|> O }q'| 	|¡ nHt
 |d d ¡}
dd|
  }tttƒd	> }| 	|¡ t|
ƒD ](}d
}||d |d d … }t|ƒD ]\}}||rxd|> n|O }qm| 	|¡ qYttt | dg ¡ƒ}tt|d ƒ}|dkr›d}n	|dkr¢d}nd}|D ]}||7 }| 	|¡ q¦t|g|¢R Ž S )Nr   r_   r`   é   r   r\   r
   ÚBé   r   ra   r   r]   r^   ÚIÚL)rg   r1   r   r   r   rD   r,   rb   Ú	enumeraterE   re   rf   rc   r)   r   )r9   r   rG   r   Úflags_formatr_   r`   Ú
flags_byteÚ	ref_indexÚ
ref_retainÚbytes_countÚflags_dwordÚ
byte_indexrj   Úret_partr   Úret_segra   rk   rl   rp   r   r   r    Úencode_retention_flags-  sB   
€
z(JBIG2StreamWriter.encode_retention_flagsc                 C   s    t d|ƒ}|tt|d ƒ7 }|S )Nr
   rv   )r   r   r�   )r9   r   rG   rŒ   r   r   r    Úencode_data_length\  s   
z$JBIG2StreamWriter.encode_data_lengthÚ
seg_numberÚpage_numberc                 C   s   ddt dœ||dtjdœS ©Nr   F)rS   rU   rN   )r   r   r   r   rv   r   )rˆ   rƒ   r„   )r9   r®   r¯   r   r   r    r‰   a  ó   úz!JBIG2StreamWriter.get_eop_segmentc                 C   s   ddt dœ|ddtjdœS r°   )ÚSEG_TYPE_END_OF_FILErƒ   r„   )r9   r®   r   r   r    r’   k  r±   z!JBIG2StreamWriter.get_eof_segment)T)r{   r|   r}   r~   r   r   r1   r   r„   r   r‚   Ú__annotations__r   r:   r   r€   rŽ   r˜   r�   r†   rs   rœ   r¬   r­   r‰   r’   r   r   r   r    rƒ   Â   sF   
 ýýþý
ü&ýþý
üþý
ü/
rƒ   )+re   rQ   Úcollections.abcr   Ústructr   r   r   Útypingr   r   r   Úpdfminer.pdfexceptionsr	   r?   rV   rW   rX   rb   rd   rc   rx   rw   rˆ   r²   r�   r‘   r1   r   r!   r$   r+   r,   Ústrr�   r3   Údictrs   r   r‚   r€   r4   rƒ   r   r   r   r    Ú<module>   sB    	ÿÿt