
     h                         d Z ddgZddlZddlZddlmZ ddlmZ d Z ej                  d	e        G d
 d      Z
 G d d      Z G d d      Zy)zcssutils serializerCSSSerializerPreferences    N)	normalize   )helperc                    | 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/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/cssutils/serialize.py
_escapecssr      sr     	
155!A
=>?QWs3s1v;'+1133Q?	
 	
	 ?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``

    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.
    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 cssutils.
    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)useDefaultslistitems__setattr__)selfinitialskeyvalues       r   __init__zPreferences.__init__q   s;    x~~/0JC  e, 1    c                     dj                  | j                  j                  dj                  | j                  D cg c]  }d| d| j                  |       c}            S c c}w )Nzcssutils.css.{}({})z, z
    =)format	__class____name__r   __dict____getattribute__r   ps     r   __repr__zPreferences.__repr__x   sg    $++NN##IICG==CPa&1T221589= 
 	
s   A#c                     dj                  | j                  j                  dj                  | j                  D cg c]  }| d| j                  |       c}      t        |             S c c}w )Nz$<cssutils.css.{} object {} at 0x{:x} r&   )r'   r(   r)   r   r*   r+   idr,   s     r   __str__zPreferences.__str__   sb    5<<NN##HH4==Q=a1T221589=QRtH
 	
Qs   A,c                 b   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| _        y)z4Reset all preference options to their default value.TNz    F
r0   )defaultAtKeyworddefaultPropertyNamedefaultPropertyPriorityimportHrefFormatindentindentClosingBraceindentSpecificitieskeepAllPropertieskeepCommentskeepEmptyRuleskeepUnknownAtRuleskeepUsedNamespaceRulesOnlylineNumberslineSeparatorlistItemSpacerminimizeColorHashnormalizedVarNamesomitLastSemicolonomitLeadingZeroparanthesisSpacerpropertyNameSpacerresolveVariablesselectorCombinatorSpacerspacer	validOnlyr   s    r   r   zPreferences.useDefaults   s     $#' '+$ $"&#( !% #"&*/' !!!%"&!%$!$"% $(+%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)r8   r9   r=   r>   r?   r@   rA   rB   rC   rD   rF   rG   rH   rI   rK   rL   rM   rN   s    r   useMinifiedzPreferences.useMinified   s     !)!#"'*.'  !%!%#!#"$(*%r$   N)	r)   
__module____qualname____doc__r#   r.   r2   r   rQ    r$   r   r   r       s"    N`-

8r$   c                   .    e Zd ZdZd Zd Z	 ddZddZy)	OutzHA simple class which makes appended items available as a combined stringc                      || _         g | _        y N)serout)r   rZ   s     r   r#   zOut.__init__   s    r$   c                 t    | j                   r,| j                   d   j                         s| j                   d= y y y )N)r[   striprN   s    r   _remove_last_if_SzOut._remove_last_if_S   s.    88DHHRL..0 18r$   Nc                  	   | j                   j                  j                  }|s|dv rWd|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                  |      }nid|k(  r| j                   j                  |      }nHt        |d	      r|j                  }n/t        |d
      r|j                  }n|dv r|s| j                          |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", cssutils.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Sr0   ra   rb   HASHcssText	mediaTextz+>~,:{;)]/=}}r   -+*/z+>~r]   ),:{;	styletextz}[]()/=FUNCTION)rZ   prefsrL   r=   rf   r   rP   r_   uri_hashhasattrrg   r:   r[   append_indentblock_levelendswithinsertrK   rC   rI   rH   rB   )r   valtype_spacekeepSr9   alwaysS	prefspaces           r   ru   z
Out.append   s6   4 HHNN))	%,,E!88>>..++Ce%U";mmC( **,%jjo5hhnnS)i(kkk*mm&w&&( #*)J)J 5 5c488??Q;N OP<<$**,$ 3&=$DHHNN$K$KL G GHE$ = => A ABDHHNN$D$DE < <={e3 < <=I%%EZ4G 5 56X% HHNN11 HHRL11#6HHOOC( 7 ! 2 & 5H%% -r$   c                     |s| j                          |r| j                  j                  |       |j                  | j                        S )z!returns all items joined by delim)r_   r[   ru   r   )r   delimr   r}   s       r   r"   z	Out.value,  s7    ""$HHOOC zz$((##r$   )NTFFF)r	   NF)r)   rR   rS   rT   r#   r_   ru   r"   rU   r$   r   rW   rW      s"    R OTb)H$r$   rW   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   rq   rw   
_selectors_selectorlevel)r   rq   s     r   r#   zCSSSerializer.__init__<  s-    
 ME
 r$   c                 ^    | j                   j                  r|j                  S |j                  S )z6returns default or source atkeyword depending on prefs)rq   r5   	atkeyword_keywordr   rules     r   
_atkeywordzCSSSerializer._atkeywordJ  s#    ::&&>>!== r$   c                    | j                   j                  s|S | j                   j                  j                  |j                  | j                   j                        D cg c]  }|| 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)
        )rq   rB   r   splitr9   )r   textlevellines       r   rv   zCSSSerializer._indentblockQ  s    
 zz''Kzz'',,

4::#;#;<.
< tzz((()$0<.
  	 .
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
        )rq   r6   r<   name)r   propertyactuals      r   _propertynamezCSSSerializer._propertyname]  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)
rq   rA   lenr   countrB   	enumerater   ru   r   )r   r   padr[   ir   s         r   _linenumnberszCSSSerializer._linenumnbersh  s    ::!!c$**TZZ%=%=>BCDCC$TZZ

0H0H%IJ4

I#q1ud);;< K::++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
               #)rq   rD   r   )r   rz   r{   s      r   rs   zCSSSerializer._hashq  sr    
 JJ((CAA#a& A#a& A#a& s1vhs1vhs1vh//
r$   c                 |    | j                   j                   xs$ | j                   j                  xr |j                  S )z/checks items valid property and prefs.validOnly)rq   rM   valid)r   r   s     r   _validzCSSSerializer._valid  s-    ::'''MDJJ,@,@,LQWWMr$   c                    |j                         }g }|j                  D ]p  }| j                  j                  r8|j                  |j
                  k(  r|j                  |vr|j                  sd|vrQ|j                  }|s`|j                  |       r | 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cssRulesrq   r@   NAMESPACE_RULEtypenamespaceURIprefixrf   ru   r   rB   r   encoding
IndexErrorAttributeErrorencode)r   
stylesheetusedurisr[   r   rf   r   r   s           r   do_CSSStyleSheetzCSSSerializer.do_CSSStyleSheet  s    **,''D

55''4994%%X5[[D$8llG

7# ( !!$**":":"?"?"DE	!**1-66H
 {{8[11	 N+ 	H	s   C2 2DDc                 `    |j                   r"| j                  j                  r|j                   S y)zJ
        serializes CSSComment which consists only of commentText
        r	   )_cssTextrq   r=   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   rP   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                  | | j                  j                   dd       |j                         S y)z
        serializes CSSVariablesRule

        media
            TODO
        variables
            CSSStyleDeclaration

        + CSSComments
        rm   rh   r   r9   r	   )	variablesrf   r   rq   rJ   rW   ru   r   seqr"   r   rB   )r   r   variablesTextr[   items        r   do_CSSVariablesRulez!CSSSerializer.do_CSSVariablesRule  s     ..T__TZZ5P5Pd)CJJtt,-

4::tyy1 ! JJsOJJ-)A)A(B"EaJP99;r$   c                    | j                  |j                        }|r|j                  rt        |       }|j	                  | j                  |             |j                  D ](  }|j	                  |j                  |j                         * |j	                  d       |j	                  | | j                  j                   dd       |j                         S y)zr
        serializes CSSFontFaceRule

        style
            CSSStyleDeclaration

        + CSSComments
        rm   rh   r   r   r	   )do_css_CSSStyleDeclarationstyler   rW   ru   r   r   r"   r   rq   rB   )r   r   	styleTextr[   r   s        r   do_CSSFontFaceRulez CSSSerializer.do_CSSFontFaceRule  s     33DJJ?	d)CJJtt,-

4::tyy1 ! JJsOJJ)TZZ%=%=$>bA!JL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 cssutils.stylesheets.medialist.MediaList
        name
            optional string

        + CSSComments
        hrefrP   rr   ra   rb   mediaallr   rn   r   r	   )r   rW   ru   r   r   r   r"   rq   r8   hreftypedo_stylesheets_medialist)r   r   r[   r   r{   rz   rg   s          r   do_CSSImportRulezCSSSerializer.do_CSSImportRule  s    ??d)CJJtt,-!YY

sU?zz22h>

33u< 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   ra   rn   r   r	   )r   rW   ru   r   r   r   r"   )r   r   r[   r   r{   rz   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	   r0   rm   r   z%s})r   r   r   r   rq   rL   ru   r   r   rW   r   rP   r   r"   r   rH   rB   r   rf   rv   rw   r>   r   r^   extendintr:   r9   )r   r   r[   nameoutr   rulesoutrrtexts           r   do_CSSMediaRulezCSSSerializer.do_CSSMediaRule'  s     zz$$ t$%4::$$%JJsOJJtzz(()

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

4:://0

3

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

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

8 	

c$**"?"?@@DJJDUDUUW	

 wws|r$   c                 ,   g }|j                   D ]G  }|j                  }|s|j                  |       |j                  | j                  j                         I dj                  |      }| j                  |j                  |       }|s|r|j                  rt        |       }|j                  | j                  |             |j                  |j                         |j                  d       |rC|s,|j                  | | j                  j                   d       n|j                  |ddd       |r|j                  |d       | xj                  dz  c_        |j                  d	       | xj                  dz  c_        |j                         S y)
z
        serializes CSSPageRule

        selectorText
            string
        style
            CSSStyleDeclaration
        cssRules
            CSSRuleList of MarginRule objects

        + CSSComments
        r	   )omitrm   r   r   ro   F)r{   r9   r|   rh   )r   rf   ru   rq   rB   r   r   r   r   rW   r   selectorTextrw   r"   )r   r   r   r   r   	rulesTextr   r[   s           r   do_CSSPageRulezCSSSerializer.do_CSSPageRule_  s@    AIIE&

 8 89	  GGH%	 33DJJ]3S	d)CJJtt,-JJt(()JJsO JJ)TZZ-E-E,FGPQJRJJyAUJS

9Q
/KK1KJJsOKK1K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r|   )rW   r   ru   r"   )r   r   r[   r   s       r   do_CSSPageRuleSelectorz$CSSSerializer.do_CSSPageRuleSelector  s_    $iDyyG#

4::tyy
>

4::tyy1	 
 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{   rm   r   rh   r	   )r   r   r   r   rW   ru   r   rv   rw   rq   rB   r"   )r   r   r   r[   s       r   do_MarginRulezCSSSerializer.do_MarginRule  s     >>77

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

4??40
D

3

 )))T[[1_E

00 

3yy{"r$   c           
         |j                   rR| j                  j                  r;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
        rh   r   r]   rm   r	   )r   rq   r?   rW   ru   r   r   r   r"   poprv   rB   minr   )r   r   r[   stacksr   r{   rz   
stackblocks           r   do_CSSUnknownRulezCSSSerializer.do_CSSUnknownRule  s    ??tzz<<d)CJJt~~&F!YY

s#:!'!3!3!5J!"//&)A)AACG3v;?3
 #//SCK!O5LM2J%%c51JJsE* #:MM#d),- !0 99;r$   c                 p   | j                   j                  r|j                  D ch c]  }|j                   }}|j                  D cg c]  }|j                   }}| j
                  D ]  }|D ch c]  }|j                   }}|j                  |      r6|D cg c]  }|j                   }}||kD  sL| xj                  dz  c_         nS| j                  dkD  s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{}rm   rh   N)rq   r;   selectorListelementspecificityr   issubsetr   ru   do_css_SelectorListr   rw   r   r   r>   rH   rv   rB   r   r:   r9   )
r   r   r   elementsspecitivitiesselectorlastelementslastspecitivitiesr   r   s
             r   do_CSSStyleRulezCSSSerializer.do_CSSStyleRule  sE    ::))+/+<+<=+<a		+<H=484E4EF4EqQ]]4EMF OO3;<8a		8<$$\2@H(I1%(I$'88++q0+((1,''1,' , &&t'8'89&'# //0A0AB4??q		77

CIKK1Kzz((&

(D(D'ETJJ ) $$ !JJ00JJ,,%%iqAJJ,,[[3tzz'D'D#EEjj''(	 ## A >F< )J* KK1Ks#   J
	J1JJ"J J5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   
isinstancecssutilscssSelectorru   r   rq   rC   r   )r   selectorlistr[   partseps        r   r   z!CSSSerializer.do_css_SelectorList)  s{     ""C$((dHLL$9$9: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:

        - cssutils._ANYNS => ``*|name``
        - None => ``name``
        - u'' => ``|name``
        - any other value: => ``prefix|name``
        r	   NFr   *|T)r|   r}   )r   rW   _namespacesgetr   r   r"   r   tupleru   r   _ANYNSprefixForNamespaceURIr   )
r   r   r[   
DEFAULTURIr   r{   rz   r   r   r   s
             r   do_css_SelectorzCSSSerializer.do_css_Selector8  s    d)C!--11"d;J !YY

sc5)),&L$!\1&<+?

4e
<'8??:%(F,)1)=)=)S)S$0*" 

fXQtf#5uE
JJJsEdJC- %0 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   varrl   rn   rc   r	   )r   r   rW   r   r   r"   rq   rE   r   ru   rf   rF   r   r   r   
CSSCommentrB   r^   )
r   r   r[   lastitemr   r   r{   rz   r   cssvalues
             r   do_css_CSSVariablesDeclarationz,CSSSerializer.do_css_CSSVariablesDeclarationc  s@   y}}!d)C9==)A-H$Y]]34!YY

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

3X\\%<%<=JJsI.JJtzz778JJs{{E2JJtzz778% 4( 99;$$&& r$   c                 N   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 ]p  \  }	}|j                  }
t        |
t        j                  j                        rD| j                  j                  sN|j                  |
j                          |j                  |       {t        |
t        j                  j                        r^|
j                   s|j                  |
j                          |r|	t        |      dz
  k(  s|j                  d       |j                  |       t        |
t        j                  j"                        r.|j                  |
j                          |j                  |       O|j                  |
       |j                  |       s |r|d   |k(  r|d= dj%                  |      S yc c}w )z3
        Style declaration of CSSStyleRule
        r   r   rn   r]   r	   )r   r   rq   rB   r<   getPropertiesr   r"   r   r   PropertyrF   r   r  r=   ru   rf   CSSUnknownRuler   )r   r   	separatorr   r   
_effectiver   r[   rF   r   rz   s              r   r   z(CSSSerializer.do_css_CSSStyleDeclaration  s    uyy>A  JJ44	zz++ii #002
 !&		 )"4::x||/D/DE JJ*4%djj(,,2G2GH  )   C $ E)E)E$S>4jjc8<<#:#:;zz..

3;;/

9-X\\%:%:;{{

3;;/ 1a3s8a<6GJJsO

9-X\\%@%@AJJs{{+JJy) JJsOJJy)+ *. s2w)+G773< Us   3A3J"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   rf   rl   r0   r	   )seqsr   r   rt   ru   rf   literalnamer   _mediaQueryrq   rI   literalpriorityr7   priorityr   )r   r   r[   nameseqr"   priorityseqr   s          r   do_PropertyzCSSSerializer.do_Property  sc    == 3 3H8M*2--'GUK  4+JJt||,))T1JJt11(DABJJt$   ((H,@,@U]] 

3

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

3'DtY/

4<<0 !H$<$<< $

 B B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"
        rf   r0   r	   )rt   ru   rf   r   r^   )r   r  r[   r   s       r   do_Property_priorityz"CSSSerializer.do_Property_priority  sh    
 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	   rf   r   r]   z'"r   )rW   r   r   r"   r   r   r  rt   ru   rf   r   rP   )r   r"   
valuesOnlyr[   r   r{   rz   s          r   do_css_PropertyValuez"CSSSerializer.do_css_PropertyValue  s    d)C		!YY

s%8<<+B+B"B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SV}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   r%  )cmmminpxpcptemexr]   r   z%f-r
   N+)rW   r   	dimensionr"   r   r   rq   rG   r*  _signru   )r   r"   r!  r[   dimrz   vsigns           r   do_css_ValuezCSSSerializer.do_css_Value  sk   d)CzzBBoo+;;!#C 	+ 	 ![[C$44c%++./C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)rp   re   r   )r!  r	   )do_css_CSSFunctionr>  	colorTypeKeyError)r   r"   r!  s      r   do_css_ColorValuezCSSSerializer.do_css_ColorValueL  s_    	 33))** oo	  %	= =
  		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	   )rW   r   r   r"   r   r   r  ru   r   r  r!  r[   r   r{   rz   s          r   r@  z CSSSerializer.do_css_CSSFunctionW  sc    d)C !YY

s%8<<+B+B"B

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	   rf   CHARri   T)r~   )
rW   r   r   r"   r   r   r  rt   ru   rf   rE  s          r   do_css_CSSCalczCSSSerializer.do_css_CSSCalcd  s    d)C !YY

s%8<<+B+B"B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   )rW   r   r"   ru   )r   r  r!  r[   r   rz   s         r   do_css_MSValuezCSSSerializer.do_css_MSValuey  sL     d)C jj 

3E
2 % 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(rp   r   rk   COMMArj   )r   rW   r"   rq   rJ   ru   fallbackrf   )r   variableIGNOREDr[   r<  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 ]N  }|j                  dk(  r|r|j	                  dd       nd}|j	                  |j
                  |j                         P |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
MediaQueryrk   rG  T)r   r   rW   r   ru   r"   )r   	medialistr   r[   	firstdoner   s         r   r   z&CSSSerializer.do_stylesheets_medialist  sz     y>Q--Cd)CI99, 

3/$(	

4::tyy1  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	   FrR  )rG  rk   T)r   r   r   r"   ru   rW   )
r   
mediaquerywithseminextmqr   r{   rz   r[   tr<  s
             r   do_stylesheets_mediaqueryz'CSSSerializer.do_stylesheets_mediaquery  s     $$HF"!YY

sL(VOOM2"F!F- ' d)C 

1a   99;r$   rY   )NT)F)(r)   rR   rS   rT   r#   r   rv   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r  r  r"  r*  r>  rC  r@  rH  rJ  rP  r   rZ  rU   r$   r   r   r   5  s     !
	N262.(T26p/b)V%N;z)V@ +/=~/b$*.`	* ,2r$   )rT   __all__codecsr   cssutils.helperr   r	   r   r   register_errorr   rW   r   rU   r$   r   <module>r_     s]    M
*   %     k: .Y Yxv$ v$ra ar$   