
    ]h                         d dl mZmZmZmZ ddlmZ d dlZd dlZd dl	m
Z
 	 ddgZdZd	Zd dlZej                  d    d
k\  reZneZd Zd Z ej*                  de        G d de      Z G d de      Z G d de      Zy)    )unicode_literalsdivisionabsolute_importprint_function   )helperN)	normalizeCSSSerializerPreferencesrestructuredtextz$Id$   c                 <    t        | t              r| S t        |       S N)
isinstancelist)ps    /home/pod-website-builder.sw7ft.com/pod-website-builder/website-analyzer/venv/lib/python3.12/site-packages/css_parser/serialize.pyas_listr      s    !T7N    c                    | j                   | j                  | j                   }dj                  |D cg c]3  }dt	        t        t        |                  dd j                         z  5 c}      | j                  fS c c}w )u   
    Escapes characters not allowed in the current encoding the CSS way
    with a backslash followed by a uppercase hex code point

    E.g. the german umlaut 'ä' is escaped as \E4
     z\%s    N)objectstartendjoinstrhexordupper)esxs      r   
_escapecssr$      sv     	
A77&')!" c#c!f+.qr2UW ) *+,551 1 )s   8A>	escapecssc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)r   a  Control output of CSSSerializer.

    defaultAtKeyword = True
        Should the literal @keyword from src CSS be used or the default
        form, e.g. if ``True``: ``@import`` else: ``@i\mport``
    defaultPropertyName = True
        Should the normalized propertyname be used or the one given in
        the src file, e.g. if ``True``: ``color`` else: ``c\olor``

        Only used if ``keepAllProperties==False``.

    defaultPropertyPriority = True
        Should the normalized or literal priority be used, e.g. ``!important``
        or ``!Im\portant``

    formatUnknownAtRules = True
        If False, tokens of unknown atrules will just be concatenated as
        they were saved by the parser.

    importHrefFormat = None
        Uses hreftype if ``None`` or format ``"URI"`` if ``'string'`` or
        format ``url(URI)`` if ``'uri'``
    indent = 4 * ' '
        Indentation of e.g Properties inside a CSSStyleDeclaration
    indentClosingBrace = True
        Defines if closing brace of block is indented to match indentation
        of the block (default) oder match indentation of selector.
    indentSpecificities = False (**EXPERIMENTAL**)
        Indent rules with subset of Selectors and higher Specitivity

    keepAllProperties = True
        If ``True`` all properties set in the original CSSStylesheet
        are kept meaning even properties set twice with the exact same
        same name are kept!
    keepComments = True
        If ``False`` removes all CSSComments
    keepEmptyRules = False
        defines if empty rules like e.g. ``a {}`` are kept in the resulting
        serialized sheet
    keepUnknownAtRules = True
        defines if unknown @rules like e.g. ``@three-dee {}`` are kept in the
        serialized sheet
    keepUsedNamespaceRulesOnly = False
        if True only namespace rules which are actually used are kept

    lineNumbers = False
        Only used if a complete CSSStyleSheet is serialized.
    lineSeparator = u'\\n'
        How to end a line. This may be set to e.g. u'' for serializing of
        CSSStyleDeclarations usable in HTML style attribute.
    linesAfterRules = 0 * lineSeparator
        Adds blank lines after every rule.
    listItemSpacer = u' '
        string which is used in ``css.SelectorList``, ``css.CSSValue`` and
        ``stylesheets.MediaList`` after the comma.

    minimizeColorHash = True
        defines if colorhash should be minimized from full size to shorthand
        e.g minimize #FFFFFF to #FFF
    normalizedVarNames = True
        defines if variable names should be serialized normalized (they are
        used as being normalized anyway)
    omitLastSemicolon = True
        If ``True`` omits ; after last property of CSSStyleDeclaration
    omitLeadingZero = False
        defines if values between -1 and 1 should omit the 0, like ``.5px``
    paranthesisSpacer = u' '
        string which is used before an opening paranthesis like in a
        ``css.CSSMediaRule`` or ``css.CSSStyleRule``
    propertyNameSpacer = u' '
        string which is used after a Property name colon
    resolveVariables = True
        if ``True`` all variable references are tried to resolved and
        all CSSVariablesRules are removed from the output.
        Any variable reference not resolvable is simply kept untouched.
    selectorCombinatorSpacer = u' '
        string which is used before and after a Selector combinator like +, > or ~.
        CSSOM defines a single space for this which is also the default in css_parser.
    spacer = u' '
        general spacer, used e.g. by CSSUnknownRule

    validOnly = False
        if True only valid (Properties) are output

        A Property is valid if it is a known Property with a valid value.
    c                     | j                          t        |j                               D ]  \  }}|s	| j                  ||        y)z2Always use named instead of positional parameters.N)useDefaultsr   items__setattr__)selfinitialskeyvalues       r   __init__zPreferences.__init__   s@    !(.."23 	-JC  e,	-r   c                     d| j                   j                  ddj                  | j                  D cg c]  }d|d| j	                  |       c}      dS c c}w )Nzcss_parser.css.(z, z
    =))	__class____name__r   __dict____getattribute__r+   r   s     r   __repr__zPreferences.__repr__   sV    ''KO==4ZFGQ(=(=a(@A4Z *[\ 	\4Zs   Ac                     d| j                   j                  dj                  | j                  D cg c]  }|d| j	                  |       c}      t        |       fz  S c c}w )Nz$<css_parser.css.%s object %s at 0x%x r2   )r4   r5   r   r6   r7   idr8   s     r   __str__zPreferences.__str__   sh    5''EI]]3T@Aq$"7"7":;3T *UVXY]V^9` ` 	`3Ts   A!c                    d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| j                  z  | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        y)z4Reset all preference options to their default value.TNz    F
r   r;   )defaultAtKeyworddefaultPropertyNamedefaultPropertyPriorityformatUnknownAtRulesimportHrefFormatindentindentClosingBraceindentSpecificitieskeepAllPropertieskeepCommentskeepEmptyRuleskeepUnknownAtRuleskeepUsedNamespaceRulesOnlylineNumberslineSeparatorlinesAfterRuleslistItemSpacerminimizeColorHashnormalizedVarNamesomitLastSemicolonomitLeadingZeroparanthesisSpacerpropertyNameSpacerresolveVariablesselectorCombinatorSpacerspacer	validOnlyr+   s    r   r(   zPreferences.useDefaults   s     $#' '+$$(! $"&#( !% #"&*/' ! 4#5#55!!%"&!%$!$"% $(+%r   c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        y)zSet options resulting in a minified stylesheet.

        You may want to set preferences with this convenience method
        and override specific settings you want adjusted afterwards.
        stringr   FTN)rD   rE   rI   rJ   rK   rL   rM   rN   rP   rQ   rS   rT   rU   rV   rX   rY   rZ   r[   s    r   useMinifiedzPreferences.useMinified   s     !)!#"'*.'  !%!%#!#"$(*%r   N)	r5   
__module____qualname____doc__r/   r9   r=   r(   r^    r   r   r   r   *   s$    Un-\
`
<r   c                   .    e Zd ZdZd ZddZddZd	dZy)
OutzHA simple class which makes appended items available as a combined stringc                      || _         g | _        y r   )serout)r+   rf   s     r   r/   zOut.__init__   s    r   Nc                 v    | j                   r-| j                   d   j                  |      s| j                   d= y y y )N)rg   strip)r+   spaces     r   _remove_last_if_SzOut._remove_last_if_S   s0    88DHHRL..u5 68r   c                 n	   | j                   j                  j                  }|s|dv rd|k(  r.| j                   j                  j                  r|j                  }nyd|k(  r|syd|k(  r|rd}nd|k(  r+|yt        j                  |      }|s| j                          nd|k(  rt        j                  |      }nd|k(  r| j                   j                  |      }nt        |d	      r|j                  }nft        |d
      r|j                  }nM|dv r|s| j                          n6|| j                   j                  j                  k(  r|s| j                  d       |s%|dk(  rm| j                   j                  j                  rM| j                  j                  | j                   j!                  || j                   j"                  dz                n<|j%                  d      r| j                          | j                  j                  |       |r |dv r| j                  j                  d       y|dv rt| j                  j'                  d| j                   j                  j(                         | j                  j                  | j                   j                  j(                         yd|k(  r|s| j                  j                  d       yd|k(  r:| j                  j                  | j                   j                  j*                         yd|k(  r:| j                  j                  | j                   j                  j,                         yd|k(  rt| j                  j'                  d| j                   j                  j.                         | j                  j                  | j                   j                  j                         yd|k(  sd|k(  r:| j                  j                  | j                   j                  j                         y|dvr|r|dk7  r| j                  j                  | j                   j                  j                         |dk7  ri| j                   j                  j                  sH| j                  r;| j                  d   j%                  d      s| j                  j                  d       yyyyyyyyy)a  Appends val. Adds a single S after each token except as follows:

        - typ COMMENT
            uses cssText depending on self.ser.prefs.keepComments
        - typ "Property", css_parser.css.CSSRule.UNKNOWN_RULE
            uses cssText
        - typ STRING
            escapes helper.string
        - typ S
            ignored except ``keepS=True``
        - typ URI
            calls helper.uri
        - val ``{``
            adds LF after
        - val ``;``, typ 'styletext'
            removes S before and adds LF after
        - val ``, :``
            removes S before
        - val ``+ > ~``
            encloses in prefs.selectorCombinatorSpacer
        - some other vals
            add ``*spacer`` except ``space=False``
        )STRINGURICOMMENTNSr;   rn   ro   HASHcssText	mediaTextz+>~,:{;)]/=}z 	}r   -+*/z+>~ri   r3   ,:{;	styletextz}[]()/=FUNCTION)rf   prefsrY   rI   rs   r   r]   rl   uri_hashhasattrrt   rN   rF   rg   append_indentblock_levelendswithinsertrX   rP   rV   rU   )r+   valtype_rk   keepSrE   alwaysS	prefspaces           r   r   z
Out.append   sV   0 HHNN))	%,,E!88>>..++Ce%U";mmC( **,%jjo5hhnnS)i(kkk*mm&w&&(444W&&u- #*)J)J 5 5c488??1;L MN<<$**,$ 3&=$DHHNN$K$KL G GHE$ = => A ABDHHNN$D$DE < <={e3 < <=I%%EZ4G 5 56H$TXX^^-B-B88DHHRL$9$9#$>HHOOC( %?8 .C$ 5H%%C -r   c                     |s| j                          |r| j                  j                  |       |j                  | j                        S )z!returns all items joined by delim)rl   rg   r   r   )r+   delimr   r   s       r   r.   z	Out.value6  s7    ""$HHOOC zz$((##r   r   )NTFFF)r   NF)r5   r_   r`   ra   r/   rl   r   r.   rb   r   r   rd   rd      s    R
^)@$r   rd   c                       e Zd ZdZd'dZd Zd Zd Zd Zd'dZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd(dZd Zd Zd)dZd Zd'dZ d)d Z!d)d!Z"d)d"Z#d)d#Z$d)d$Z%d% Z&d& Z'y)*r
   zSerialize a CSSStylesheet and its parts.

    To use your own serializing method the easiest is to subclass CSS
    Serializer and overwrite the methods you like to customize.
    Nc                 T    |s
t               }|| _        d| _        g | _        d| _        y)zC
        :param prefs:
            instance of Preferences
        r   N)r   r}   r   
_selectors_selectorlevel)r+   r}   s     r   r/   zCSSSerializer.__init__F  s-    
 ME
 r   c                 ^    | j                   j                  r|j                  S |j                  S )z6returns default or source atkeyword depending on prefs)r}   r@   	atkeyword_keywordr+   rules     r   
_atkeywordzCSSSerializer._atkeywordT  s#    ::&&>>!== r   c                 "   | j                   j                  s|S | j                   j                  j                  |j                  | j                   j                        D cg c]!  }|r|| j                   j                  z  |# c}      S c c}w )z
        indent a block like a CSSStyleDeclaration to the given level
        which may be higher than self._level (e.g. for CSSStyleDeclaration)
        )r}   rN   r   splitrE   )r+   textlevellines       r   r   zCSSSerializer._indentblock[  sz    
 zz''Kzz'',, JJtzz'?'?@JD tzz000$7 J
 	
Js   &Bc                 v    | j                   j                  r"| j                   j                  s|j                  S |S )z
        used by all styledeclarations to get the propertyname used
        dependent on prefs setting defaultPropertyName and
        keepAllProperties
        )r}   rA   rH   name)r+   propertyactuals      r   _propertynamezCSSSerializer._propertynameg  s,     ::))$**2N2N== Mr   c                    | j                   j                  rt        t        |j	                  | j                   j
                        dz               }g }t        |j                  | j                   j
                              D ]  \  }}|j                  d||dz   |fz         ! | j                   j
                  j                  |      }|S )Nr   z%*i: %s)
r}   rM   lenr   countrN   	enumerater   r   r   )r+   r   padrg   ir   s         r   _linenumberszCSSSerializer._linenumbersr  s    ::!!c$**TZZ%=%=>q@ABCC$TZZ

0H0H%IJ ;4

I#qsD)99:;::++005Dr   c                     | j                   j                  rAt        |      dk(  r3|d   |d   k(  r(|d   |d   k(  r|d   |d   k(  rd|d   |d   |d   S |S )	zB
        Short form of hash, e.g. #123 instead of #112233
           r   r   r            #)r}   rQ   r   )r+   r   r   s      r   r   zCSSSerializer._hash{  sj     ::''CAA#a& A#a& A#a&  #AAA77
r   c                 |    | j                   j                   xs$ | j                   j                  xr |j                  S )z/checks items valid property and prefs.validOnly)r}   rZ   valid)r+   r#   s     r   _validzCSSSerializer._valid  s4    ::''' 5DJJ,@,@ -4,-GG	5r   c                 @   |j                         }g }|j                  D ]  }| j                  j                  r8|j                  |j
                  k(  r|j                  |vr|j                  sd|vrQ|j                  }|s`|j                  || j                  j                  z           | j                  | j                  j                  j                  |            }	 |j                  d   j                  }|j#                  |d      S # t        t         f$ r d}Y %w xY w)z#serializes a complete CSSStyleSheetNr   zUTF-8r%   )_getUsedURIscssRulesr}   rL   NAMESPACE_RULEtypenamespaceURIprefixrs   r   rO   r   rN   r   encoding
IndexErrorAttributeErrorencode)r+   
stylesheetusedurisrg   r   rs   r   r   s           r   do_CSSStyleSheetzCSSSerializer.do_CSSStyleSheet  s   **,'' 		ADzz44""dii/  0KK4x#7llG

7TZZ%?%??@		A   !9!9!>!>s!CD	!**1-66H
 {{8[11	 N+ 	H	s   D	 	DDc                 `    |j                   r"| j                  j                  r|j                   S y)zJ
        serializes CSSComment which consists only of commentText
        r   )_cssTextr}   rI   r   s     r   do_CSSCommentzCSSSerializer.do_CSSComment  s$     ==TZZ44== r   c                 `    |j                   r"dt        j                  |j                        z  S y)z
        serializes CSSCharsetRule
        encoding: string

        always @charset "encoding";
        no comments or other things allowed!
        z@charset %s;r   )
wellformedr   r]   r   r   s     r   do_CSSCharsetRulezCSSSerializer.do_CSSCharsetRule  s&     ??!FMM$--$@@@r   c                    |j                   j                  }|r|j                  r| j                  j                  st        |       }|j                  | j                  |             |j                  D ](  }|j                  |j                  |j                         * |j                  d       |j                  d|z  d       |j                  d| j                  j                  z         |j                  d       |j                         S y)z
        serializes CSSVariablesRule

        media
            TODO
        variables
            CSSStyleDeclaration

        + CSSComments
        ry   %sr   rE   ru   r   )	variablesrs   r   r}   rW   rd   r   r   seqr.   r   rN   )r+   r   variablesTextrg   items        r   do_CSSVariablesRulez!CSSSerializer.do_CSSVariablesRule  s     ..T__TZZ5P5Pd)CJJtt,- 2

4::tyy12 JJsOJJtm+AJ6JJtdjj6667JJsO99;r   c                    | j                  |j                        }|r|j                  rt        |       }|j	                  | j                  |             |j                  D ](  }|j	                  |j                  |j                         * |j	                  d       |j	                  d|z  d       |j	                  d| j                  j                  z         |j	                  d       |j                         S y)zr
        serializes CSSFontFaceRule

        style
            CSSStyleDeclaration

        + CSSComments
        ry   r   r   r   ru   r   )do_css_CSSStyleDeclarationstyler   rd   r   r   r   r.   r   r}   rN   )r+   r   	styleTextrg   r   s        r   do_CSSFontFaceRulez CSSSerializer.do_CSSFontFaceRule  s     33DJJ?	d)CJJtt,- 2

4::tyy12 JJsOJJti'J2JJtdjj6667JJsO99;r   c                 x   |j                   r-t        |       }|j                  | j                  |             |j                  D ]  }|j
                  |j                  }}d|k(  rg| j                  j                  dk(  s(| j                  j                  dk7  r"|j                  dk(  r|j                  |d       t|j                  |d       d|k(  r,| j                  |      }|s|dk7  s|j                  |       d|k(  r|j                  |d       |j                  ||        |j                  d	
      S y)z
        serializes CSSImportRule

        href
            string
        media
            optional css_parser.stylesheets.medialist.MediaList
        name
            optional string

        + CSSComments
        hrefr]   r~   rn   ro   mediaallr   rz   r   r   )r   rd   r   r   r   r   r.   r}   rD   hreftypedo_stylesheets_medialist)r+   r   rg   r   r   r   rt   s          r   do_CSSImportRulezCSSSerializer.do_CSSImportRule  s    ??d)CJJtt,- +!YY

sU?zz22h> JJ775@ MMX5

31

3.% $ = =c BI Y%%7

9-u_JJsH-JJsE*%+( 999%%r   c                 <   |j                   rt        |       }|j                  | j                  |             |j                  D ]D  }|j
                  |j                  }}d|k(  r|j                  |d       3|j                  ||       F |j                  d      S y)z
        serializes CSSNamespaceRule

        uri
            string
        prefix
            string

        + CSSComments
        r   rn   rz   r   r   )r   rd   r   r   r   r   r.   )r+   r   rg   r   r   r   s         r   do_CSSNamespaceRulez!CSSSerializer.do_CSSNamespaceRule  s     ??d)CJJtt,- +!YY

s!U*JJsH-JJsE*+ 999%%r   c                    |j                   j                  sy| j                  |      g}t        | j                  j
                        s|j                  d       n%|j                  | j                  j
                         |j                  | j                  |j                                |j                  r|j                  | j                  j
                         t        |       }|j                  t        j                  |j                               |j                  D ](  }|j                  |j                  |j                         * |j                  |j                                |j                  | j                  j                         |j                  d       |j                  | j                  j                          g }|j"                  D ]d  }|j$                  }|s|j                  | j'                  || j(                  dz                |j                  | j                  j                          f | j                  j*                  s dj-                  |      j/                         sy|j1                  |       |j                  d| j(                  t3        | j                  j4                        z   | j                  j6                  z  z         dj-                  |      S )z@
        serializes CSSMediaRule

        + CSSComments
        r   r;   ry   r   z%s})r   r   r   r   r}   rY   r   r   r   rd   r   r]   r   r.   r   rU   rN   r   rs   r   r   rJ   r   rj   extendintrF   rE   )r+   r   rg   nameoutr   rulesoutrrtexts           r   do_CSSMediaRulezCSSSerializer.do_CSSMediaRule1  s
    zz$$ t$%4::$$%JJsOJJtzz(()

400<= 99JJtzz(()$iGNN6==34 6tzz49956JJw}}' 	

4:://0

3

4::++,  	:AIIE 1 1%q IJ

 8 89	: zz((1B1H1H1J

8 	

5T[[3tzz/L/L+MM"jj//0 1 	2 wws|r   c                 T   g }|j                   D ]G  }|j                  }|s|j                  |       |j                  | j                  j                         I dj                  |      }| j                  |j                  |       }|s|r|j                  rt        |       }|j                  | j                  |             |j                  |j                         |j                  d       |rV|s?|j                  d|z  d       |j                  d| j                  j                  z         n|j                  |ddd	       |r;|j                  |d       |j                  d| j                  j                  z         |j                  d
d       |j                         S y)z
        serializes CSSPageRule

        selectorText
            string
        style
            CSSStyleDeclaration
        cssRules
            CSSRuleList of MarginRule objects

        + CSSComments
        r   )omitry   r   r   r   r{   F)r   rE   rk   ru   )r   rs   r   r}   rN   r   r   r   r   rd   r   selectorTextr.   )r+   r   r   r   r   	rulesTextr   rg   s           r   do_CSSPageRulezCSSSerializer.do_CSSPageRuleg  s\     	:AIIE&

 8 89		: GGH%	 33DJJ=F 4 H	 d)CJJtt,-JJt(()JJsO JJti/J:JJtdjj&>&>>?JJyAUJS

9Q
/

4$**":"::;JJs5J)99;r   c                    t        |       }|D ]`  }|j                  dk(  r)|j                  |j                  |j                  d       ;|j                  |j                  |j                         b |j                         S )z#Serialize selector of a CSSPageRuleIDENTFrk   )rd   r   r   r.   )r+   r   rg   r   s       r   do_CSSPageRuleSelectorz$CSSSerializer.do_CSSPageRuleSelector  sd    $i 	2DyyG#

4::tyy
>

4::tyy1		2
 yy{r   c                    |j                   r| j                  |j                        }|r|j                  rt	        |       }|j                  | j                  |      d       |j                  d       |j                  | j                  || j                  dz         | j                  j                         |j                  d       |j                         S y)z
        serializes MarginRule

        atkeyword
            string
        style
            CSSStyleDeclaration

        + CSSComments
        	ATKEYWORD)r   ry   r   ru   r   )r   r   r   r   rd   r   r   r   r   r}   rN   r.   )r+   r   r   rg   s       r   do_MarginRulezCSSSerializer.do_MarginRule  s     >>77

CIT__$i 

4??40
D

3

T%6%6y$++a-%P%)ZZ%=%=? @

3yy{"r   c           
      X   |j                   r| j                  j                  r| j                  j                  s4d |j                  dj                  fd|j                  D              z   S t        |       }|j                  |j                         g }|j                  D ]  }|j                  |j                  }}d|k(  r|j                         j                         }|rC| j                  || j                  j                  z   |z   t        dt        |      dz               }n(| j                  |t        dt        |      dz               }|r|d   j                  ||       n|j                  ||       d|k(  s|j                  t        |               |j                         S y)zg
        serializes CSSUnknownRule
        anything until ";" or "{...}"
        + CSSComments
        c                 N    | j                   }t        |d      r|j                  }|S )Nrs   )r.   r   rs   )r#   anss     r   getstrz/CSSSerializer.do_CSSUnknownRule.<locals>.getstr  s#    ''CsI.!kkJr   r   c              3   .   K   | ]  } |        y wr   rb   ).0r#   r   s     r   	<genexpr>z2CSSSerializer.do_CSSUnknownRule.<locals>.<genexpr>  s     /Laq	/Ls   ru   r   ri   ry   )r   r}   rK   rC   r   r   r   rd   r   r   r.   popr   rN   minr   )	r+   r   rg   stacksr   r   r   
stackblockr   s	           @r   do_CSSUnknownRulezCSSSerializer.do_CSSUnknownRule  sY    ??tzz<<::22 ~~/L488/L(LLLd)CJJt~~&F -!YY

s#:!'!3!3!5J!"//&)A)AACG3v;q=13 #//SCKM5JK2J%%c51JJsE* #:MM#d),+-. 99;r   c                    | j                   j                  rt        |j                  D cg c]  }|j                   c}      }|j                  D cg c]  }|j
                   }}| j                  D ]  }t        |D cg c]  }|j                   c}      }|j                  |      r6|D cg c]  }|j
                   }}||kD  sV| xj                  dz  c_         nS| j                  dkD  s}| xj                  dz  c_         | j                  j                  |j                         d| _        | j                  |j                        }|r|j                  sy| xj                  dz  c_        d}		 | j                  |j                        }	| xj                  dz  c_        |	s2| j                   j                  r|| j                   j                   dS y| j#                  || j                   j                   d| j                   j$                  | j#                  |	| j                  dz         | j                   j$                  | j                  t'        | j                   j(                        z   | j                   j*                  z  d| j                        S c c}w c c}w c c}w c c}w # | xj                  dz  c_        w xY w)zd
        serializes CSSStyleRule

        selectorList
        style

        + CSSComments
        r   r   r   z{}ry   ru   N)r}   rG   setselectorListelementspecificityr   issubsetr   r   do_css_SelectorListr   r   r   r   rJ   rU   r   rN   r   rF   rE   )
r+   r   r"   elementsspecitivitiesselectorlastelementslastspecitivitiesr   r   s
             r   do_CSSStyleRulezCSSSerializer.do_CSSStyleRule  sE    ::))t/@/@A!AIIABH484E4EFqQ]]FMF OO ("x#@!AII#@A$$\2@H(I1(I%(I$'88++q0+((1,''1,'( &&t'8'89&'# //0A0AB4??q		77

CIKK1Kzz((#/#'::#?#?A A ) $$ JJ00JJ,,%%iqAJJ,,[[3tzz'D'D#EEjj''() ##	% 	%C BF#@ )J* KK1Ks#   JJ# J(
/J-6J2 2K	c                 8   |j                   rg }|j                  D ]S  }t        |t        j                  j
                        r|j                  |j                         C|j                  |       U d| j                  j                  z  }|j                  |      S y)z!comma-separated list of Selectorsz,%sr   )r   r   r   
css_parsercssSelectorr   r   r}   rP   r   )r+   selectorlistrg   partseps        r   r  z!CSSSerializer.do_css_SelectorList3  s     ""C$(( %dJNN$;$;<JJt001JJt$	%
 $**333C88C= r   c                 &   |j                   rt        |       }|j                  j                  dd      }|j                  D ]  }|j
                  |j                  }}t        |t              ro|\  }}||k(  s|s||j                  ||d       N|t        j                  k(  rd}	n	 |j                  j                  |      }	|j                  |	d||d       |j                  ||dd        |j                         S y# t        $ r d}	Y Ow xY w)	a  
        a single Selector including comments

        an element has syntax (namespaceURI, name) where namespaceURI may be:

        - css_parser._ANYNS => ``*|name``
        - None => ``name``
        - u'' => ``|name``
        - any other value: => ``prefix|name``
        r   NFr   *|T)rk   r   )r   rd   _namespacesgetr   r   r.   r   tupler   r
  _ANYNSprefixForNamespaceURIr   )
r+   r  rg   
DEFAULTURIr   r   r   r   r   r   s
             r   do_css_SelectorzCSSSerializer.do_css_SelectorB  s    d)C!--11"d;J  D!YY

sc5)),&L$!\1*6B6J

4e
<':+<+<<%(F,)1)=)=)S)S$0*2
 

fd#;U%
PJJsEdJC)D, 99; $. ,)+,s   %DDDc                    t        |j                        dkD  rt        |       }t        |j                        dz
  }t        |j                        D ]R  \  }}|j                  |j
                  }}d|k(  r|\  }}	| j                  j                  rt        |      }|j                  |       |j                  d       |j                  |	j                         ||k  s| j                  j                  r|j                  d       t        |t        j                  j                        r9|j                  |d       |j                  | j                  j                          |j                  |j                  |       |j                  | j                  j                          U |j                         j#                         S y)zVariables of CSSVariableRule.r   r   varrx   rz   rp   r   )r   r   rd   r   r   r.   r}   rR   r	   r   rs   rS   r   r
  r  
CSSCommentrN   rj   )
r+   r   rg   lastitemr   r   r   r   r   cssvalues
             r   do_css_CSSVariablesDeclarationz,CSSSerializer.do_css_CSSVariablesDeclarationk  sE   y}}!d)C9==)A-H$Y]]3 94!YY

sE>%(ND(zz44(JJt$JJsOJJx//08|4::+G+G

3Z^^%>%>?JJsI.JJtzz778JJs{{E2JJtzz778%9( 99;$$&& r   c                    t        |j                        dkD  r|| j                  j                  }| j                  j                  r|j                  }n|j                         }|j                  D cg c]n  }t        |j                  t        j                  j                        r|j                  |v s.t        |j                  t        j                  j                        s|p }}g }|xr | j                  j                  }t        |      D ]  \  }	}|j                  }
t        |
t        j                  j                        r| j                  j                  sN| j                  j                  r|
j                  j!                  | j                  j                        D cg c]  }|j#                          }}|j%                  | j                  j                  j'                  |             n|j%                  |
j                         |j%                  |       t        |
t        j                  j                        r`|
j                  sC|j%                  |
j                         |r|	t        |      dz
  k(  s|j%                  d       |j%                  |       t        |
t        j                  j(                        r.|j%                  |
j                         |j%                  |       |j%                  |
       |j%                  |        |r|d   |k(  r|d= dj'                  |      S yc c}w c c}w )z3
        Style declaration of CSSStyleRule
        r   r   rz   ri   r   )r   r   r}   rN   rH   getPropertiesr   r.   r
  r  PropertyrS   r   r  rI   rs   r   lstripr   r   CSSUnknownRule)r+   r   	separatorr   r   
_effectiver   rg   rS   r   r   r#   liness                r   r   z(CSSSerializer.do_css_CSSStyleDeclaration  sZ    uyy>A  JJ44	zz++ii #002
(-		 O%djj*..2I2IJ#zzZ7(Z^^5L5LM  O O
 C $ E)E)E$S> *4jjc:>>#<#<=zz..::339<9J9J4::KcKc9d$eAQXXZ$eE$eJJtzz'?'?'D'DU'KLJJs{{3

9-Z^^%<%<={{

3;;/ 1a3s8A:oJJsO

9-Z^^%B%BCJJs{{+JJy) JJsOJJy)3*6 s2w)+G773< SO %fs   3A3L:$L?c                    g }|j                   d   r|j                  r| j                  |      r|j                   \  }}}|D ]l  }t        |d      r|j	                  |j
                         +|j                  |k(  r"|j	                  | j                  ||             \|j	                  |       n |rZ|j                  r|j                  rB|j
                  r6|j	                  d       |j	                  | j                  j                         |j	                  |j
                         |r|r|j	                  d       |D ]|  }t        |d      r|j	                  |j
                         +||j                  k(  r2| j                  j                  r|j	                  |j                         l|j	                  |       ~ dj                  |      S )z
        Style declaration of CSSStyleRule

        Property has a seqs attribute which contains seq lists for
        name, a CSSvalue and a seq list for priority
        r   rs   rx   r;   r   )seqsr   r   r   r   rs   literalnamer   _mediaQueryr}   rV   literalpriorityrB   priorityr   )r+   r   rg   nameseqr.   priorityseqr  s          r   do_PropertyzCSSSerializer.do_Property  si    == 3 3H8M*2--'GUK   %4+JJt||,))T1JJt11(DABJJt$% H00 ,,

3

4::889 JJu}}% {

3' -DtY/

4<<08#;#;;::==JJx'8'89JJt,- wws|r   c                    g }|D ]]  }t        |d      r>|j                  d       |j                  |j                         |j                  d       M|j                  |       _ dj                  |      j	                         S )z:
        a Properties priority "!" S* "important"
        rs   r;   r   )r   r   rs   r   rj   )r+   r/  rg   r  s       r   do_Property_priorityz"CSSSerializer.do_Property_priority  sm    
  	!DtY'

3

4<<(

3

4 	! wws|!!##r   c                    |syt        |       }|j                  D ]  }|j                  |j                  }}|r|t        j
                  j                  k(  r;t        |d      r|j                  |j                  |       d|r*|d   |d   k(  r|d   dv rt        j                  |dd       }|j                  ||        |j                         S )zSerializes a PropertyValuer   rs   r   ri   z'"r   )rd   r   r   r.   r
  r  r  r   r   rs   r   r]   )r+   r.   
valuesOnlyrg   r   r   r   s          r   do_css_PropertyValuez"CSSSerializer.do_css_PropertyValue  s    d)C		 +!YY

s%:>>+D+D"DS),JJs{{E2s1vR0SVu_$mmC"I6JJsE*+ 99;r   c                 |    |j                  d      dz   }|d| ||t        |       }}|j                  d      }||z   S )N.r   r   0)indexr   rstrip)r+   r"   r   abs        r   _strip_zeroszCSSSerializer._strip_zeros  sC    GGCL11vq3q6{1HHSM1ur   c                 R   |syt        |       }|j                  dv rU|j                  xs d}|j                  dk(  rd}|j                  dv rd}n|j                  t	        |j                        k(  rt        t	        |j                              }n| j                  j                  rYd|j                  cxk  rdk  rDn nA| j                  d|j                  z        }|}|j                  d	k(  r|d   |d
d z   }n$|dd }n| j                  d|j                  z        }|j                  dk7  r|j                  dk(  rd}nd}|j                  ||z   |z   |j                         |j                         S |j                  |j                  |j                         |j                         S )z)Serializes a Value, valuesOnly is ignoredr   )	DIMENSIONNUMBER
PERCENTAGEr   r8  )cmmminpxpcptemexri   r   z%f-r   N+)rd   r   	dimensionr.   r   	text_typer}   rT   r=  _signr   )r+   r.   r4  rg   dimr   vsigns           r   do_css_ValuezCSSSerializer.do_css_Value  sk   d)CzzBBoo+;;!#C +7 7 [[C$44#C$45CZZ//B4Hq4H))$*<=AC{{c)dQqrUle ++D5;;,>?C ;;!#s(:DD

4#:+UZZ8 yy{ 

5;;

3yy{r   c                     	  | j                   | j                  | j                  d|j                     ||      S # t        $ r Y yw xY w)z7Serialize a ColorValue, a HASH simple value or FUNCTION)r|   rr   r   )r4  r   )do_css_CSSFunctionrR  	colorTypeKeyError)r+   r.   r4  s      r   do_css_ColorValuezCSSSerializer.do_css_ColorValueG  s_    	' 7 7 --!.. oo' (-2<	> >
  		s   8; 	AAc                     |syt        |       }|j                  D ]L  }|j                  |j                  }}|r|t        j
                  j                  k(  r;|j                  ||       N |j                         S )zSerialize a CSS function valuer   )rd   r   r   r.   r
  r  r  r   r+   r  r4  rg   r   r   r   s          r   rT  z CSSSerializer.do_css_CSSFunctionR  sh    d)C  '!YY

s%:>>+D+D"D

3&	'
 99;r   c                    |syt        |       }|j                  D ]  }|j                  |j                  }}|r|t        j
                  j                  k(  r;t        |d      r|j                  |j                  |       d|dk(  r|dv r|j                  ||d       |j                  ||        |j                         S )zSerialize a CSS calc valuer   rs   CHARrv   T)r   )
rd   r   r   r.   r
  r  r  r   r   rs   rY  s          r   do_css_CSSCalczCSSSerializer.do_css_CSSCalc_  s    d)C  +!YY

s%:>>+D+D"DS),JJs{{E2f_JJsE4J8JJsE*+ 99;r   c                     |syt        |       }|j                  D ]"  }|j                  }|j                  |dd       $ |j                         S )zXSerialize an ExpressionValue (IE only),
        should at least keep the original syntaxr   NFr   )rd   r   r.   r   )r+   r  r4  rg   r   r   s         r   do_css_MSValuezCSSSerializer.do_css_MSValuet  sQ     d)C  3jj 

3E
2	3 99;r   c                    |r|j                   syt        |       }|j                  }| j                  j                  r#|r!|j                  |       |j                         S |j                  dd       |j                  |j                   d       |j                  r7|j                  dd       |j                  |j                  j                         |j                  d       |j                         S )zSerializes a CSSVariabler   zvar(r|   r   rw   COMMAr3   )r   rd   r.   r}   rW   r   fallbackrs   )r+   variableIGNOREDrg   rP  s        r   do_css_CSSVariablez CSSSerializer.do_css_CSSVariable  s    x}}d)CAzz**q

1 99; 

6:.

8=='2$$JJsG,JJx00889

399;r   c                    t        |      dk(  ry|j                  }t        |       }d}|D ]P  }|j                  }|dk(  r|r|j	                  dd       nd}|j	                  |j
                  |j                         R |j                         S )z
        comma-separated list of media, default is 'all'

        If "all" is in the list, every other media *except* "handheld" will
        be stripped. This is because how Opera handles CSS for PDAs.
        r   r   F
MediaQueryrw   r[  T)r   r   rd   r   r   r.   )r+   	medialistr   rg   	firstdoner   r   s          r   r   z&CSSSerializer.do_stylesheets_medialist  s     y>Q--Cd)CI 	2		L( 

3/$(	

4::tyy1	2 99;r   c                 D   |j                   syg }d}|j                  D ]J  }|j                  |j                  }}|dk(  r|r|j	                  d       d}nd}|j	                  ||f       L t        |       }|D ]  \  }}	|j	                  |	|        |j                         S )z2
        a single media used in medialist
        r   Frf  )r[  rw   T)r   r   r   r.   r   rd   )
r+   
mediaquerywithseminextmqr   r   r   rg   trP  s
             r   do_stylesheets_mediaqueryz'CSSSerializer.do_stylesheets_mediaquery  s     $$HF" 	.!YY

sL(VOOM2"F!F-	. d)C! !1

1a ! 99;r   r   )NT)F)(r5   r_   r`   ra   r/   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r0  r2  r5  r=  rR  rW  rT  r\  r^  rd  r   rn  rb   r   r   r
   r
   ?  s     !

	
5
2262'R24l0d$L-^9%v'R>:x,\$*'R	*,6r   )
__future__r   r   r   r   r   r   r
  codecscss_parser.helperr	   __all____docformat____version__sysversion_infor   rM  unicoder   r$   register_errorr   r   rd   r
   rb   r   r   <module>ry     s    S R    ' M
*" 
A!II	1   k: .]& ]@r$& r$jPF Pr   