o
    ¾Ùøiê[  ã                   @   s^  U d Z ddlZddlZddlZddlmZmZ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 ddlmZmZ erCddlmZ ddlZddlZdZeejeejf Zeeef ZG d	d
„ d
ƒZ 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{de!eB 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!de!f
d&d'„Z)d(e%d"e%d#e%d$e%d%e!de!fd)d*„Z*e+e,e,f Z-e+e,e,e,e,f Z.e+e,e,e,e,e,e,f Z/ee+e e+ee,e,f e+ee,e,e,e,f e+ee,e,e,e,e,e,f f Z0d+Z1e/e2d,< dede.fd-d.„Z3d/e/d0e/de/fd1d2„Z4d3e/d4e-de/fd5d6„Z5d3e/d4e-de-fd7d8„Z6d3e/d9e.de.fd:d;„Z7d3e/d4e-de-fd<d=„Z8d>e#de9fd?d@„Z:edAƒZ;dBee; dee; fdCdD„Z<d(ee;ge9f dBee; de+e=e; e=e; f fdEdF„Z>dGe,dHe,dIe%de?fdJdK„Z@dLee- de.fdMdN„ZA	d|dOee; dPee;ge,f dQe;dB de;dB fdRdS„ZBdTe%dOee; dee+e;dUf  fdVdW„ZCd}de!dXe%de%fdYdZ„ZDd[ Ed\d]„ d^D ƒ¡ZFde!defd_d`„ZGd>edefdadb„ZHdce.defddde„ZId3e/defdfdg„ZJdhdidjdide-fdkdl„ZKedmdidn�ZLG dodp„ dpeeL ƒZMg dq¢ZNg dr¢ZOdse%defdtdu„ZPdse%defdvdw„ZQdxe!de!fdydz„ZRdS )~zMiscellaneous Routines.é    N)ÚCallableÚIterableÚIterator)Úescape)ÚTYPE_CHECKINGÚAnyÚBinaryIOÚGenericÚTextIOÚTypeVarÚUnionÚcast)ÚPDFTypeErrorÚPDFValueError)ÚLTComponentiÿÿÿc                   @   sR   e Zd ZdZdedededdfdd„Zdefd	d
„Zde	de	de	ddfdd„Z
dS )Ú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                 O   st   t |tjƒr
t|ƒ}t |tƒr t|g|¢R i |¤Ž| _d| _d S t |tjƒr1t	t
|ƒ| _d| _d S tdt|ƒ› �ƒ‚)NTFzUnsupported input type: )Ú
isinstanceÚpathlibÚPurePathÚstrÚopenÚfile_handlerÚclosingÚioÚIOBaser   ÚAnyIOr   Útype)Úselfr   r   r   © r"   ú[/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/pdfminer/utils.pyÚ__init__*   s   


zopen_filename.__init__c                 C   s   | j S ©N)r   ©r!   r"   r"   r#   Ú	__enter__6   s   zopen_filename.__enter__Úexc_typeÚexc_valÚexc_tbc                 C   s   | j r
| j ¡  d S d S r%   )r   r   Úclose)r!   r(   r)   r*   r"   r"   r#   Ú__exit__9   s   ÿzopen_filename.__exit__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
FileOrNamer   r$   r   r'   Úobjectr,   r"   r"   r"   r#   r   $   s
    r   Úin_strr   c                 C   s"   t | tƒsJ tt| ƒƒƒ‚|  ¡ S )z'Converts to bytes, encoding to unicode.)r   r   r    Úencode)r3   r"   r"   r#   Úmake_compat_bytes>   s   r5   Úoc                 C   s\   t | tƒr*t | ¡}|d du rt| ƒS z|  |d ¡W S  ty)   t| ƒ Y S w t| ƒS )z>Converts everything to string, if bytes guessing the encoding.ÚencodingN)r   ÚbytesÚcharset_normalizerÚdetectr   ÚdecodeÚUnicodeDecodeError)r6   Úencr"   r"   r#   Úmake_compat_strD   s   

ÿr>   ÚsÚsizec                 C   sP   |dk r
| d |… S t | ƒ|kr&|d d }| d |… › d| | d … › �S | S )Né   é   é   z ... )Úlen)r?   r@   Úlengthr"   r"   r#   Úshorten_strR   s    rF   úutf-8ÚignoreÚbytesorstringr7   Ú	erractionc                 C   s4   t | tƒr| S t | tƒsJ tt| ƒƒƒ‚|  ||¡S )z^When Py2 str.encode is called, it often means bytes.encode in Py3.

    This does either.
    )r   r   r8   r    r;   )rI   r7   rJ   r"   r"   r#   Úcompatible_encode_method\   s   
	rK   ÚleftÚaboveÚ
upper_leftc                 C   sT   | | | }t ||  ƒ}t || ƒ}t || ƒ}||kr"||kr"| S ||kr(|S |S r%   )Úabs)rL   rM   rN   ÚpÚpaÚpbÚpcr"   r"   r#   Úpaeth_predictork   s   rT   ÚcolorsÚcolumnsÚbitspercomponentÚdatac                 C   s¢   |dkrd|› �}t |ƒ‚| |d  }|| }g }tdt|ƒ|ƒD ]+}g }	t|ƒD ]}
|||
  }|
|krA||	|
|  7 }|d; }|	 |¡ q)| |	¡ q!t|ƒS )zŸReverse the effect of the TIFF predictor 2

    Documentation:
    https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf
    (Section 14, page 64)
    é   ú Unsupported `bitspercomponent': r   é   )r   ÚrangerD   ÚappendÚextendr8   )rU   rV   rW   rX   Ú	error_msgÚbppÚnbytesÚbufÚ
scanline_iÚrawÚiÚ	new_valuer"   r"   r#   Úapply_tiff_predictor}   s    	
rg   Úpredc                 C   s,  |dvrd|› �}t |ƒ‚|| | d }|| d }g }td| ƒ}	tdt|ƒ|d ƒD ]ä}
||
 }||
d |
d | … }g }|dkrJt|ƒ}nÀ|dkrst|ƒD ]\}}|| dk r^dnt|||  ƒ}|| d@ }| |¡ qRn—|dkr�t||	d	d
�D ]\}}|| d@ }| |¡ q~n{|dkrÂt|ƒD ])\}}|| dk r£dnt|||  ƒ}t|	| ƒ}||| d  d@ }| |¡ q—nH|dk�rt|ƒD ]6\}}|| dk rÚd}d}nt|||  ƒ}t|	||  ƒ}t|	| ƒ}t|||ƒ}|| d@ }| |¡ qËnt d|› �ƒ‚| 	|¡ |}	q-t
|ƒS )zxReverse the effect of the PNG predictor

    Documentation: http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html
    )rY   é   rZ   rY   ó    r   ri   éÿ   rC   F)Ústricté   é   zUnsupported predictor value: )r   Úlistr\   rD   Ú	enumerateÚintr]   ÚziprT   r^   r8   )rh   rU   rV   rW   rX   Úmsgra   r`   rb   Ú
line_aboverc   Úfilter_typeÚline_encodedrd   ÚjÚsub_xÚ	raw_x_bppÚraw_xÚup_xÚprior_xÚ	average_xÚpaeth_xÚprior_x_bppÚpaethr"   r"   r#   Úapply_png_predictor™   s^   

 ýþ	 ü
	ö
r�   )ri   r   r   ri   r   r   ÚMATRIX_IDENTITYc              
   C   sN   z| \}}}}t |ƒt |ƒt |ƒt |ƒfW S  ty& } ztdƒ|‚d }~ww )NzCould not parse rectangle)ÚfloatÚ
ValueErrorr   )r6   Úx0Úy0Úx1Úy1Úerrr"   r"   r#   Ú
parse_rect  s   
€ÿrŠ   Úm1Úm0c                 C   s‚   | \}}}}}}|\}}	}
}}}	 || |
|  |	| ||  || |
|  |	| ||  || |
|  | |	| ||  | fS r%   r"   )r‹   rŒ   Úa1Úb1Úc1Úd1Úe1Úf1Úa0Úb0Úc0Úd0Úe0Úf0r"   r"   r#   Úmult_matrix  s   úr™   ÚmÚvc           
      C   sH   | \}}}}}}|\}}	|||||| |	|  | || |	|  | fS )zùTranslates a matrix by (x, y) inside the projection.

    The matrix is changed so that its origin is at the specified point in its own
    coordinate system. Note that this is different from translating it within the
    original coordinate system.r"   ©
rš   r›   ÚaÚbÚcÚdÚeÚfÚxÚyr"   r"   r#   Útranslate_matrix  s   0r¥   c           
      C   s@   | \}}}}}}|\}}	|| ||	  | || ||	  | fS )zApplies a matrix to a point.r"   rœ   r"   r"   r#   Úapply_matrix_pt'  s   (r¦   Úrectc                 C   s˜   |\}}}}||f}||f}||f}||f}	t | |ƒ\}
}t | |ƒ\}}t | |ƒ\}}t | |	ƒ\}}t|
|||ƒt||||ƒt|
|||ƒt||||ƒfS )aŸ  Applies a matrix to a rectangle.

    Note that the result is not a rotated rectangle, but a rectangle with the same
    orientation that tightly fits the outside of the rotated content.

    :param m: The rotation matrix.
    :param rect: The rectangle coordinates (x0, y0, x1, y1), where x0 < x1 and y0 < y1.
    :returns a rectangle with the same orientation, but that would fit the rotated
        content.
    )r¦   ÚminÚmax)rš   r§   r…   r†   r‡   rˆ   Úleft_bottomÚright_bottomÚ	right_topÚleft_topÚleft1Úbottom1Úright1Úbottom2Úright2Útop1Úleft2Útop2r"   r"   r#   Úapply_matrix_rect.  s   ür¶   c           
      C   s8   | \}}}}}}|\}}	|| ||	  || ||	  fS )zCEquivalent to apply_matrix_pt(M, (p,q)) - apply_matrix_pt(M, (0,0))r"   )
rš   r›   r�   rž   rŸ   r    Ú_eÚ_frP   Úqr"   r"   r#   Úapply_matrix_normL  s    rº   r£   c                 C   s   t | ttfƒS r%   )r   rq   rƒ   ©r£   r"   r"   r#   ÚisnumberV  s   r¼   Ú_TÚobjsc                 c   s0   � t ƒ }| D ]}||v rq| |¡ |V  qdS )zEliminates duplicated elements.N)ÚsetÚadd)r¾   ÚdoneÚobjr"   r"   r#   Úuniq]  s   €
ürÃ   c                 C   s8   g }g }|D ]}| |ƒr|  |¡ q|  |¡ q||fS )z9Split a list into two classes according to the predicate.)r]   )rh   r¾   Útr¢   rÂ   r"   r"   r#   Úfsplitg  s   rÅ   Úv0Úv1r    c                 C   s   t t| ƒ| t|| ƒ| ƒS )zReturns a discrete range.)r\   rq   )rÆ   rÇ   r    r"   r"   r#   Údranges  s   rÈ   Úptsc                 C   s^   t t t  t  f}|\}}}}| D ]\}}t||ƒ}t||ƒ}t||ƒ}t||ƒ}q||||fS )z7Compute a minimal rectangle that covers all the points.)ÚINFr¨   r©   )rÉ   Úlimitr…   r†   r‡   rˆ   r£   r¤   r"   r"   r#   Ú	get_boundx  s   


rÌ   ÚseqÚfuncÚmaxobjc                 C   s4   d}| D ]}||ƒ}|du s||k r||}}q|S )z;Picks the object obj where func(obj) has the highest value.Nr"   )rÍ   rÎ   rÏ   ÚmaxscorerÂ   Úscorer"   r"   r#   Úpick„  s   
€rÒ   Ún.c                 c   s8   � g }|D ]}|  |¡ t|ƒ| krt|ƒV  g }qdS )z$Groups every n elements of the list.N)r]   rD   Útuple)rÓ   rÍ   Úrr£   r"   r"   r#   Úchoplist’  s   €

€ürÖ   Údefaultc                 C   s    t | ƒ}|s|S tj| ddd�S )z7Unpacks variable-length unsigned integers (big endian).ÚbigF)Ú	byteorderÚsigned)rD   rq   Ú
from_bytes)r?   r×   rE   r"   r"   r#   Únunpackœ  s   rÜ   Ú c                 c   s   � | ]}t |ƒV  qd S r%   )Úchr©Ú.0r£   r"   r"   r#   Ú	<genexpr>¥  s
   € ÿ
ÿrá   (   r   ri   rC   rm   rn   rB   é   rA   rY   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   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   é®   é¯   é°   é±   é²   é³   é´   éµ   é¶   é·   é¸   é¹   éº   é»   é¼   é½   é¾   é¿   éÀ   éÁ   éÂ   éÃ   éÄ   éÅ   éÆ   éÇ   éÈ   éÉ   éÊ   éË   éÌ   éÍ   éÎ   éÏ   éÐ   éÑ   éÒ   éÓ   éÔ   éÕ   éÖ   é×   éØ   éÙ   éÚ   éÛ   éÜ   éÝ   éÞ   éß   éà   éá   éâ   éã   éä   éå   éæ   éç   éè   éé   éê   éë   éì   éí   éî   éï   éð   éñ   éò   éó   éô   éõ   éö   é÷   éø   éù   éú   éû   éü   éý   éþ   rk   c                 C   s2   |   d¡rt| dd… ddƒS d dd„ | D ƒ¡S )	z+Decodes a PDFDocEncoding string to Unicode.s   þÿrC   Nzutf-16berH   rÝ   c                 s   s   � | ]}t | V  qd S r%   )ÚPDFDocEncoding)rà   rŸ   r"   r"   r#   rá   ±  ó   € zdecode_text.<locals>.<genexpr>)Ú
startswithr   Újoin)r?   r"   r"   r#   Údecode_text¬  s   
r±  c                 C   s   t | tƒrdS t| ƒS )z"Encodes a string for SGML/XML/HTMLrÝ   )r   r8   r   r»   r"   r"   r#   r=   ´  s   
r=   Úbboxc                 C   s.   | \}}}}|d›d|d›d|d›d|d›�S )Nz.3fú,r"   )r²  r…   r†   r‡   rˆ   r"   r"   r#   Úbbox2str»  s   "r´  c                 C   sF   | \}}}}}}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¢   r"   r"   r#   Ú
matrix2strÀ  s   6r¶  Úobj1r   Úobj2c                 C   sè   t | j|jƒt | j|jƒ}}t| j|jƒt| j|jƒ}}|| || }}|| j |j || j |j }}	|dk rj|	dk rj| j| j d | j| j d }
}|j|j d |j|j d }}|
| || 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 between boxes centers

             +------+..........+ (x1, y1)
             | obj1 |          :
             +------+www+------+
             :          | obj2 |
    (x0, y0) +..........+------+
    r   rC   )r¨   r…   r†   r©   r‡   rˆ   ÚwidthÚheight)r·  r¸  r…   r†   r‡   rˆ   ÚowÚohÚiwÚihÚxc1Úyc1Úxc2Úyc2r"   r"   r#   ÚvecBetweenBoxesÅ  s   """rÃ  ÚLTComponentT)Úboundc                   @   sÎ   e Zd ZdZddededdfdd„Zdefd	d
„Zde	e
 fdd„Zdefdd„Zdedefdd„Zdede	e fdd„Zdee
 ddfdd„Zde
ddfdd„Zde
ddfdd„Zdede	e
 fdd„ZdS )ÚPlanezäA 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  r²  Úgridsizer   Nc                 C   s2   g | _ tƒ | _i | _|| _|\| _| _| _| _d S r%   )	Ú_seqr¿   Ú_objsÚ_gridrÇ  r…   r†   r‡   rˆ   )r!   r²  rÇ  r"   r"   r#   r$   ê  s
   zPlane.__init__c                 C   s   dt | ƒ›d�S )Nz<Plane objs=ú>)ro   r&   r"   r"   r#   Ú__repr__ñ  s   zPlane.__repr__c                    s   ‡ fdd„ˆ j D ƒS )Nc                 3   s   � | ]
}|ˆ j v r|V  qd S r%   ©rÉ  )rà   rÂ   r&   r"   r#   rá   õ  s   € z!Plane.__iter__.<locals>.<genexpr>)rÈ  r&   r"   r&   r#   Ú__iter__ô  s   zPlane.__iter__c                 C   s
   t | jƒS r%   )rD   rÉ  r&   r"   r"   r#   Ú__len__÷  ó   
zPlane.__len__rÂ   c                 C   s
   || j v S r%   rÍ  )r!   rÂ   r"   r"   r#   Ú__contains__ú  rÐ  zPlane.__contains__c                 c   s    � |\}}}}|| j ks| j|ks|| jks| j|krd S t| j |ƒ}t| j|ƒ}t| j|ƒ}t| j|ƒ}t||| jƒD ]}t||| jƒD ]}||fV  qEq<d S r%   )r…   r‡   r†   rˆ   r©   r¨   rÈ   rÇ  )r!   r²  r…   r†   r‡   rˆ   Úgrid_yÚgrid_xr"   r"   r#   Ú	_getrangeý  s   €(ÿÿzPlane._getranger¾   c                 C   s   |D ]}|   |¡ qd S r%   )rÀ   )r!   r¾   rÂ   r"   r"   r#   r^   	  s   ÿzPlane.extendc                 C   sj   |   |j|j|j|jf¡D ]}|| jvrg }|| j|< n| j| }| |¡ q| j |¡ | j 	|¡ dS )zPlace an object.N)
rÔ  r…   r†   r‡   rˆ   rÊ  r]   rÈ  rÉ  rÀ   )r!   rÂ   ÚkrÕ   r"   r"   r#   rÀ     s   

z	Plane.addc              	   C   sl   |   |j|j|j|jf¡D ] }t tt¡� | j	|  
|¡ W d  ƒ n1 s(w   Y  q| j 
|¡ dS )zDisplace an object.N)rÔ  r…   r†   r‡   rˆ   Ú
contextlibÚsuppressÚKeyErrorr„   rÊ  ÚremoverÉ  )r!   rÂ   rÕ  r"   r"   r#   rÙ    s   ÿ€zPlane.removec           	      c   sˆ   � |\}}}}t ƒ }|  |¡D ]2}|| jvrq| j| D ]$}||v r#q| |¡ |j|ks<||jks<|j|ks<||jkr=q|V  qqdS )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Â   r"   r"   r#   Úfind   s   €

(úýz
Plane.find)r  )r-   r.   r/   r0   ÚRectrq   r$   r   rÌ  r   rÄ  rÎ  rÏ  r2   ÚboolrÑ  ÚPointrÔ  r   r^   rÀ   rÙ  rÚ  r"   r"   r"   r#   rÆ  â  s    rÆ  )re   r£   rŸ   rš   )r›   Úlr    Úvaluec                 C   sì   d|   k rdk sJ ‚ J ‚g }d}| dkrqt | dƒ\} }|dkr4| dt| ¡ | dt|d  ¡ n5|dkrI| dt| ¡ | dt| ¡ n |dk}|r[| dt| ¡ |d8 }| |radndt| | ¡ |d7 }| dksd |¡S )	z,Format a number as lowercase Roman numerals.r   i   rä   rã   ri   rn   rB   rÝ   )ÚdivmodÚinsertÚ
ROMAN_ONESÚROMAN_FIVESr°  )rß  ÚresultÚindexÚ	remainderÚ	over_fiver"   r"   r#   Úformat_int_roman4  s&   ò
rè  c                 C   sZ   | dksJ ‚g }| dkr$t | d ttjƒƒ\} }| tj| ¡ | dks| ¡  d |¡S )z5Format a number as lowercase letters a-z, aa-zz, etc.r   ri   rÝ   )rà  rD   ÚstringÚascii_lowercaser]   Úreverser°  )rß  rä  ræ  r"   r"   r#   Úformat_int_alphaM  s   þ
rì  Úpaddedc                    sf   t | ƒdkr| S | d ‰ ˆ dkr| S ˆ t | ƒkr| S t‡ fdd„| ˆ  d… D ƒƒr1| dˆ  … S | S )a1  Remove block padding as described in PDF 1.7 section 7.6.2:

    > For an original message length of M, the pad shall consist of 16 -
    (M mod 16) bytes whose value shall also be 16 - (M mod 16).
    > Note that the pad is present when M is evenly divisible by 16;
    it contains 16 bytes of 0x10.
    r   éÿÿÿÿrê   c                 3   s   � | ]}|ˆ kV  qd S r%   r"   rß   ©Úpaddingr"   r#   rá   l  r®  zunpad_aes.<locals>.<genexpr>N)rD   Úall)rí  r"   rï  r#   Ú	unpad_aesZ  s    rò  )rG   rH   r%   )r   )Sr0   r   r   ré  Úcollections.abcr   r   r   Úhtmlr   Útypingr   r   r   r	   r
   r   r   r   Úpdfminer.pdfexceptionsr   r   Úpdfminer.layoutr   rÖ  r9   rÊ   r   r   r   r1   r   r   r8   r5   r2   r>   rq   rF   rK   rT   rg   r�   rÔ   rƒ   rÝ  rÛ  ÚMatrixÚPathSegmentr‚   Ú__annotations__rŠ   r™   r¥   r¦   r¶   rº   rÜ  r¼   r½   rÃ   ro   rÅ   r\   rÈ   rÌ   rÒ   rÖ   rÜ   r°  r­  r±  r=   r´  r¶  rÃ  rÄ  rÆ  râ  rã  rè  rì  rò  r"   r"   r"   r#   Ú<module>   sÖ    (ýÿþý
üÿÿÿÿ
þÿþýüû
ú_ýÿ
4
ýÿþý
ü&

	þ  	N