o
    liF                     @   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 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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< 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.d/d0d/d1d/d2d/d3d4d5d4d6d4d7d4d8d9d:d9d;d9d<d9d=d>d?d>d@d>dAd>dBd>dCd4iZ!eeef edD< dedee	eeeef f eeef f fdEdFZ"dede	eeeef f fdGdHZ#dedeeeef ee f fdIdJZ$dKedLe	eeeef f dMeeef defdNdOZ%dede&fdPdQZ'dRe&dSe(dTe(dUe	dVeeef f dMeeef dWee dee(e(e	dVeeef f f fdXdYZ)dRe&dMeeef dWee dUe	dVeeef f de	dVeeef f f
dZd[Z*dRe&dMeeef dWee ddVf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dMeeef dWee deeeef ee f fdhdiZ/dVS )j    )	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   ftfont_subtypefont_halfspacefont_encodingfont_map r   J/var/www/html/pca-backend/venv/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 | 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	/BaseFontr0   charmapz-UCS2-r2   z	not foundzAdvanced encoding z not implemented yetz/BaseEncodingz/StandardCodingz/Differencesr   r
   )r	   r#   r   r?   zipranger$   r>   copyr7   	Exceptionr   __name__r   intlenr   list)r   r*   encrB   or   r   r   r<      sf   





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                    sL   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_dictkey_charr   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   NrA   c                 C   s   | dks
| d dkr|||fS |  dd} d| v rd}n'd| v r#d	}n d
| v r*d}nd| v r1d	}n|r;t| |||}n|rCt| || |||fS )Nro   r   %      	rn   ri   Trj   Frg   rh   )ru   parse_bfrangeparse_bfchar)r\   rX   rY   rZ   r+   rA   r   r   r   rV     s    

rV   c                 C   s  dd |  dD }d}|d urUd|d d  }|d }|d	 }|dd  D ]-}	|	d
kr0d} n$t|	dd|t|| |d d	krFd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 }qnFt|d d}dtdt|d  }d}||krt|| 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>?      z!parse_bfrange.<locals>.<listcomp>rn   Fs   %%0%dX   r   r
   rq   Tr2   surrogatepassrD      rp         )rU   r   decodeappendrJ   maxrK   r   )r\   r+   rA   rZ   lstclosure_foundfmtabsqnbicfmt2r   r   r   r   9  sp   






r   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   r   r   r   r   r   r   r   r   v  r   z parse_bfchar.<locals>.<listcomp>rn   r   r   r   r
   rP   rm   r   rD   r2   r   r   )rU   rK   r   r   r   rJ   )r\   r+   rA   r   map_tor   r   r   r   u  s"   r   default_font_widthc              
   C   s  i }d}d}zt tt| d j d }W n	 ty   Y nw d| v r| d d  }ztt|d |d< W n tyB   ||d< Y nw d|v rN|d  }ng }t|dkrt|d t	ra|d n|d  }|d  }t|t	r|}t
||d 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sVn{d| v r8| 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 q ttfy7   Y qw t|drI|rE|nd|d< |S )Nr   rC   r"   z/DescendantFontsz/DWdefaultz/Wr
   r   r   zunknown widths : 
z/Widths/FontDescriptorz/MissingWidthz
/FirstCharz	/LastChar        )r:   r	   r#   r$   KeyErrorfloatrH   rK   r>   rJ   rF   r@   rL   r   __repr__rI   r   r   
IndexErrorr   rR   )r   r   r-   stenft1wsecondc_codewidth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   sl  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 ]p}|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 nw |	|t|< || qA||fS )Nr   z	/FontFilemypys   eexec
r   s	   /Encodingr
   rr   rQ   s   dupc                 S   s   g | ]}|d kr|qS )ro   r   )r_   _wr   r   r   r     s    z&_type1_alternative.<locals>.<listcomp>rn   r   s   putr   s   /unir   r   )r	   r   rR   r   r$   rs   rU   ru   
startswithrK   rJ   r   r   r   r   r@   r   )
r   r+   rA   ft_desctxtlinesliwordsrz   vr   r   r   rS     sF   

rS   )0binasciir   mathr   typingr   r   r   r   r   r	   _codecsr   r   _utilsr   r   genericr   r   r   r   r#   r   rJ   r   r   r?   rE   rF   r1   __annotations__r7   r:   r%   r<   r=   r&   bytesrT   boolrV   r   r   r'   r(   r   rS   r   r   r   r   <module>   sn    	(
&
"0	
	
"

9
"

)



&<

L




