
    :QgWQ                     v   U d 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m	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ erddlmZ ddlZdZeej>                  e ejB                  f   Z"eee	f   Z# G d	 d
      Z$de de%fdZ&de'de fdZ(de de)de fdZ*	 dUdee%e f   de de de fdZ+de)de)de)de)fdZ,de)de)de)de)de%de%fd Z-ee.e.f   Z/ee.e.e.e.f   Z0ee.e.e.e.e.e.f   Z1eee    ee e.e.f   ee e.e.e.e.f   ee e.e.e.e.e.e.f   f   Z2d!Z3e1e4d"<   d#e1d$e1de1fd%Z5d&e1d'e/de1fd(Z6d&e1d'e/de/fd)Z7d&e1d'e/de/fd*Z8d+e'de9fd,Z: ed-      Z;d.ee;   dee;   fd/Z<de
e;ge9f   d.ee;   deee;   ee;   f   fd0Z=d1e.d2e.d3e)de>fd4Z?d5ee/   de0fd6Z@	 dVd7ee;   d8e
e;ge.f   d9ee;   dee;   fd:ZAd;e)d7ee;   deee;d<f      fd=ZBdWde%d>e)de)fd?ZCd@j                  dA dBD              ZEde%de fdCZFd+e de fdDZGdEe0de fdFZHd&e1de fdGZIdHdIdJdIde/fdKZJ edLdIM      ZK G dN dOeeK         ZLg dPZMg dQZNdRe)de fdSZOdRe)de fdTZPy)Xz
Miscellaneous Routines.
    N)escape)AnyBinaryIOCallableDictGenericIterableIteratorListOptionalSetTextIOTupleTypeVarUnionTYPE_CHECKINGcast   )PDFTypeErrorPDFValueError)LTComponentic                   L    e Zd ZdZdedededdfdZdefdZd	e	d
e	de	ddfdZ
y)open_filenamez
    Context manager that allows opening a filename
    (str or pathlib.PurePath type is supported) and closes it on exit,
    (just like `open`), but does nothing for file-like objects.
    filenameargskwargsreturnNc                 @   t        |t        j                        rt        |      }t        |t              rt	        |g|i || _        d| _        y t        |t        j                        rt        t        |      | _        d| _        y t        dt        |      z        )NTFzUnsupported input type: %s)
isinstancepathlibPurePathstropenfile_handlerclosingioIOBaser   AnyIOr   type)selfr   r   r   s       K/var/www/html/answerous/venv/lib/python3.12/site-packages/pdfminer/utils.py__init__zopen_filename.__init__3   s|    h 0 018}Hh$'+H'Ft'Fv'FDDL")), $UH 5D DL;d8nLMM    c                     | j                   S N)r$   r*   s    r+   	__enter__zopen_filename.__enter__?   s       r-   exc_typeexc_valexc_tbc                 R    | j                   r| j                  j                          y y r/   )r%   r$   close)r*   r2   r3   r4   s       r+   __exit__zopen_filename.__exit__B   s     <<##% r-   )__name__
__module____qualname____doc__
FileOrNamer   r,   r(   r1   objectr7    r-   r+   r   r   ,   sZ    
N 
NC 
N3 
N4 
N!5 !& && && &T &r-   r   in_strr   c                 t    t        | t              sJ t        t        |                    | j                         S )z'Converts to bytes, encoding to unicode.)r   r"   r)   encode)r?   s    r+   make_compat_bytesrB   G   s,    fc"5CV$55"==?r-   oc                     t        | t              r*t        j                  |       }	 | j	                  |d         S t        |       S # t
        $ r t        |       cY S w xY w)z>Converts everything to string, if bytes guessing the encoding.encoding)r   bytescharset_normalizerdetectdecodeUnicodeDecodeErrorr"   )rC   encs     r+   make_compat_strrL   M   sY    !U ''*	88C
O,, 1v " 	q6M	s   A AAssizec                 b    |dk  r| d | S t        |       |kD  r|dz
  dz  }| d |  d| | d   S | S )N         z ... )len)rM   rN   lengths      r+   shorten_strrU   Y   sP    ax$x
1v}(qGV*U1fWX;-00r-   bytesorstringrE   	erractionc                     t        | t              r| S t        | t              sJ t        t        |                    | j	                  ||      S )z^When Py2 str.encode is called, it often means bytes.encode in Py3.

    This does either.
    )r   r"   rF   r)   rI   )rV   rE   rW   s      r+   compatible_encode_methodrY   c   sF     -%mU+ESm1D-EE+)44r-   leftabove
upper_leftc                     | |z   |z
  }t        || z
        }t        ||z
        }t        ||z
        }||k  r||k  r| S ||k  r|S |S r/   )abs)rZ   r[   r\   ppapbpcs          r+   paeth_predictorrc   p   s`     	uz!A	QXB	QYB	Q^	B 
RxB"H	rr-   predcolorscolumnsbitspercomponentdatac                    |dvrd|z  }t        |      ||z  |z  dz  }||z  dz  }g }t        d|z        }	t        dt        |      |dz         D ]  }
||
   }||
dz   |
dz   |z    }g }|dk(  rt        |      }nn|dk(  rJt	        |      D ]:  \  }}||z
  dk  rd}nt        |||z
           }||z   dz  }|j                  |       < n|dk(  r.t        ||	      D ]  \  }}||z   dz  }|j                  |         n|d	k(  r]t	        |      D ]N  \  }}||z
  dk  rd}nt        |||z
           }t        |	|         }|||z   dz  z   dz  }|j                  |       P n|d
k(  rwt	        |      D ]h  \  }}||z
  dk  rd}d}n"t        |||z
           }t        |	||z
           }t        |	|         }t        |||      }||z   dz  }|j                  |       j nt        d|z        |j                  |       |}	 t        |      S )zxReverse the effect of the PNG predictor

    Documentation: http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html
    )   r   z"Unsupported `bitspercomponent': %drj       r   r      rR         zUnsupported predictor value: %d)r   listrangerS   	enumerateintappendziprc   extendrF   )rd   re   rf   rg   rh   msgnbytesbppbuf
line_above
scanline_ifilter_typeline_encodedrawjsub_x	raw_x_bppraw_xup_xprior_x	average_xpaeth_xprior_x_bpppaeths                           r+   apply_png_predictorr      s    v%25EEC  g 00A5F
#
#q
(C
Cg'(JAs4y&1*5 N
:&JNZ!^f-DE!|$CA &l3 "5s7Q; !I #CCL 1I*c1

5!" A $'|Z#@ "w3.

5!" A !*, 7 "9s7Q; !I #CCL 1Ijm,"i'&9a%??3F

5!" A (5 
"
7s7Q; !I"#K #CCL 1I"%jS&9":Kjm,'	7KH 5C/

5!
"   AK OPP

3
]N^ :r-   )r   r   r   r   r   r   MATRIX_IDENTITYm1m0c                     | \  }}}}}}|\  }}	}
}}}	 ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |z   |	|z  ||z  z   |z   fS r/   r>   )r   r   a1b1c1d1e1f1a0b0c0d0e0f0s                 r+   mult_matrixr      s    !RRR!RRR5
R"r'
R"r'
R"r'
R"r'
R"r'B
R"r'B r-   mvc                 ^    | \  }}}}}}|\  }}	||||||z  |	|z  z   |z   ||z  |	|z  z   |z   fS )zTranslates a matrix by (x, y).r>   
r   r   abcdefxys
             r+   translate_matrixr      sR    Q1aAFQaAq1uq1u}q(!a%!a%-!*;;;r-   c                 X    | \  }}}}}}|\  }}		 ||z  ||	z  z   |z   ||z  ||	z  z   |z   fS r/   r>   r   s
             r+   apply_matrix_ptr     sM    Q1aAFQ&q51q5=1a!ea!ema///r-   c                 J    | \  }}}}}}|\  }}	||z  ||	z  z   ||z  ||	z  z   fS )zCEquivalent to apply_matrix_pt(M, (p,q)) - apply_matrix_pt(M, (0,0))r>   )
r   r   r   r   r   r   r   r   r_   qs
             r+   apply_matrix_normr     s@    Q1aAFQq51q5=!a%!a%-''r-   r   c                 .    t        | t        t        f      S r/   )r   rr   floatr   s    r+   isnumberr     s    a#u&&r-   _Tobjsc              #   b   K   t               }| D ]  }||v r|j                  |       |  yw)zEliminates duplicated elements.N)setadd)r   doneobjs      r+   uniqr     s;     5D $;		
 s   -/c                 v    g }g }|D ]-  } | |      r|j                  |       |j                  |       / ||fS )z9Split a list into two classes according to the predicate.)rs   )rd   r   tr   r   s        r+   fsplitr   )  sC    
A
A 9HHSMHHSM	
 a4Kr-   v0v1r   c                 P    t        t        |       |z  t        ||z         |z        S )zReturns a discrete range.)rp   rr   )r   r   r   s      r+   dranger   5  s$    RAs26{a/00r-   ptsc                     t         t         t          t          f}|\  }}}}| D ]5  \  }}t        ||      }t        ||      }t        ||      }t        ||      }7 ||||fS )z7Compute a minimal rectangle that covers all the points.)INFminmax)r   limitx0y0x1y1r   r   s           r+   	get_boundr   :  sq    cTC4(ERR AQZQZQZQZ	
 r2r>r-   seqfuncmaxobjc                 @    d}| D ]  } ||      }|||k  s||}} |S )z;Picks the object obj where func(obj) has the highest value.Nr>   )r   r   r   maxscorer   scores         r+   pickr   F  s>     H .S	x%/"'vX. Mr-   n.c              #   |   K   g }|D ]1  }|j                  |       t        |      | k(  s#t        |       g }3 yw)z$Groups every n elements of the list.N)rs   rS   tuple)r   r   rr   s       r+   choplistr   R  sC     
A 	q6Q;(NA	
 s   '<<defaultc                    t        |       }|s|S |dk(  rt        |       S |dk(  r't        t        t	        j
                  d|       d         S |dk(  r*t        t        t	        j
                  dd| z         d         S |dk(  r't        t        t	        j
                  d|       d         S |d	k(  r't        t        t	        j
                  d
|       d         S t        d|z        )z/Unpacks 1 to 4 or 8 byte integers (big endian).r   rR   z>Hr   rm   z>Lrk   rn   rj   z>Qzinvalid length: %d)rS   ordr   rr   structunpackr   )rM   r   rT   s      r+   nunpackr   ]  s    VF	11v	1CtQ/233	1CtWq[9!<==	1CtQ/233	1CtQ/233/&899r-    c              #   2   K   | ]  }t        |        y wr/   )chr).0r   s     r+   	<genexpr>r   p  s      D	 FDs   (   r   r   rR   rm   rn   rQ      rP   rj   	   
                                       r   i  i  i  i  i  i  i  i      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   r   i"   i    i!   i&   i   i   i  iD   i9   i:   i"  i0   i   i   i   i   i   i   i"!  i  i  iA  iR  i`  ix  i}  i1  iB  iS  ia  i~  r   i                                       r                                                                                                                                                                                                                                                      rl   c                 t    | j                  d      rt        | dd dd      S dj                  d | D              S )z+Decodes a PDFDocEncoding string to Unicode.s   rR   Nzutf-16beignorer   c              3   .   K   | ]  }t         |     y wr/   )PDFDocEncoding)r   r   s     r+   r   zdecode_text.<locals>.<genexpr>|  s     4Q~a(4s   )
startswithr"   join)rM   s    r+   decode_textr  w  s8    ||K 1QR5*h//ww4!444r-   c                 :    t        | t              ryt        |       S )z"Encodes a string for SGML/XML/HTMLr   )r   rF   r   r   s    r+   rK   rK     s    !U!9r-   bboxc                 2    | \  }}}}|dd|dd|dd|dS )Nz.3f,r>   )r  r   r   r   r   s        r+   bbox2strr    s5    RRXQr#ha3xqC11r-   c                 J    | \  }}}}}}d|dd|dd|dd|dd|dd|ddS )N[z.2fr  z, (z)]r>   )r   r   r   r   r   r   r   s          r+   
matrix2strr    sM    Q1aAqgQqgQqgQqgS3q3rBBr-   obj1r   obj2c                    t        | j                  |j                        t        | j                  |j                        }}t        | j                  |j                        t        | j
                  |j
                        }}||z
  ||z
  }}|| j                  z
  |j                  z
  || j                  z
  |j                  z
  }	}|dk  r|	dk  rz| j                  | j                  z   dz  | j                  | j
                  z   dz  }}
|j                  |j                  z   dz  |j                  |j
                  z   dz  }}|
|z
  ||z
  fS t        d|      t        d|	      fS )a  A distance function between two TextBoxes.

    Consider the bounding rectangle for obj1 and obj2.
    Return vector between 2 boxes boundaries if they don't overlap, otherwise
    returns vector betweeen boxes centers

             +------+..........+ (x1, y1)
             | obj1 |          :
             +------+www+------+
             :          | obj2 |
    (x0, y0) +..........+------+
    r   rR   )r   r   r   r   r   r   widthheight)r  r  r   r   r   r   owohiwihxc1yc1xc2yc2s                 r+   vecBetweenBoxesr    s     DGGTWW%s477DGG'<RDGGTWW%s477DGG'<RRbRTZZ$**,b4;;.>.LR	Av"q&ww(A-$''0AQ/Fcww(A-$''0AQ/FcSy#)##1bz3q":%%r-   LTComponentT)boundc                       e Zd ZdZddededdfdZdefdZde	e
   fdZdefd	Zd
edefdZdede	e   fdZdee
   ddfdZd
e
ddfdZd
e
ddfdZdede	e
   fdZy)PlanezA set-like data structure for objects placed on a plane.

    Can efficiently find objects in a certain rectangular area.
    It maintains two parallel lists of objects, each of
    which is sorted by its x or y coordinate.
    r  gridsizer   Nc                     g | _         t               | _        i | _        || _        |\  | _        | _        | _        | _        y r/   )	_seqr   _objs_gridr  r   r   r   r   )r*   r  r  s      r+   r,   zPlane.__init__  s6    (*	(+
68
 /3,$'47DGr-   c                     dt        |       z  S )Nz<Plane objs=%r>)ro   r0   s    r+   __repr__zPlane.__repr__  s     4:--r-   c                 .      fd j                   D        S )Nc              3   @   K   | ]  }|j                   v s|  y wr/   r  )r   r   r*   s     r+   r   z!Plane.__iter__.<locals>.<genexpr>  s     >C4::,=>s   )r  r0   s   `r+   __iter__zPlane.__iter__  s    >tyy>>r-   c                 ,    t        | j                        S r/   )rS   r  r0   s    r+   __len__zPlane.__len__  s    4::r-   r   c                     || j                   v S r/   r  )r*   r   s     r+   __contains__zPlane.__contains__  s    djj  r-   c              #     K   |\  }}}}|| j                   k  s-| j                  |k  s|| j                  k  s| j                  |k  ry t	        | j                   |      }t	        | j                  |      }t        | j                  |      }t        | j                  |      }t        ||| j                        D ]$  }t        ||| j                        D ]  }||f 
 & y wr/   )r   r   r   r   r   r   r   r  )r*   r  r   r   r   r   grid_ygrid_xs           r+   	_getrangezPlane._getrange  s     RR=DGGrMR477]dggm""""RT]]3 	'F R7 'v&&'	's   CCr   c                 4    |D ]  }| j                  |        y r/   )r   )r*   r   r   s      r+   ru   zPlane.extend  s     	CHHSM	r-   c                 t   | j                  |j                  |j                  |j                  |j                  f      D ]B  }|| j
                  vrg }|| j
                  |<   n| j
                  |   }|j                  |       D | j                  j                  |       | j                  j                  |       y)zplace an object.N)
r  r   r   r   r   r  rs   r  r  r   )r*   r   kr   s       r+   r   z	Plane.add  s     @A 	A

"(* !

1JJqMHHSM	 			

sr-   c                 &   | j                  |j                  |j                  |j                  |j                  f      D ]!  }	 | j
                  |   j                  |       # | j                  j                  |       y# t        t        f$ r Y Qw xY w)zdisplace an object.N)
r  r   r   r   r   r  removeKeyError
ValueErrorr  )r*   r   r  s      r+   r  zPlane.remove  s{     @A 	A

1$$S)	
 	

# j) s   A>>BBc              #   N  K   |\  }}}}t               }| j                  |      D ]|  }|| j                  vr| j                  |   D ]Y  }||v r|j                  |       |j                  |k  s-||j
                  k  s|j                  |k  s||j                  k  rV| [ ~ yw)z)finds objects that are in a certain area.N)r   r  r  r   r   r   r   r   )	r*   r  r   r   r   r   r   r  r   s	            r+   findz
Plane.find  s     RRu% 		A

"zz!} $;66R<2<366R<2<			s   B#B%)r  )r8   r9   r:   r;   Rectrr   r,   r"   r  r
   r  r  r  r=   boolr  Pointr  r	   ru   r   r  r  r>   r-   r+   r  r    s    4T 4S 4$ 4.# .?(<0 ? ! !4 !
'd 
'x 
'8L1 d 
| 
 
, 4  (<"8 r-   r  )ir   r   r   )r   lr   valuec                    d| cxk  rdk  sJ  J g }d}| dk7  rt        | d      \  } }|dk(  r6|j                  dt        |          |j                  dt        |dz             n}|dk(  r3|j                  dt        |          |j                  dt        |          nE|dk\  }|r|j                  dt        |          |dz  }|j                  |rdndt        |   |z         |dz  }| dk7  rdj	                  |      S )	z,Format a number as lowercase Roman numerals.r   i  r   r   r   rn   rQ   r   )divmodinsert
ROMAN_ONESROMAN_FIVESr  )r  resultindex	remainder	over_fives        r+   format_int_romanr    s    utFE
1*!%,y>MM!Z./MM!Z	23!^MM!Z./MM![/0!QIaU!34Q	MMy!aE1BY1NO
 1*  776?r-   c                    | dkD  sJ g }| dk7  rQt        | dz
  t        t        j                              \  } }|j	                  t        j                  |          | dk7  rQ|j                          dj                  |      S )z5Format a number as lowercase letters a-z, aa-zz, etc.r   r   r   )r  rS   stringascii_lowercasers   reverser  )r  r  r  s      r+   format_int_alphar    sv     199F
1*!%!)S1G1G-HIyf,,Y78 1* NN776?r-   )zutf-8r  r/   )r   )Qr;   r&   r    r  r   htmlr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   pdfexceptionsr   r   layoutr   rG   r   r!   r"   r'   r<   r(   r   rF   rB   r=   rL   rr   rU   rY   rc   r   r   r  r  MatrixPathSegmentr   __annotations__r   r   r   r   r  r   r   r   r   rp   r   r   r   r   r   r  r  r  rK   r  r  r  r  r  r  r  r  r  r>   r-   r+   <module>r     se   
        & 7#   7##S"))34
fh& &6c e 	v 	# 	3 c c  QY
5$
503
5JM
5
5# c s s $^
^^%(^<?^GL^
^B 	eUlUE5%'(	ueUE5%7	8	#J	#ue
	#ueUE
)*	#ueUE5%
78: - ,F  6 < <5 <V <0v 0% 0E 0( (E (e (' '4 ' T]x|  	2$*% 	Xb\ 	eDHdSUhDV>W 	1u 1% 1C 1E 1
	8E? 	t 	 LP		"	%rdEk2	<DRL	b\	 (2, 8E"c'N+C :u :s :3 :&  DAD DN55 5S 53 3 24 2C 2
C& CS C
&- &} & &4 ~];MGL! M` "
C C 4C C r-   