
     h              !          d dl mZ d dl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j        Zg d	Z ed
           G d d                      Z edddg ej         ed           ed           ed           ed           ed           ej        d           ed           ej         eej        g d                     ed           ej        d           ed           ej        d           ed           ej        d           ed           ej        d            ed           ej        d           ed            ej        d           ed!           ej        d           ed"           ej        d          i          #          Z G d$ d%e          Z G d& d'e          Zd(e
fd)Zd*S )+    )	dataclass)BytesIO)ListOptional)generic   )BasePdfFileWriter   )
FontEngineFontEngineFactoryShapeResult)SimpleFontEngineFactorySimpleFontEngineSimpleFontMetaget_courierT)frozenc                   N    e Zd ZU eed<   eed<   ee         ed<   ej        ed<   dS )r   
first_char	last_charwidths
descriptorN)__name__
__module____qualname__int__annotations__r   r   DictionaryObject     X/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/pyhanko/pdf_utils/font/basic.pyr   r      sC         OOONNNI((((((r   r       iX  /Type/FontDescriptorz	/FontNamez/Courierz/Flags#   z	/FontBBox)iii  i%  z/Ascentiu  z/Descenticz
/CapHeightz/ItalicAnglez/StemV3   z/MissingWidthz	/AvgWidthz	/MaxWidth)r   r   r   r   c            
       l     e Zd ZdZed             Z	 ddededede	e
         f fdZd	efd
Zd Z xZS )r   z
    Simplistic font engine that effectively only works with PDF standard fonts,
    and does not care about font metrics. Best used with monospaced fonts such
    as Courier.
    c                     dS )NFr   )selfs    r    uses_complex_positioningz)SimpleFontEngine.uses_complex_positioning>   s    ur   Nwritername	avg_widthmetac                 z    || _         || _        || _        t                                          ||d           d S )NF)embedded_subset)r,   r+   r-   super__init__)r(   r*   r+   r,   r-   	__class__s        r    r1   zSimpleFontEngine.__init__B   s?     #		u=====r   returnc                    t                      }t          j        |                              |           |                    d           t          |          | j        z  }t          |                                |d          S )Ns    Tjr   )graphics_ops	x_advance	y_advance)	r   r   TextStringObjectwrite_to_streamwritelenr,   r   getvalue)r(   txtops	total_lens       r    shapezSimpleFontEngine.shapeN   st    ii %%55c:::		&HHt~-	9
 
 
 	
r   c                 p   t          j        t          d          t          d          t          d          t          d| j        z             t          d          t          d          t          d          t          d          i          }| j        }|t          j        |j                  |d	<   t          j        |j                  |d
<   t          j        t          t           j        |j
                            |d<   | j                            t          j        |j                            |d<   |S )Nr"   z/Fontz	/BaseFont/z/Subtypez/Type1z	/Encodingz/WinAnsiEncodingz
/FirstCharz	/LastCharz/Widthsr#   )r   r   pdf_namer+   r-   NumberObjectr   r   ArrayObjectmapr   r*   
add_objectr   )r(   	font_dictr-   s      r    as_resourcezSimpleFontEngine.as_resourceX   s   ,!!8G#4#4%%xdi'@'@$$hx&8&8%%x0B'C'C	
 
	 y&-&:4?&K&KIl#%,%9$.%I%IIk"#*#6G($+66$ $Ii  ,0;+A+A(99, ,I'( r   N)r   r   r   __doc__propertyr)   r	   strfloatr   r   r1   r   r@   rI   __classcell__)r2   s   @r    r   r   7   s            X *.
> 
>!
> 
> 	
>
 ~&
> 
> 
> 
> 
> 
>
K 
 
 
 
      r   r   c                   V    e Zd Z	 d	dededee         fdZd	defdZ	e
d             ZdS )
r   Nr+   r,   r-   c                 0    || _         || _        || _        d S rJ   )r,   r+   r-   )r(   r+   r,   r-   s       r    r1   z SimpleFontEngineFactory.__init__r   s     #				r   r*   c                 D    t          || j        | j        | j                  S rJ   )r   r+   r,   r-   )r(   r*   
obj_streams      r    create_font_enginez*SimpleFontEngineFactory.create_font_enginey   s    	4>49MMMr   c                  .    t          ddt                    S )z
        :return:
            A :class:`.FontEngineFactory` instance representing the Courier
            standard font.
        Courierg333333?)r   COURIER_METAr   r   r    default_factoryz'SimpleFontEngineFactory.default_factory|   s     'y#|DDDr   rJ   )r   r   r   rM   rN   r   r   r1   r	   rT   staticmethodrX   r   r   r    r   r   q   s        LP $)19.1I   N N): N N N N E E \E E Er   r   
pdf_writerc                 ~    t                                                               |                                           S )z
    Quick-and-dirty way to obtain a Courier font resource.

    :param pdf_writer:
        A PDF writer.
    :return:
        A resource dictionary representing the standard Courier font
        (or one of its metric equivalents).
    )r   rX   rT   rI   )rZ   s    r    r   r      s/     	 //11		J	'	'	r   N)dataclassesr   ior   typingr   r   pyhanko.pdf_utilsr   r*   r	   apir   r   r   
NameObjectrC   __all__r   r   rD   rE   rF   rW   r   r   r   r   r   r    <module>rc      s   ! ! ! ! ! !       ! ! ! ! ! ! ! ! % % % % % % & & & & & & ; ; ; ; ; ; ; ; ; ;   $) ) ) ) ) ) ) ) ~5'w'HWxx(9::H[!!88J#7#7HX 4 4X > >H[!!#67#6G(*?*?*?@@$ $ HY!5!5c!:!:HZ  "6'"6t"<"<H\""$8G$8$=$=H^$$&:g&:1&=&=HX 4 4R 8 8H_%%';w';C'@'@H[!!#77#7#<#<H[!!#77#7#<#<	
   67 7 7 7 7z 7 7 7tE E E E E/ E E E*-      r   