o
    /h                     @   s6  d Z dgZddlmZ ddlZG dd deZG dd dZi Zi Z		 i dd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*dd+d,d-d.dd/d0d1d2d3d4d5d6e	ej
< 	 i d7d8dd9dd:d
d;dd<dd=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdQi dSddTddUdVdWdXdYdZd[d\d]d^d_d`d dad"dbd$dcd&ddd(dedfdgdhdEdidEdjdki dldmdndodpdqdrdsdtdudvdwdxdwdydwdzdwd{d|d}d~dd~dd~dd~ddddddi ddddddddddddddddddddddddddddddddddEi ddddddddddddddddddddddddEdddddddddddddEdkddŜeej
< dddddddddddМ
e	ej< i ddғddԓdd֓dd֓dd֓dd֓dd	dd	dd	dd	ddߓddߓddߓddߓdddddddddddddddd	eej< e	ej d e	ej d dddddddddde	ej< dddddddddd	eej< de	ej
 d ie	ej< d dddeej< ddddddd	e	ej< d
dieej< ddddde	ej< dddeej< dddddddeej< ddddddd e	ej< d!d"d#dd$d%d%d&d'dd(
eej< i e	ej< d)dieej< dS (*  zaCSS profiles.

Profiles is based on code by Kevin D. Smith, orginally used as cssvalues,
thanks!
Profiles    )utilNc                   @   s   e Zd ZdZdS )NoSuchProfileExceptionz-Raised if no profile with given name is foundN)__name__
__module____qualname____doc__ r	   r	   E/var/www/html/myenv/lib/python3.10/site-packages/cssutils/profiles.pyr      s    r   c                   @   sd  e Zd ZdZdZdZdZd ZZd Z	Z
dZdZd	Zd
Zi dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,Zd-d.d/d0d1d2d3d4d5d6d7d8d9d:Zd^d<d=Zd>d? Zd@dA ZdBdC ZdDdE ZdFdG ZeeedHdIZedJdK dLdIZedMdN Zd^dOdPZdQdR Zd^dSdTZd_dVdWZd^dXdYZdZd[ Z d^d\d]Z!d;S )`r   a6  
    All profiles used for validation. ``cssutils.profile`` is a
    preset object of this class and used by all properties for validation.

    Predefined profiles are (use
    :meth:`~cssutils.profiles.Profiles.propertiesByProfile` to
    get a list of defined properties):

    ``~cssutils.profiles.Profiles.CSS_LEVEL_2``
        Properties defined by CSS2.1
    ``~cssutils.profiles.Profiles.CSS3_BASIC_USER_INTERFACE``
        Currently resize and outline properties only
    ``~cssutils.profiles.Profiles.CSS3_BOX``
        Currently overflow related properties only
    ``~cssutils.profiles.Profiles.CSS3_COLOR``
        CSS 3 color properties
    ``~cssutils.profiles.Profiles.CSS3_PAGED_MEDIA``
        As defined at http://www.w3.org/TR/css3-page/ (at 090307)

    Predefined macros are:

    ``~cssutils.profiles.Profiles._TOKEN_MACROS``
        Macros containing the token values as defined to CSS2
    ``~cssutils.profiles.Profiles._MACROS``
        Additional general macros.

    If you want to redefine any of these macros do this in your custom
    macros.
    zCSS Level 2.1z*CSS Backgrounds and Borders Module Level 3z CSS3 Basic User Interface ModulezCSS Box Module Level 3zCSS Color Module Level 3zCSS Fonts Module Level 3z.CSS Fonts Module Level 3 @font-face propertieszCSS3 Paged Media ModulezCSS Text Level 3identz[-]?{nmstart}{nmchar}*namez	{nmchar}+nmstartz[_a-z]|{nonascii}|{escape}nonasciiz
[^\0-\177]unicodez"\\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?escapez{unicode}|\\[ -~\u0080-\u01ff]intz[-]?\d+nmcharz[\w-]|{nonascii}|{escape}numz[-]?\d+|[-]?\d*\.\d+positivenumz\d+|\d*\.\d+numberz{num}stringz{string1}|{string2}string1z"(\\\"|[^\"])*"uriz%url\({w}({string}|(\\\)|[^\)])+){w}\)string2z'(\\\'|[^\'])*'nlz\n|\r\n|\r|\fwz\s*z#[0-9a-f]{3}|#[0-9a-f]{6}z\rgb\({w}{int}{w}\,{w}{int}{w}\,{w}{int}{w}\)|rgb\({w}{num}%{w}\,{w}{num}%{w}\,{w}{num}%{w}\)zy(transparent|orange|maroon|red|orange|yellow|olive|purple|fuchsia|white|lime|green|navy|blue|aqua|teal|black|silver|gray)`  (ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText)z,{namedcolor}|{hexcolor}|{rgbcolor}|{uicolor}z{int}z 0|{num}(em|ex|px|in|cm|mm|pt|pc)z(0|{positivenum}(em|ex|px|in|cm|mm|pt|pc)z0|{num}(deg|grad|rad)z
0|{num}m?sz0|{num}k?Hzz{num}%zA(inset)?{w}{length}{w}{length}{w}{length}?{w}{length}?{w}{color}?)hexcolorrgbcolor
namedcoloruicolorcolorintegerlengthpositivelengthangletime	frequency
percentageshadowNc                 C   s  || _ tj | _| jtj  g | _i | _i | _	d| _
| | jt| j t| j f| jt| j t| j f| jt| j t| j f| jt| j t| j f| jt| j t| j f| jt| j t| j f| jt| j t| j f| jt| j t| j f| jt| j t| j fg	 |   dS )zA few profiles are predefined.N)_logr   _TOKEN_MACROScopy_usedMacrosupdate_MACROS_profileNames_rawProfiles_profilesProperties_defaultProfilesaddProfilesCSS_LEVEL_2
propertiesmacrosCSS3_BACKGROUNDS_AND_BORDERSCSS3_BASIC_USER_INTERFACECSS3_BOX
CSS3_COLOR
CSS3_FONTSCSS3_FONT_FACECSS3_PAGED_MEDIA	CSS3_TEXT_Profiles__update_knownNames)selflogr	   r	   r
   __init__d   sD   !zProfiles.__init__c                    s^    fdd}t | D ] \}}t|ds(td|r(td||}td|s|||< q|S )z!Expand macros in token dictionaryc                    s   d |   d   S )Nz(?:%s)macro)	groupdict)mr7   r	   r
   macro_value   s   z,Profiles._expand_macros.<locals>.macro_value__call__z{[a-z][a-z0-9-]*}z{(?P<macro>[a-z][a-z0-9-]*)})listitemshasattrresearchsub)rA   
dictionaryr7   rH   keyvaluer	   rG   r
   _expand_macros   s   

zProfiles._expand_macrosc                 C   s>   t | D ]\}}t|dstd| tj}|||< q|S )z5Compile all regular expressions into callable objectsrI   z^(?:%s)$)rJ   rK   rL   r   	LazyRegexrM   I)rA   rP   rQ   rR   r	   r	   r
   _compile_regexes   s
   

zProfiles._compile_regexesc                 C   s2   g | _ t| j D ]}| j t|  q
d S N)_knownNamesrJ   r2   valuesextendkeys)rA   r6   r	   r	   r
   __update_knownNames   s   zProfiles.__update_knownNamesc                 C   s   | j s| jS | j S )zEIf not explicitly set same as Profiles.profiles but in reverse order.)r3   profilesrA   r	   r	   r
   _getDefaultProfiles   s   zProfiles._getDefaultProfilesc                 C   s    t |tr|f| _dS || _dS )z3profiles may be a single or a list of profile namesN)
isinstancestrr3   )rA   r]   r	   r	   r
   _setDefaultProfiles   s   

zProfiles._setDefaultProfileszNames of profiles to use for validation.To use e.g. the CSS2 profile set ``cssutils.profile.defaultProfiles = cssutils.profile.CSS_LEVEL_2``)docc                 C      | j S rW   )r0   r^   r	   r	   r
   <lambda>   s    zProfiles.<lambda>z*Names of all profiles in order as defined.c                 C   rd   )z)All known property names of all profiles.)rX   r^   r	   r	   r
   
knownNames   s   zProfiles.knownNamesc                 C   s   t j }|t j  | jD ]}|| j| d  q|r$|| | j  | jD ]}| 	| j| d  |}| 
|| j|< q,|| _dS )z=reset all props from raw values as changes in macros happenedr7   r6   N)r   r+   r,   r.   r/   r0   r1   r2   clearrS   rV   r-   )rA   	newMacrosr7   profiler6   r	   r	   r
   _resetProperties   s   





zProfiles._resetPropertiesc                 C   sX   |D ]\}}}|r| j | d| i| j|< q|D ]\}}}| || d qdS )zAdd a list of profiles at once. Useful as if profiles define custom
        macros these are used in one go. Using `addProfile` instead my be
        **very** slow instead.
        r7   N)r-   r.   r,   r1   
addProfile)rA   r]   ri   r6   r7   r	   r	   r
   r4      s   zProfiles.addProfilesc                 C   s   |r t t| t| j r| j|d n| j| nz	| j| d }W n t	y4   i }Y nw | j
| | | d| j|< | || j}| || j|< |   dS )a{  Add a new profile with name `profile` (e.g. 'CSS level 2')
        and the given `properties`.

        :param profile:
            the new `profile`'s name
        :param properties:
            a dictionary of ``{ property-name: propery-value }`` items where
            property-value is a regex which may use macros defined in given
            ``macros`` or the standard macros Profiles.tokens and
            Profiles.generalvalues.

            ``propery-value`` may also be a function which takes a single
            argument which is the value to validate and which should return
            True or False.
            Any exceptions which may be raised during this custom validation
            are reported or raised as all other cssutils exceptions depending
            on cssutils.log.raiseExceptions which e.g during parsing normally
            is False so the exceptions would be logged only.
        :param macros:
            may be used in the given properties definitions. There are some
            predefined basic macros which may always be used in
            ``Profiles._TOKEN_MACROS`` and ``Profiles._MACROS``.
        )rh   r7   )r6   r7   N)lensetr[   intersectionrJ   r-   rj   r.   r1   KeyErrorr0   appendr,   rS   rV   r2   r@   )rA   ri   r6   r7   r	   r	   r
   rk     s     zProfiles.addProfileFc                 C   s   |r| j   | j  | jdd= n1d}z| j| d rd}| j |= | j|= | j| j|= W n ty=   td| w |rD|   |   dS )a  Remove `profile` or remove `all` profiles.

        If the removed profile used custom macros all remaining profiles
        are reset to reflect the macro changes. This may be quite an expensive
        operation!

        :param profile:
            profile name to remove
        :param all:
            if ``True`` removes all profiles to start with a clean state
        :exceptions:
            - ``cssutils.profiles.NoSuchProfileException``:
              If given `profile` cannot be found.
        NFr7   TzNo profile %r.)	r2   rg   r1   r0   indexro   r   rj   r@   )rA   ri   allresetr	   r	   r
   removeProfile7  s"   

zProfiles.removeProfilec              
   c   sl    |s| j }nt|tr|f}zt|D ]}t| j|  E dH  qW dS  ty5 } zt|d}~ww )zGenerator: Yield property names, if no `profiles` is given all
        profile's properties are used.

        :param profiles:
            a single profile name or a list of names.
        N)r]   r`   ra   sortedr2   r[   ro   r   )rA   r]   ri   er	   r	   r
   propertiesByProfile^  s   
zProfiles.propertiesByProfilec                 C   s~   | j D ]9}|| j| v r<zt| j| | |}W n ty5 } z| jj|td d}W Y d}~nd}~ww |r<|  S qdS )a3  Check if `value` is valid for given property `name` using **any**
        profile.

        :param name:
            a property name
        :param value:
            a CSS value (string)
        :returns:
            if the `value` is valid for the given property `name` in any
            profile
        errorFN)r]   r2   bool	Exceptionr*   ry   )rA   r   rR   ri   rrv   r	   r	   r
   validateo  s   
zProfiles.validatec           	         s  || j vr
ddg fS  s| j nt tr f t D ]:}|| j| v rV| j| | }z||r:dd|gfW   S W q tyU } z| jj|td W Y d}~qd}~ww q fdd| j	D D ]:}|| j| v r| j| | }z||rdd|gfW   S W qa ty } z| jj|td W Y d}~qad}~ww qag }t
| j D ]\}}|t
| v r|| q|  dd|fS )ah  Check if `value` is valid for given property `name` returning
        ``(valid, profile)``.

        :param name:
            a property name
        :param value:
            a CSS value (string)
        :param profiles:
            internal parameter used by Property.validate only
        :returns:
            ``valid, matching, profiles`` where ``valid`` is if the `value`
            is valid for the given property `name` in any profile,
            ``matching==True`` if it is valid in the given `profiles`
            and ``profiles`` the profile names for which the value is valid
            (or ``[]`` if not valid at all)

        Example::

            > cssutils.profile.defaultProfiles = cssutils.profile.CSS_LEVEL_2
            > print(cssutils.profile.validateWithProfile('color', 'rgba(1,1,1,1)'))
            (True, False, Profiles.CSS3_COLOR)
        FTrx   Nc                 3   s    | ]	}| vr|V  qd S rW   r	   ).0pr]   r	   r
   	<genexpr>  s    z/Profiles.validateWithProfile.<locals>.<genexpr>)rf   defaultProfilesr`   ra   reversedr2   r{   r*   ry   r0   rJ   rK   r[   rp   sort)	rA   r   rR   r]   profilenamer}   rv   namesr6   r	   r   r
   validateWithProfile  sJ   




zProfiles.validateWithProfilerW   )NF)"r   r   r   r   r5   r8   r9   r:   CSS_BOX_LEVEL_3r;   CSS_COLOR_LEVEL_3r<   r=   r>   r?   r+   r/   rC   rS   rV   r@   r_   rb   propertyr   r]   rf   rj   r4   rk   rt   rw   r}   r   r	   r	   r	   r
   r      s    	

4	



4
'zbackground-colorz{color}|transparent|inheritzbackground-imagez{uri}|none|inheritzbackground-positionz({percentage}|{length}|left|center|right)(\s*({percentage}|{length}|top|center|bottom))?|((top|center|bottom)\s*(left|center|right)?)|((left|center|right)\s*(top|center|bottom)?)|inheritzbackground-repeatz*repeat|repeat-x|repeat-y|no-repeat|inheritzbackground-attachmentzscroll|fixed|inheritshapez9rect\(({w}({length}|auto}){w},){3}{w}({length}|auto){w}\)counterz5counter\({w}{ident}{w}(?:,{w}{list-style-type}{w})?\)
identifierz{ident}family-namez{string}|({ident}(\s+{ident})*)zgeneric-familyz*serif|sans-serif|cursive|fantasy|monospacezabsolute-sizez(x?x-)?(small|large)|mediumzrelative-sizezsmaller|largerfont-familyz.({family-name}({w},{w}{family-name})*)|inheritz	font-sizezE{absolute-size}|{relative-size}|{positivelength}|{percentage}|inherit
font-styleznormal|italic|oblique|inheritzfont-variantznormal|small-caps|inheritfont-weightz*normal|bold|bolder|lighter|[1-9]00|inheritz-normal|{number}|{length}|{percentage}|inheritzinside|outside|inheritzdisc|circle|square|decimal|decimal-leading-zero|lower-roman|upper-roman|lower-greek|lower-(latin|alpha)|upper-(latin|alpha)|armenian|georgian|none|inheritz{length}|{percentage}|autoz{length}|{percentage}zmale|female|childzb{string}|{uri}|{counter}|attr\({w}{ident}{w}\)|open-quote|close-quote|no-open-quote|no-close-quotezg{background-color}|{background-image}|{background-repeat}|{background-attachment}|{background-position}z:{list-style-type}|{list-style-position}|{list-style-image}z){font-style}|{font-variant}|{font-weight}z%underline|overline|line-through|blinkz"visible|hidden|scroll|auto|inherit)line-heightlist-style-imagelist-style-positionlist-style-typezmargin-widthzpadding-widthzspecific-voicezgeneric-voicecontentzbackground-attrsz
list-attrsz
font-attrsz
text-attrsoverflowazimuthz{angle}|(behind\s+)?(left-side|far-left|left|center-left|center|center-right|right|far-right|right-side)(\s+behind)?|behind|leftwards|rightwards|inheritz{background-attachment}z{background-color}z{background-image}z{background-position}z{background-repeat}
backgroundz2{background-attrs}(\s+{background-attrs})*|inheritzborder-collapsezcollapse|separate|inheritzborder-spacingz{length}(\s+{length})?|inheritbottomz"{length}|{percentage}|auto|inheritzcaption-sideztop|bottom|inheritrg   znone|left|right|both|inheritclipz{shape}|auto|inheritr!   z{color}|inheritr   z,none|normal|{content}(\s+{content})*|inheritzcounter-incrementzC({ident}(\s+{integer})?)(\s+({ident}(\s+{integer})?))*|none|inheritzcounter-resetz	cue-afterz
cue-beforecuez!({uri}|none|inherit){1,2}|inherit	directionzltr|rtl|inheritdisplayzinline|block|list-item|run-in|inline-block|table|inline-table|table-row-group|table-header-group|table-footer-group|table-row|table-column-group|table-column|table-cell|table-caption|none|inherit	elevationz.{angle}|below|level|above|higher|lower|inheritzempty-cellszshow|hide|inheritfloatzleft|right|none|inheritz{font-family}z{font-size}z{font-style}z{font-variant}z{font-weight}fontz(({font-attrs}\s+)*{font-size}({w}/{w}{line-height})?\s+{font-family})|caption|icon|menu|message-box|small-caption|status-bar|inheritheightleftzletter-spacingznormal|{length}|inheritr   z{line-height}r   z{list-style-image}r   z{list-style-position}r   z{list-style-type}z
list-stylez&{list-attrs}(\s+{list-attrs})*|inheritzmargin-rightz{margin-width}|inheritzmargin-leftz
margin-topzmargin-bottommarginz.{margin-width}(\s+{margin-width}){0,3}|inheritz
max-heightz"{length}|{percentage}|none|inheritz	max-widthz
min-heightz	min-widthorphansz{integer}|inheritr   z
{overflow}zpadding-topz{padding-width}|inheritzpadding-rightzpadding-bottomzpadding-leftpaddingz0{padding-width}(\s+{padding-width}){0,3}|inheritpage-break-afterz$auto|always|avoid|left|right|inheritpage-break-beforepage-break-insidezavoid|auto|inheritzpause-afterz{time}|{percentage}|inheritzpause-beforepausez"({time}|{percentage}){1,2}|inheritzpitch-rangez{number}|inheritpitchz0{frequency}|x-low|low|medium|high|x-high|inheritzplay-duringz){uri}(\s+(mix|repeat))*|auto|none|inheritpositionz&static|relative|absolute|fixed|inheritquotesz;({string}\s+{string})(\s+{string}\s+{string})*|none|inheritrichnessrightzspeak-headerzonce|always|inheritzspeak-numeralzdigits|continuous|inheritzspeak-punctuationzcode|none|inheritspeakznormal|none|spell-out|inheritzspeech-ratez={number}|x-slow|slow|medium|fast|x-fast|faster|slower|inheritstressztable-layoutzauto|fixed|inheritz
text-alignz!left|right|center|justify|inheritztext-decorationz+none|{text-attrs}(\s+{text-attrs})*|inheritztext-indentz{length}|{percentage}|inheritztext-transformz+capitalize|uppercase|lowercase|none|inherittopzunicode-bidiz"normal|embed|bidi-override|inheritzvertical-alignzWbaseline|sub|super|top|text-top|middle|bottom|text-bottom|{percentage}|{length}|inherit
visibilityzvisible|hidden|collapse|inheritzvoice-familyzT({specific-voice}|{generic-voice}{w},{w})*({specific-voice}|{generic-voice})|inheritvolumezC{number}|{percentage}|silent|x-soft|soft|medium|loud|x-loud|inheritz+normal|pre|nowrap|pre-wrap|pre-line|inheritzauto|{integer}|inherit)zwhite-spacewidowswidthzword-spacingzz-indexz@none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outsetz{length}|thin|medium|thickz0{border-width}?({w}{border-style})?({w}{color})?z0{border-width}?({w}{color})?({w}{border-style})?z0{border-style}?({w}{border-width})?({w}{color})?z0{border-style}?({w}{color})?({w}{border-width})?z0{color}?({w}{border-style})?({w}{border-width})?z0{color}?({w}{border-width})?({w}{border-style})?z{b1}|{b2}|{b3}|{b4}|{b5}|{b6}z4({length}|{percentage})(\s+({length}|{percentage}))?)
border-styleborder-widthb1b2b3b4b5b6zborder-attrszborder-radius-partzborder-colorz<({color}|transparent)(\s+({color}|transparent)){0,3}|inheritr   z.{border-style}(\s+{border-style}){0,3}|inheritz
border-topz{border-attrs}|inheritzborder-rightzborder-bottomzborder-leftzborder-top-colorzborder-right-colorzborder-bottom-colorzborder-left-colorzborder-top-stylez{border-style}|inheritzborder-right-stylezborder-bottom-stylezborder-left-stylezborder-top-widthz{border-width}|inheritzborder-right-widthzborder-bottom-widthz.{border-width}(\s+{border-width}){0,3}|inheritz{border-radius-part}zK({length}{w}|{percentage}{w}){1,4}(/{w}({length}{w}|{percentage}{w}){1,4})?znone|{shadow}({w},{w}{shadow})*)	zborder-left-widthr   borderzborder-top-right-radiuszborder-bottom-right-radiuszborder-bottom-left-radiuszborder-top-left-radiuszborder-radiusz
box-shadowr   z9{outline-color}(\s+{outline-style})?(\s+{outline-width})?z9{outline-color}(\s+{outline-width})?(\s+{outline-style})?z9{outline-style}(\s+{outline-color})?(\s+{outline-width})?z9{outline-style}(\s+{outline-width})?(\s+{outline-color})?z9{outline-width}(\s+{outline-color})?(\s+{outline-style})?z9{outline-width}(\s+{outline-style})?(\s+{outline-color})?z{color}|invert|inheritzauto|{border-style}|inherit)r   r   z	outline-1z	outline-2z	outline-3z	outline-4z	outline-5z	outline-6outline-coloroutline-styleoutline-widthzcontent-box|border-boxz((({uri}{w}({number}{w}{number}{w})?,{w})*)?(auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|(e|n|ne|nw|s|se|sw|w|ew|ns|nesw|nwse|col|row)-resize|all-scroll))|inheritzauto|{number}|inheritz{outline-color}z{outline-style}z{outline-width}z{length}|inheritzO{outline-1}|{outline-2}|{outline-3}|{outline-4}|{outline-5}|{outline-6}|inheritz%none|both|horizontal|vertical|inherit)	z
box-sizingcursorz	nav-indexr   r   r   zoutline-offsetoutlineresizez {overflow}{w}{overflow}?|inheritz{overflow}|inherit)r   z
overflow-xz
overflow-yz(currentcolor|transparent|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)zxrgba\({w}{int}{w}\,{w}{int}{w}\,{w}{int}{w}\,{w}{num}{w}\)|rgba\({w}{num}%{w}\,{w}{num}%{w}\,{w}{num}%{w}\,{w}{num}{w}\)zkhsl\({w}{int}{w}\,{w}{num}%{w}\,{w}{num}%{w}\)|hsla\({w}{int}{w}\,{w}{num}%{w}\,{w}{num}%{w}\,{w}{num}{w}\)a  aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreenr   zL{namedcolor}|{hexcolor}|{rgbcolor}|{rgbacolor}|{hslcolor}|{x11color}|inherit)r   	rgbacolorhslcolorx11colorr    r!   opacityz{num}|inheritzlocal\({w}{family-name}{w}\)zo(ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded)z,[uU]\+[0-9A-Fa-f?]{1,6}(\-[0-9A-Fa-f]{1,6})?)r   zfont-face-namezfont-stretch-namesunicode-rangez{number}|none|inheritz2normal|wider|narrower|{font-stretch-names}|inherit)zfont-size-adjustfont-stretchz{family-name}z{font-stretch-names}znormal|italic|obliqueznormal|bold|[1-9]00z({uri}{w}(format\({w}{string}{w}(\,{w}{string}{w})*\))?|{font-face-name})({w},{w}({uri}{w}(format\({w}{string}{w}(\,{w}{string}{w})*\))?|{font-face-name}))*z({unicode-range}({w},{w}{unicode-range})*)r   r   r   r   srcr   z"a5|a4|a3|b5|b4|letter|legal|ledgerzportrait|landscapez%{page-size}(?:{w}{page-orientation})?z%{page-orientation}(?:{w}{page-size})?z{page-1}|{page-2}zauto|always|avoid|left|right)z	page-sizezpage-orientationzpage-1zpage-2zpage-size-orientation	pagebreakzfill|hidden|meet|slicezauto|(({percentage}|{length})(\s*({percentage}|{length}))?|((top|center|bottom)\s*(left|center|right)?)|((left|center|right)\s*(top|center|bottom)?))zauto|{angle}zauto|{ident}z{pagebreak}|inheritzauto|avoid|inheritz/({length}{w}){1,2}|auto|{page-size-orientation})
fitzfit-positionzimage-orientationr   pager   r   r   sizer   ztext-shadow)r   __all__cssutilsr   rM   r{   r   r   r6   r7   r5   r8   r9   r:   r;   r<   r=   r>   r?   r	   r	   r	   r
   <module>   s   	   1	
#	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXa	
	
	
