o
     ZhH                     @   s^  U d dl Z 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 ddlmZmZmZmZ d	ed
ededeeee	eeeef f eeef ef fddZd
ededeeee	eeeef f eeef f fddZddeeddi fZeeee	eeeef f eeef f ed< i ddddddddddddd dd!dd"d#d$d#d%d&d'd&d(d&d)d&d*dd+dd,d#d-d#iZ eeef ed.< i d/d0d1d0d2d0d3d0d4d5d6d5d7d5d8d5d9d:d;d:d<d:d=d:d>d?d@d?dAd?dBd?dCd?dDd5iZ!eeef edE< dedee	eeeef f eeef f fdFdGZ"dede	eeeef f fdHdIZ#dedeeeef ee f fdJdKZ$dLedMe	eeeef f dNeeef defdOdPZ%dede&fdQdRZ'dSe&dTe(dUe(dVe	deeef f dNeeef dWee dee(e(e	deeef f f fdXdYZ)dSe&dNeeef dWee dVe	deeef f de	deeef f f
dZd[Z*dSe&dNeeef dWee ddfd\d]Z+ded^edeeef fd_d`Z,daeeef dbedefdcddZ-daeeef deedefdfdgZ.dedNeeef dWee deeeef ee f fdhdiZ/dS )j    N)	unhexlify)ceil)AnyDictListTupleUnioncast   )adobe_glyphscharset_encoding)logger_errorlogger_warning)DecodedStreamObjectDictionaryObjectStreamObjectis_null_or_none	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   B/var/www/html/lang_env/lib/python3.10/site-packages/pypdf/_cmap.pybuild_char_map   s
   r   r   c                 C   sR   t t|d  }t|\}}td||}t|| d }t||d }||||fS )ak  
    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	   str
get_objectget_encodingget_actual_str_keybuild_font_width_mapcompute_space_width)r   r   Z	font_typeencodingmap_dictZspace_key_charfont_width_mapZhalf_space_widthr   r   r   r   (   s   r   Unknowni'     u   �unknown_char_mapz/Identity-H	utf-16-bez/Identity-Vz	/GB-EUC-Hgbkz	/GB-EUC-Vz/GBpc-EUC-Hgb2312z/GBpc-EUC-Vz
/GBK-EUC-Hz
/GBK-EUC-Vz/GBK2K-Hgb18030z/GBK2K-Vz
/ETen-B5-Hcp950z
/ETen-B5-Vz/ETenms-B5-Hz/ETenms-B5-Vz/UniCNS-UTF16-Hz/UniCNS-UTF16-Vz/UniGB-UTF16-Hz/UniGB-UTF16-V_predefined_cmapz/CourieriX  z/Courier-Boldz/Courier-BoldObliquez/Courier-Obliquez
/Helveticai  z/Helvetica-Boldz/Helvetica-BoldObliquez/Helvetica-Obliquez/Helvetica-Narrow   z/Helvetica-NarrowBoldz/Helvetica-NarrowBoldObliquez/Helvetica-NarrowObliquez/Times-Roman   z/Times-Boldz/Times-BoldItalicz/Times-Italicz/Symbolz/ZapfDingbats_default_fonts_space_widthc                 C   sD   t | }t| \}}t|tr|D ]}|dkrt|||< q||fS )N   )_parse_encoding_parse_to_unicode
isinstancedictchr)r   r%   r&   	int_entryxr   r   r   r!   ~   s   
r!   c              	   C   s  g }d| vr)d| v r%t t| d tv r%tttdtt t| d  }|S d}|S | d  }t|trjz!|tv r@t|  }n|t	v rIt	| }nd|v rPd}nt
dW nI t
yi   td| d	t |}Y n6w t|trd
|v rztt t|d
   }W n t
y   td| d	t td  }Y nw td  }d|v rd}t tt t|d D ]*}t|tr|}qz|t|k rt| ||< W n t
y   |||< Y nw |d7 }qt|trtttd|}|S )Nz	/Encoding	/BaseFontr)   charmapz-UCS2-r+   z	not foundzAdvanced encoding z not implemented yetz/BaseEncodingz/StandardEncodingz/Differencesr   r
   )r	   r   r   r8   zipranger    r7   copyr0   	Exceptionr   __name__r   intlenr   list)r   r%   encr;   or   r   r   r5      sf   





r5   c                 C   s~   i }g }d| vr|  dddkrt| ||S i g fS d}d}d }t| }|dD ]}t|d|||||\}}}q)||fS )N
/ToUnicoder    z/Type1F   
s    	)get_type1_alternative
prepare_cmsplitprocess_cm_linestrip)r   r&   r:   
process_rgprocess_charmultiline_rgcmliner   r   r   r6      s*   	r6   
value_charr%   r&   c                    sH   i }t |tr fdd| D }n fdd| D }|  S )Nc                    s"   i | ]\}}| kr|t |qS r   )r9   .0keyvaluerV   r   r   
<dictcomp>   s   " z&get_actual_str_key.<locals>.<dictcomp>c                    s   i | ]\}}| kr||qS r   r   rW   r[   r   r   r\      s    )r7   r8   itemsrK   )rV   r%   r&   Zkey_dictr   r[   r   r"      s
   
r"   c                 C   s  | d }t |trtt| d  }nd}t |tr| }| ddddddd	d
dddd}|	d}t
t|D ]0}|| d}|dkru|dkrYd}n|| d | dd}|d || |d d   ||< qEd|dddddd}|S )NrH   s,   beginbfrange
<0000> <0001> <0000>
endbfrange   beginbfchars   
beginbfchar
	   endbfchars   
endbfchar
   beginbfranges   
beginbfrange

   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
   <   >r      .        r
      [s    [    ]s    ]
    rJ   )r7   r   r	   r   get_datar   encoderP   replacerN   r?   rD   findjoin)r   ZturT   Zllijcontentr   r   r   rM      s:   


	 rM   rU   rQ   rR   rS   r:   c              
   C   s   | dks
| d dkr|||fS |  dd} d| v rd}nGd| v r#d	}n@d
| v r*d}n9d| v r1d	}n2|r[z	t| |||}W n& tjyZ } ztd| d| t W Y d }~nd }~ww |rct| || |||fS )Nrf   r   %      	re   r`   Tra   Fr^   r_   zSkipping broken line z: )rl   parse_bfrangebinasciiErrorr   rB   parse_bfchar)rU   rQ   rR   rS   r&   r:   errorr   r   r   rO     s*   
"
rO   c                 C   s
  dd |  dD }d}|d urQd|d d  }|d }|d	 }|D ]-}	|	d
kr,d} n$t|	dd|t|| |d d	krBdndd< || |d	7 }q"nt|d d}t|d	 d}tt|d t|d	 }
t|
d |d< d|d d  }|d dkr|dd  D ]-}	|	d
krd} n$t|	dd|t|| |d d	krdndd< || |d	7 }qnEt|d d}dtdt|d  }d}||krt|| dd|t|| |d d	krdndd< || |d	7 }|d	7 }||ks|rd S ||fS )Nc                 S      g | ]}|r|qS r   r   rX   r;   r   r   r   
<listcomp>A      z!parse_bfrange.<locals>.<listcomp>re   Fs   %%0%dX   r   r
   rh   Tr+   surrogatepassr=      rg         )rN   r   decodeappendrC   maxrD   r   )rU   r&   r:   rS   lstZclosure_foundfmtabsqZnbicZfmt2r   r   r   rt   ;  sp   





rt   c                 C   s   dd |  dD }t|d d |d< t|dkrbd}|d d	kr6t|d t|d d
k r2dndd}||t|d |d dkrFdndd< |t|d d |dd  }t|dksd S d S )Nc                 S   ry   r   r   rz   r   r   r   r{   x  r|   z parse_bfchar.<locals>.<listcomp>re   r   r~   r}   r
   rI   rd   r   r=   r+   r   r   )rN   rD   r   r   r   rC   )rU   r&   r:   r   Zmap_tor   r   r   rw   w  s"   rw   default_font_widthc              
   C   s  i }d}d}zt tt| d   d }W n	 ty   Y nw d| v r| d d  }d|v r;tt|d  |d< n||d< d|v rJ|d  }ng }t|dkrt|d tr]|d n|d  }|d  }t|tr|}|d	  }t|ttfst	d
| dt
 |dd  }qLt||d D ]}	||t|	< q|dd  }n-t|tr|}	|D ]}
|
 }||t|	< |	d7 }	q|d	d  }nt	d|d   t
 nt|dksRn}d| v rU| d  }d| v rdtt| d v r| d d  |d< n$d}d}|D ]}| }|dkr||7 }|d7 }q|td| |d< tt| d }tt| d }t||d D ] }	z||	|   }||t|	< W q4 ttfyT   Y q4w t|drf|rb|nd|d< |S )Nr   r<   r   z/DescendantFontsz/DWdefaultz/Wr
   r~   z&Expected numeric value for width, got z. Ignoring it.r   zunknown widths : 
z/Widths/FontDescriptorz/MissingWidthz
/FirstCharz	/LastChar        )r3   r	   r   r    KeyErrorfloatrD   r7   rC   r   rB   r?   r9   rE   __repr__r   r   
IndexErrorr   rK   )r   r   r'   stenZft1wsecondwidthZc_codeZwwmZcptxxr   r   r   r#     s   "




r#   r'   
space_charc              	   C   sD   z| | }|dkrt dW |S  tt fy!   | d d }Y |S w )Nr   z
Zero widthr   r   )
ValueErrorr   )r'   r   Zsp_widthr   r   r   r$     s   
r$   charc                 C   s0   d}z| | }W |S  t y   | d }Y |S w )Nr   r   )r   )r'   r   
char_widthr   r   r   compute_font_width  s   
r   c           
      C   sp  d| vr||fS t t| d d}t|r||fS |d us"J d|  }|dd }|dd }|dd	d	}|D ]r}|d
rdd |dD }t	|dkr_|d dkr_qAzt
|d }W n	 typ   Y qAw z
t|d   }	W n, ty   |d drztt
|d dd  d}	W n ty   Y Y qAw Y qAY nw |	|t|< || qA||fS )Nr   z	/FontFileZmypys   eexec
r   s	   /Encodingr
   ri   rJ   s   dupc                 S   s   g | ]}|d kr|qS )rf   r   )rX   _wr   r   r   r{     s    z&_type1_alternative.<locals>.<listcomp>re   r   s   putr~   s   /unir   r   )r	   r   rK   r   r    rj   rN   rl   
startswithrD   rC   r   r   r   r   r9   r   )
r   r&   r:   Zft_desctxtlinesZliwordsro   vr   r   r   rL     sH   

rL   )0ru   r   mathr   typingr   r   r   r   r   r	   _codecsr   r   Z_utilsr   r   Zgenericr   r   r   r   r   r   rC   r   r   r8   fromkeysr?   r*   __annotations__r0   r3   r!   r5   r6   r"   bytesrM   boolrO   rt   rw   r#   r$   r   rL   r   r   r   r   <module>   sp  
  	(
&
"0	
	
"

9
!

)



&<

R




