
    '	4j9                        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y)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                   "   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!jD                  Z#e!e
d<   e$jJ                  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*Z2y),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     @/DATA/.local/lib/python3.12/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                 P    t        |       }t        |j                        |_        |S N)r   r=   )self	new_states     r.   r   zGraphicsState.copy>   s$    J	!%i&<&<!=	r-   c                 |    t        |       D ci c]#  }|j                  t        | |j                        % c}S c c}w r@   )r   namegetattr)rA   state_fields     r.   	as_kwargszGraphicsState.as_kwargsC   sE      &d|
+ gdK,<,<==+
 	
 
s   (9)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   rG   r,   r-   r.   r   r      sz   Z@SJZ/*<=S@SJZ/*<=S@SJZ/*<=SItM4J OU L%KL%15L(8g-.5(--%*<&L$sEz"  J"--Ix'"--Ix'IuIuIuKHeHeHeJ-1L(4S>*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j0                  dee   ddfd       Zedeeez  ez     fd       Zej0                  dee   ddfd       Zedeeez  ez     fd       Zej0                  dee   ddfd       Zedefd       Zej0                  deddfd       Zedefd       Zej0                  deddfd       Zedefd       Zej0                  deddfd       Zede fd       Z!e!j0                  de ddfd       Z!ede fd       Z"e"j0                  de ddfd       Z"edefd       Z#e#j0                  deddfd       Z#ede fd       Z$e$j0                  de ddfd        Z$ede fd!       Z%e%j0                  de ddfd"       Z%edee&e'z     fd#       Z(e(j0                  de&e'z  ddfd$       Z(edefd%       Z)e)j0                  deddfd&       Z)ede*ee f   fd'       Z+e+j0                  de*ee f   ddfd(       Z+ede fd)       Z,e,j0                  de ddfd*       Z,ede-fd+       Z.e.j0                  de-ez  e/z  ddfd,       Z.ede0fd-       Z1e1j0                  de0ez  ddfd.       Z1ede fd/       Z2e2j0                  de ddfd0       Z2ede fd1       Z3e3j0                  de ddfd2       Z3ede fd3       Z4e4j0                  de ddfd4       Z4ede fd5       Z5e5j0                  de ddfd6       Z5ede fd7       Z6e6j0                  de ddfd8       Z6ede fd9       Z7e7j0                  de ddfd:       Z7ede fd;       Z8e8j0                  de ddfd<       Z8ede fd=       Z9e9j0                  de ddfd>       Z9edee*ee
f      fd?       Z:e:j0                  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                 D    t               g| _        t        |   |i | y r@   )r   _GraphicsStateMixin__statestacksuper__init__)rA   rW   rX   	__class__s      r.   r\   zGraphicsStateMixin.__init__]   s"    3@?2C$)&)r-   newc                 `    || j                         }| j                  j                  |       |S )z"Push a graphics state on the stack)_get_current_graphics_staterZ   append)rA   r^   s     r.   _push_local_stackz$GraphicsStateMixin._push_local_stacka   s.    ;224C  %
r-   c                 6    | j                   j                         S )z(Pop the last graphics state on the stack)rZ   poprA   s    r.   _pop_local_stackz#GraphicsStateMixin._pop_local_stackh   s      $$&&r-   c                 <    | j                   d   j                         S )z#Retrieve the current graphics state)rZ   r   re   s    r.   r`   z.GraphicsStateMixin._get_current_graphics_statel   s      $))++r-   c                 2    t        | j                        dkD  S )z-Indicate if a nested graphics state is activer
   )lenrZ   re   s    r.   !_is_current_graphics_state_nestedz4GraphicsStateMixin._is_current_graphics_state_nestedp   s    4$$%))r-   c                 4    | j                   d   j                  S Nrh   )rZ   r   re   s    r.   r   zGraphicsStateMixin.draw_colort         $///r-   vc                 F    |d n
t        |      | j                  d   _        y rm   )r   rZ   r   rA   ro   s     r.   r   zGraphicsStateMixin.draw_colorx   &     ID#:1#= 	"(r-   c                 4    | j                   d   j                  S rm   )rZ   r   re   s    r.   r   zGraphicsStateMixin.fill_color   rn   r-   c                 F    |d n
t        |      | j                  d   _        y rm   )r   rZ   r   rq   s     r.   r   zGraphicsStateMixin.fill_color   rr   r-   c                 4    | j                   d   j                  S rm   )rZ   r   re   s    r.   r   zGraphicsStateMixin.text_color   rn   r-   c                 F    |d n
t        |      | j                  d   _        y rm   )r   rZ   r   rq   s     r.   r   zGraphicsStateMixin.text_color   rr   r-   c                 4    | j                   d   j                  S rm   rZ   r   re   s    r.   r   zGraphicsStateMixin.underline         $...r-   c                 ,    || j                   d   _        y rm   rx   rq   s     r.   r   zGraphicsStateMixin.underline   s    *+"'r-   c                 4    | j                   d   j                  S rm   rZ   r   re   s    r.   r   z GraphicsStateMixin.strikethrough   s      $222r-   c                 ,    || j                   d   _        y rm   r|   rq   s     r.   r   z GraphicsStateMixin.strikethrough   s    ./"+r-   c                 4    | j                   d   j                  S rm   rZ   r   re   s    r.   r   zGraphicsStateMixin.font_style   rn   r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r   zGraphicsStateMixin.font_style       +,"(r-   c                 4    | j                   d   j                  S rm   rZ   r!   re   s    r.   r!   z"GraphicsStateMixin.font_stretching   s      $444r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r!   z"GraphicsStateMixin.font_stretching   s    01"-r-   c                 4    | j                   d   j                  S rm   rZ   r"   re   s    r.   r"   zGraphicsStateMixin.char_spacing         $111r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r"   zGraphicsStateMixin.char_spacing       -."*r-   c                 4    | j                   d   j                  S rm   rZ   r#   re   s    r.   r#   zGraphicsStateMixin.font_family   s      $000r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r#   zGraphicsStateMixin.font_family   s    ,-")r-   c                 4    | j                   d   j                  S rm   rZ   r$   re   s    r.   r$   zGraphicsStateMixin.font_size_pt   r   r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r$   zGraphicsStateMixin.font_size_pt   r   r-   c                     t         rt        | j                  t              sJ | j                  d   j
                  | j                  z  S rm   )r   
isinstancekrR   rZ   r$   re   s    r.   	font_sizezGraphicsStateMixin.font_size   s9    dffe,,,  $11DFF::r-   c                 F    || j                   z  | j                  d   _        y rm   )r   rZ   r$   rq   s     r.   r   zGraphicsStateMixin.font_size   s    -.Z"*r-   c                 4    | j                   d   j                  S rm   rZ   r%   re   s    r.   r%   zGraphicsStateMixin.current_font   r   r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r%   zGraphicsStateMixin.current_font   r   r-   c                 4    | j                   d   j                  S rm   rZ   r&   re   s    r.   r&   z.GraphicsStateMixin.current_font_is_set_on_page   s      $@@@r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r&   z.GraphicsStateMixin.current_font_is_set_on_page   s    <="9r-   c                 4    | j                   d   j                  S rm   rZ   r1   re   s    r.   r1   zGraphicsStateMixin.dash_pattern   r   r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r1   zGraphicsStateMixin.dash_pattern   r   r-   c                 4    | j                   d   j                  S rm   rZ   r2   re   s    r.   r2   zGraphicsStateMixin.line_width   rn   r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r2   zGraphicsStateMixin.line_width   r   r-   c                 4    | j                   d   j                  S rm   )rZ   r3   re   s    r.   r3   zGraphicsStateMixin.text_mode   ry   r-   c                 R    t        j                  |      | j                  d   _        y rm   )r   coercerZ   r3   rq   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))
        rh   )r   r   rZ   r4   r   re   s    r.   r4   zGraphicsStateMixin.char_vpos  s?     d//3==xHHH  $...r-   c                 R    t        j                  |      | j                  d   _        y)z
        Set vertical character position relative to line.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)r   r   rZ   r4   rq   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))
        rh   )r   r   rZ   r5   rR   re   s    r.   r5   zGraphicsStateMixin.sub_scale  ?     d//3==uEEE  $...r-   c                 >    t        |      | j                  d   _        y)z
        Set scale factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)rR   rZ   r5   rq   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))
        rh   )r   r   rZ   r6   rR   re   s    r.   r6   zGraphicsStateMixin.sup_scale)  r   r-   c                 >    t        |      | j                  d   _        y)z
        Set scale factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)rR   rZ   r6   rq   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))
        rh   )r   r   rZ   r7   rR   re   s    r.   r7   zGraphicsStateMixin.nom_scale;  r   r-   c                 >    t        |      | j                  d   _        y)z
        Set scale factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)rR   rZ   r7   rq   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))
        rh   )r   r   rZ   r8   rR   re   s    r.   r8   zGraphicsStateMixin.denom_scaleM  s?     d//3??GGG  $000r-   c                 >    t        |      | j                  d   _        y)z
        Set scale factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)rR   rZ   r8   rq   s     r.   r8   zGraphicsStateMixin.denom_scaleW  s     -2!H")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))
        rh   )r   r   rZ   r9   rR   re   s    r.   r9   zGraphicsStateMixin.sub_lift_  ?     d//3<<eDDD  $---r-   c                 >    t        |      | j                  d   _        y)z
        Set lift factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)rR   rZ   r9   rq   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))
        rh   )r   r   rZ   r:   rR   re   s    r.   r:   zGraphicsStateMixin.sup_liftq  r   r-   c                 >    t        |      | j                  d   _        y)z
        Set lift factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)rR   rZ   r:   rq   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))
        rh   )r   r   rZ   r;   rR   re   s    r.   r;   zGraphicsStateMixin.nom_lift  r   r-   c                 >    t        |      | j                  d   _        y)z
        Set lift factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)rR   rZ   r;   rq   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))
        rh   )r   r   rZ   r<   rR   re   s    r.   r<   zGraphicsStateMixin.denom_lift  s?     d//3>>FFF  $///r-   c                 >    t        |      | j                  d   _        y)z
        Set lift factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        rh   N)rR   rZ   r<   rq   s     r.   r<   zGraphicsStateMixin.denom_lift  s     ,18"(r-   c                 4    | j                   d   j                  S rm   rZ   r=   re   s    r.   r=   zGraphicsStateMixin.text_shaping  r   r-   c                 ,    || j                   d   _        y rm   r   rq   s     r.   r=   zGraphicsStateMixin.text_shaping  r   r-   c                 "   t        | j                  t        j                  | j                        | j
                  | j                  | j                  k7  r| j                  nd| j                  | j                  k7  r| j                        S 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_COLORre   s    r.   	font_facezGraphicsStateMixin.font_face  s{    
 ##!((9%%#'??d6M6M#MSW $(??d6M6M#M

 
	
 TX

 
	
r-   r@   )>rH   rI   rJ   rK   rL   DEFAULT_DRAW_COLORrN   r   rO   r   r   r\   r	   StateStackTyperb   rf   r`   rP   rk   propertyr   r   r   r   setterr   r   r   r   r   rQ   r   rR   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__)r]   s   @r.   rV   rV   M   s   	 -,,*c *S *T *Xn%=  '. ',^ ,*4 * 0HY%;j%HI 0 0 
J
 

 
 0HY%;j%HI 0 0 
J
 

 
 0HY%;j%HI 0 0 
J
 

 
 /4 / / ,4 ,D , , 3t 3 3 0t 0 0 0 0C 0 0 -C -D - - 5 5 5 2 24 2 2 2e 2 2 /e / / / 1S 1 1 .S .T . . 2e 2 2 /e / / / ;5 ; ;
 85 8T 8 8 2hx''9: 2 2 /h0 /T / / AT A A !''>T >d > (> 2d3:. 2 2 /d3:. /4 / / 0E 0 0 -E -d - - /8 / / =8c>C/ =D = = /8 / / =8c> =d = = /5 / / 35 3T 3 3 /5 / / 35 3T 3 3 /5 / / 35 3T 3 3 1U 1 1 5U 5t 5 5 .% . . __2% 2D 2 2 .% . . __2% 2D 2 2 .% . . __2% 2D 2 2 0E 0 0 4E 4d 4 4 2htCH~6 2 2 /htCH~6 /4 / /
8 
r-   rV   )z$GraphicsStateMixin._push_local_stackz#GraphicsStateMixin._pop_local_stackz.GraphicsStateMixin._get_current_graphics_statez4GraphicsStateMixin._is_current_graphics_state_nestedN)rK   r   dataclassesr   r   r   typingr   r   r	   drawing_primitivesr   r   r   r   r   enumsr   r   r   fontsr   r   r   rL   rN   rO   r   r   rV   __pdoc__r,   r-   r.   <module>r      s     0 0 / /  4 3 . . m  m  m  (
 (
 (
V q
 q
j -1+/6:<@	r-   