
    Rj9                     .   d Z ddlmZ ddlmZ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dlmZmZmZ ddlmZmZmZ  ed          Z ed          Z ed          Z ed	
           G d d                      ZeZ G d d          Zd	d	d	d	dZdS )a]  
Mixin class for managing a stack of graphics state variables.

The contents of this module are internal to fpdf2, and not part of the public API.
They may change at any time without prior warning or any deprecation period,
in non-backward-compatible ways.

Usage documentation at: <https://py-pdf.github.io/fpdf2/Internals.html#graphicsstatemixin>
    )copy)	dataclassfieldfields)TYPE_CHECKINGAnyOptional   )
ColorInput
DeviceCMYK
DeviceGray	DeviceRGBconvert_to_device_color)CharVPosTextEmphasisTextMode)CoreFontFontFaceTTFFontT)slotsc                   F   e Zd ZU dZeZeeez  e	z           e
d<   eZeeez  e	z           e
d<   eZeeez  e	z           e
d<   dZee
d<   dZee
d<   dZee
d	<   d
Zee
d<   dZee
d<   dZee
d<   dZee
d<   dZeeez           e
d<   dZee
d<    ed           Zeeef         e
d<   dZ ee
d<   e!j"        Z#e!e
d<   e$j%        Z&e$e
d<   dZ'ee
d<   dZ(ee
d<   dZ)ee
d<   dZ*ee
d<   dZ+ee
d <   d!Z,ee
d"<   d#Z-ee
d$<   d%Z.ee
d&<   dZ/eeee0f                  e
d'<   d+d)Z1d(eee0f         fd*Z2dS ),GraphicsStatezPMutable snapshot of the current graphics state for fragments and local contexts.
draw_color
fill_color
text_colorF	underlinestrikethrough 
font_styled   font_stretchingr   char_spacingfont_familyfont_size_ptNcurrent_fontcurrent_font_is_set_on_pagec                  &    t          ddd          S )Nr   )dashgapphase)dict     T/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/fpdf/graphics_state.py<lambda>zGraphicsState.<lambda>/   s    !! < < < r-   )default_factorydash_pattern
line_width	text_mode	char_vposgffffff?	sub_scale	sup_scaleg      ?	nom_scaledenom_scaleg333333ÿsub_liftg?sup_liftg?nom_liftg        
denom_lifttext_shapingreturnc                 V    t          |           }t          |j                  |_        |S N)r   r=   )self	new_states     r.   r   zGraphicsState.copy>   s&    JJ	!%i&<!=!=	r-   c                 :      fdt                     D             S )Nc                 F    i | ]}|j         t          |j                   S r,   )namegetattr).0state_fieldrA   s     r.   
<dictcomp>z+GraphicsState.as_kwargs.<locals>.<dictcomp>D   s;     
 
 
 gdK,<==
 
 
r-   )r   rA   s   `r.   	as_kwargszGraphicsState.as_kwargsC   s4    
 
 
 
%d||
 
 
 	
r-   )r>   r   )3__name__
__module____qualname____doc___DEFAULT_DRAW_COLORr   r	   r   r   r   __annotations___DEFAULT_FILL_COLORr   _DEFAULT_TEXT_COLORr   r   boolr   r   strr!   floatr"   r#   r$   r%   r   r   r&   r   r1   r+   r2   r   FILLr3   r   LINEr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r   r   rK   r,   r-   r.   r   r      sT        ZZ@SJZ/*<=SSS@SJZ/*<=SSS@SJZ/*<=SSSItM4J OU   L%KL%15L(8g-.555(----%*U<<& & &L$sEz"    J"-Ix'''"-Ix'''IuIuIuKHeHeHeJ-1L(4S>*111   

4S> 
 
 
 
 
 
r-   r   c                       e Zd ZdZeZeZeZ	de
de
ddf fdZdBdee         defdZdefd	Zdefd
ZdefdZedeeez  ez           fd            Zej        dee         ddfd            Zedeeez  ez           fd            Zej        dee         ddfd            Zedeeez  ez           fd            Zej        dee         ddfd            Zedefd            Zej        deddfd            Zedefd            Zej        deddfd            Zedefd            Zej        deddfd            Zede fd            Z!e!j        de ddfd            Z!ede fd            Z"e"j        de ddfd            Z"edefd            Z#e#j        deddfd            Z#ede fd            Z$e$j        de ddfd             Z$ede fd!            Z%e%j        de ddfd"            Z%edee&e'z           fd#            Z(e(j        de&e'z  ddfd$            Z(edefd%            Z)e)j        deddfd&            Z)ede*ee f         fd'            Z+e+j        de*ee f         ddfd(            Z+ede fd)            Z,e,j        de ddfd*            Z,ede-fd+            Z.e.j        de-ez  e/z  ddfd,            Z.ede0fd-            Z1e1j        de0ez  ddfd.            Z1ede fd/            Z2e2j        de ddfd0            Z2ede fd1            Z3e3j        de ddfd2            Z3ede fd3            Z4e4j        de ddfd4            Z4ede fd5            Z5e5j        de ddfd6            Z5ede fd7            Z6e6j        de ddfd8            Z6ede fd9            Z7e7j        de ddfd:            Z7ede fd;            Z8e8j        de ddfd<            Z8ede fd=            Z9e9j        de ddfd>            Z9edee*ee
f                  fd?            Z:e:j        dee*ee
f                  ddfd@            Z:de;fdAZ< xZ=S )CGraphicsStateMixina  Mixin class for managing a stack of graphics state variables.

    To the subclassing library and its users, the variables look like
    normal instance attributes. But by the magic of properties, we can
    push and pop levels as needed, and users will always see and modify
    just the current version.

    This class is mixed in by fpdf.FPDF(), and is not meant to be used
    directly by user code.
    argskwargsr>   Nc                 b    t                      g| _         t                      j        |i | d S r@   )r   _GraphicsStateMixin__statestacksuper__init__)rA   r[   r\   	__class__s      r.   r`   zGraphicsStateMixin.__init__]   s4    3@??2C$)&)))))r-   newc                 f    ||                                  }| j                            |           |S )z"Push a graphics state on the stack)_get_current_graphics_stater^   append)rA   rb   s     r.   _push_local_stackz$GraphicsStateMixin._push_local_stacka   s4    ;2244C  %%%
r-   c                 4    | j                                         S )z(Pop the last graphics state on the stack)r^   poprJ   s    r.   _pop_local_stackz#GraphicsStateMixin._pop_local_stackh   s     $$&&&r-   c                 @    | j         d                                         S )z#Retrieve the current graphics state)r^   r   rJ   s    r.   rd   z.GraphicsStateMixin._get_current_graphics_statel   s     $))+++r-   c                 2    t          | j                  dk    S )z-Indicate if a nested graphics state is activer
   )lenr^   rJ   s    r.   !_is_current_graphics_state_nestedz4GraphicsStateMixin._is_current_graphics_state_nestedp   s    4$%%))r-   c                 &    | j         d         j        S Nrk   )r^   r   rJ   s    r.   r   zGraphicsStateMixin.draw_colort        $//r-   vc                 L    |d nt          |          | j        d         _        d S rp   )r   r^   r   rA   rr   s     r.   r   zGraphicsStateMixin.draw_colorx   .     IDD#:1#=#= 	"(((r-   c                 &    | j         d         j        S rp   )r^   r   rJ   s    r.   r   zGraphicsStateMixin.fill_color   rq   r-   c                 L    |d nt          |          | j        d         _        d S rp   )r   r^   r   rt   s     r.   r   zGraphicsStateMixin.fill_color   ru   r-   c                 &    | j         d         j        S rp   )r^   r   rJ   s    r.   r   zGraphicsStateMixin.text_color   rq   r-   c                 L    |d nt          |          | j        d         _        d S rp   )r   r^   r   rt   s     r.   r   zGraphicsStateMixin.text_color   ru   r-   c                 &    | j         d         j        S rp   r^   r   rJ   s    r.   r   zGraphicsStateMixin.underline        $..r-   c                 *    || j         d         _        d S rp   r{   rt   s     r.   r   zGraphicsStateMixin.underline   s    *+"'''r-   c                 &    | j         d         j        S rp   r^   r   rJ   s    r.   r   z GraphicsStateMixin.strikethrough   s     $22r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r   z GraphicsStateMixin.strikethrough   s    ./"+++r-   c                 &    | j         d         j        S rp   r^   r   rJ   s    r.   r   zGraphicsStateMixin.font_style   rq   r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r   zGraphicsStateMixin.font_style       +,"(((r-   c                 &    | j         d         j        S rp   r^   r!   rJ   s    r.   r!   z"GraphicsStateMixin.font_stretching   s     $44r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r!   z"GraphicsStateMixin.font_stretching   s    01"---r-   c                 &    | j         d         j        S rp   r^   r"   rJ   s    r.   r"   zGraphicsStateMixin.char_spacing        $11r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r"   zGraphicsStateMixin.char_spacing       -."***r-   c                 &    | j         d         j        S rp   r^   r#   rJ   s    r.   r#   zGraphicsStateMixin.font_family   s     $00r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r#   zGraphicsStateMixin.font_family   s    ,-")))r-   c                 &    | j         d         j        S rp   r^   r$   rJ   s    r.   r$   zGraphicsStateMixin.font_size_pt   r   r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r$   zGraphicsStateMixin.font_size_pt   r   r-   c                 |    t           rt          | j        t                    sJ | j        d         j        | j        z  S rp   )r   
isinstancekrV   r^   r$   rJ   s    r.   	font_sizezGraphicsStateMixin.font_size   s:     	-dfe,,,,, $1DF::r-   c                 :    || j         z  | j        d         _        d S rp   )r   r^   r$   rt   s     r.   r   zGraphicsStateMixin.font_size   s    -.Z"***r-   c                 &    | j         d         j        S rp   r^   r%   rJ   s    r.   r%   zGraphicsStateMixin.current_font   r   r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r%   zGraphicsStateMixin.current_font   r   r-   c                 &    | j         d         j        S rp   r^   r&   rJ   s    r.   r&   z.GraphicsStateMixin.current_font_is_set_on_page   s     $@@r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r&   z.GraphicsStateMixin.current_font_is_set_on_page   s    <="999r-   c                 &    | j         d         j        S rp   r^   r1   rJ   s    r.   r1   zGraphicsStateMixin.dash_pattern   r   r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r1   zGraphicsStateMixin.dash_pattern   r   r-   c                 &    | j         d         j        S rp   r^   r2   rJ   s    r.   r2   zGraphicsStateMixin.line_width   rq   r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r2   zGraphicsStateMixin.line_width   r   r-   c                 &    | j         d         j        S rp   )r^   r3   rJ   s    r.   r3   zGraphicsStateMixin.text_mode   r|   r-   c                 N    t          j        |          | j        d         _        d S rp   )r   coercer^   r3   rt   s     r.   r3   zGraphicsStateMixin.text_mode  s"    *2/!*<*<"'''r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return vertical character position relative to line.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r4   r   rJ   s    r.   r4   zGraphicsStateMixin.char_vpos  s?      	Id/3=xHHHHH $..r-   c                 N    t          j        |          | j        d         _        dS )z
        Set vertical character position relative to line.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)r   r   r^   r4   rt   s     r.   r4   zGraphicsStateMixin.char_vpos  s$     +3/!*<*<"'''r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return scale factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r5   rV   rJ   s    r.   r5   zGraphicsStateMixin.sub_scale  ?      	Fd/3=uEEEEE $..r-   c                 D    t          |          | j        d         _        dS )z
        Set scale factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)rV   r^   r5   rt   s     r.   r5   zGraphicsStateMixin.sub_scale!        +0(("'''r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return scale factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r6   rV   rJ   s    r.   r6   zGraphicsStateMixin.sup_scale)  r   r-   c                 D    t          |          | j        d         _        dS )z
        Set scale factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)rV   r^   r6   rt   s     r.   r6   zGraphicsStateMixin.sup_scale3  r   r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return scale factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r7   rV   rJ   s    r.   r7   zGraphicsStateMixin.nom_scale;  r   r-   c                 D    t          |          | j        d         _        dS )z
        Set scale factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)rV   r^   r7   rt   s     r.   r7   zGraphicsStateMixin.nom_scaleE  r   r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return scale factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r8   rV   rJ   s    r.   r8   zGraphicsStateMixin.denom_scaleM  s?      	Hd/3?GGGGG $00r-   c                 D    t          |          | j        d         _        dS )z
        Set scale factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)rV   r^   r8   rt   s     r.   r8   zGraphicsStateMixin.denom_scaleW  s      -2!HH")))r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return lift factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r9   rV   rJ   s    r.   r9   zGraphicsStateMixin.sub_lift_  ?      	Ed/3<eDDDDD $--r-   c                 D    t          |          | j        d         _        dS )z
        Set lift factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)rV   r^   r9   rt   s     r.   r9   zGraphicsStateMixin.sub_lifti        */q"&&&r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return lift factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r:   rV   rJ   s    r.   r:   zGraphicsStateMixin.sup_liftq  r   r-   c                 D    t          |          | j        d         _        dS )z
        Set lift factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)rV   r^   r:   rt   s     r.   r:   zGraphicsStateMixin.sup_lift{  r   r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return lift factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r;   rV   rJ   s    r.   r;   zGraphicsStateMixin.nom_lift  r   r-   c                 D    t          |          | j        d         _        dS )z
        Set lift factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)rV   r^   r;   rt   s     r.   r;   zGraphicsStateMixin.nom_lift  r   r-   c                     t           r't          | j        d         j        t                    sJ | j        d         j        S )z
        Return lift factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   )r   r   r^   r<   rV   rJ   s    r.   r<   zGraphicsStateMixin.denom_lift  s?      	Gd/3>FFFFF $//r-   c                 D    t          |          | j        d         _        dS )z
        Set lift factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rk   N)rV   r^   r<   rt   s     r.   r<   zGraphicsStateMixin.denom_lift  s      ,188"(((r-   c                 &    | j         d         j        S rp   r^   r=   rJ   s    r.   r=   zGraphicsStateMixin.text_shaping  r   r-   c                 *    || j         d         _        d S rp   r   rt   s     r.   r=   zGraphicsStateMixin.text_shaping  r   r-   c                     t          | j        t          j        | j                  | j        | j        | j        k    r| j        nd| j        | j	        k    r| j        nd          S )z|
        Return a `fpdf.fonts.FontFace` instance
        representing a subset of properties of this GraphicsState.
        N)familyemphasissize_ptcolorr   )
r   r#   r   r   r   r$   r   DEFAULT_TEXT_COLORr   DEFAULT_FILL_COLORrJ   s    r.   	font_facezGraphicsStateMixin.font_face  sk    
 #!(99%#'?d6M#M#MSW $(?d6M#M#MSW

 

 

 
	
r-   r@   )>rL   rM   rN   rO   rP   DEFAULT_DRAW_COLORrR   r   rS   r   r   r`   r	   StateStackTyperf   ri   rd   rT   rn   propertyr   r   r   r   setterr   r   r   r   r   rU   r   rV   r!   r"   r#   r$   r   r   r   r%   r&   r+   r1   r2   r   r3   intr   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r   r   __classcell__)ra   s   @r.   rZ   rZ   M   s
       	 	 -,,*c *S *T * * * * * * Xn%=     '. ' ' ' ',^ , , , ,*4 * * * * 0HY%;j%HI 0 0 0 X0 
J
 

 
 
 
 0HY%;j%HI 0 0 0 X0 
J
 

 
 
 
 0HY%;j%HI 0 0 0 X0 
J
 

 
 
 
 /4 / / / X/ ,4 ,D , , , , 3t 3 3 3 X3 0t 0 0 0 0 0 0C 0 0 0 X0 -C -D - - - - 5 5 5 5 X5 2 24 2 2 2 2 2e 2 2 2 X2 /e / / / / / 1S 1 1 1 X1 .S .T . . . . 2e 2 2 2 X2 /e / / / / / ;5 ; ; ; X;
 85 8T 8 8 8 8 2hx''9: 2 2 2 X2 /h0 /T / / / / AT A A A XA !'>T >d > > > ('> 2d3:. 2 2 2 X2 /d3:. /4 / / / / 0E 0 0 0 X0 -E -d - - - - /8 / / / X/ =8c>C/ =D = = = = /8 / / / X/ =8c> =d = = = = /5 / / / X/ 35 3T 3 3 3 3 /5 / / / X/ 35 3T 3 3 3 3 /5 / / / X/ 35 3T 3 3 3 3 1U 1 1 1 X1 5U 5t 5 5 5 5 .% . . . X. _2% 2D 2 2 2 _2 .% . . . X. _2% 2D 2 2 2 _2 .% . . . X. _2% 2D 2 2 2 _2 0E 0 0 0 X0 4E 4d 4 4 4 4 2htCH~6 2 2 2 X2 /htCH~6 /4 / / / /
8 
 
 
 
 
 
 
 
r-   rZ   )z$GraphicsStateMixin._push_local_stackz#GraphicsStateMixin._pop_local_stackz.GraphicsStateMixin._get_current_graphics_statez4GraphicsStateMixin._is_current_graphics_state_nestedN)rO   r   dataclassesr   r   r   typingr   r   r	   drawing_primitivesr   r   r   r   r   enumsr   r   r   fontsr   r   r   rP   rR   rS   r   r   rZ   __pdoc__r,   r-   r.   <module>r      s          0 0 0 0 0 0 0 0 0 0 / / / / / / / / / /              4 3 3 3 3 3 3 3 3 3 . . . . . . . . . . jmm  jmm  jmm  (
 (
 (
 (
 (
 (
 (
 (
V q
 q
 q
 q
 q
 q
 q
 q
j -1+/6:<@	 r-   