o
    /׾gF                     @   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< 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Z"eeef e!d+< i d,d-d.d-d/d-d0d-d1d2d3d2d4d2d5d2d6d7d8d7d9d7d:d7d;d<d=d<d>d<d?d<d@d<dAd2iZ#eeef e!dB< dedCedee	eeeef f ef fdDdEZ$dedCedeeeef eee f fdFdGZ%dede&fdHdIZ'dJe&dKe(dLe(dMe	dNeeef f dOeeef dPee dee(e(e	dNeeef f f fdQdRZ)dJe&dOeeef dPee dMe	dNeeef f de	dNeeef f f
dSdTZ*dJe&dOeeef dPee ddNfdUdVZ+dedCed	edefdWdXZ,dedOeeef dCedPee deeeef eee f f
dYdZZ-dNS )[    )	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   U/var/www/html/backend_erp/backend_erp_env/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_mapz/Identity-Hr'   z/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-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/   copyrE   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$   rH   F   
s    	rI   )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 )NrS   z	/Identitys,   beginbfrange
<0000> <0001> <0000>
endbfrange   beginbfchars   
beginbfchar
	   endbfchars   
endbfchar
   beginbfranges   
beginbfrange

   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
   <   >r      .        r
      [s    [    ]s    ]
    rT   )r/   r   r   r	   r   get_datar,   
startswithr4   rZ   replacerX   rK   lenfindjoin)r   tur_   llijcontentr   r   r    rW     s<   


	 rW   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 )Nrk   r   %      	rj   re   Trf   Frc   rd   )rq   parse_bfrangeparse_bfchar)r`   r\   r]   r^   r:   r;   r   r   r    rY   *  s    

rY   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>J      z!parse_bfrange.<locals>.<listcomp>rj   Fs   %%0%dXr%   r+   r   r
   rm   Tr'   surrogatepassr&      rl         )rX   r   decodeappendrO   maxrr   r   )r`   r:   r;   r^   lstclosure_foundfmtra   bsqnbicfmt2r   r   r    r|   D  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>rj   r   r+   r%   r
   r$   ri   r   r&   r'   r   r   )rX   rr   r   r   r   rO   )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        )rL   r	   r6   r3   rP   rr   r/   rO   rK   r   __repr__rN   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
   rn   rT   s   dupc                 S   s   g | ]}|d kr|qS )rk   r   )r   _wr   r   r    r     s    z%type1_alternative.<locals>.<listcomp>rj   r   s   putr+   s   /unir   r   )r	   r   rU   rL   ro   rX   rq   rp   rr   rO   
ValueErrorr   r   KeyErrorr1   r   )r   r:   r8   r;   ft_desctxtlinesliwordsrw   vr   r   r    rV     sJ   




rV   ).binasciir   mathr   typingr   r   r   r   r   r	   _codecsr   r   _utilsr   r   r   genericr   r   r   r   r   r,   r6   rO   r!   r   r0   rJ   rK   r@   __annotations__rE   r2   r-   r.   bytesrW   boolrY   r|   r}   r5   rV   r   r   r   r    <module>   s>    
(
&
C0	
	

@
%)



&<
O
