o
    uhI                     @   sf  U d dl Z d dl mZ d dl mZ d dlmZ d dl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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 d0d1d2d1d3d1d4d1d5d6d7d6d8d6d9d6d:d;d<d;d=d;d>d;d?d@dAd@dBd@dCd@dDd@dEd6iZ#eeef e!dF< dedeeeeeef f eeef f fdGdHZ$dedeeeeef f fdIdJZ%dedeeeef e&e f fdKdLZ'dMedNeeeeef f dOeeef defdPdQZ(dede)fdRdSZ*dTe)dUe+dVe+dWedeeef f dOeeef dXe&e dee+e+edeeef f f fdYdZZ,dTe)dOeeef dXe&e dWedeeef f dedeeef f f
d[d\Z-dTe)dOeeef dXe&e ddfd]d^Z.ded_edeeef fd`daZ/dbeeef dcedefdddeZ0dbeeef dfedefdgdhZ1dedOeeef dXe&e deeeef e&e f fdidjZ2dS )k    N)Error)	unhexlify)ceil)AnyUnioncast   )adobe_glyphscharset_encoding)logger_errorlogger_warning)ArrayObjectDecodedStreamObjectDictionaryObject
NullObject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   ftfont_subtypefont_halfspacefont_encodingfont_map r   A/var/www/html/bot/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   	font_typeencodingmap_dictspace_key_charfont_width_map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 t ttttf | d 	 }t
|trrz!|tv rHt|  }n|tv rQt| }nd|v rXd}ntdW nI tyq   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  }t
|trd|v rd}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	/BaseFontr0   charmapz-UCS2-r2   z	not foundzAdvanced encoding z not implemented yetz/BaseEncodingz/StandardEncodingz/Differencesr   r   )r   r#   r
   r?   zipranger   r   r   r$   r>   copyr7   	Exceptionr   __name__intlenr	   list)r   r*   encrB   or   r   r   r<      sj   





r<   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+   rA   
process_rgprocess_charmultiline_rgcmliner   r   r   r=      s*   	r=   
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   )r@   .0keyvaluer]   r   r   
<dictcomp>   s   " z&get_actual_str_key.<locals>.<dictcomp>c                    s   i | ]\}}| kr||qS r   r   r^   rb   r   r   rc      s    )r>   r?   itemsrR   )r]   r*   r+   key_dictr   rb   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 )NrO   s,   beginbfrange
<0000> <0001> <0000>
endbfrange   beginbfchars   
beginbfchar
	   endbfchars   
endbfchar
   beginbfranges   
beginbfrange

   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
   <   >r      .        r      [s    [    ]s    ]
    rQ   )r>   r   r   r   get_datar#   encoderW   replacerU   rF   rK   findjoin)r   tur[   llijcontentr   r   r   rT      s:   


	 rT   r\   rX   rY   rZ   rA   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 )Nrn   r   %      	rm   rh   Tri   Frf   rg   zSkipping broken line z: )rt   parse_bfrangebinasciir   r   rI   parse_bfchar)r\   rX   rY   rZ   r+   rA   errorr   r   r   rV   #  s*   
"
rV   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   r_   rB   r   r   r   
<listcomp>F      z!parse_bfrange.<locals>.<listcomp>rm   Fs   %%0%dX   r   r   rp   Tr2   surrogatepassrD      ro         )rU   r   decodeappendrJ   maxrK   r   )r\   r+   rA   rZ   lstclosure_foundfmtabsqnbicfmt2r   r   r   r~   @  sp   





r~   c              
   C   s  dd |  dD }t|d d |d< t|dkrd}|d d	krYzt|d t|d d
k r3dndd}W n  tyX } ztd|d|d dt W Y d }~nd }~ww ||t|d |d dkridndd< |t|d d |dd  }t|dksd S d S )Nc                 S   r   r   r   r   r   r   r   r   }  r   z parse_bfchar.<locals>.<listcomp>rm   r   r   r   r   rP   rl   r   rD   r2   r   zGot invalid hex string: z ()r   )	rU   rK   r   r   BinasciiErrorr   rI   r   rJ   )r\   r+   rA   r   map_to	exceptionr   r   r   r   |  s,   (r   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sRnd| v rXtt| 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 q7 ttfyW   Y q7w t|dri|re|nd|d< |S )Nr   rC   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        )r:   r   r#   r$   KeyErrorfloatrK   r>   rJ   r   rI   rF   r@   rL   __repr__r   r   r   
IndexErrorr   rR   )r   r   r-   stenft1wsecondwidthc_codewwm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   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	/FontFilemypys   eexec
r   s	   /Encodingr   rq   rQ   s   dupc                 S   s   g | ]}|d kr|qS )rn   r   )r_   _wr   r   r   r     s    z&_type1_alternative.<locals>.<listcomp>rm   r   s   putr   s   /unir   r   )r   r   rR   r   r$   rr   rU   rt   
startswithrK   rJ   r   r	   r   r   r@   r   )
r   r+   rA   ft_desctxtlinesliwordsry   vr   r   r   rS     sH   

rS   )3r   r   r   r   mathr   typingr   r   r   _codecsr	   r
   _utilsr   r   genericr   r   r   r   r   r   r#   r   tupler?   rJ   r   r   fromkeysrF   r1   __annotations__r7   r:   r%   r<   rL   r=   r&   bytesrT   boolrV   r~   r   r'   r(   r   rS   r   r   r   r   <module>   sr  
  (
&
"0	
	
"

;
!

)



&<

R




