o
    ¾ÙøiyC  ã                   @   s®  d Z ddlZddlZddlZddlZddl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mZmZmZmZmZ ddlmZ ddlmZmZ ddlmZmZ ddlmZmZmZm Z m!Z! dd	l"m#Z#m$Z$ e %e&¡Z'G d
d„ deƒZ(G dd„ dƒZ)G dd„ de)ƒZ*G dd„ de)ƒZ+G dd„ de+ƒZ,G dd„ de)ƒZ-G dd„ de-ƒZ.G dd„ de*ƒZ/G dd„ de-ƒZ0G dd„ de*ƒZ1G dd„ de-ƒZ2G d d!„ d!ƒZ3G d"d#„ d#e e ƒZ4dS )$zæAdobe character mapping (CMap) support.

CMaps provide the mapping between character codes and Unicode
code-points to character ids (CIDs).

More information is available on:

  https://github.com/adobe-type-tools/cmap-resources

é    N)ÚIterableÚIteratorÚMutableMapping)ÚAnyÚBinaryIOÚClassVarÚTextIOÚUnionÚcast)Úname2unicode)ÚPDFExceptionÚPDFTypeError)ÚPSEOFÚPSSyntaxError)ÚKWDÚ	PSKeywordÚ	PSLiteralÚPSStackParserÚliteral_name)ÚchoplistÚnunpackc                   @   ó   e Zd ZdS )Ú	CMapErrorN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú\/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/pdfminer/cmapdb.pyr   '   ó    r   c                   @   sš   e Zd ZdZdeddfdd„Zdefdd„Zd	ed
eddfdd„Z	dede
ddfdd„Zde
deeB e
B ddfdd„Zddd„Zdedee
 fdd„ZdS )ÚCMapBaser   ÚkwargsÚreturnNc                 K   s   |  ¡ | _d S ©N)ÚcopyÚattrs©Úselfr!   r   r   r   Ú__init__.   ó   zCMapBase.__init__c                 C   s   | j  dd¡dkS )NÚWModer   )r%   Úget©r'   r   r   r   Úis_vertical1   ó   zCMapBase.is_verticalÚkÚvc                 C   s   || j |< d S r#   )r%   )r'   r/   r0   r   r   r   Úset_attr4   r)   zCMapBase.set_attrÚcodeÚcidc                 C   ó   d S r#   r   )r'   r2   r3   r   r   r   Úadd_code2cid7   ó   zCMapBase.add_code2cidc                 C   r4   r#   r   )r'   r3   r2   r   r   r   Úadd_cid2unichr:   r6   zCMapBase.add_cid2unichrÚcmapc                 C   r4   r#   r   ©r'   r8   r   r   r   Úuse_cmap=   r6   zCMapBase.use_cmapc                 C   s   t ‚r#   )ÚNotImplementedError)r'   r2   r   r   r   Údecode@   r6   zCMapBase.decode)r8   r    r"   N)r   r   r   ÚdebugÚobjectr(   Úboolr-   Ústrr1   Úintr5   r   Úbytesr7   r:   r   r<   r   r   r   r   r    +   s    
r    c                	   @   s�   e Zd ZdeeB ddfdd„Zdefdd„Zdeddfd	d
„Zde	de
e fdd„Zejddfdedeeef dB deedf ddfdd„ZdS )ÚCMapr!   r"   Nc                 K   ó   t j| fi |¤Ž i | _d S r#   )r    r(   Úcode2cidr&   r   r   r   r(   E   ó   
zCMap.__init__c                 C   ó   d  | j d¡¡S )Nz
<CMap: {}>ÚCMapName©Úformatr%   r+   r,   r   r   r   Ú__repr__I   r.   zCMap.__repr__r8   c                    sV   t |tƒsJ tt|ƒƒƒ‚dtttf dtttf dd f‡ fdd„‰ ˆ | j|jƒ d S )NÚdstÚsrcr"   c                    s@   |  ¡ D ]\}}t|tƒri }|| |< ˆ ||ƒ q|| |< qd S r#   )ÚitemsÚ
isinstanceÚdict)rL   rM   r/   r0   Úd©r$   r   r   r$   O   s   

úzCMap.use_cmap.<locals>.copy)rO   rC   r@   ÚtyperP   rA   r>   rE   r9   r   rR   r   r:   L   s   *	zCMap.use_cmapr2   c                 c   sj   � t  d| |¡ | j}t|ƒD ]#}||v r/|| }t|tƒr%|V  | j}qttttf |ƒ}q| j}qd S )Nzdecode: %r, %r)	Úlogr=   rE   ÚiterrO   rA   r
   rP   r>   )r'   r2   rQ   ÚiÚxr   r   r   r<   Z   s   €
÷zCMap.decoder   ÚoutrE   .c                 C   s|   |d u r	| j }d}t| ¡ ƒD ],\}}g |¢|‘R }t|tƒr,| d|›d|› d�¡ q| j|tttt	f |ƒ|d� qd S )Nr   zcode z = cid Ú
)rX   rE   r2   )
rE   ÚsortedrN   rO   rA   ÚwriteÚdumpr
   rP   r>   )r'   rX   rE   r2   r/   r0   Úcr   r   r   r\   h   s   
 ûz	CMap.dump)r   r   r   r@   rA   r(   rK   r    r:   rB   r   r<   ÚsysÚstdoutr   rP   r>   Útupler\   r   r   r   r   rC   D   s"    üþý
üûrC   c                   @   ó&   e Zd Zdedeedf fdd„ZdS )ÚIdentityCMapr2   r"   .c                 C   s4   t |ƒd }|rt d|› d�|d |d … ¡S dS )Né   ú>ÚHr   ©ÚlenÚstructÚunpack©r'   r2   Únr   r   r   r<   z   s    zIdentityCMap.decodeN©r   r   r   rB   r`   rA   r<   r   r   r   r   rb   y   ó    rb   c                   @   ra   )ÚIdentityCMapByter2   r"   .c                 C   s,   t |ƒ}|rt d|› d�|d |… ¡S dS )Nrd   ÚBr   rf   rj   r   r   r   r<   ƒ   s   zIdentityCMapByte.decodeNrl   r   r   r   r   rn   ‚   rm   rn   c                   @   sZ   e Zd ZdeeB ddfdd„Zdefdd„Zdedefd	d
„Zej	fde
ddfdd„ZdS )Ú
UnicodeMapr!   r"   Nc                 K   rD   r#   )r    r(   Ú
cid2unichrr&   r   r   r   r(   Œ   rF   zUnicodeMap.__init__c                 C   rG   )Nz<UnicodeMap: {}>rH   rI   r,   r   r   r   rK   �   r.   zUnicodeMap.__repr__r3   c                 C   s   t  d| |¡ | j| S )Núget_unichr: %r, %r)rT   r=   rq   ©r'   r3   r   r   r   Ú
get_unichr“   s   
zUnicodeMap.get_unichrrX   c                 C   s4   t | j ¡ ƒD ]\}}| d|› d|›d�¡ qd S )Nzcid z = unicode rY   )rZ   rq   rN   r[   )r'   rX   r/   r0   r   r   r   r\   —   s   ÿzUnicodeMap.dump)r   r   r   r@   rA   r(   rK   rt   r^   r_   r   r\   r   r   r   r   rp   ‹   s
    rp   c                   @   s   e Zd Zdedefdd„ZdS )ÚIdentityUnicodeMapr3   r"   c                 C   s   t  d| |¡ t|ƒS )z+Interpret character id as unicode codepointrr   )rT   r=   Úchrrs   r   r   r   rt   �   s   zIdentityUnicodeMap.get_unichrN)r   r   r   rA   r@   rt   r   r   r   r   ru   œ   s    ru   c                   @   s"   e Zd Zdededdfdd„ZdS )ÚFileCMapr2   r3   r"   Nc                 C   s”   t |tƒr
t |tƒsJ tt|ƒt|ƒfƒƒ‚| j}|d d… D ]}t|ƒ}||v r5ttttf || ƒ}qi }|||< |}qt|d ƒ}|||< d S )Néÿÿÿÿ)	rO   r@   rA   rS   rE   Úordr
   rP   r>   )r'   r2   r3   rQ   r]   ÚciÚtr   r   r   r5   ¤   s   ÿzFileCMap.add_code2cid)r   r   r   r@   rA   r5   r   r   r   r   rw   £   s    rw   c                   @   s*   e Zd ZdedeeB eB ddfdd„ZdS )ÚFileUnicodeMapr3   r2   r"   Nc                 C   sž   t |tƒsJ tt|ƒƒƒ‚t |tƒr t |jtƒsJ ‚t|jƒ}nt |tƒr,| dd¡}nt |tƒr6t	|ƒ}nt
|ƒ‚|dkrH| j |¡dkrHd S || j|< d S )NzUTF-16BEÚignoreõ   Â ú )rO   rA   r@   rS   r   Únamer   rB   r<   rv   r   rq   r+   )r'   r3   r2   Úunichrr   r   r   r7   ¶   s   



zFileUnicodeMap.add_cid2unichr)r   r   r   rA   r   rB   r7   r   r   r   r   r|   µ   ó    "r|   c                       s*   e Zd Zdededdf‡ fdd„Z‡  ZS )ÚPyCMapr€   Úmoduler"   Nc                    s.   t ƒ j|d� |j| _|jrd| jd< d S d S ©N)rH   é   r*   )Úsuperr(   ÚCODE2CIDrE   ÚIS_VERTICALr%   )r'   r€   r„   ©Ú	__class__r   r   r(   Ë   s
   ÿzPyCMap.__init__)r   r   r   r@   r   r(   Ú__classcell__r   r   rŠ   r   rƒ   Ê   r‚   rƒ   c                       s.   e Zd Zdedededdf‡ fdd„Z‡  ZS )ÚPyUnicodeMapr€   r„   Úverticalr"   Nc                    s4   t ƒ j|d� |r|j| _d| jd< d S |j| _d S r…   )r‡   r(   ÚCID2UNICHR_Vrq   r%   ÚCID2UNICHR_H)r'   r€   r„   rŽ   rŠ   r   r   r(   Ó   s
   zPyUnicodeMap.__init__)r   r   r   r@   r   r?   r(   rŒ   r   r   rŠ   r   r�   Ò   s    &r�   c                   @   sÔ   e Zd ZU i Zeeeef  ed< i Z	eeee
e f  ed< G dd„ deƒZedeeeef ef deeeef ef fdd„ƒZed	edee fd
d„ƒZed	edefdd„ƒZedd	ededefdd„ƒZdS )ÚCMapDBÚ_cmap_cacheÚ_umap_cachec                   @   r   )zCMapDB.CMapNotFoundNr   r   r   r   r   ÚCMapNotFoundà   r   r”   rQ   r"   c              
   C   sr   t | tƒs| S i }|  ¡ D ])\}}zt|ƒ}W n ttfy$   |}Y nw t |tƒr2t |¡||< q|||< q|S )zERecursively convert string keys to integers in CODE2CID dictionaries.)rO   rP   rN   rA   Ú
ValueErrorÚ	TypeErrorr‘   Ú_convert_code2cid_keys)rQ   Úresultr/   r0   Únew_keyr   r   r   r—   ã   s   
ÿ

zCMapDB._convert_code2cid_keysr€   c           
   	   C   sV  |  dd¡}t d|¡ tj dd¡tj tj t	¡d¡f}|D ]…}|› d�}tj ||¡}tj 
|¡}tj 
|¡}| |tj ¡r¥tj |¡r¥t d|¡ tj|d	d
d��G}t |¡}	d|	v rmdd„ |	d  ¡ D ƒ|	d< d|	v r~dd„ |	d  ¡ D ƒ|	d< |	 d¡rŒ|  |	d ¡|	d< tt|ƒd|	ƒW  d   ƒ   S 1 s w   Y  q t |¡‚)Nú Ú zloading: %rÚ	CMAP_PATHz/usr/share/pdfminer/r8   z.json.gzzloading JSON: %rÚrtzutf-8)Úencodingr�   c                 S   ó   i | ]	\}}t |ƒ|“qS r   ©rA   ©Ú.0r/   r0   r   r   r   Ú
<dictcomp>  ó    ÿz%CMapDB._load_data.<locals>.<dictcomp>r�   c                 S   rŸ   r   r    r¡   r   r   r   r£     r¤   rˆ   r   )ÚreplacerT   r=   ÚosÚenvironr+   ÚpathÚjoinÚdirnameÚ__file__ÚrealpathÚ
startswithÚsepÚexistsÚgzipÚopenÚjsonÚloadrN   r—   rS   r@   r‘   r”   )
Úclsr€   Ú
cmap_pathsÚ	directoryÚjson_filenameÚ	json_pathÚresolved_json_pathÚresolved_directoryÚgzfileÚdatar   r   r   Ú
_load_dataø   s@   þ
ÿ
þ


ÿ

ÿ
$ò€
zCMapDB._load_datac                 C   sŠ   |dkr	t dd�S |dkrt dd�S |dkrtdd�S |dkr$tdd�S z| j| W S  ty3   Y nw |  |¡}t||ƒ | j|< }|S )Nz
Identity-Hr   )r*   z
Identity-Vr†   ÚOneByteIdentityHÚOneByteIdentityV)rb   rn   r’   ÚKeyErrorr½   rƒ   )r´   r€   r¼   r8   r   r   r   Úget_cmap  s    



ÿ
zCMapDB.get_cmapFrŽ   c                    s\   z| j ˆ | W S  ty   Y nw |  dˆ› �¡‰ ‡ ‡fdd„dD ƒ| j ˆ< | j ˆ | S )Nzto-unicode-c                    s   g | ]}t ˆˆ |ƒ‘qS r   )r�   )r¢   r0   ©r¼   r€   r   r   Ú
<listcomp>8  s    z*CMapDB.get_unicode_map.<locals>.<listcomp>)FT)r“   rÀ   r½   )r´   r€   rŽ   r   rÂ   r   Úget_unicode_map1  s   ÿzCMapDB.get_unicode_mapN)F)r   r   r   r’   r   rP   r@   rƒ   Ú__annotations__r“   Úlistr�   r   r”   Ústaticmethodr	   r>   rA   r—   ÚclassmethodrS   r   r½   r    rÁ   r?   rp   rÄ   r   r   r   r   r‘   Ü   s    
 ÿþ&r‘   c                   @   sÔ   e Zd Zdededdfdd„Zd dd„Zed	ƒZed
ƒZ	edƒZ
edƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZdededdfdd„Zdeddfdd„ZdS )!Ú
CMapParserr8   Úfpr"   Nc                 C   s$   t  | |¡ || _d| _tƒ | _d S )NT)r   r(   r8   Ú_in_cmapÚsetÚ	_warnings)r'   r8   rÊ   r   r   r   r(   =  s   zCMapParser.__init__c                 C   s8   t  t¡� |  ¡  W d   ƒ d S 1 sw   Y  d S r#   )Ú
contextlibÚsuppressr   Ú
nextobjectr,   r   r   r   ÚrunD  s   
"ÿzCMapParser.runs	   begincmaps   endcmaps   usecmaps   defs   begincodespaceranges   endcodespaceranges   begincidranges   endcidranges   begincidchars
   endcidchars   beginbfranges
   endbfranges   beginbfchars	   endbfchars   beginnotdefranges   endnotdefrangeÚposÚtokenc                 C   s.  || j u rd| _|  ¡  dS || ju rd| _dS | jsdS || ju rDz|  d¡\\}}\}}| j t|ƒ|¡ W dS  t	yC   Y dS w || j
u rtz|  d¡\\}}| j t t|ƒ¡¡ W dS  t	yi   Y dS  tjys   Y dS w || ju r|  ¡  dS || ju rŠ|  ¡  dS || ju r•|  ¡  dS || ju �r2dd„ |  ¡ D ƒ}td|ƒD ]†\}}	}
t|tƒs¹|  d	¡ q©t|	tƒsÄ|  d
¡ q©t|
tƒsÏ|  d¡ q©t|ƒt|	ƒkrÝ|  d¡ q©|dd… }|	dd… }||kró|  d¡ q©|dd… }|	dd… }t|ƒ}t|ƒ}t|ƒ}t|| d ƒD ]}|t d|| ¡| d…  }| j |
| |¡ �qq©dS || ju �r>|  ¡  dS || ju �rmdd„ |  ¡ D ƒ}td|ƒD ]\}
}t|tƒ�rit|
tƒ�ri| j |
|¡ �qRdS || j u �ry|  ¡  dS || j!u �r9dd„ |  ¡ D ƒ}td|ƒD ]©\}}	}t|tƒ�sŸ|  d¡ �q�t|	tƒ�s¬|  d¡ �q�t|ƒt|	ƒk�r¼|  d¡ �q�t|ƒ}t|	ƒ}t|t"ƒ�rõt|ƒ|| d k�rÚ|  d¡ t#t||d ƒ|dd�D ]\}
}| j |
|¡ �qæ�q�t|tƒ�sýJ ‚|dd… }t|ƒ}|dd… }t|ƒ}t|| d ƒD ]}|t d|| ¡| d…  }| j || |¡ �q�q�dS || j$u �rE|  ¡  dS || j%u �rvdd„ |  ¡ D ƒ}td|ƒD ]\}
}t|
tƒ�rrt|tƒ�rr| j t|
ƒ|¡ �qYdS || j&u �r‚|  ¡  dS || j'u �rŽ|  ¡  dS |  (||f¡ dS )z[ToUnicode CMaps

        See Section 5.9.2 - ToUnicode CMaps of the PDF Reference.
        TNFrc   r†   c                 S   ó   g | ]\}}|‘qS r   r   ©r¢   Ú__Úobjr   r   r   rÃ   ˆ  ó    z)CMapParser.do_keyword.<locals>.<listcomp>é   z0The start object of begincidrange is not a byte.z.The end object of begincidrange is not a byte.z.The cid object of begincidrange is not a byte.z?The start and end byte of begincidrange have different lengths.éüÿÿÿzGThe prefix of the start and end byte of begincidrange are not the same.z>Lc                 S   rÔ   r   r   rÕ   r   r   r   rÃ   °  rØ   c                 S   rÔ   r   r   rÕ   r   r   r   rÃ   »  rØ   zThe start object is not a byte.zThe end object is not a byte.z.The start and end byte have different lengths.zPThe difference between the start and end offsets does not match the code length.)Ústrictc                 S   rÔ   r   r   rÕ   r   r   r   rÃ   â  rØ   ))ÚKEYWORD_BEGINCMAPrË   ÚpopallÚKEYWORD_ENDCMAPÚKEYWORD_DEFÚpopr8   r1   r   r   ÚKEYWORD_USECMAPr:   r‘   rÁ   r”   ÚKEYWORD_BEGINCODESPACERANGEÚKEYWORD_ENDCODESPACERANGEÚKEYWORD_BEGINCIDRANGEÚKEYWORD_ENDCIDRANGEr   rO   rB   Ú
_warn_oncerA   rg   r   Úrangerh   Úpackr7   ÚKEYWORD_BEGINCIDCHARÚKEYWORD_ENDCIDCHARÚKEYWORD_BEGINBFRANGEÚKEYWORD_ENDBFRANGErÆ   ÚzipÚKEYWORD_BEGINBFCHARÚKEYWORD_ENDBFCHARÚKEYWORD_BEGINNOTDEFRANGEÚKEYWORD_ENDNOTDEFRANGEÚpush)r'   rÒ   rÓ   Ú_r/   r0   ÚcmapnameÚobjsÚ
start_byteÚend_byter3   Ústart_prefixÚ
end_prefixÚsvarÚevarÚstartÚendÚvlenrV   rW   r2   Úunicode_valueÚvarÚbaseÚprefixr   r   r   Ú
do_keywordY  s  


þþ
üþþ








ÿÿþ€


ÿÿýþ€zCMapParser.do_keywordÚmsgc                 C   s0   || j vr| j  |¡ d}t || ¡ dS dS )z!Warn once for each unique messagez‡Ignoring (part of) ToUnicode map because the PDF data does not conform to the format. This could result in (cid) values in the output. N)rÍ   ÚaddrT   Úwarning)r'   r  Úbase_msgr   r   r   ræ   ò  s   
ÿùzCMapParser._warn_once)r"   N)r   r   r   r    r   r(   rÑ   r   rÜ   rÞ   rá   rß   râ   rã   rä   rå   ré   rê   rë   rì   rî   rï   rð   rñ   rA   r   r  r@   ræ   r   r   r   r   rÉ   <  s,    
 rÉ   )5Ú__doc__rÎ   r°   r²   Úloggingr¦   Úos.pathrh   r^   Úcollections.abcr   r   r   Útypingr   r   r   r   r	   r
   Úpdfminer.encodingdbr   Úpdfminer.pdfexceptionsr   r   Úpdfminer.psexceptionsr   r   Úpdfminer.psparserr   r   r   r   r   Úpdfminer.utilsr   r   Ú	getLoggerr   rT   r   r    rC   rb   rn   rp   ru   rw   r|   rƒ   r�   r‘   rÉ   r   r   r   r   Ú<module>   s<     	
5		
`