a
    còfÚF  ã                   @   s
  U 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
 ddlmZmZ ddlmZmZmZ ddlmZmZmZmZmZ eeeeeee	eeeef f eeef ef dœd	d
„Zeeeeee	eeeef f eeef f dœdd„Zddeeedƒdgd ƒƒi fZ eeee	eeeef f eeef f e!d< dddddddddddddddddœZ"eeef e!d< dddddddddddddddddddœZ#eeef e!d< eeee	eeeef f ef d œd!d"„Z$eeeeeef eee f d œd#d$„Z%ee&d%œd&d'„Z'e&e(e(e	d(eeef f eeef ee ee(e(e	d(eeef f f d)œd*d+„Z)e&eeef ee e	d(eeef f e	d(eeef f d,œd-d.„Z*e&eeef ee d(d/œd0d1„Z+eeeed2œd3d4„Z,eeeef eee eeeef eee f d5œd6d7„Z-d(S )8é    )Ú	unhexlify)Úceil)ÚAnyÚDictÚListÚTupleÚUnionÚcasté   )Úadobe_glyphsÚcharset_encoding)Úb_Úlogger_errorÚlogger_warning)ÚDecodedStreamObjectÚDictionaryObjectÚIndirectObjectÚ
NullObjectÚStreamObject)Ú	font_nameÚspace_widthÚobjÚreturnc                 C   s0   |d d |  }t ||ƒ\}}}}|||||fS )až  
    Determine information about a font.

    Args:
        font_name: font name as a string
        space_width: default space width if no data is found.
        obj: XObject or Page where you can find a /Resource dictionary

    Returns:
        Font sub-type, space_width criteria (50% of width), encoding, map character-map, font-dictionary.
        The font-dictionary itself is suitable for the curious.
    z
/Resourcesz/Font)Úbuild_char_map_from_dict)r   r   r   ÚftZfont_subtypeZfont_halfspaceZfont_encodingZfont_map© r   úH/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pypdf/_cmap.pyÚbuild_char_map   s
    ÿr   )r   r   r   c           
      C   s  t t|d ƒ}d}t||ƒ\}}t||ƒ\}}}|dkrXd|vsL|d dkrRd}q€d}n(t|tƒr€|D ]}|dkrft|ƒ||< qfztt t|d	 ƒ } W n ty¨   Y n0 t|tƒrúz| 	d¡d
 }W qþ työ   | 	d¡}|d
 d|d   }Y qþ0 n|}t
||| ƒ}	|t|	d ƒ||fS )aj  
    Determine information about a font.

    Args:
        space_width: default space with if no data found
             (normally half the width of a character).
        ft: Font Dictionary

    Returns:
        Font sub-type, space_width criteria(50% of width), encoding, map character-map.
        The font-dictionary itself is suitable for the curious.
    ú/Subtypeé    Ú éÿÿÿÿr
   Úcharmapú	utf-16-beéÿ   ú	/BaseFontr   é   é   )r	   ÚstrÚparse_encodingÚparse_to_unicodeÚ
isinstanceÚdictÚchrÚ_default_fonts_space_widthÚ	ExceptionÚencodeÚcompute_space_widthÚfloat)
r   r   Z	font_typeÚ
space_codeÚencodingÚmap_dictÚ	int_entryÚxÚspÚsp_widthr   r   r   r   '   s:    



ûr   ÚUnknowni'  r&   u   ï¿½Úunknown_char_mapr#   ÚgbkÚgb2312Úgb18030Úcp950)z/Identity-Hz/Identity-Vz	/GB-EUC-Hz	/GB-EUC-Vz/GBpc-EUC-Hz/GBpc-EUC-Vz
/GBK-EUC-Hz
/GBK-EUC-Vz/GBK2K-Hz/GBK2K-Vz
/ETen-B5-Hz
/ETen-B5-Vz/ETenms-B5-Hz/ETenms-B5-Vz/UniCNS-UTF16-Hz/UniCNS-UTF16-VÚ_predefined_cmapiX  i  éä   éú   )z/Courierz/Courier-Boldz/Courier-BoldObliquez/Courier-Obliquez
/Helveticaz/Helvetica-Boldz/Helvetica-BoldObliquez/Helvetica-Obliquez/Helvetica-Narrowz/Helvetica-NarrowBoldz/Helvetica-NarrowBoldObliquez/Helvetica-NarrowObliquez/Times-Romanz/Times-Boldz/Times-BoldItalicz/Times-Italicz/Symbolz/ZapfDingbatsr.   )r   r3   r   c              	   C   sB  g }d| vr¢zXd| v rJt t| d ƒtv rJtttdƒtt t| d ƒ ƒƒ}nd}|tt t| d ƒ fW S  ty    t t| d ƒdkr�d|f Y S d|f Y S Y n0 | d  ¡ }t	|tƒ�r*zB|tv rÒt|  
¡ }n(|tv rät| }nd|v ròd	}ntd
ƒ‚W n* t�y&   td|› d�tƒ |}Y n0 nrt	|tƒ�r�d|v �r�ztt t|d ƒ  
¡ }W n2 t�yŒ   td|› d�tƒ td  
¡ }Y n0 ntd  
¡ }d|v �rd}t tt t|ƒd ƒD ]\}t	|tƒ�rÔ|}nDzt| ||< W n* t�y   |||< |dk�r
|}Y n0 |d7 }�q¾t	|tƒ�r:tttdƒ|ƒƒ}||fS )Nz	/Encodingr%   r&   r"   r   ú/Type1r    z-UCS2-r#   z	not foundzAdvanced encoding z not implemented yetz/BaseEncodingz/StandardCodingz/Differencesr   ú r
   )r	   r(   r   r,   ÚzipÚranger.   r/   Ú
get_objectr+   Úcopyr@   r   Ú__name__r   Úintr   Úlist)r   r3   r4   Úencr7   Úor   r   r   r)   œ   sf    ÿ

þ


r)   c                 C   s¢   i }g }d| vr8|   dd¡dkr.t| |||ƒS i |g fS d}d}d }t| ƒ}| d¡D ]"}t| d¡|||||ƒ\}}}qV| ¡ D ]\}	}
|
dkr‚|	}q‚|||fS )	Nú
/ToUnicoder   r    rC   Fó   
s    	rD   )ÚgetÚtype1_alternativeÚ
prepare_cmÚsplitÚprocess_cm_lineÚstripÚitems)r   r3   r5   r6   Ú
process_rgÚprocess_charÚmultiline_rgÚcmÚlineÚaÚvaluer   r   r   r*   Ü   s0    
þú	r*   )r   r   c                 C   s*  | d }t |tƒr*ttt| d ƒ ¡ ƒ}nt |tƒrB| d¡rBd}t |tƒrT| ¡ }| 	¡  
dd¡ 
dd¡ 
dd	¡ 
d
d¡ 
dd¡ 
dd¡}| d¡}tt|ƒƒD ]`}||  d¡}|dkr¢|dkrÊd}n|| d |…  
dd¡}|d || |d d …  ||< q¢d |¡ 
dd¡ 
dd¡ 
dd¡}|S )NrN   z	/Identitys,   beginbfrange
<0000> <0001> <0000>
endbfrangeó   beginbfchars   
beginbfchar
ó	   endbfchars   
endbfchar
ó   beginbfranges   
beginbfrange
ó
   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
ó   <ó   >r   ó   .ó    ó    r
   ó   [s    [ ó   ]s    ]
 ó   rO   )r+   r   r   r	   r   Úget_datar(   Ú
startswithr0   rU   ÚreplacerS   rF   ÚlenÚfindÚjoin)r   ZturZ   ÚllÚiÚjÚcontentr   r   r   rR     sL    

ÿþýüûúÿ	
"
ÿþýÿrR   N)r[   rW   rX   rY   r5   r6   r   c                 C   s�   | dks| d dkr|||fS |   dd¡} d| v r8d}nNd| v rFd	}n@d
| v rTd}n2d| v rbd	}n$|rvt| |||ƒ}n|r†t| ||ƒ |||fS )Nrf   r   é%   ó   	re   r`   Tra   Fr^   r_   )rl   Úparse_bfrangeÚparse_bfchar)r[   rW   rX   rY   r5   r6   r   r   r   rT   *  s     
rT   )r[   r5   r6   rY   r   c                 C   s  dd„ |   d¡D ƒ}d}|d ur¬d|d d  }|d }|d	 }|dd … D ]Z}	|	d
kr`d} q¨t|	ƒ dd¡|t|| ƒ |d d	krŒdndd¡< | |¡ |d	7 }qL�n`t|d dƒ}t|d	 dƒ}tt|d ƒt|d	 ƒƒ}
t|
d ƒ|d< d|d d  }|d dk�r‚|dd … D ]b}	|	d
k�r4d} �qt|	ƒ dd¡|t|| ƒ |d d	k�rbdndd¡< | |¡ |d	7 }�qnŠt|d dƒ}dtdt|d ƒƒ }d}||k�rt|| ƒ dd¡|t|| ƒ |d d	k�rædndd¡< | |¡ |d	7 }|d	7 }�qª|�rd S ||fS )Nc                 S   s   g | ]}|r|‘qS r   r   ©Ú.0r7   r   r   r   Ú
<listcomp>J  rf   z!parse_bfrange.<locals>.<listcomp>re   Fs   %%0%dXr!   r'   r   r
   rh   Tr#   Úsurrogatepassr"   é   rg   é   é   )rS   r   ÚdecodeÚappendrJ   Úmaxrm   r   )r[   r5   r6   rY   ÚlstZclosure_foundÚfmtr\   ÚbÚsqZnbiÚcZfmt2r   r   r   rv   D  sj    ûþÿ

ûþÿ

ûþÿ
rv   )r[   r5   r6   r   c                 C   sº   dd„ |   d¡D ƒ}t|d ƒd |d< t|ƒdkr¶d}|d d	krlt|d ƒ t|d ƒd
k rddndd¡}||t|d ƒ |d dkrŒdndd¡< | t|d dƒ¡ |dd … }q(d S )Nc                 S   s   g | ]}|r|‘qS r   r   rx   r   r   r   rz   �  rf   z parse_bfchar.<locals>.<listcomp>re   r   r'   r!   r
   r    rd   r~   r"   r#   r{   r|   )rS   rm   r   r   r€   rJ   )r[   r5   r6   r‚   Zmap_tor   r   r   rw   €  s     ÿüÿÿrw   )r   r3   r   r   c                 C   sš  |d }g }i }d}d| v �rj| d d   ¡ }ztt|d ƒ|d< W n ty^   d|d< Y n0 d|v rvt|d ƒ}ng }t|ƒdk�r:t|d tƒrž|d n
|d   ¡ }|d   ¡ }t|tƒrêt||ƒD ]}	|d	 ||	< qÊ|d
d … }qzt|tƒ�r|D ]}
|
||< |d7 }qú|d	d … }qzt	d|d  
¡  tƒ �q:qzz|| }W n  t�yf   |d d }Y n0 núd| v �rdt| d ƒ}zbtt| d ƒ}tt| d ƒ}||k�s²||k �rºtdƒ‚|||  dk�rÔtdƒ‚|||  }W n€ t�yb   d| v �rdtt| d ƒv �r| d d }n@d}d}|D ] }	|	dk�r*||	7 }|d7 }�q*|td|ƒ d	 }Y n0 t|tƒ�r–|  ¡ }|d u �sŽt|tƒ�r’dS |S |S )Ng       @r   z/DescendantFontsz/DWr!   g     @�@z/Wr
   r'   r}   zunknown widths : 
z/Widthsz
/FirstCharz	/LastCharzNot in rangez
null widthú/FontDescriptorz/MissingWidthg        )rG   r	   r2   r/   rK   rm   r+   rJ   rF   r   Ú__repr__rI   r   r�   r   r   )r   r3   r   r9   ÚwZw1ÚstZft1Úsecondr7   ÚyÚenÚmZcptr   r   r   r   r1   “  s~    
"

þ
ÿ

ÿ
r1   )r   r5   r3   r6   r   c                 C   sŽ  d| vr|||fS t t| d ƒ d¡}|d u r8|||fS | ¡  ¡ }| d¡d }| d¡d }| dd¡ d¡}|D �]
}| d	¡rvd
d„ | d¡D ƒ}t|ƒdkr´|d dkr´qvzt	|d ƒ}	W n t
yÚ   Y qvY n0 zt|d  ¡  }
W nd t�yT   |d  d¡�rLztt	|d dd … dƒƒ}
W n t
�yH   Y Y qvY n0 nY qvY n0 |d  ¡ dk�rl|	}|
|t|	ƒ< | |	¡ qv|||fS )Nr‡   z	/FontFiles   eexec
r   s	   /Encodingr
   ri   rO   s   dupc                 S   s   g | ]}|d kr|‘qS )rf   r   )ry   Ú_wr   r   r   rz   ó  rf   z%type1_alternative.<locals>.<listcomp>re   r}   s   putr'   s   /unir~   r|   )r	   r   rP   rG   rj   rS   rl   rk   rm   rJ   Ú
ValueErrorr   r   ÚKeyErrorr-   r€   )r   r5   r3   r6   Zft_descÚtxtÚlinesÚliÚwordsrq   Úvr   r   r   rQ   â  s@    





rQ   ).Úbinasciir   Úmathr   Útypingr   r   r   r   r   r	   Ú_codecsr   r   Ú_utilsr   r   r   Zgenericr   r   r   r   r   r(   r2   rJ   r   r   r,   rE   rF   r;   Ú__annotations__r@   r.   r)   r*   ÚbytesrR   ÚboolrT   rv   rw   r1   rQ   r   r   r   r   Ú<module>   s¦    (þ&þCü0	ðîþAþ%*
ù
û< þP
û