U
    :vh                     @   s  d dl mZmZmZmZ d dlmZ ddlmZ G dd deZ	G dd deZ
G d	d
 d
eZG dd deZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd deZG dd deZG dd de
ZG dd deZG dd de
ZG dd  d e
ZG d!d" d"eZG d#d$ d$e
ZG d%d& d&eZG d'd( d(e
ZG d)d* d*e
ZG d+d, d,eZG d-d. d.e
ZG d/d0 d0e
ZG d1d2 d2e
ZG d3d4 d4e
Z G d5d6 d6eZ!G d7d8 d8e
Z"G d9d: d:e
Z#G d;d< d<e
Z$G d=d> d>e
Z%G d?d@ d@e
Z&G dAdB dBeZ'G dCdD dDeZ(G dEdF dFeZ)G dGdH dHe
Z*G dIdJ dJeZ+G dKdL dLeZ,G dMdN dNeZ-G dOdP dPe
Z.G dQdR dRe
Z/G dSdT dTe
Z0G dUdV dVe
Z1G dWdX dXe
Z2G dYdZ dZe
Z3G d[d\ d\eZ4d]S )^    )EnumIntEnumFlagIntFlag)intern   )Namec                   @   s   e Zd ZdZdZdS )SignatureFlagr      N)__name__
__module____qualname__ZSIGNATURES_EXISTZAPPEND_ONLY r   r   ./tmp/pip-unpacked-wheel-dvf6lv8i/fpdf/enums.pyr	      s   r	   c                   @   s   e Zd ZdZedddZdS )CoerciveEnumzQAn enumeration that provides a helper to coerce strings into enumeration members.Fc                 C   s   t || r|S t |tr|z
| |W S  tk
r6   Y nX z|rF| | n
| |  W S  tk
rf   Y nX t| d| j t| d| j dS )a  
        Attempt to coerce `value` into a member of this enumeration.

        If value is already a member of this enumeration it is returned unchanged.
        Otherwise, if it is a string, attempt to convert it as an enumeration value. If
        that fails, attempt to convert it (case insensitively, by upcasing) as an
        enumeration name.

        If all different conversion attempts fail, an exception is raised.

        Args:
            value (Enum, str): the value to be coerced.

        Raises:
            ValueError: if `value` is a string but neither a member by name nor value.
            TypeError: if `value`'s type is neither a member of the enumeration nor a
                string.
         is not a valid z cannot be converted to a N)
isinstancestr
ValueErrorupperKeyErrorr   	TypeError)clsvalueZcase_sensitiver   r   r   coerce   s    


zCoerciveEnum.coerceN)Fr   r   r   __doc__classmethodr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZedd ZdS )CoerciveIntEnumzl
    An enumeration that provides a helper to coerce strings and integers into
    enumeration members.
    c                 C   s|   t || r|S t |trRz| |  W S  tk
rP   t| d| j dY nX t |trd| |S t| d| j dS )a  
        Attempt to coerce `value` into a member of this enumeration.

        If value is already a member of this enumeration it is returned unchanged.
        Otherwise, if it is a string, attempt to convert it (case insensitively, by
        upcasing) as an enumeration name. Otherwise, if it is an int, attempt to
        convert it as an enumeration value.

        Otherwise, an exception is raised.

        Args:
            value (IntEnum, str, int): the value to be coerced.

        Raises:
            ValueError: if `value` is an int but not a member of this enumeration.
            ValueError: if `value` is a string but not a member by name.
            TypeError: if `value`'s type is neither a member of the enumeration nor an
                int or a string.
        r   N cannot convert to a r   r   r   r   r   r   intr   r   r   r   r   r   r   B   s    


zCoerciveIntEnum.coerceNr   r   r   r   r   r   <   s   r   c                   @   s   e Zd ZdZedd ZdS )CoerciveIntFlagz
    Enumerated constants that can be combined using the bitwise operators,
    with a helper to coerce strings and integers into enumeration members.
    c                 C   s   t || r|S t |trz| |  W S  tk
r:   Y nX z8| |d   }|dd D ]}|| |  B }qZ|W S  tk
r   t| d| j dY nX t |tr| |S t| d| j dS )a  
        Attempt to coerce `value` into a member of this enumeration.

        If value is already a member of this enumeration it is returned unchanged.
        Otherwise, if it is a string, attempt to convert it (case insensitively, by
        upcasing) as an enumeration name. Otherwise, if it is an int, attempt to
        convert it as an enumeration value.
        Otherwise, an exception is raised.

        Args:
            value (IntEnum, str, int): the value to be coerced.

        Raises:
            ValueError: if `value` is an int but not a member of this enumeration.
            ValueError: if `value` is a string but not a member by name.
            TypeError: if `value`'s type is neither a member of the enumeration nor an
                int or a string.
        r   r   Nr   r   r    )r   r   flagscharr   r   r   r   l   s"    


zCoerciveIntFlag.coerceNr   r   r   r   r   r#   f   s   r#   c                   @   s    e Zd ZdZedZedZdS )WrapModez7Defines how to break and wrap lines in multi-line text.WORDCHARN)r   r   r   r   r   r'   r(   r   r   r   r   r&      s   r&   c                   @   s8   e Zd ZdZedZedZedZedZedZ	dS )CharVPosz;Defines the vertical position of text relative to the line.SUPSUBNOMDENOMLINEN)
r   r   r   r   r   r*   r+   r,   r-   r.   r   r   r   r   r)      s   r)   c                       sL   e Zd ZdZedZedZedZedZedZ	e
 fddZ  ZS )	Alignz$Defines how to render text in a cellCENTERZX_CENTERLEFTRIGHTZJUSTIFYc                    s0   |dkr| j S t|tr | }t| | |S N )Lr   r   r   superr   r"   	__class__r   r   r      s
    
zAlign.coerce)r   r   r   r   r   CXr5   RJr   r   __classcell__r   r   r7   r   r/      s   r/   c                       s<   e Zd ZdZedZedZedZe fddZ	  Z
S )VAlignzLDefines how to vertically render text in a cell.
    Default value is MIDDLEZMIDDLETOPBOTTOMc                    s   |dkr| j S t| | |S r3   )Mr6   r   r"   r7   r   r   r      s    zVAlign.coerce)r   r   r   r   r   rA   TBr   r   r=   r   r   r7   r   r>      s   r>   c                       s`   e Zd ZdZdZdZdZdZdZe	dd Z
d d	d
dZd d	ddZe fddZ  ZS )TextEmphasisz
    Indicates use of bold / italics / underline.

    This enum values can be combined with & and | operators:
        style = B | I
    r   r   r
         c                    s    d  fdd jj D S )Nr4   c                 3   s   | ]\}}| @ r|V  qd S Nr   ).0namer   selfr   r   	<genexpr>   s     z%TextEmphasis.style.<locals>.<genexpr>)joinr8   __members__itemsrJ   r   rJ   r   style   s    
zTextEmphasis.styler   c                 C   s   | |B S rG   r   rK   r   r   r   r   add  s    zTextEmphasis.addc                    s    t d fdd| jD S )Nr4   c                 3   s   | ]}| j kr|V  qd S rG   )rP   )rH   srQ   r   r   rL     s     
 z&TextEmphasis.remove.<locals>.<genexpr>)rD   r   rM   rP   rR   r   rQ   r   remove  s    zTextEmphasis.removec                    sp   t |tr`|dkr| jS | dkr*| jS | dkr<| jS | dkrN| jS | dkr`| jS t| | 	|S )Nr4   ZBOLDZITALICS	UNDERLINEZSTRIKETHROUGH)
r   r   NONEr   rC   IUSr6   r   r"   r7   r   r   r   	  s    
zTextEmphasis.coerce)r   r   r   r   rW   rC   rX   rY   rZ   propertyrP   rS   rU   r   r   r=   r   r   r7   r   rD      s   
rD   c                   @   s   e Zd ZdZdZdZdZdS )MethodReturnValuez
    Defines the return value(s) of a FPDF content-rendering method.

    This enum values can be combined with & and | operators:
        PAGE_BREAK | LINES
    r   r
   rE   N)r   r   r   r   Z
PAGE_BREAKLINESZHEIGHTr   r   r   r   r\     s
   r\   c                   @   sH   e Zd ZdZedZedZedZedZedZ	edZ
edZd	S )
TableBordersLayoutz#Defines how to render table bordersALLrW   INTERNALMINIMALHORIZONTAL_LINESNO_HORIZONTAL_LINESSINGLE_TOP_LINEN)r   r   r   r   r   r_   rW   r`   ra   rb   rc   rd   r   r   r   r   r^   +  s   r^   c                       sl   e Zd ZdZdZdZdZdZdZeeB eB eB Z	dZ
e fdd	Z fd
dZ fddZdd Z  ZS )CellBordersLayouta  Defines how to render cell borders in table

    The integer value of `border` determines which borders are applied. Below are some common examples:

    - border=1 (LEFT): Only the left border is enabled.
    - border=3 (LEFT | RIGHT): Both the left and right borders are enabled.
    - border=5 (LEFT | TOP): The left and top borders are enabled.
    - border=12 (TOP | BOTTOM): The top and bottom borders are enabled.
    - border=15 (ALL): All borders (left, right, top, bottom) are enabled.
    - border=16 (INHERIT): Inherit the border settings from the parent element.

    Using `border=3` will combine LEFT and RIGHT borders, as it represents the
    bitwise OR of `LEFT (1)` and `RIGHT (2)`.
    r   r   r
   rE   rF      c                    s&   t |tr|dkrtdt |S Nrf   z,INHERIT cannot be combined with other values)r   r!   r   r6   r   r"   r7   r   r   r   i  s    zCellBordersLayout.coercec                    s    t  |}|dkrtd|S rg   )r6   __and__r   rR   r7   r   r   rh   o  s    zCellBordersLayout.__and__c                    s    t  |}|dkrtd|S rg   )r6   __or__r   rR   r7   r   r   ri   u  s    zCellBordersLayout.__or__c                 C   sf   g }| t j@ r|d | t j@ r,|d | t j@ r@|d | t j@ rT|d |rbd|S dS )Nr5   r;   rB   rC   r4   rW   )re   r1   appendr2   r?   r@   rM   )rK   Z
border_strr   r   r   __str__{  s    







zCellBordersLayout.__str__)r   r   r   r   rW   r1   r2   r?   r@   r_   ZINHERITr   r   rh   ri   rk   r=   r   r   r7   r   re   D  s   re   c                       s\   e Zd ZdZedZedZedZedZedZ	edZ
e fdd	Zd
d Z  ZS )TableCellFillModez!Defines which table cells to fillrW   r_   ROWSCOLUMNS	EVEN_ROWSEVEN_COLUMNSc                    s    t t|ddr|S t |S )zgAny class that has a .should_fill_cell() method is considered a valid 'TableCellFillMode' (duck-typing)should_fill_cellN)callablegetattrr6   r   r"   r7   r   r   r     s    zTableCellFillMode.coercec                 C   s|   | | j krdS | | jkrdS | | jkr2|d dkS | | jkrH|d dkS | | jkr^|d dkS | | jkrt|d dkS td S )NFTr
   r   r   )rW   r_   rm   rn   ro   rp   NotImplementedError)rK   ijr   r   r   rq     s    





z"TableCellFillMode.should_fill_cell)r   r   r   r   r   rW   r_   rm   rn   ro   rp   r   r   rq   r=   r   r   r7   r   rl     s   rl   c                   @   s   e Zd ZedZedZdS )	TableSpanROWCOLN)r   r   r   r   rx   ry   r   r   r   r   rw     s   rw   c                   @   s   e Zd ZdZdZdZdS )TableHeadingsDisplayz2Defines how the table headings should be displayedr   r   N)r   r   r   r   rW   ZON_TOP_OF_EVERY_PAGEr   r   r   r   rz     s   rz   c                       s`   e Zd ZdZedZedZedZedd Z	edd Z
ed	d
 Ze fddZ  ZS )RenderStylezDefines how to render shapesZDRAWFILLZ	DRAW_FILLc                 C   s   | j d| jd| jdi|  S )NrZ   frC   )DFDFrJ   r   r   r   operator  s    zRenderStyle.operatorc                 C   s   | | j | jfkS rG   )r~   r   rJ   r   r   r   is_draw  s    zRenderStyle.is_drawc                 C   s   | | j | jfkS rG   )r   r   rJ   r   r   r   is_fill  s    zRenderStyle.is_fillc                    s&   |s
| j S |dkrd}t| | |S )NZFDr   )r~   r6   r   r"   r7   r   r   r     s
    zRenderStyle.coerce)r   r   r   r   r   r~   r   r   r[   r   r   r   r   r   r=   r   r   r7   r   r{     s   


r{   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )TextModez:Values described in PDF spec section 'Text Rendering Mode'r   r   r
      rE            N)r   r   r   r   r|   STROKEZFILL_STROKE	INVISIBLEZ	FILL_CLIPZSTROKE_CLIPZFILL_STROKE_CLIPZCLIPr   r   r   r   r     s   r   c                   @   sP   e Zd ZdZedZedZedZedZedZ	edZ
edZed	Zd
S )XPoszFPositional values in horizontal direction for use after printing text.r1   r2   STARTENDWCONTr0   LMARGINRMARGINN)r   r   r   r   r   r1   r2   r   r   r   r0   r   r   r   r   r   r   r     s   r   c                   @   s8   e Zd ZdZedZedZedZedZedZ	dS )YPoszCPositional values in vertical direction for use after printing textr?   LASTNEXTTMARGINBMARGINN)
r   r   r   r   r   r?   r   r   r   r   r   r   r   r   r     s   r   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )AnglezTDirection values used for mirror transformations specifying the angle of mirror lineZ   r   i     -   i;        N)r   r   r   r   ZNORTHZEASTZSOUTHZWESTZ	NORTHEASTZ	SOUTHEASTZ	SOUTHWESTZ	NORTHWESTr   r   r   r   r   ,  s   r   c                   @   s@   e Zd ZdZedZedZedZedZedZ	edZ
dS )	
PageLayoutzASpecify the page layout shall be used when the document is openedZ
SinglePageZ	OneColumnZTwoColumnLeftZTwoColumnRightZTwoPageLeftZTwoPageRightN)r   r   r   r   r   ZSINGLE_PAGEZ
ONE_COLUMNZTWO_COLUMN_LEFTZTWO_COLUMN_RIGHTZTWO_PAGE_LEFTZTWO_PAGE_RIGHTr   r   r   r   r   9  s   r   c                   @   s@   e Zd ZdZedZedZedZedZedZ	edZ
dS )	PageModezBSpecifying how to display the document on exiting full-screen modeZUseNoneZUseOutlinesZ	UseThumbsZ
FullScreenZUseOCZUseAttachmentsN)r   r   r   r   r   ZUSE_NONEZUSE_OUTLINESZ
USE_THUMBSZFULL_SCREENZUSE_OCZUSE_ATTACHMENTSr   r   r   r   r   O  s   r   c                   @   s0   e Zd ZdZedZedZedZedZdS )TextMarkupTypez#Subtype of a text markup annotationZ	HighlightZ	UnderlineZSquigglyZ	StrikeOutN)	r   r   r   r   r   Z	HIGHLIGHTrV   ZSQUIGGLYZ
STRIKE_OUTr   r   r   r   r   e  s
   r   c                   @   s   e Zd ZdZedZedZedZedZedZ	edZ
edZed	Zed
ZedZedZedZedZedZedZedZdS )	BlendModezLAn enumeration of the named standard named blend functions supported by PDF.ZNormalZMultiplyZScreenZOverlayZDarkenZLightenZ
ColorDodgeZ	ColorBurnZ	HardLightZ	SoftLightZ
DifferenceZ	ExclusionZHueZ
SaturationZColorZ
LuminosityN)r   r   r   r   r   NORMALZMULTIPLYZSCREENZOVERLAYZDARKENZLIGHTENZCOLOR_DODGEZ
COLOR_BURNZ
HARD_LIGHTZ
SOFT_LIGHTZ
DIFFERENCEZ	EXCLUSIONZHUEZ
SATURATIONZCOLORZ
LUMINOSITYr   r   r   r   r   q  s$   r   c                   @   s4   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )AnnotationFlagr   r
   rE   rF   rf       @            N)r   r   r   r   ZHIDDENZPRINTZNO_ZOOMZ	NO_ROTATEZNO_VIEWZ	READ_ONLYLOCKEDZTOGGLE_NO_VIEWZLOCKED_CONTENTSr   r   r   r   r     s   r   c                   @   s@   e Zd ZdZedZedZedZedZedZ	edZ
dS )	AnnotationNameCThe name of an icon that shall be used in displaying the annotationZNoteCommentZHelpZ	ParagraphZNewParagraphZInsertN)r   r   r   r   r   ZNOTECOMMENTZHELPZ	PARAGRAPHZNEW_PARAGRAPHZINSERTr   r   r   r   r     s   r   c                   @   s(   e Zd ZdZedZedZedZdS )FileAttachmentAnnotationNamer   ZPushPinZGraphPushPinZPaperclipTagN)r   r   r   r   r   ZPUSH_PINZGRAPH_PUSH_PINZPAPERCLIP_TAGr   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )IntersectionRulea)  
    An enumeration representing the two possible PDF intersection rules.

    The intersection rule is used by the renderer to determine which points are
    considered to be inside the path and which points are outside the path. This
    primarily affects fill rendering and clipping paths.
    ZnonzeroZevenoddNr   r   r   r   ZNONZEROZEVENODDr   r   r   r   r     s   
r   c                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
PathPaintRulezu
    An enumeration of the PDF drawing directives that determine how the renderer should
    paint a given path.
    rZ   r}   zf*rC   zB*nautoN)r   r   r   r   r   ZFILL_NONZEROZFILL_EVENODDZSTROKE_FILL_NONZEROZSTROKE_FILL_EVENODDZ
DONT_PAINTAUTOr   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )ClippingPathIntersectionRulezSAn enumeration of the PDF drawing directives that define a path as a clipping path.WzW*Nr   r   r   r   r   r   D  s   
r   c                   @   s   e Zd ZdZdZdZdZdS )StrokeCapStylez
    An enumeration of values defining how the end of a stroke should be rendered.

    This affects the ends of the segments of dashed strokes, as well.
    r   r   r
   N)r   r   r   r   ZBUTTROUNDZSQUAREr   r   r   r   r   \  s
   r   c                   @   s   e Zd ZdZdZdZdZdS )StrokeJoinStylezn
    An enumeration of values defining how the corner joining two path components should
    be rendered.
    r   r   r
   N)r   r   r   r   ZMITERr   ZBEVELr   r   r   r   r   t  s
   r   c                   @   sX   e Zd ZdZedZedZedZedZedZ	edZ
edZed	Zed
ZdS )PDFStyleKeysz?An enumeration of the graphics state parameter dictionary keys.caZBMCAZSAZLWZLCZLJZMLr~   N)r   r   r   r   r   Z
FILL_ALPHAZ
BLEND_MODEZSTROKE_ALPHAZSTROKE_ADJUSTMENTZSTROKE_WIDTHZSTROKE_CAP_STYLEZSTROKE_JOIN_STYLEZSTROKE_MITER_LIMITZSTROKE_DASH_PATTERNr   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdZdS )Corner	TOP_RIGHTTOP_LEFTBOTTOM_RIGHTBOTTOM_LEFTN)r   r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s    e Zd ZdZdZdZdZdZdS )FontDescriptorFlagszAn enumeration of the flags for the unsigned 32-bit integer entry in the font descriptor specifying various
    characteristics of the font. Bit positions are numbered from 1 (low-order) to 32 (high-order).
    r   rE   r   i   N)r   r   r   r   ZFIXED_PITCHZSYMBOLICZITALICZ
FORCE_BOLDr   r   r   r   r     s   r   c                   @   sH   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zed
d Zedd ZdS )AccessPermissionzJPermission flags will translate as an integer on the encryption dictionaryrE   rF   rf   r   r   r   i   i   c                 C   s   d}t tD ]}||B }q|S )zAll flags enabledr   )listr   )r   resultZ
permissionr   r   r   all  s    
zAccessPermission.allc                 C   s   dS )zAll flags disabledr   r   )r   r   r   r   none  s    zAccessPermission.noneN)r   r   r   r   ZPRINT_LOW_RESZMODIFYCOPYZ
ANNOTATIONZ
FILL_FORMSZCOPY_FOR_ACCESSIBILITYZASSEMBLEZPRINT_HIGH_RESr   r   r   r   r   r   r   r     s   
r   c                   @   s    e Zd ZdZdZdZdZdZdS )EncryptionMethodz,Algorithm to be used to encrypt the documentr   r   r
   r   N)r   r   r   r   ZNO_ENCRYPTIONRC4ZAES_128ZAES_256r   r   r   r   r     s
   r   c                   @   s0   e Zd ZdZedZedZedZedZdS )TextDirectionz)Text rendering direction for text shapingLTRRTLTTBBTTN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s(   e Zd ZdZedZedZedZdS )OutputIntentSubTypez%Definition for Output Intent SubtypesZGTS_PDFXZ	GTS_PDFA1Z	ISO_PDFE1N)r   r   r   r   r   ZPDFXZPDFAZISOPDFr   r   r   r   r     s
   r   c                   @   s<   e Zd ZdZedZedZedZedZedZ	dZ
dS )PageLabelStylezStyle of the page labelr~   r;   rAaN)r   r   r   r   r   NUMBERZUPPER_ROMANZLOWER_ROMANZUPPER_LETTERZLOWER_LETTERrW   r   r   r   r   r     s   r   c                   @   s(   e Zd ZdZedZedZedZdS )DuplexzZThe paper handling option that shall be used when printing the file from the print dialog.ZSimplexZDuplexFlipShortEdgeZDuplexFlipLongEdgeN)r   r   r   r   r   ZSIMPLEXZDUPLEX_FLIP_SHORT_EDGEZDUPLEX_FLIP_LONG_EDGEr   r   r   r   r   &  s
   r   c                   @   s4   e Zd ZedZedZedZedZedZdS )PageBoundariesZArtBoxZBleedBoxZCropBoxZMediaBoxZTrimBoxN)	r   r   r   r   ZART_BOXZ	BLEED_BOXZCROP_BOXZ	MEDIA_BOXZTRIM_BOXr   r   r   r   r   3  s
   r   c                       s0   e Zd ZedZedZe fddZ  ZS )PageOrientationPr5   c                    s"   t |tr| }t| | |S rG   )r   r   r   r6   r   r"   r7   r   r   r   @  s    
zPageOrientation.coerce)	r   r   r   r   ZPORTRAITZ	LANDSCAPEr   r   r=   r   r   r7   r   r   ;  s   r   c                   @   sL   e Zd ZedZedZedZedZedZedZ	edZ
edZd	S )
PDFResourceTypeZ	ExtGStateZ
ColorSpacePatternZShadingZXObjectZFontZProcSetZ
PropertiesN)r   r   r   r   ZEXT_G_STATEZCOLOR_SPACEZPATTERNZSHADDINGZX_OBJECTZFONTZPROC_SETZ
PROPERTIESr   r   r   r   r   G  s   r   N)5enumr   r   r   r   sysr   Zsyntaxr   r	   r   r   r#   r&   r)   r/   r>   rD   r\   r^   re   rl   rw   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s\   **0
5D-
)K 6)	