o
    ‡®f,  ã                   @   s^  d dl Z d dlZd dlmZmZmZ d dlmZmZm	Z	m
Z
mZmZmZ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ef f Z%ee"eee
e e
e f f Z&ee"eeee#e%e&f f Z'G d"d#„ d#ƒZ(G d$d%„ d%ƒZ)dS )&é    N)ÚpackÚunpackÚcalcsize)ÚBinaryIOÚDictÚIterableÚListÚOptionalÚTupleÚUnionÚcast))ú>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"   úG/home/ubuntu/webapp/venv/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   s2   t ddƒD ]}t|| ƒr|| @ |?   S qtdƒ‚©Nr   é   zInvalid mask or value©Úranger$   Ú	Exception©r(   r   r   r"   r"   r#   Úmasked_value-   s
   
ÿr/   c                 C   s6   t ddƒD ]}t|| ƒr|| |? @ |>   S qtdƒ‚r)   r+   r.   r"   r"   r#   Ú
mask_value5   s
   
ÿr0   ÚformatÚbufferc                 C   s&   | dv sJ ‚t tt t| |ƒƒ\}|S )N>   r   ú>Ir   )r   r
   Úintr   )r1   r2   Úresultr"   r"   r#   Ú
unpack_int=   s   r6   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&   ©r8   ©Úselfr8   r"   r"   r#   Ú__init__M   ó   
zJBIG2StreamReader.__init__c           	      C   s    g }|   ¡ sNi }tD ]5\}}t|ƒ}| j |¡}t|ƒ|k r$d|d<  nt||ƒ}t| d| d ƒ}t|ƒr;||||ƒ}|||< q
| 	d¡sJ| 
|¡ |   ¡ r|S )NTÚ_errorzparse_%s)Úis_eofÚ
SEG_STRUCTr   r8   ÚreadÚlenr6   ÚgetattrÚcallableÚgetÚappend)	r<   ÚsegmentsÚsegmentÚfield_formatÚnameÚ	field_lenÚfieldr   Úparserr"   r"   r#   Úget_segmentsP   s$   



ñzJBIG2StreamReader.get_segmentsc                 C   s(   | j  d¡dkr
dS | j  dtj¡ dS )Nr   ó    TéÿÿÿÿF)r8   rB   ÚseekÚosÚSEEK_CUR)r<   r"   r"   r#   r@   d   s   zJBIG2StreamReader.is_eofrI   r   rM   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)r<   rI   r   rM   r"   r"   r#   Úparse_flagsk   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
t |d d ¡ƒ}t|ƒD ]}	td| j d¡ƒ}
tdƒD ]
}| t||
ƒ¡ qMq>|d }t|t
ƒsdJ ‚|d	krkd}n	|d
krrd}nd}t|ƒ}t|ƒD ]}| j |¡}t||ƒ}| |¡ q||||dœS )Né   é   r   r   é   r   r   r   é   é   r3   )Ú	ref_countÚretain_segmentsÚref_segments)r/   ÚREF_COUNT_SHORT_MASKÚREF_COUNT_LONGr,   rG   r$   r8   rB   r6   ÚREF_COUNT_LONG_MASKr4   ÚmathÚceilÚ
isinstancer   )r<   rI   r   rM   ra   rb   rc   r   Úret_bytes_countÚret_byte_indexÚret_byteÚseg_numÚ
ref_formatÚref_sizeÚ	ref_indexÚref_dataÚrefr"   r"   r#   Úparse_retention_flagst   s@   
ÿ

ÿ
ýz'JBIG2StreamReader.parse_retention_flagsÚpagec                 C   s0   t t|d ƒd r|| j d¡7 }td|ƒ}|S )Nr   rV   r]   r   )r   ÚJBIG2SegmentFlagsr8   rB   r6   )r<   rI   rt   rM   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   rW   z:Working with unknown segment length is not implemented yetÚraw_data)r   ru   ÚSEG_TYPE_IMMEDIATE_GEN_REGIONÚDATA_LEN_UNKNOWNÚNotImplementedErrorr8   rB   )r<   rI   rw   rM   r"   r"   r#   Úparse_data_length¤   s   ÿÿz#JBIG2StreamReader.parse_data_length)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r=   r   ÚJBIG2SegmentrO   r!   r@   r4   Úbytesru   r[   ÚJBIG2RetentionFlagsrs   rv   r|   r"   r"   r"   r#   r7   J   sB    ÿÿÿ
þ	ÿÿÿ
þ*ÿÿÿþr7   c                   @   s  e Zd ZU dZdeee g ƒeee g ƒdœZ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   )ra   rc   rb   ÚEMPTY_RETENTION_FLAGSr8   r   Nc                 C   r9   r&   r:   r;   r"   r"   r#   r=   ¿   r>   zJBIG2StreamWriter.__init__TrH   Úfix_last_pagec           	      C   sÈ   d}d }d }|D ]8}|   |¡}| j |¡ |t|ƒ7 }ttt |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   rW   r   )Úencode_segmentr8   ÚwriterC   r   r	   r4   rF   ru   ÚSEG_TYPE_END_OF_PAGEÚget_eop_segment)	r<   rH   r†   Údata_lenÚcurrent_pagerm   rI   Ú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*|r9d}	nd}	|  	||	 ¡}
|  
|
¡}| j |¡ |t|ƒ7 }|S )Nr   r   r   r   r   é   )ÚFILE_HEADER_IDÚFILE_HEAD_FLAG_SEQUENTIALr   r8   rˆ   rC   r   r   r4   Úget_eof_segmentr‡   )r<   rH   r†   ÚheaderÚheader_flagsÚnumber_of_pagesr‹   rm   rI   Úseg_num_offsetÚeof_segmentr   r"   r"   r#   Ú
write_fileã   s&   

zJBIG2StreamWriter.write_filerI   c                 C   sV   d}t D ]$\}}| |¡}t| d| d ƒ}t|ƒr|||ƒ}nt||ƒ}||7 }q|S )NrP   z	encode_%s)rA   rF   rD   rE   r   )r<   rI   r   rJ   rK   r   ÚencoderrM   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   rU   rV   rt   éÿ   rW   r   )rF   rX   rY   r   r4   r0   rZ   r   )r<   r   rI   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   ra   rb   é   r   r^   r   ÚBé   r   rc   r   r_   r`   ÚIÚL)ri   r4   r   r   r!   rF   r0   rd   Ú	enumeraterG   rg   rh   re   r,   r   )r<   r   rI   r   Úflags_formatra   rb   Ú
flags_byterp   Ú
ref_retainÚbytes_countÚflags_dwordÚ
byte_indexrl   Úret_partr   Úret_segrc   rm   rn   rr   r"   r"   r#   Úencode_retention_flags   sB   
€
z(JBIG2StreamWriter.encode_retention_flagsc                 C   s    t d|ƒ}|tt|d ƒ7 }|S )Nr   rx   )r   r   r‚   )r<   r   rI   r   r"   r"   r#   Úencode_data_lengthM  s   
z$JBIG2StreamWriter.encode_data_lengthÚ
seg_numberÚpage_numberc                 C   s   ddt dœ||dtjdœS ©Nr   F)rU   rW   rP   )r   r   r   r   rx   r   )r‰   r„   r…   )r<   r­   r®   r"   r"   r#   rŠ   R  ó   úz!JBIG2StreamWriter.get_eop_segmentc                 C   s   ddt dœ|ddtjdœS r¯   )ÚSEG_TYPE_END_OF_FILEr„   r…   )r<   r­   r"   r"   r#   r“   \  r°   z!JBIG2StreamWriter.get_eof_segment)T)r}   r~   r   r€   r   r   r4   r!   r…   rƒ   Ú__annotations__r   r=   r   r   r   r™   r‚   r‡   ru   rœ   r«   r¬   rŠ   r“   r"   r"   r"   r#   r„   ¶   sF   
 ýÿÿÿ
þ"ÿÿÿ
þÿÿ
þ-
r„   )*rg   rS   Ústructr   r   r   Útypingr   r   r   r   r	   r
   r   r   rA   rX   rY   rZ   rd   rf   re   rz   ry   r‰   r±   r‘   r’   r4   r!   r$   r'   r/   r0   Ústrr‚   r6   ru   rƒ   r   r7   r„   r"   r"   r"   r#   Ú<module>   s:    (	ÿl