
    ,h%                         d dl Z d dlZd dl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Zd Zd Zd Zd Z G d de      Z G d de      Zy)    N)packunpackcalcsize))>Lnumber)>Bflags)r   retention_flags)r   
page_assoc)r   data_length   @   ?      i   l    &   1   2   s   JB2

      c                 $    t        || z	  dz        S )Nr   bool)bit_posvalues     P/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pdfminer/jbig2.pybit_setr   %   s    '!Q&''    c                     t        | |z        S Nr   )flagr   s     r   
check_flagr"   )   s    ur   c                 f    t        dd      D ]  }t        ||       s|| z  |z	  c S  t        d      Nr      zInvalid mask or valueranger   	Exceptionmaskr   r   s      r   masked_valuer+   -   s>    B< -7D!DLW,,- +
,,r   c                 l    t        dd      D ]  }t        ||       s|| |z	  z  |z  c S  t        d      r$   r&   r)   s      r   
mask_valuer-   5   sC    B< :7D!TW_-'99: +
,,r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
JBIG2StreamReaderz&Read segments from a JBIG2 byte streamc                     || _         y r    streamselfr2   s     r   __init__zJBIG2StreamReader.__init__@   	    r   c                    g }| j                         si }t        D ]  \  }}t        |      }| j                  j	                  |      }t        |      |k  rd|d<    nJt        ||      }t        |      dk(  r|\  }t        | d|z  d       }t        |      r
 ||||      }|||<    |j                  d      s|j                  |       | j                         s|S )NT_errorr   zparse_%s)is_eof
SEG_STRUCTr   r2   readlenr   getattrcallablegetappend)	r4   segmentssegmentfield_formatname	field_lenfieldr   parsers	            r   get_segmentszJBIG2StreamReader.get_segmentsC   s    ++-G&0 &"d$\2	((3u:	)(,GH%|U3u:?#GU zD'8$?F#"7E59E %& ;;x((# ++-$ r   c                     | j                   j                  d      dk(  ry| j                   j                  dt        j                         y)Nr   r   TF)r2   r;   seekosSEEK_CUR)r4   s    r   r9   zJBIG2StreamReader.is_eofY   s7    ;;A#%KKR-r   c                 b    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)r4   rB   r	   rF   s       r   parse_flagszJBIG2StreamReader.parse_flags`   s,    "#7?)*EuM 6
 	
r   c                    t        t        |      }g }g }|t        k  r,t        d      D ]  }|j	                  t        ||              n|| j                  j                  d      z  }t        d|      \  }t        t        |      }t        t        j                  |dz   dz              }t        |      D ]T  }	t        d| j                  j                  d            \  }
t        d      D ]  }|j	                  t        ||
              V |d   }|d	k  rd}n
|d
k  rd}nd}t        |      }t        |      D ]<  }| j                  j                  |      }t        ||      \  }|j	                  |       > |||dS )N      r   r      r   r   r         z>I)	ref_countretain_segmentsref_segments)r+   REF_COUNT_SHORT_MASKREF_COUNT_LONGr'   r@   r   r2   r;   r   REF_COUNT_LONG_MASKintmathceilr   )r4   rB   r	   rF   r\   r]   r^   r   ret_bytes_countret_byte_indexret_byteseg_num
ref_formatref_size	ref_indexrefs                   r   parse_retention_flagsz'JBIG2StreamReader.parse_retention_flagsg   s    !5u=	~% 8 @&&ww'>?@ T[[%%a((E u-KY$%8)DI!$))Y]a,?"@AO"'"8 G#D$++*:*:1*=>
$Qx GG#**77H+EFGG
 (#c>JJJJ'y) 	%I++""8,C:s+ES$	% #.(
 	
r   c                 n    |d   d   r,|| j                   j                  d      z  }t        d|      \  }|S )Nr	   rP   rX   r   )r2   r;   r   )r4   rB   pagerF   s       r   parse_page_assocz"JBIG2StreamReader.parse_page_assoc   s<    7-.T[[%%a((ED%(FTr   c                     |rA|d   d   t         k(  r|t        k(  rt        d      | j                  j	                  |      |d<   |S )Nr	   rQ   z:Working with unknown segment length is not implemented yetraw_data)SEG_TYPE_IMMEDIATE_GEN_REGIONDATA_LEN_UNKNOWNNotImplementedErrorr2   r;   )r4   rB   lengthrF   s       r   parse_data_lengthz#JBIG2StreamReader.parse_data_length   sS     (,II#33)- 
 '+kk&6&6v&>
#r   N)__name__
__module____qualname____doc__r5   rH   r9   rU   rm   rp   rw    r   r   r/   r/   =   s)    0,
%
Nr   r/   c                   J    e Zd ZdZd ZddZddZd Zd Zd Z	d Z
d	 Zd
 Zy)JBIG2StreamWriterz.Write JBIG2 segments to a file in JBIG2 formatc                     || _         y r    r1   r3   s     r   r5   zJBIG2StreamWriter.__init__   r6   r   c                    d}d }d }|D ]l  }| j                  |      }| j                  j                  |       |t        |      z  }|d   }|sE|j	                  d      }|d   d   t
        k(  rd }h|sk|}n |rS|rQ|O| j                  |dz   |      }| j                  |      }| j                  j                  |       |t        |      z  }|S )Nr   r   r   r	   rQ   r   )encode_segmentr2   writer<   r?   SEG_TYPE_END_OF_PAGEget_eop_segment)	r4   rA   fix_last_pagedata_lencurrent_pagerh   rB   dataseg_pages	            r   write_segmentsz JBIG2StreamWriter.write_segments   s     	,G&&w/DKKd#D	!Hh'G";;|47#F+/CC#'L#+L	, \w/B**7Q;EG&&w/DKKd#D	!Hr   c                 x   t         }t        t        z  }|t        d|      z  }| j                  j                  |       t        |      }|| j                  ||      z  }d}|D ]  }|d   }	 | j                  |dz         }| j                  |      }	| j                  j                  |	       |t        |	      z  }|S )Nr   r   r   r   )
FILE_HEADER_IDFILE_HEAD_FLAG_SEQUENTIALFILE_HEAD_FLAG_PAGES_UNKNOWNr   r2   r   r<   r   get_eof_segmentr   )
r4   rA   r   headerheader_flagsr   rh   rB   eof_segmentr   s
             r   
write_filezJBIG2StreamWriter.write_file   s    03OO$t\**&!v;D''-@@ 	(Gh'G	( **7Q;7"";/$CIr   c                     d}t         D ]L  \  }}|j                  |      }t        | d|z  d       }t        |      r
 |||      }nt	        ||      }||z  }N |S )Nr   z	encode_%s)r:   r?   r=   r>   r   )r4   rB   r   rC   rD   r   encoderrF   s           r   r   z JBIG2StreamWriter.encode_segment   sl    ", 	L$KK%EdK$$6=G w/\51EMD	 r   c                     d}|j                  d      r	|t        z  }d|v r||d   rt        n|z  }n ||j                  dd      dkD  rt        n|z  }|t        t        |d         z  }t        d|      S )Nr   rO   rP   ro      rQ   r   )r?   rR   rS   r-   rT   r   )r4   r   rB   r	   s       r   encode_flagszJBIG2StreamWriter.encode_flags   s    99Z ))E%*+ 1167E ;;vq)C/ 15:;E 	M5=99D%  r   c                    g }d}|d   }|j                  dg       }|dk  r=t        t        |      }t        |      D ]  \  }}	|d|z  z  } |j	                  |       nt        j                  |dz   dz        }
dd|
z  z   }t        t        t              d	z  }|j	                  |       t        |
      D ]B  }d
}||dz  |dz  dz    }t        |      D ]  \  }}||rd|z  n|z  } |j	                  |       D |j                  dg       }|d   }|dk  rd}n
|dk  rd}nd}|D ]  }||z  }|j	                  |        t        |g| S )Nr   r\   r]      r   rY   r   B   r   r^   r   rZ   r[   IL)
r?   r-   r_   	enumerater@   rc   rd   r`   r'   r   )r4   r   rB   r	   flags_formatr\   r]   
flags_byterk   
ref_retainbytes_countflags_dword
byte_indexrg   ret_partr   ret_segr^   rh   ri   rl   s                        r   encode_retention_flagsz(JBIG2StreamWriter.encode_retention_flags   s   +&	))$5r:>#$8)DJ)2?)C -%	:a9n,
-LL$))Y]a$78K3#45L$$ K LL%#K0 '
*:>*q.1:LM(1((; F$GWWXEHF X&' yy4(#c>JJJ 	CJ&LLL	 L)5))r   c                 .    t        d|      }||d   z  }|S )Nr   rr   )r   )r4   r   rB   r   s       r   encode_data_lengthz$JBIG2StreamWriter.encode_data_length"  s"    D% 
##r   c           	      *    ddt         d||ddg g ddS Nr   F)rO   rQ   r   )r\   r^   r]   )r   r	   r   r   rr   r
   )r   )r4   
seg_numberpage_numbers      r   r   z!JBIG2StreamWriter.get_eop_segment'  s/    "'1EF % "#% 
 	
r   c           	      *    ddt         d|dddg g ddS r   )SEG_TYPE_END_OF_FILE)r4   r   s     r   r   z!JBIG2StreamWriter.get_eof_segment5  s/    "'1EF  "#% 
 	
r   N)T)rx   ry   rz   r{   r5   r   r   r   r   r   r   r   r   r|   r   r   r~   r~      s3    88*
! **X


r   r~   )rc   rL   structr   r   r   r:   rR   rS   rT   r_   ra   r`   rt   rs   r   r   r   r   r   r   r"   r+   r-   objectr/   r~   r|   r   r   <module>r      s     	 ) )
 " ( !     !#    5& ) (--c cL^
 ^
r   