
    Wwg              !       T   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y*)+    )	dataclass)BytesIO)ListOptional)generic   )BasePdfFileWriter   )
FontEngineFontEngineFactoryShapeResult)SimpleFontEngineFactorySimpleFontEngineSimpleFontMetaget_courierT)frozenc                   P    e Zd ZU eed<   eed<   ee   ed<   ej                  ed<   y)r   
first_char	last_charwidths
descriptorN)__name__
__module____qualname__int__annotations__r   r   DictionaryObject     S/var/www/horilla/myenv/lib/python3.12/site-packages/pyhanko/pdf_utils/font/basic.pyr   r      s"    ON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            
       `     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                      y)NFr   )selfs    r    uses_complex_positioningz)SimpleFontEngine.uses_complex_positioning>   s    r   writername	avg_widthmetac                 T    || _         || _        || _        t        |   ||d       y )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                  |      j                  |       |j	                  d       t        |      | j                  z  }t        |j                         |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   sZ    i  %55c:		&Ht~~-	9
 	
r   c                 x   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                  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%xdii'@$hx&8%x0B'C	
	 yy&-&:&:4??&KIl#%,%9%9$..%IIk"#*#6#6G(($++6$Ii  ,0;;+A+A((9,I'( r   N)r   r   r   __doc__propertyr)   r	   strfloatr   r   r1   r   r@   rI   __classcell__)r2   s   @r    r   r   7   sb       *.
>!
> 
> 	
>
 ~&
>
K 
r   r   c                   H    e Zd Z	 d	dededee   fdZd	defdZ	e
d        Zy)
r   Nr+   r,   r-   c                 .    || _         || _        || _        y rJ   )r,   r+   r-   )r(   r+   r,   r-   s       r    r1   z SimpleFontEngineFactory.__init__r   s     #		r   r*   c                 Z    t        || j                  | j                  | j                        S rJ   )r   r+   r,   r-   )r(   r*   
obj_streams      r    create_font_enginez*SimpleFontEngineFactory.create_font_enginey   s    		4>>499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Dr   rJ   )r   r   r   rM   rN   r   r   r1   r	   rT   staticmethodrX   r   r   r    r   r   q   sL    LP$)19.1IN): N E Er   r   
pdf_writerc                 d    t         j                         j                  |       j                         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		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''Wx(9:[!8J#7X 4 4 4X >[!#67#6#6G((*?@$ Y!5!5!5c!:Z "6'"6"6t"<\"$8G$8$8$=^$&:g&:&:1&=X 4 4 4R 8_%';w';';C'@[!#77#7#7#<[!#77#7#7#<	
67z 7tE/ E*- r   