U
    
3g59                     @   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 ddlmZ dd	lmZmZmZ eeee	eee
eeeef f ee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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+d,d-Z)eeeed.d/d0Z*dS )1    N)	unhexlify)ceil)AnyDictListTupleUnioncast   )adobe_glyphscharset_encoding)logger_warning)PdfReadWarning)DecodedStreamObjectDictionaryObjectStreamObject)	font_namespace_widthobjreturnc                 C   s8  |d d |  }t t|d }d}t||\}}t||\}}}|dkrhd|ks\|d dkrbd}qd	}n(t|tr|D ]}	|	d
krvt|	||	< qvztt t|d  }W n tk
r   Y nX t|trz|	dd }
W n4 tk
r   |	d	}
|
d d|
d   }
Y nX n|}
t
||
|}|t|d |||fS )zDetermine information about a font.

    This function returns a tuple consisting of:
    font sub-type, space_width/2, encoding, map character-map, font-dictionary.
    The font-dictionary itself is suitable for the curious.z
/Resourcesz/Font/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   r   ftZ	font_type
space_codeencodingmap_dict	int_entryxspsp_width r3   0/tmp/pip-unpacked-wheel-ifm06wwb/PyPDF2/_cmap.pybuild_char_map   s>    



r5   Unknowni'  r   u   �unknown_char_mapr   gbkgb2312)z/Identity-Hz/Identity-Vz	/GB-EUC-Hz	/GB-EUC-Vz/GBpc-EUC-Hz/GBpc-EUC-V_predefined_cmapiX  i        )z	/Courrierz/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+   r,   r   c              	   C   s@  g }d| krzXd| krJt t| d tkrJtttdtt t| d  }nd}|tt t| d  fW S  tk
r   t t| d dkrd|f Y S d|f Y S Y nX | d  }t	|tr"z4|tkrt| 
 }n|tkrt| }ntdW n. tk
r   td	| d
t |}Y nX nvt	|trd|krztt t|d  
 }W n6 tk
r   td	| d
t td 
 }Y nX ntd 
 }d|krd}t tt t|d D ]^}t	|tr|}nFzt| ||< W n, tk
r   |||< |dkr|}Y nX |d7 }qt	|tr8tttd|}||fS )Nz	/Encodingr   r   r   r   z/Type1r   z	not foundzAdvanced encoding z not implemented yetz/BaseEncodingz/StandardCodingz/Differencesr    r
   )r	   r    r   r$   zipranger&   r'   
get_objectr#   copyr:   warningswarnr   r   intr   list)r+   r,   r-   encr0   or3   r3   r4   r!   q   sh    





r!   c                 C   s   i }g }d| kri |g fS d}d}d }t | }|dD ]"}t|d|||||\}}}q8| D ]\}	}
|
dkrd|	}qd|||fS )N
/ToUnicodeF   
    r=   )
prepare_cmsplitprocess_cm_linestripitems)r+   r,   r.   r/   
process_rgprocess_charmultiline_rgcmlavaluer3   r3   r4   r"      s,    
     r"   )r+   r   c                 C   s&  | d }t |tr&tt| d  }nt |tr>|dr>d}t |trP| }| 	dd	dd	dd		d
d	dd	dd}|
d}tt|D ]`}|| d}|dkr|dkrd}n|| d | 	dd}|d || |d d   ||< qd|	dd	dd	dd}|S )NrH   z	/Identitys,   beginbfrange
<0000> <0001> <0000>
endbfrange   beginbfchars   
beginbfchar
	   endbfchars   
endbfchar
   beginbfranges   
beginbfrange

   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
   <   >r      .rJ       r
      [s    [    ]s    ]
    rI   )r#   r   r	   r   get_datar    
startswithr(   rN   replacerL   r?   lenfindjoin)r+   ZturS   Zllijcontentr3   r3   r4   rK      s^    

      	
"
   rK   )rT   rP   rQ   rR   r.   r/   r   c                 C   s   | dks| d dkr|||fS d| kr,d}nNd| kr:d}n@d| krHd}n2d	| krVd}n$|rjt | |||}n|rzt| || |||fS )
N)r^   rJ   r   %   rY   TrZ   FrW   rX   )parse_bfrangeparse_bfchar)rT   rP   rQ   rR   r.   r/   r3   r3   r4   rM      s    
rM   )rT   r.   r/   rR   r   c                 C   s  dd |  dD }d}tt|d t|d }t|d |d< d	|d d  }|d k	r|d }|d }	|dd  D ]Z}
|
d
krd} qt|
dd|t|| |d dkrdndd< || |d7 }qvn&t|d d}t|d d}	|d dkrr|dd  D ]b}
|
d
kr$d} qt|
dd|t|| |d dkrRdndd< || |d7 }qnt|d d}d	tdt|d  }d}||	krt|| dd|t|| |d dkrdndd< || |d7 }|d7 }q|rd S ||	fS )Nc                 S   s   g | ]}|r|qS r3   r3   .0r0   r3   r3   r4   
<listcomp>  s      z!parse_bfrange.<locals>.<listcomp>rJ   Fr   r
   r   r   s   %%0%dXr`   Tr   surrogatepassr      r_         )rL   maxre   r   r   decodeappendrD   )rT   r.   r/   rR   lstZclosure_foundZnbifmtrU   bsqcZfmt2r3   r3   r4   rl     sh    




rl   )rT   r.   r/   r   c                 C   s   dd |  dD }t|d d |d< t|dkrd}|d d	krlt|d t|d d
k rddndd}||t|d |d dkrdndd< |t|d d |dd  }q(d S )Nc                 S   s   g | ]}|r|qS r3   r3   rn   r3   r3   r4   rp   J  s      z parse_bfchar.<locals>.<listcomp>rJ   r   r   r   r
   r   r]   rt   r   r   rq   rr   )rL   re   r   rv   rw   rD   )rT   r.   r/   rx   Zmap_tor3   r3   r4   rm   I  s$      rm   )r+   r,   r   r   c                 C   sP  |d }g }i }d}d| krP| d d   }ztt|d |d< W n tk
r`   d|d< Y nX d|krxt|d }ng }t|dkr|d }|d }t|trt||D ]}	|d ||	< q|d	d  }q|t|tr|D ]}
|
||< |d7 }q|dd  }q|t	d
|d 
  t qq|z|| }W n" tk
rL   |d d }Y nX nd| krLt| d }zbtt| d }tt| d }||ks||k rtd|||  dkrtd|||  }W n tk
rJ   d| krdtt| d kr| d d }n@d}d}|D ] }	|	dkr||	7 }|d7 }q|td| d }Y nX |S )Nr   r   z/DescendantFontsz/DWr   g     @@z/Wr
   rs   zunknown widths : 
g       @z/Widthsz
/FirstCharz	/LastCharzNot in rangez
null widthz/FontDescriptorz/MissingWidth)r@   r	   r*   r'   rE   re   r#   rD   r?   r   __repr____name__r   ru   )r+   r,   r   r2   wZw1stZft1secondr0   yenmZcptr3   r3   r4   r)   \  sv    





 
r)   )+rB   binasciir   mathr   typingr   r   r   r   r   r	   _codecsr   r   _utilsr   errorsr   Zgenericr   r   r   r    r*   rD   r5   r$   r>   r?   r7   __annotations__r:   r&   r!   r"   bytesrK   boolrM   rl   rm   r)   r3   r3   r3   r4   <module>   s       <0	 A (

;   