U
    BbY1                     @   s  U d dl 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mZ eeeeeeeeeeef f 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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eef ee ee!e!f d#d$d%Z"eeeef ee dd&d'd(Z#eeeef ee dd&d)d*Z$eeeed+d,d-Z%dS ).    N)	unhexlify)AnyDictListTupleUnioncast   )adobe_glyphscharset_encoding)PdfReadWarning)DecodedStreamObjectDictionaryObject)	font_namespace_widthobjreturnc                 C   s6  |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 )Nz
/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 r0   0/tmp/pip-unpacked-wheel-weujb6sz/PyPDF2/_cmap.pybuild_char_map   s<    


r2   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   s4  g }d| krzRd| krD| d t krDtttdt tt| d  }nd}|ttt| d  fW S  tk
r   | 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r,t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!   zipranger   r   r#   r$   
get_objectr    copyr7   warningswarnr   r   intr
   list)r(   r)   r*   encr-   or0   r0   r1   r   i   sh    





r   c           
      C   sv   i }g }d| kri |g fS d}d}t | }|dD ]}t|||||\}}q4| D ]\}}	|	dkrV|}qV|||fS )N
/ToUnicodeF   
r:   )
prepare_cmsplitprocess_cm_lineitems)
r(   r)   r+   r,   
process_rgprocess_charcmlavaluer0   r0   r1   r      s&    
    
r   )r(   r   c                 C   s   t t| d  }| 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   ||< q`d	|dddddd}|S )NrE      beginbfchars   
beginbfchar
	   endbfchars   
endbfchar
   beginbfranges   
beginbfrange

   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
   <   >r      .        r	      [s    [    ]s    ]
    rF   )
r   r   get_datastripreplacerH   r<   lenfindjoin)r(   rM   Zllijcontentr0   r0   r1   rG      sR          	
"
   rG   )rN   rK   rL   r+   r,   r   c                 C   s~   | dks| d dkr||fS d| kr*d}nLd| kr8d}n>d| krFd}n0d	| krTd}n"|rft | || n|rvt| || ||fS )
N)rY   rX   r   %   rS   TrT   FrQ   rR   )parse_bfrangeparse_bfchar)rN   rK   rL   r+   r,   r0   r0   r1   rI      s    rI   )rN   r+   r,   r   c                 C   sJ  dd |  dD }t|d d}t|d d}t|d }|d |d< d	| }|d d
kr|dd  D ]V}|dkrx qt|dd|t|| |d dkrdndd< || |d7 }qhnt|d d}	d	tdt|d  }
||krFt|
|	 dd|t|| |d dkr"dndd< || |d7 }|	d7 }	qd S )Nc                 S   s   g | ]}|r|qS r0   r0   .0r-   r0   r0   r1   
<listcomp>   s      z!parse_bfrange.<locals>.<listcomp>rX   r      r	   r   r   s   %%0%dXrZ      r[   r   surrogatepassr      )rH   rA   r`   r   decodeappendmax)rN   r+   r,   lstrO   bZnbifmtsqcZfmt2r0   r0   r1   rg      s@    


rg   c                 C   s   dd |  dD }t|d d |d< t|dkrd}|d d	krXt|d d
d}||t|d |d dkrxdnd
d< |t|d d |dd  }q(d S )Nc                 S   s   g | ]}|r|qS r0   r0   ri   r0   r0   r1   rk     s      z parse_bfchar.<locals>.<listcomp>rX   r   r   r   r	   r   rW   r   rn   r   rl   )rH   r`   r   rp   rq   rA   )rN   r+   r,   rs   Zmap_tor0   r0   r1   rh     s$      rh   )r(   r)   r   r   c                 C   sR  |d }g }i }d}d| krR| 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
rN   |d d }Y nX nd| krNt| d }zbtt| d }tt| d }||ks||k rtd|||  dkrtd|||  }W n tk
rL   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	   rm   zunknown widths : 
g       @z/Widthsz
/FirstCharz	/LastCharzNot in rangez
null widthz/FontDescriptorz/MissingWidth)r=   r   r'   r$   rB   r`   r    rA   r<   r?   r@   __repr__r   r   rr   )r(   r)   r   r/   wZw1stZft1secondr-   yenmZcptr0   r0   r1   r&   /  sv    





 
r&   )&r?   binasciir   typingr   r   r   r   r   r   _codecsr
   r   errorsr   Zgenericr   r   r   r'   rA   r2   r!   r;   r<   r4   __annotations__r7   r#   r   r   bytesrG   boolrI   rg   rh   r&   r0   r0   r0   r1   <module>   s       6(	 @ !

 "   