B
    5dD              [   @   s  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	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%e	ej
< d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d5d	d	d6d7d8d9d:d;d<d=d>d?d@dAd/d/dBdCdDdEdFdGdHdHdHdHdIdJdJdJdJdKdLdMdMdMdMdNdOdOdPdQdQdRdSdTdUdVdWdSd/dXdYdZd[d\dSd]d^d_d`dad/dbdcdddedfdgdKd/dBdhdiZeej
< djdkdldmdndodpdqdrdsdt
e	ej< dudvdwdwdwdwdddddxdxdxdxdydydydydzdwd{d{d{d{d|d}d~eej< e	ej d e	ej d dddddddddyde	ej< dddddddddd	eej< de	ej
 d ie	ej< ddddeej< ddddddde	ej< ddieej< ddddde	ej< dddeej< dddddddeej< ddddddde	ej< ddddKddddddKd
eej< i e	ej< dd}i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	   5/tmp/pip-unpacked-wheel-v2oh4n0p/cssutils/profiles.pyr      s   r   c               @   s"  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ddddddddddddddddddZdddd d!d"d#d$d%d&d'd(d)d*ZdNd,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zeeed8d9Zed:d; d<d9Zed=d> ZdOd?d@ZdAdB ZdPdCdDZdQdFdGZdRdHdIZdJdK Z dSdLdMZ!d+S )Tr   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 3z[-]?{nmstart}{nmchar}*z	{nmchar}+z[_a-z]|{nonascii}|{escape}z
[^\0-\177]z"\\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?z{unicode}|\\[ -~\u0080-\u01ff]z[-]?\d+z[\w-]|{nonascii}|{escape}z[-]?\d+|[-]?\d*\.\d+z\d+|\d*\.\d+z{num}z{string1}|{string2}z"(\\\"|[^\"])*"z%url\({w}({string}|(\\\)|[^\)])+){w}\)z'(\\\'|[^\'])*'z\n|\r\n|\r|\fz\s*)identnameZnmstartZnonasciiunicodeescapeintZnmcharnumZpositivenumnumberstringZstring1uriZstring2nlwz#[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)a`  (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}?)ZhexcolorZrgbcolor
namedcoloruicolorcolorintegerlengthZpositivelengthZangletimeZ	frequency
percentageZ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   s8    




zProfiles.__init__c                s\    fdd}xJt | D ]:\}}t|dsLxtd|rJtd||}q.W |||< qW |S )z!Expand macros in token dictionaryc                s   d |   d   S )Nz(?:%s)macro)	groupdict)m)r*   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)r4   
dictionaryr*   r:   keyvaluer	   )r*   r
   _expand_macros   s    
zProfiles._expand_macrosc             C   sB   x<t | D ],\}}t|ds2td| tj}|||< qW |S )z5Compile all regular expressions into callable objectsr;   z^(?:%s)$)r<   r=   r>   r   Z	LazyRegexr?   I)r4   rB   rC   rD   r	   r	   r
   _compile_regexes   s
    
zProfiles._compile_regexesc             C   s6   g | _ x*t| j D ]}| j t|  qW d S )N)_knownNamesr<   r%   valuesextendkeys)r4   r)   r	   r	   r
   Z__update_knownNames   s    zProfiles.__update_knownNamesc             C   s   | j s| jS | j S dS )zEIf not explicitly set same as Profiles.profiles but in reverse order.N)r&   profiles)r4   r	   r	   r
   _getDefaultProfiles   s    zProfiles._getDefaultProfilesc             C   s   t |tr|f| _n|| _dS )z3profiles may be a single or a list of profile namesN)
isinstancestrr&   )r4   rL   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   s   | j S )N)r#   )r4   r	   r	   r
   <lambda>       zProfiles.<lambda>z*Names of all profiles in order as defined.c             C   s   | j S )z)All known property names of all profiles.)rH   )r4   r	   r	   r
   
knownNames   s    zProfiles.knownNamesc             C   s   t j }|t j  x"| jD ]}|| j| d  q"W |rL|| | j  x8| jD ].}| 	| j| d  |}| 
|| j|< q^W || _dS )z=reset all props from raw values as changes in macros happenedr*   r)   N)r   r   r   r!   r"   r#   r$   r%   clearrE   rG   r    )r4   	newMacrosr*   profiler)   r	   r	   r
   _resetProperties   s    


zProfiles._resetPropertiesc             C   s`   x4|D ],\}}}|r| j | d| i| j|< qW x$|D ]\}}}| || d q<W 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.
        r*   N)r    r!   r   r$   
addProfile)r4   rL   rW   r)   r*   r	   r	   r
   r'      s    zProfiles.addProfilesc             C   s   |r@t t| t| j r2| j|d ql| j| n,y| j| d }W n t	k
rj   i }Y nX | 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``.
        )rV   r*   )r)   r*   N)lensetrK   intersectionr<   r    rX   r!   r$   KeyErrorr#   appendr   rE   rG   r%   r3   )r4   rW   r)   r*   r	   r	   r
   rY     s     
zProfiles.addProfileFc             C   s   |r&| j   | j  | jdd= nhd}y6| j| d r>d}| j |= | j|= | j| j|= W n  tk
r   td| Y nX |r|   |   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.
        NFr*   TzNo profile %r.)	r%   rU   r$   r#   indexr]   r   rX   r3   )r4   rW   allresetr	   r	   r
   removeProfile9  s     

zProfiles.removeProfilec          
   c   sz   |s| j }nt|tr|f}y.x(t|D ]}t| j|  E dH  q(W W n* tk
rt } zt|W dd}~X Y nX dS )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)rL   rN   rO   sortedr%   rK   r]   r   )r4   rL   rW   er	   r	   r
   propertiesByProfile`  s    
 zProfiles.propertiesByProfilec             C   s|   xv| j D ]l}|| j| kryt| j| | |}W n6 tk
rj } z| jj|td d}W dd}~X Y nX |r|S qW 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)rL   r%   bool	Exceptionr   rf   )r4   r   rD   rW   rrd   r	   r	   r
   validateq  s    zProfiles.validatec       	         s  || j krddg fS  s | j nt tr0 f xxt D ]l}|| j| kr:| j| | }y||rpdd|gfS W q: tk
r } z| jj|td W dd}~X Y q:X q:W x fdd| j	D D ]n}|| j| kr| j| | }y||rdd|gfS W q tk
r, } z| jj|td W dd}~X Y qX qW g }x8t
| j D ]&\}}|t
| krF|| qFW |  dd|fS d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)
        FT)rf   Nc             3   s   | ]}| kr|V  qd S )Nr	   ).0p)rL   r	   r
   	<genexpr>  s    z/Profiles.validateWithProfile.<locals>.<genexpr>)rT   defaultProfilesrN   rO   reversedr%   rh   r   rf   r#   r<   r=   rK   r^   sort)	r4   r   rD   rL   Zprofilenamerj   rd   namesr)   r	   )rL   r
   validateWithProfile  s8    


&&zProfiles.validateWithProfile)N)N)N)NF)N)N)"r   r   r   r   r(   r+   r,   r-   ZCSS_BOX_LEVEL_3r.   ZCSS_COLOR_LEVEL_3r/   r0   r1   r2   r   r"   r6   rE   rG   r3   rM   rP   propertyrn   rL   rT   rX   r'   rY   rb   re   rj   rr   r	   r	   r	   r
   r      sz   
6

4
'
z{color}|transparent|inheritz{uri}|none|inheritz({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*repeat|repeat-x|repeat-y|no-repeat|inheritzscroll|fixed|inheritz9rect\(({w}({length}|auto}){w},){3}{w}({length}|auto){w}\)z5counter\({w}{ident}{w}(?:,{w}{list-style-type}{w})?\)z{ident}z{string}|({ident}(\s+{ident})*)z*serif|sans-serif|cursive|fantasy|monospacez(x?x-)?(small|large)|mediumzsmaller|largerz.({family-name}({w},{w}{family-name})*)|inheritzE{absolute-size}|{relative-size}|{positivelength}|{percentage}|inheritznormal|italic|oblique|inheritznormal|small-caps|inheritz*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)zbackground-colorzbackground-imagezbackground-positionzbackground-repeatzbackground-attachmentshapecounter
identifierzfamily-namezgeneric-familyzabsolute-sizezrelative-sizezfont-familyz	font-sizez
font-stylezfont-variantzfont-weightzline-heightzlist-style-imagezlist-style-positionzlist-style-typezmargin-widthzpadding-widthzspecific-voicezgeneric-voicecontentzbackground-attrsz
list-attrsz
font-attrsz
text-attrsoverflowz{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}z2{background-attrs}(\s+{background-attrs})*|inheritzcollapse|separate|inheritz{length}(\s+{length})?|inheritz"{length}|{percentage}|auto|inheritztop|bottom|inheritznone|left|right|both|inheritz{shape}|auto|inheritz{color}|inheritz,none|normal|{content}(\s+{content})*|inheritzC({ident}(\s+{integer})?)(\s+({ident}(\s+{integer})?))*|none|inheritz!({uri}|none|inherit){1,2}|inheritzltr|rtl|inheritzinline|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|inheritz.{angle}|below|level|above|higher|lower|inheritzshow|hide|inheritzleft|right|none|inheritz{font-family}z{font-size}z{font-style}z{font-variant}z{font-weight}z(({font-attrs}\s+)*{font-size}({w}/{w}{line-height})?\s+{font-family})|caption|icon|menu|message-box|small-caption|status-bar|inheritznormal|{length}|inheritz{line-height}z{list-style-image}z{list-style-position}z{list-style-type}z&{list-attrs}(\s+{list-attrs})*|inheritz{margin-width}|inheritz.{margin-width}(\s+{margin-width}){0,3}|inheritz"{length}|{percentage}|none|inheritz{integer}|inheritz
{overflow}z{padding-width}|inheritz0{padding-width}(\s+{padding-width}){0,3}|inheritz$auto|always|avoid|left|right|inheritzavoid|auto|inheritz{time}|{percentage}|inheritz"({time}|{percentage}){1,2}|inheritz{number}|inheritz0{frequency}|x-low|low|medium|high|x-high|inheritz){uri}(\s+(mix|repeat))*|auto|none|inheritz&static|relative|absolute|fixed|inheritz;({string}\s+{string})(\s+{string}\s+{string})*|none|inheritzonce|always|inheritzdigits|continuous|inheritzcode|none|inheritznormal|none|spell-out|inheritz={number}|x-slow|slow|medium|fast|x-fast|faster|slower|inheritzauto|fixed|inheritz!left|right|center|justify|inheritz+none|{text-attrs}(\s+{text-attrs})*|inheritz{length}|{percentage}|inheritz+capitalize|uppercase|lowercase|none|inheritz"normal|embed|bidi-override|inheritzWbaseline|sub|super|top|text-top|middle|bottom|text-bottom|{percentage}|{length}|inheritzvisible|hidden|collapse|inheritzT({specific-voice}|{generic-voice}{w},{w})*({specific-voice}|{generic-voice})|inheritzC{number}|{percentage}|silent|x-soft|soft|medium|loud|x-loud|inheritz+normal|pre|nowrap|pre-wrap|pre-line|inheritzauto|{integer}|inherit)ZZazimuthzbackground-attachmentzbackground-colorzbackground-imagezbackground-positionzbackground-repeatZ
backgroundzborder-collapsezborder-spacingZbottomzcaption-siderU   Zclipr   rw   zcounter-incrementzcounter-resetz	cue-afterz
cue-beforeZcue	directionZdisplayZ	elevationzempty-cellsfloatzfont-familyz	font-sizez
font-stylezfont-variantzfont-weightfontheightleftzletter-spacingzline-heightzlist-style-imagezlist-style-positionzlist-style-typez
list-stylezmargin-rightzmargin-leftz
margin-topzmargin-bottommarginz
max-heightz	max-widthz
min-heightz	min-widthorphansrx   zpadding-topzpadding-rightzpadding-bottomzpadding-leftpaddingzpage-break-afterzpage-break-beforezpage-break-insidezpause-afterzpause-beforepausezpitch-rangeZpitchzplay-duringpositionquotesZrichnessrightzspeak-headerzspeak-numeralzspeak-punctuationZspeakzspeech-rateZstressztable-layoutz
text-alignztext-decorationztext-indentztext-transformtopzunicode-bidizvertical-alignZ
visibilityzvoice-familyvolumez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}))?)
zborder-stylezborder-widthZb1Zb2Zb3Zb4Zb5Zb6zborder-attrszborder-radius-partz<({color}|transparent)(\s+({color}|transparent)){0,3}|inheritz.{border-style}(\s+{border-style}){0,3}|inheritz{border-attrs}|inheritz{border-style}|inheritz{border-width}|inheritz.{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-colorzborder-stylez
border-topzborder-rightzborder-bottomzborder-leftzborder-top-colorzborder-right-colorzborder-bottom-colorzborder-left-colorzborder-top-stylezborder-right-stylezborder-bottom-stylezborder-left-stylezborder-top-widthzborder-right-widthzborder-bottom-widthzborder-left-widthzborder-widthZborderzborder-top-right-radiuszborder-bottom-right-radiuszborder-bottom-left-radiuszborder-top-left-radiuszborder-radiusz
box-shadowzborder-stylezborder-widthz9{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)zborder-stylezborder-widthz	outline-1z	outline-2z	outline-3z	outline-4z	outline-5z	outline-6zoutline-colorzoutline-stylez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-indexzoutline-colorzoutline-stylezoutline-widthzoutline-offsetoutlineresizerx   z {overflow}{w}{overflow}?|inheritz{overflow}|inherit)rx   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|yellowgreena`  (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)zL{namedcolor}|{hexcolor}|{rgbcolor}|{rgbacolor}|{hslcolor}|{x11color}|inherit)r   Z	rgbacolorZhslcolorZx11colorr   r   Z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})?)zfamily-namezfont-face-namezfont-stretch-nameszunicode-rangez{number}|none|inheritz2normal|wider|narrower|{font-stretch-names}|inherit)zfont-size-adjustz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})*)zfont-familyzfont-stretchz
font-stylezfont-weightsrczunicode-rangez"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-orientationZ	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})
Zfitzfit-positionzimage-orientationr   pagezpage-break-beforezpage-break-afterzpage-break-insidesizer   ztext-shadow)r   __all__Zcssutilsr   r?   rh   r   r   r)   r*   r(   r+   r,   r-   r.   r/   r0   r1   r2   r	   r	   r	   r
   <module>   s     3
