U
    :vhi.                     @   s\   d Z ddlmZ ddlmZ ddlmZmZmZ ddlm	Z	 G d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.
    )copy   )
DeviceGray)CharVPosTextEmphasisTextMode)FontFacec                       s  e Zd ZdZedZedZedZ fddZd^ddZ	dd	 Z
d
d Zdd Zedd Zejdd Zedd Zejdd Zedd Zejdd Zedd Zejdd Zedd Zejdd Zedd Zejdd Zed d! Zejd"d! Zed#d$ Zejd%d$ Zed&d' Zejd(d' Zed)d* Zejd+d* Zed,d- Zejd.d- Zed/d0 Zejd1d0 Zed2d3 Zejd4d3 Zed5d6 Zejd7d6 Zed8d9 Zejd:d9 Zed;d< Zejd=d< Zed>d? Zejd@d? ZedAdB Z e jdCdB Z edDdE Z!e!jdFdE Z!edGdH Z"e"jdIdH Z"edJdK Z#e#jdLdK Z#edMdN Z$e$jdOdN Z$edPdQ Z%e%jdRdQ Z%edSdT Z&e&jdUdT Z&edVdW Z'e'jdXdW Z'edYdZ Z(e(jd[dZ Z(d\d] Z)  Z*S )_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.
    r   c                    sd   t | j| j| jdddddddi dt dddddtjtjdddddd	d
dd dg| _t	 j
|| d S )NF d   r   )ZdashZgapphasegffffff?g      ?g333333ÿg?g?g        )
draw_color
fill_color
text_color	underlinestrikethrough
font_stylefont_stretchingchar_spacingfont_familyfont_size_ptcurrent_fontcurrent_font_is_set_on_pagedash_pattern
line_width	text_mode	char_vpos	sub_scale	sup_scale	nom_scaledenom_scalesub_liftsup_liftnom_lift
denom_lifttext_shaping)dictDEFAULT_DRAW_COLORDEFAULT_FILL_COLORDEFAULT_TEXT_COLORr   ZFILLr   ZLINE_GraphicsStateMixin__statestacksuper__init__)selfargskwargs	__class__ 7/tmp/pip-unpacked-wheel-dvf6lv8i/fpdf/graphics_state.pyr,       s:    zGraphicsStateMixin.__init__Nc                 C   s   |s|   }| j| |S )z"Push a graphics state on the stack)_get_current_graphics_stater*   append)r-   newr2   r2   r3   _push_local_stack@   s    $GraphicsStateMixin._push_local_stackc                 C   s
   | j  S )z(Pop the last graphics state on the stack)r*   popr-   r2   r2   r3   _pop_local_stackG   s    #GraphicsStateMixin._pop_local_stackc                 C   s"   t | jd }t |d |d< |S )z#Retrieve the current graphics stater%   )r   r*   )r-   Zgsr2   r2   r3   r4   K   s    .GraphicsStateMixin._get_current_graphics_statec                 C   s   t | jdkS )z7Indicate if the stack contains items (else it is empty)r   )lenr*   r:   r2   r2   r3   !_is_current_graphics_state_nestedT   s    4GraphicsStateMixin._is_current_graphics_state_nestedc                 C   s   | j d d S Nr=   r   r*   r:   r2   r2   r3   r   X   s    zGraphicsStateMixin.draw_colorc                 C   s   || j d d< d S rB   rC   r-   vr2   r2   r3   r   \   s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r   `   s    zGraphicsStateMixin.fill_colorc                 C   s   || j d d< d S rF   rC   rD   r2   r2   r3   r   d   s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r   h   s    zGraphicsStateMixin.text_colorc                 C   s   || j d d< d S rG   rC   rD   r2   r2   r3   r   l   s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r   p   s    zGraphicsStateMixin.underlinec                 C   s   || j d d< d S rH   rC   rD   r2   r2   r3   r   t   s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r   x   s    z GraphicsStateMixin.strikethroughc                 C   s   || j d d< d S rI   rC   rD   r2   r2   r3   r   |   s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.font_stylec                 C   s   || j d d< d S rJ   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    z"GraphicsStateMixin.font_stretchingc                 C   s   || j d d< d S rK   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.char_spacingc                 C   s   || j d d< d S rL   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.font_familyc                 C   s   || j d d< d S rM   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.font_size_ptc                 C   s   || j d d< d S rN   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d | j S rN   )r*   kr:   r2   r2   r3   	font_size   s    zGraphicsStateMixin.font_sizec                 C   s   || j  | jd d< d S rN   )rO   r*   rD   r2   r2   r3   rP      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.current_fontc                 C   s   || j d d< d S rQ   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    z.GraphicsStateMixin.current_font_is_set_on_pagec                 C   s   || j d d< d S rR   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.dash_patternc                 C   s   || j d d< d S rS   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.line_widthc                 C   s   || j d d< d S rT   rC   rD   r2   r2   r3   r      s    c                 C   s   | j d d S Nr=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.text_modec                 C   s   t || jd d< d S rU   )r   coercer*   rD   r2   r2   r3   r      s    c                 C   s   | j d d S )z
        Return vertical character position relative to line.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.char_vposc                 C   s   t || jd d< dS )z
        Set vertical character position relative to line.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r   N)r   rV   r*   rD   r2   r2   r3   r      s    c                 C   s   | j d d S )z
        Return scale factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.sub_scalec                 C   s   t || jd d< dS )z
        Set scale factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r   Nfloatr*   rD   r2   r2   r3   r      s    c                 C   s   | j d d S )z
        Return scale factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r   rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.sup_scalec                 C   s   t || jd d< dS )z
        Set scale factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r   NrW   rD   r2   r2   r3   r      s    c                 C   s   | j d d S )z
        Return scale factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r   rC   r:   r2   r2   r3   r     s    zGraphicsStateMixin.nom_scalec                 C   s   t || jd d< dS )z
        Set scale factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r   NrW   rD   r2   r2   r3   r     s    c                 C   s   | j d d S )z
        Return scale factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r    rC   r:   r2   r2   r3   r      s    zGraphicsStateMixin.denom_scalec                 C   s   t || jd d< dS )z
        Set scale factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r    NrW   rD   r2   r2   r3   r       s    c                 C   s   | j d d S )z
        Return lift factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r!   rC   r:   r2   r2   r3   r!   (  s    zGraphicsStateMixin.sub_liftc                 C   s   t || jd d< dS )z
        Set lift factor for subscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r!   NrW   rD   r2   r2   r3   r!   0  s    c                 C   s   | j d d S )z
        Return lift factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r"   rC   r:   r2   r2   r3   r"   8  s    zGraphicsStateMixin.sup_liftc                 C   s   t || jd d< dS )z
        Set lift factor for superscript text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r"   NrW   rD   r2   r2   r3   r"   @  s    c                 C   s   | j d d S )z
        Return lift factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r#   rC   r:   r2   r2   r3   r#   H  s    zGraphicsStateMixin.nom_liftc                 C   s   t || jd d< dS )z
        Set lift factor for nominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r#   NrW   rD   r2   r2   r3   r#   P  s    c                 C   s   | j d d S )z
        Return lift factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r$   rC   r:   r2   r2   r3   r$   X  s    zGraphicsStateMixin.denom_liftc                 C   s   t || jd d< dS )z
        Set lift factor for denominator text.
        ([docs](../TextStyling.html#subscript-superscript-and-fractional-numbers))
        r=   r$   NrW   rD   r2   r2   r3   r$   `  s    c                 C   s   | j d d S Nr=   r%   rC   r:   r2   r2   r3   r%   h  s    zGraphicsStateMixin.text_shapingc                 C   s   || j d d< d S rY   rC   rD   r2   r2   r3   r%   l  s    c                 C   sB   t | jt| j| j| j| jkr&| jnd| j| j	kr:| jnddS )z|
        Return a `fpdf.fonts.FontFace` instance
        representing a subset of properties of this GraphicsState.
        N)familyZemphasisZsize_ptcolorr   )
r   r   r   rV   r   r   r   r)   r   r(   r:   r2   r2   r3   	font_facep  s    
zGraphicsStateMixin.font_face)N)+__name__
__module____qualname____doc__r   r'   r(   r)   r,   r7   r;   r4   r@   propertyr   setterr   r   r   r   r   r   r   r   r   rP   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r\   __classcell__r2   r2   r0   r3   r	      s    
	



















































r	   T)r8   r<   r>   rA   N)r`   r   Zdrawingr   enumsr   r   r   Zfontsr   r	   Z__pdoc__r2   r2   r2   r3   <module>   s     u