o
    `^h59                     @   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 d
ededede	eee
eeeef f ee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< dddddddZ eee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d0< d1ed2ede	e
eeeef f ef fd3d4Z"d1ed2ede	eeef eee f fd5d6Z#d1ede$fd7d8Z%d9e$d:e&d;e&d<e
de	eef f d=eeef d>ee de	e&e&e
de	eef f f fd?d@Z'd9e$d=eeef d>ee d<e
de	eef f de
de	eef f f
dAdBZ(d9e$d=eeef d>ee ddfdCdDZ)d1ed2ededefdEdFZ*dS )G    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   s.  |d d |  }t t|d }d}t||\}}t||\}}}|dkr4d|vs.|d dkr1d}nd	}nt|trH|D ]}	|	d
krGt|	||	< q;ztt t|d  }W n	 ty\   Y nw t|trz	|	dd }
W n ty   |	d	}
|
d d|
d   }
Y nw |}
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   ft	font_type
space_codeencodingmap_dict	int_entryxspsp_width r4   J/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/PyPDF2/_cmap.pybuild_char_map   sD   




r6   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_cmapz	/CourrieriX  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/ZapfDingbatsr&   r+   r-   c              	   C   s  g }d| vrOz,d| v r%t t| d tv r%tttdtt t| d  }nd}|tt t| d  fW S  tyN   t t| d dkrHd|f Y S d|f Y S w | d  }t	|trz|tv rft| 
 }n|tv rot| }ntdW nK ty   td	| d
t |}Y n7w 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| ||< W n ty   |||< |dkr|}Y nw |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    r   r$   zipranger&   r'   
get_objectr#   copyr;   warningswarnr   r   intr   list)r+   r-   r.   encr1   or4   r4   r5   r!   q   st   





r!   c                 C   s   i }g }d| vri |g fS d}d}d }t | }|dD ]}t|d|||||\}}}q| D ]
\}	}
|
dkr<|	}q2|||fS )N
/ToUnicodeF   
    r>   )
prepare_cmsplitprocess_cm_linestripitems)r+   r-   r/   r0   
process_rgprocess_charmultiline_rgcmlavaluer4   r4   r5   r"      s$   

r"   c                 C   s&  | d }t |trtt| d  }nt |tr|drd}t |tr(| }| 	dd	dd	dd		d
d	dd	dd}|
d}tt|D ]0}|| d}|dkr|dkrcd}n|| d | 	dd}|d || |d d   ||< qOd|	dd	dd	dd}|S )NrI   z	/Identitys,   beginbfrange
<0000> <0001> <0000>
endbfrange   beginbfchars   
beginbfchar
	   endbfchars   
endbfchar
   beginbfranges   
beginbfrange

   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
   <   >r      .rK       r
      [s    [    ]s    ]
    rJ   )r#   r   r	   r   get_datar    
startswithr(   rO   replacerM   r@   lenfindjoin)r+   turT   llijcontentr4   r4   r5   rL      s<   


	 rL   rU   rQ   rR   rS   r/   r0   c                 C   s   | dv s
| d dkr|||fS d| v rd}n'd| v rd}n d| v r$d}nd	| v r+d}n|r5t | |||}n|r=t| || |||fS )
N)r_   rK   r   %   rZ   Tr[   FrX   rY   )parse_bfrangeparse_bfchar)rU   rQ   rR   rS   r/   r0   r4   r4   r5   rN      s   

rN   c                 C   s   dd |  dD }d}tt|d t|d }t|d |d< d	|d d  }|d urj|d }|d }	|dd  D ]-}
|
d
krEd} n$t|
dd|t|| |d dkr[dndd< || |d7 }q;nt|d d}t|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|rd S ||	fS )Nc                 S      g | ]}|r|qS r4   r4   .0r1   r4   r4   r5   
<listcomp>      z!parse_bfrange.<locals>.<listcomp>rK   Fr   r
   r   r   s   %%0%dXra   Tr   surrogatepassr      r`         )rM   maxrf   r   r   decodeappendrE   )rU   r/   r0   rS   lstclosure_foundnbifmtrV   bsqcfmt2r4   r4   r5   ro     sn   





ro   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   rq   r4   r4   rr   r4   r4   r5   rt   J  ru   z parse_bfchar.<locals>.<listcomp>rK   r   r   r   r
   r   r^   ry   r   r   rv   rw   )rM   rf   r   r{   r|   rE   )rU   r/   r0   r}   map_tor4   r4   r5   rp   I  s"   rp   c                 C   sJ  |d }g }i }d}d| v r| d d   }ztt|d |d< W n ty.   d|d< Y nw d|v r:t|d }ng }t|dkr|d }|d }t|trdt||D ]}	|d ||	< qT|d	d  }n%t|tr}|D ]
}
|
||< |d7 }qk|dd  }nt	d
|d 
  t nt|dksBz|| }W |S  ty   |d d }Y |S w d| v r#t| d }z/tt| d }tt| d }||ks||k rtd|||  dkrtd|||  }W |S  ty"   d| v rdtt| d v r| d d }Y |S d}d}|D ]}	|	dkr||	7 }|d7 }q|td| d }Y |S w |S )Nr   r   z/DescendantFontsz/DWr   g     @@z/Wr
   rx   zunknown widths : 
g       @z/Widthsz
/FirstCharz	/LastCharzNot in rangez
null widthz/FontDescriptorz/MissingWidth)rA   r	   r*   r'   rF   rf   r#   rE   r@   r   __repr____name__r   rz   )r+   r-   r   r3   ww1stft1secondr1   yenmcptr4   r4   r5   r)   \  s   







r)   )+rC   binasciir   mathr   typingr   r   r   r   r   r	   _codecsr   r   _utilsr   errorsr   genericr   r   r   r    r*   rE   r6   r$   r?   r@   r8   __annotations__r;   r&   r!   r"   bytesrL   boolrN   ro   rp   r)   r4   r4   r4   r5   <module>   s   
  
<0		

@
'



&;