
    ,h40                        d Z ddlZddlZdZej                  rddlZeZd Zd Z	d Z
d 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!dZd Zd"dZdj5                  d dD              Zd Zd#dZd Zd Zd Z  G d de!      Z"y)$z
Miscellaneous Routines.
    Nic                     t        | t              sJ t        t        |                    t        j                  r| S | j                         S )zEIn Py2, does nothing. In Py3, converts to bytes, encoding to unicode.)
isinstancestrtypesixPY2encode)in_strs    P/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pdfminer/utils.pymake_compat_bytesr      s5    fc"5CV$55
ww}}    c                     t        | t        t        t        f      sJ t        t	        |                    t
        j                  r9t        | t              r)t        j                  |       }| j                  |d         } | S )zDIn Py2, does nothing. In Py3, converts to string, guessing encoding.encoding)
r   bytesr   unicoder   r   PY3chardetdetectdecode)r
   encs     r   make_compat_strr      sY    fuc734Gc$v,6GG
ww:fe,nnV$s:/Mr   c                 x    |dk  r| d | S t        |       |kD  r!|dz
  dz  }dj                  | d | | | d        S | S )N         z	{} ... {})lenformat)ssizelengths      r   shorten_strr!   #   sR    ax$x
1v}(q!!!GV*ak::r   c                 `   t         j                  rAt        | t        t        f      sJ t        t        |                    | j                  ||      S t         j                  rMt        | t              r| S t        | t              sJ t        t        |                    | j                  ||      S y)zTWhen Py2 str.encode is called, it often means bytes.encode in Py3. This does either.N)
r   r   r   r   r   r   r	   r   r   r   )bytesorstringr   	erractions      r   compatible_encode_methodr%   -   s    
ww-#w8R#d=>Q:RR##Hi88
wwmS)  -/IT-5H1II##Hi88	 r   c                    |dk7  rt        d|z        ||z  |z  dz  }d}d|z  }t        dt        |      |dz         D ]  }||   }	t        j                  rt        j
                  |	      }	|dz  }||||z    }
d}|	dk(  r||
z  }nR|	dk(  rOd}|
D ]G  }t        j                  rt        j
                  |      }||z   dz  }|t        j                  |      z  }I n|	dk(  rot        ||
      D ]_  \  }}t        j                  r*t        j
                  |      t        j
                  |      }}||z   dz  }|t        j                  |      z  }a n|	d	k(  rwd}t        ||
      D ]e  \  }}t        j                  r*t        j
                  |      t        j
                  |      }}||z   |z   dz  dz  }|t        j                  |      z  }g nt        d
|	z        ||z  }|} |S )N   z"Unsupported `bitspercomponent': %dr       r         r      zUnsupported predictor value: %d)
ValueErrorranger   r   r   byte2intint2bytezip)predcolorscolumnsbitspercomponentdatanbytesbufline0iftline1line2cbas                  r   apply_png_predictorr@   9   s   1=)* + 	+g 00A5F
CgE1c$i!, %!W77b!B	QQq6z"7UNE1WA )77QAUcMa(	)
 1WeU+ )A77<<?CLLOqAUcMa(	)
 1WAeU+ )A77<<?CLLOqA!eaiA%,a(	) >CDDuK%L Jr   )r)   r   r   r)   r   r   c                     | \  }}}}}}|\  }}	}
}}}	 ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |z   |	|z  ||z  z   |z   fS N )m1m0a1b1c1d1e1f1a0b0c0d0e0f0s                 r   mult_matrixrR   n   s    !RRR!RRR5Gb2grBwb0Gb2grBwb0Gb2g"BGb2g$5$:< <r   c                 ^    | \  }}}}}}|\  }}	||||||z  |	|z  z   |z   ||z  |	|z  z   |z   fS )zTranslates a matrix by (x, y).rC   
mvr?   r>   r=   defxys
             r   translate_matrixr\   w   sR    Q1aAFQaAq1uq1u}q(!a%!a%-!*;;;r   c                 X    | \  }}}}}}|\  }}		 ||z  ||	z  z   |z   ||z  ||	z  z   |z   fS rB   rC   rT   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))rC   )
rU   rV   r?   r>   r=   rW   rX   rY   pqs
             r   apply_matrix_normrb      s@    Q1aAFQq51q5=!a%!a%-''r   c                 B    t        | t        j                  t        f      S rB   )r   r   integer_typesfloat)rZ   s    r   isnumberrf      s    a#++U344r   c              #   b   K   t               }| D ]  }||v r|j                  |       |  yw)zEliminates duplicated elements.N)setadd)objsdoneobjs      r   uniqrm      s;     5D $;		
 s   -/c                 v    g }g }|D ]-  } | |      r|j                  |       |j                  |       / ||fS )z9Split a list into two classes according to the predicate.)append)r1   rj   trY   rl   s        r   fsplitrq      sC    
A
A 9HHSMHHSM	
 a4Kr   c                 P    t        t        |       |z  t        ||z         |z        S )zReturns a discrete range.)r-   int)v0v1rW   s      r   drangerv      s$    RAs26{a/00r   c                     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)ptsx0y0x1y1rZ   r[   s          r   	get_boundr      sl    S3$-RR AQZQZQZQZ	
 r2r>r   c                 @    d}| D ]  } ||      }|||k  s||}} |S )z;Picks the object obj where func(obj) has the highest value.NrC   )seqfuncmaxobjmaxscorerl   scores         r   pickr      s<    H .S	x%/"'vX. Mr   c              #   |   K   g }|D ]1  }|j                  |       t        |      | k(  s#t        |       g }3 yw)z$Groups every n elements of the list.N)ro   r   tuple)nr   rrZ   s       r   choplistr      sC     
A 	q6Q;(NA	
 s   '<<c                 R   t        |       }|s|S |dk(  rt        |       S |dk(  rt        j                  d|       d   S |dk(  rt        j                  dd| z         d   S |dk(  rt        j                  d|       d   S |d	k(  rt        j                  d
|       d   S t	        d|z        )z/Unpacks 1 to 4 or 8 byte integers (big endian).r)   r   z>Hr   r+   z>Lr(      r'   z>Qzinvalid length: %d)r   ordstructunpack	TypeError)r   defaultls      r   nunpackr      s    AA	
a1v	
a}}T1%a((	
a}}T7Q;/22	
a}}T1%a((	
a}}T1%a((,q011r    c              #   F   K   | ]  }t        j                  |        y wrB   )r   unichr).0rZ   s     r   	<genexpr>r      s      !1A !s   !(   r   r)   r   r+   r   r      r   r'   	   
                                       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                                                                                                                                                                                                                                                      r*   c                     | j                  d      rt        j                  | dd dd      S dj                  d | D              S )z+Decodes a PDFDocEncoding string to Unicode.s   r   Nzutf-16beignorer   c              3   .   K   | ]  }t         |     y wrB   )PDFDocEncoding)r   r=   s     r   r   zdecode_text.<locals>.<genexpr>
  s     4Q~a(4s   )
startswithr   	text_typejoin)r   s    r   decode_textrm    s<    ||K }}QqrUJ99ww4!444r   c                     t         j                  rt        | t              ry| j	                  dd      j	                  dd      j	                  dd      j	                  dd	      } |r| j                  |d
      } | S )z"Encodes a string for SGML/XML/HTMLr   &z&amp;>z&gt;<z&lt;"z&quot;xmlcharrefreplace)r   r   r   r   replacer	   )rZ   codecs     r   r   r     sg    
ww:a'			#w''V4<<S&IQQRUW_`AHHU/0Hr   c                 "    | \  }}}}d||||fz  S )Nz%.3f,%.3f,%.3f,%.3frC   )bboxr|   r}   r~   r   s        r   bbox2strrx    s$    RR BB#333r   c                 *    | \  }}}}}}d||||||fz  S )Nz"[%.2f,%.2f,%.2f,%.2f, (%.2f,%.2f)]rC   )rU   r?   r>   r=   rW   rX   rY   s          r   
matrix2strrz    s,    Q1aA/1aAq!2DDDr   c                    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   r   )ry   r|   r}   rz   r~   r   widthheight)obj1obj2r|   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   c                   N    e Zd ZdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z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.
    c                     g | _         t               | _        i | _        || _        |\  | _        | _        | _        | _        y rB   )	_seqrh   _objs_gridgridsizer|   r}   r~   r   )selfrw  r  s      r   __init__zPlane.__init__A  s6    	U

 /3,$'47DGr   c                     dt        |       z  S )Nz<Plane objs=%r>)listr  s    r   __repr__zPlane.__repr__H  s     4:--r   c                 .      fd j                   D        S )Nc              3   @   K   | ]  }|j                   v s|  y wrB   r  )r   rl   r  s     r   r   z!Plane.__iter__.<locals>.<genexpr>L  s     >C4::,=>s   )r  r  s   `r   __iter__zPlane.__iter__K  s    >tyy>>r   c                 ,    t        | j                        S rB   )r   r  r  s    r   __len__zPlane.__len__N  s    4::r   c                     || j                   v S rB   r  )r  rl   s     r   __contains__zPlane.__contains__Q  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rB   )r|   r~   r}   r   rz   ry   rv   r  )r  rw  r|   r}   r~   r   grid_ygrid_xs           r   	_getrangezPlane._getrangeT  s     RR=DGGrMR477]dggm""""RT]]3 	'F R7 'v&&'	's   CCc                 4    |D ]  }| j                  |        y rB   )ri   )r  rj   rl   s      r   extendz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  ro   r  r  ri   )r  rl   kr   s       r   ri   z	Plane.addd  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KeyErrorr,   r  )r  rl   r  s      r   r  zPlane.removep  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)rh   r  r  ri   r~   r|   r   r}   )	r  rw  r|   r}   r~   r   rk   r  rl   s	            r   findz
Plane.findy  s     RRu% 		A

"zz!} $;66R<2<366R<2<			s   B#B%N)r   )__name__
__module____qualname____doc__r  r  r  r  r  r  r  ri   r  r  rC   r   r   r  r  9  s9    4.?!
'
r   r  )zutf-8rg  rB   )r   )ascii)#r  r   r   rx   r   r   r   r   r   r   r!   r%   r@   MATRIX_IDENTITYrR   r\   r^   rb   rf   rm   rq   rv   r   r   r   r   rl  ri  rm  r   rx  rz  r  objectr  rC   r   r   <module>r     s     
 77G	9.d %<<0(5	1
2&  ! !1 ! !H54
E
&0MF Mr   