o
    >eMF                     @   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mZ ddl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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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,d0d,d1d"iZ#eeef e!d2< ded3edee	eeeef f ef fd4d5Z$ded3edeeeef eee f fd6d7Z%dede&fd8d9Z'd:e&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dAdBZ)d:e&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
dCdDZ*d:e&d?eeef d@ee dd>fdEdFZ+ded3ed	edefdGdHZ,ded?eeef d3ed@ee deeeef eee f f
dIdJZ-d>S )K    )	unhexlify)ceil)AnyDictListTupleUnioncast   )adobe_glyphscharset_encoding)b_logger_errorlogger_warning)DecodedStreamObjectDictionaryObjectIndirectObject
NullObjectStreamObject	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   L/var/www/html/humari/django-venv/lib/python3.10/site-packages/pypdf/_cmap.pybuild_char_map   s
   r!   r   c           
      C   s  t t|d }d}t||\}}t||\}}}|dkr,d|vs&|d dkr)d}nd}nt|tr@|D ]}|dkr?t|||< q3ztt t|d	  } W n	 tyT   Y nw t|tr|z	|	dd
 }W n ty{   |	d}|d
 d|d   }Y nw |}t
||| }	|t|	d ||fS )aj  
    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
   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   	font_type
space_codeencodingmap_dict	int_entryxspsp_widthr   r   r    r   '   s@   



r   Unknowni'  r*   u   �unknown_char_mapr'   gbkgb2312gb18030)
z/Identity-Hz/Identity-Vz	/GB-EUC-Hz	/GB-EUC-Vz/GBpc-EUC-Hz/GBpc-EUC-Vz
/GBK-EUC-Hz
/GBK-EUC-Vz/GBK2K-Hz/GBK2K-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/ZapfDingbatsr2   r8   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d|v rvd	}ntd
W nI ty   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 rd}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"   /Type1r$   z-UCS2-r'   z	not foundzAdvanced encoding z not implemented yetz/BaseEncodingz/StandardCodingz/Differencesr    r
   )r	   r,   r   r0   zipranger2   r3   
get_objectr/   copyrD   r   __name__r   intr   list)r   r8   r9   encr<   or   r   r    r-      sr   





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+| D ]
\}	}
|
dkrK|	}qA|||fS )	N
/ToUnicoder"   r$   rG   F   
s    	rH   )gettype1_alternative
prepare_cmsplitprocess_cm_linestripitems)r   r8   r:   r;   
process_rgprocess_charmultiline_rgcmlineavaluer   r   r    r.      s2   
	
r.   c                 C   s*  | d }t |trt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red}n|| d | 
dd}|d || |d d   ||< qQd|
dd
dd
dd}|S )NrR   z	/Identitys,   beginbfrange
<0000> <0001> <0000>
endbfrange   beginbfchars   
beginbfchar
	   endbfchars   
endbfchar
   beginbfranges   
beginbfrange

   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
   <   >r      .        r
      [s    [    ]s    ]
    rS   )r/   r   r   r	   r   get_datar,   
startswithr4   rY   replacerW   rJ   lenfindjoin)r   tur^   llijcontentr   r   r    rV      s<   


	 rV   r_   r[   r\   r]   Nr:   r;   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 )Nrj   r   %      	ri   rd   Tre   Frb   rc   )rp   parse_bfrangeparse_bfchar)r_   r[   r\   r]   r:   r;   r   r   r    rX   %  s    

rX   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   .0r<   r   r   r    
<listcomp>E      z!parse_bfrange.<locals>.<listcomp>ri   Fs   %%0%dXr%   r+   r   r
   rl   Tr'   surrogatepassr&      rk         )rW   r   decodeappendrN   maxrq   r   )r_   r:   r;   r]   lstclosure_foundfmtr`   bsqnbicfmt2r   r   r    r{   ?  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   |  r   z parse_bfchar.<locals>.<listcomp>ri   r   r+   r%   r
   r$   rh   r   r&   r'   r   r   )rW   rq   r   r   r   rN   )r_   r:   r;   r   map_tor   r   r    r|   {  s"   r|   c                 C   s  |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rt|d trM|d n|d   }|d   }t|trst||D ]}	|d	 ||	< qc|d
d  }n%t|tr|D ]
}
|
||< |d7 }qz|d	d  }nt	d|d 
  t nt|dksBz|| }W n ty   |d d }Y n{w d| v r.t| d }z.tt| d }tt| d }||ks||k rtd|||  dkrtd|||  }W n@ ty-   d| v rdtt| d v r| d d }n d}d}|D ]}	|	dkr ||	7 }|d7 }q|td| d	 }Y nw t|trG|  }|d u sCt|trEdS |S |S )Ng       @r   z/DescendantFontsz/DWr%   g     @@z/Wr
   r+   r   zunknown widths : 
z/Widthsz
/FirstCharz	/LastCharzNot in rangez
null width/FontDescriptorz/MissingWidthg        )rK   r	   r6   r3   rO   rq   r/   rN   rJ   r   __repr__rM   r   r   r   r   )r   r8   r   r>   ww1stft1secondr<   yenmcptr   r   r   r    r5     s   "





r5   c                 C   sz  d| vr	|||fS t t| d d}|d u r|||fS |  }|dd }|dd }|ddd}|D ]|}|d	rd
d |dD }t|dkrY|d dkrYq;zt	|d }	W n	 t
yj   Y q;w z
t|d   }
W n, ty   |d drztt	|d dd  d}
W n t
y   Y Y q;w Y q;Y nw |d  dkr|	}|
|t|	< ||	 q;|||fS )Nr   z	/FontFiles   eexec
r   s	   /Encodingr
   rm   rS   s   dupc                 S   s   g | ]}|d kr|qS )rj   r   )r   _wr   r   r    r     s    z%type1_alternative.<locals>.<listcomp>ri   r   s   putr+   s   /unir   r   )r	   r   rT   rK   rn   rW   rp   ro   rq   rN   
ValueErrorr   r   KeyErrorr1   r   )r   r:   r8   r;   ft_desctxtlinesliwordsrv   vr   r   r    rU     sJ   




rU   ).binasciir   mathr   typingr   r   r   r   r   r	   _codecsr   r   _utilsr   r   r   genericr   r   r   r   r   r,   r6   rN   r!   r   r0   rI   rJ   r@   __annotations__rD   r2   r-   r.   bytesrV   boolrX   r{   r|   r5   rU   r   r   r   r    <module>   s    
(
&
C0		

@
%)



&<
O
