
     h7              	          U d Z dZdZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZ 	 dd
lmZ n# e$ r	 dd
lmZ Y nw xY wddlmZmZmZ eeeeef         eeeef         eeeef         f         Z ee!d<   eeeeeeef         Z"ee!d<   eZ#ee$e#f         Z%dZ&dZ'dZ(dZ)de*de*de*fdZ+dTde#dee,         de*fdZ-de#de*fdZ.de#de/fdZ0de#ddfdZ1	 dUde#dee*         de/de*fd Z2de#d!e,de*fd"Z3de#de*fd#Z4d$e d%e de fd&Z5de#ddfd'Z6i Z7eee$e*f         e*f         e!d(<   d)ee$e*f         de*fd*Z8ed%e$de$fd+            Z9ed%e*de$fd,            Z9d%ee$e*f         de$fd-Z9ed%e$de,fd.            Z:ed%e*de*fd/            Z:ed%e,de,fd0            Z:d%ee,e$e*f         dee,e*f         fd1Z:d%e*de*fd2Z;d3e,de$fd4Z<d5Z=d6e,d7e,d8e,de,fd9Z>dVd;e$d<e,ddfd=Z?d;e$ddfd>Z@	 dWd@e$dAe$dBe$ddfdCZA	 dWd@e$dAe$dBe$ddfdDZBdWdEe$dBe$ddfdFZCdWdEe$dBe$ddfdGZDd;e$dHe$ddfdIZEdJe$defdKZF	 dUdLe$dMee$ef         dJee$e$f         dNe/fdOZGdPe,de$fdQZHe	 G dR dS                      ZIdS )Xz"Utility functions for PDF library.zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N
getencoder)	dataclass)DEFAULT_BUFFER_SIZE)SEEK_CUR)	IOAnyCallableDictOptionalPatternTupleUnionoverload)	TypeAlias   )STREAM_TRUNCATED_PREMATURELYDeprecationErrorPdfStreamErrorTransformationMatrixTypeCompressedTransformationMatrixz2{} is deprecated and will be removed in PyPDF2 {}.z.{} is deprecated and was removed in PyPDF2 {}.zE{} is deprecated and will be removed in PyPDF2 3.0.0. Use {} instead.z>{} is deprecated and was removed in PyPDF2 {}. Use {} instead.header1header2returnc                 6   d}g }| |v r(|                     |                    |                      ||v r(|                     |                    |                     t          |          dk    rt          d| d|d          |t	          |                   S )N)s   %PDF-1.3s   %PDF-1.4s   %PDF-1.5s   %PDF-1.6s   %PDF-1.7s   %PDF-2.0r   zneither z nor z are proper headers)appendindexlen
ValueErrormax)r   r   versionspdf_header_indicess       R/var/www/flask_pdf_extract_app/myenv/lib/python3.11/site-packages/PyPDF2/_utils.py_get_max_pdf_version_headerr$   O   s    H (!!(.."9"9:::(!!(.."9"9:::
!##RGRRGRRRSSSC*++,,    streammaxcharsc                     d}	 |                      d          }|                                s|sn||z  }t          |          |k    rnF|S )z~
    Read non-whitespace characters and return them.

    Stops upon encountering whitespace or when maxchars is reached.
    r%   Tr   )readisspacer   )r&   r'   txttoks       r#   read_until_whitespacer-   b   s`     Ckk!nn;;== 	 	s
s88x Jr%   c                 ~    |                      d          }|t          v r|                      d          }|t          v |S )zEFind and read the next non-whitespace character (ignores whitespace).r   )r)   WHITESPACESr&   r,   s     r#   read_non_whitespacer1   s   s=    
++a..C


kk!nn 

Jr%   c                     t           d         }d}|t           v r#|                     d          }|dz  }|t           v #|dk    S )zr
    Similar to read_non_whitespace, but return a Boolean if more than
    one whitespace character was read.
    r   r   )r/   r)   )r&   r,   cnts      r#   skip_over_whitespacer4   {   sM    
 a.C
C


kk!nnq 

 7Nr%   c                     |                      d          }|                     dd           |dk    r|dvr|                      d          }|dvd S d S d S )Nr      %)   
   )r)   seekr0   s     r#   skip_over_commentr;      sh    
++a..C
KKA
d{{''++a..C '''' {''r%   Fregex
ignore_eofc                 T   d}	 |                      d          }|s|r|S t          t                    |                    |          }|X||d|                                         z  }|                     |                                t          |          z
  d           n||z  }|S )z
    Read until the regular expression pattern matched (ignore the match).

    :raises PdfStreamError: on premature end-of-file
    :param bool ignore_eof: If true, ignore end-of-line and return immediately
    :param regex: re.Pattern
    r%   T   Nr   )r)   r   r   searchstartr:   r   )r&   r<   r=   namer,   ms         r#   read_until_regexrD      s     Dkk"oo 	?  !=>>>LL=C!''))$$DKK		CHH,a000 Kr%   to_readc                     |                                  |k     rt          d          |                     | t                     |                     |          }|                     | t                     |S )z
    Given a stream at position X, read a block of size to_read ending at position X.

    This changes the stream's position to the beginning of where the block was
    read.
    z!Could not read malformed PDF file)tellr   r:   r   r)   )r&   rE   r)   s      r#   read_block_backwardsrH      sh     {{}}w@AAA
KK(###;;wD
KK(###Kr%   c                    g }d}|                                  dk    rt          t                    	 t          t          |                                            }|dk    rnt          | |          }t          |          dz
  }|s-|dk    r||         dvr|dz  }|dk    r
||         dv|dk    rd}|rF|                    ||dz   d                    |dk    r||         dv r|dz  }|dk    r
||         dv n|                    |           |dk    r|                     |dz   t                     nd
                    |ddd                   S )	a  
    Given a byte stream with current position X, return the previous line.

    All characters between the first CR/LF byte found before X
    (or, the start of the file, if no such byte is found) and position X
    After this call, the stream will be positioned one byte after the
    first non-CRLF character found beyond the first CR/LF byte before X,
    or, if no such byte is found, at the beginning of the stream.
    Fr   Tr   s   
Nr%   r6   )rG   r   r   minr   rH   r   r   r:   r   join)r&   line_content
found_crlfrE   blockidxs         r#   read_previous_linerP      s    LJ{{}}9::: )6;;==99a<< %VW55%jj1n 	" ((uSz88q ((uSz88axx!
 	'
 cAgii 0111((uSzW44q ((uSzW44
 &&&!88 KKa***A D 88L2&'''r%   abc                 :    t          fd| D                       S )Nc              3   ^   K   | ]&t          fd t           D                       V  'dS )c              3   f   K   | ]+}t          d  t          |          D                       V  ,dS )c              3   Z   K   | ]&\  }}t          |          t          |          z  V  'd S N)float).0ijs      r#   	<genexpr>z6matrix_multiply.<locals>.<genexpr>.<genexpr>.<genexpr>   s7      @@$!Q%((U1XX%@@@@@@r%   N)sumzip)rY   colrows     r#   r\   z,matrix_multiply.<locals>.<genexpr>.<genexpr>   sB      TTSc@@#c3--@@@@@TTTTTTr%   N)tupler^   )rY   r`   rR   s    @r#   r\   z"matrix_multiply.<locals>.<genexpr>   sZ         	TTTTCQRGTTTTT     r%   )ra   )rQ   rR   s    `r#   matrix_multiplyrb      s=              r%   c                    d}|                      | d           t          dd          5 }|                    |                     |                     |                    d           |                    |                     |                     ddd           n# 1 swxY w Y   |                      | d           dS )z5Create text file showing current location in context.i  r   zPyPDF2_pdfLocation.txtwbs   HEREN)r:   openwriter)   )r&   radius	output_fhs      r#   mark_locationri      s     F
KK	&	-	- -F++,,,   F++,,,- - - - - - - - - - - - - - - KKs   A&BB #B B_CACHEsc                 4   t           }| |v r||          S t          | t                    r| S 	 |                     d          }t	          |           dk     r||| <   |S # t
          $ r2 |                     d          }t	          |           dk     r||| <   |cY S w xY w)Nlatin-1   zutf-8)rj   
isinstancebytesencoder   	Exception)rk   bcrs      r#   b_ru     s    	BBww!u!U 	HHYq66A::BqE   HHWq66A::BqE	s   .A 9BBc                     d S rW    rR   s    r#   str_ry         Cr%   c                     d S rW   rw   rx   s    r#   ry   ry     rz   r%   c                 Z    t          | t                    r|                     d          S | S )Nrm   )ro   rp   decoderx   s    r#   ry   ry   "  s+    !U xx	"""r%   c                     d S rW   rw   rx   s    r#   ord_r   )  rz   r%   c                     d S rW   rw   rx   s    r#   r   r   .  rz   r%   c                     d S rW   rw   rx   s    r#   r   r   3  rz   r%   c                 N    t          | t                    rt          |           S | S rW   )ro   strordrx   s    r#   r   r   8  s$    !S 1vvHr%   c                 F    t          d          } ||           }|d         S )N	hex_codecr   r   )rR   codercodeds      r#   	hexencoder   >  s%    {##EE!HHE8Or%   numc                 H    t          |                               dd          S )NL )hexreplace)r   s    r#   hex_strr   E  s    s88C$$$r%   )    r8   r9      	    leftupup_leftc                     | |z   |z
  }t          || z
            }t          ||z
            }t          ||z
            }||k    r||k    r| S ||k    r|S |S rW   )abs)r   r   r   p	dist_leftdist_updist_up_lefts          r#   paeth_predictorr   L  sn    r	GAAHI!b&kkGq7{##LG	\ 9 9	L	 	 	r%      msg
stacklevelc                 >    t          j        | t          |           d S )N)r   )warningswarnDeprecationWarning)r   r   s     r#   	deprecater   Z  s     M#)jAAAAAAr%   c                      t          |           rW   )r   )r   s    r#   deprecationr   ^  s    
3

r%   3.0.0old_namenew_name
removed_inc                 Z    t          t                              | ||          d           dS )zS
    Raise an exception that a feature will be removed, but has a replacement.
       N)r   DEPR_MSGformatr   r   r   s      r#   deprecate_with_replacementr   b  s*     hooh*==qAAAAAr%   c                 X    t          t                              | ||                     dS )zW
    Raise an exception that a feature was already removed, but has a replacement.
    N)r   DEPR_MSG_HAPPENEDr   r   s      r#   deprecation_with_replacementr   k  s+     !((:xHHIIIIIr%   rB   c                 X    t          t                              | |          d           dS )zP
    Raise an exception that a feature will be removed without replacement.
    r   N)r   DEPR_MSG_NO_REPLACEMENTr   rB   r   s     r#   deprecate_no_replacementr   t  s+     %,,T:>>BBBBBr%   c                 V    t          t                              | |                     dS )zT
    Raise an exception that a feature was already removed without replacement.
    N)r    DEPR_MSG_NO_REPLACEMENT_HAPPENEDr   r   s     r#   deprecation_no_replacementr   {  s)     077jIIJJJJJr%   srcc                 T    t          j        |                              |            dS )a  
    Use this instead of logger.warning directly.

    That allows people to overwrite it more easily.

    ## Exception, warnings.warn, logger_warning
    - Exceptions should be used if the user should write code that deals with
      an error case, e.g. the PDF being completely broken.
    - warnings.warn should be used if the user needs to fix their code, e.g.
      DeprecationWarnings
    - logger_warning should be used if the user needs to know that an issue was
      handled by PyPDF2, e.g. a non-compliant PDF being read in a way that
      PyPDF2 could apply a robustness fix to still read it. This applies mainly
      to strict=False mode.
    N)logging	getLoggerwarning)r   r   s     r#   logger_warningr     s)      c""3'''''r%   aliasesc                  "     dt           f fd}|S )z
    Decorator for deprecated term "bookmark"
    To be used for methods and function arguments
        outline_item = a bookmark
        outline = a collection of outline items
    funcc                 J     t          j                    fd            }|S )Nc                  D    t          j        |d            | i |S )NT)fail)rename_kwargs__name__)argskwargsr   r   s     r#   wrapperz9deprecation_bookmark.<locals>.decoration.<locals>.wrapper  s1    $-tDDDD4((((r%   )	functoolswraps)r   r   r   s   ` r#   
decorationz(deprecation_bookmark.<locals>.decoration  s>    				) 	) 	) 	) 	) 
		) r%   )r
   )r   r   s   ` r#   deprecation_bookmarkr     s0           r%   	func_namer   r   c                 &   |                                 D ]{\  }}||v rr|rt          | d| d          ||v rt          |  d| d| d| d| d
          |                    |          ||<   t	          j        | d| dt                     |d	S )
z1
    Helper function to deprecate arguments.
    z# is deprecated as an argument. Use z insteadz received both z and z as an argument. z is deprecated. Use z	 instead.)messagecategoryN)itemsr   	TypeErrorpopr   r   r   )r   r   r   r   old_termnew_terms         r#   r   r     s    &mmoo  (v &VVHVVV   6!!  I I I I I II I5=I I I    &zz(33F8MVVHVVV+	    r%   rp   c                 f    | dk     r|  dS | dk     r	| dz  ddS | dk     r	| dz  ddS | dz  ddS )	Ni  z Bytei@B z.1fz kBi ʚ;z MBz GBrw   )rp   s    r#   _human_readable_bytesr     sk    u}}	%-(((((	%-(((((%-(((((r%   c                   <    e Zd ZU eed<   eed<   defdZdefdZdS )FilerB   datar   c                 \    d| j          dt          t          | j                             dS )N
File(name=, data: ))rB   r   r   r   selfs    r#   __str__zFile.__str__  s.    WDIWW/DS^^/T/TWWWWr%   c                     d| j          dt          t          | j                             dt	          | j                   dS )Nr   r   z, hash: r   )rB   r   r   r   hashr   s    r#   __repr__zFile.__repr__  sC    pDIpp/DS^^/T/Tpp^bcgcl^m^mppppr%   N)r   
__module____qualname__r   __annotations__rp   r   r   rw   r%   r#   r   r     sj         
III
KKKX X X X Xq# q q q q q qr%   r   rW   )F)r   )r   )J__doc__
__author____author_email__r   r   r   codecsr   dataclassesr   ior   osr   typingr   r	   r
   r   r   r   r   r   r   r   ImportErrortyping_extensionserrorsr   r   r   rX   r   r   r   
StreamTyper   StrByteTyper   r   r   r   rp   r$   intr-   r1   boolr4   r;   rD   rH   rP   rb   ri   rj   ru   ry   r   r   r   r/   r   r   r   r   r   r   r   r   r   r   r   r   rw   r%   r#   <module>r      s  8 ) ( (
/              ! ! ! ! ! ! " " " " " "      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
,        , , ,++++++++,          ',	%
eUE&9 :E%PUBU<VV' )    -2	5%u,- 	    
CO$N #S  RT - - -5 - - - -& *  QV    "
 u    
 
 
 
 
 
!j !T ! ! ! ! CH &u~;?
   4 c e    "0(z 0(e 0( 0( 0( 0(f$<   	* 	 	 	 	 	 +-eCJ&	' , , ,%U

     $ 
C C    
 
E c    
E#u* #     
C C    
 
E e    
 
C C    
E#sE/" uS%Z'8     5    % % % % % % 3# 3      B B3 BC B B B B B S  T        
 5<B BB B.1B	B B B B 5<J JJ J.1J	J J J JC C3 CC Cd C C C CK KS Kc K K K K K( (# ($ ( ( ( (&C H    ( SX  cN59#s(^KO   6) ) ) ) ) ) q q q q q q q q q qs   A
 
AA