
    Xwgym                    F   d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ d Zej                  Z G d	 d
      Z G d d      Z G d d      Z G d de      Z G d deej&                        Z G d de      Z G d d      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d e      Z G d! d"      Z G d# d$e      Z G d% d&e      Z  G d' d(e      Z! G d) d*e!e       Z" G d+ d,ejF                        Z$ G d- d.ejJ                        Z%y)/a  
CSS-2.1 engine

Primary classes:
    * CSSElementInterfaceAbstract
        Provide a concrete implementation for the XML element model used.

    * CSSCascadeStrategy
        Implements the CSS-2.1 engine's attribute lookup rules.

    * CSSParser
        Parses CSS source forms into usable results using CSSBuilder and
        CSSMutableSelector.  You may want to override parseExternal()

    * CSSBuilder (and CSSMutableSelector)
        A concrete implementation for cssParser.CSSBuilderAbstract (and
        cssParser.CSSSelectorAbstract) to provide usable results to
        CSSParser requests.

Dependencies:
    sets, cssParser, re (via cssParser)
    )annotationsN)abstractmethod)Path)ClassVar)	cssParser
cssSpecialc                    t        |  N)StopIterationvalues    H/var/www/horilla/myenv/lib/python3.12/site-packages/xhtml2pdf/w3c/css.pystopIterr   .   s    

    c                  ~    e Zd Zeefd       Zd Zd Zed        Zed        Z	ed
d       Z
ed        Zed        Zy	)CSSElementInterfaceAbstractc                    t         r
   NotImplementedError)selfnamedefaults      r   getAttrz#CSSElementInterfaceAbstract.getAttr?       !!r   c                &    | j                  dd      S )Nid r   r   s    r   	getIdAttrz%CSSElementInterfaceAbstract.getIdAttrC   s    ||D"%%r   c                &    | j                  dd      S )Nclassr   r   r   s    r   getClassAttrz(CSSElementInterfaceAbstract.getClassAttrF   s    ||GR((r   c                    t         r
   r   r   s    r   getInlineStylez*CSSElementInterfaceAbstract.getInlineStyleI   r   r   c                    t         r
   r   r   s    r   matchesNodez'CSSElementInterfaceAbstract.matchesNodeM   r   r   c                    t         r
   r   r   r   paramss      r   inPseudoStatez)CSSElementInterfaceAbstract.inPseudoStateQ   r   r   c                    t         )z<Results must be compatible with CSSElementInterfaceAbstract.r   r   s    r   iterXMLParentsz*CSSElementInterfaceAbstract.iterXMLParentsU   s
     "!r   c                    t         r
   r   r   s    r   getPreviousSiblingz.CSSElementInterfaceAbstract.getPreviousSiblingZ   r   r   N )__name__
__module____qualname__r   NotImplementedr   r    r#   r%   r'   r+   r-   r/   r1   r   r   r   r   >   s    $2 " "&) " " " " " " " " " "r   r   c                  f    e Zd ZdZdZdZd
ddZd
dZddZe	fdZ
e	fdZd Zd Zee	fd	       Zy)CSSCascadeStrategyNc                <    ||| _         ||| _        ||| _        y y r
   )authoruser	userAgenrr   r9   r:   	userAgents       r   __init__zCSSCascadeStrategy.__init__g   s.     DKDI &DN !r   c                |    || j                   }|| j                  }|| j                  } t        |       |||      S r
   )r9   r:   r;   typer<   s       r   copyWithUpdatez!CSSCascadeStrategy.copyWithUpdateo   sB    >[[F<99DItDz&$	22r   c              #  Z  K   | j                   "| j                   d    | j                   d    | j                  | j                  d    | j                  "| j                  d    | j                  d    |r|d    |d    | j                  | j                  d    y y wNr      )r;   r:   r9   )r   inlines     r   iterCSSRulesetsz"CSSCascadeStrategy.iterCSSRulesetsz   s     >>%..##..##99 ))A,;;"++a. ++a. )O)O99 ))A, !s   B)B+c                L    | j                  ||      }| j                  |||      S aV  
        Attempts to find the style setting for attrName in the CSSRulesets.

        Note: This method does not attempt to resolve rules that return
        "inherited", "default", or values that have units (including "%").
        This is left up to the client app to re-query the CSS in order to
        implement these semantics.
        )findCSSRulesFor_extractStyleForRule)r   elementattrNamer   rules        r   findStyleForzCSSCascadeStrategy.findStyleFor   s+     ##GX6((xAAr   c           
         | j                  ||      }|j                         D cg c]  \  }}|| j                  |||      f c}}S c c}}w rH   )findCSSRulesForEachitemsrJ   )r   rK   	attrNamesr   rulesrL   rM   s          r   findStylesForEachz$CSSCascadeStrategy.findStylesForEach   sV     (()< #(++-
$ t00xIJ
 	
 
s   A	c                   g }|j                         }| j                  D|| j                  d   j                  ||      z  }|| j                  d   j                  ||      z  }| j                  "|| j                  d   j                  ||      z  }| j                  D|| j                  d   j                  ||      z  }|| j                  d   j                  ||      z  }|r0||d   j                  ||      z  }||d   j                  ||      z  }| j                  "|| j                  d   j                  ||      z  }|j                          |S rC   )r%   r;   findCSSRuleForr:   r9   sort)r   rK   rL   rS   rE   s        r   rI   z"CSSCascadeStrategy.findCSSRulesFor   sB   '') >>%T^^A&55gxHHET^^A&55gxHHE99 TYYq\00(CCE;;"T[[^227HEEET[[^227HEEEVAY--gx@@EVAY--gx@@E99 TYYq\00(CCE

r   c                    |D ci c]  }|g  }}|j                         }| j                  |      D ]/  }|j                         D ]  \  }}||j                  ||      z  } 1 |j                         D ]  }|j	                           |S c c}w r
   )r%   rF   rQ   rV   rW   )	r   rK   rR   r   rS   rE   rulesetrL   	attrRuless	            r   rP   z&CSSCascadeStrategy.findCSSRulesForEach   s    &/0dr00'')++F3 	GG',{{} G#)W33GXFF	G	G  	INN	 1s   
Bc                Z    | r| d   d   }||   S |t         ur|S d| d| }t        |      )NrD   zCould not find style for 'z' in )r5   LookupError)rM   rL   r   stylemsgs        r   rJ   z'CSSCascadeStrategy._extractStyleForRule   sH     HQKE?".(N*8*E$B#r   )NNNreturnNoner
   )r2   r3   r4   r9   r:   r;   r>   rA   rF   r5   rN   rT   rI   rP   staticmethodrJ   r1   r   r   r7   r7   b   sX    FDI'3* 7E 
B =K 
<
 5C 	 	r   r7   c                      e Zd ZdZdZdZdddZd Zd Ze	d        Z
e	d        Ze	d        Ze	d	        Zdd
ZddZd Zd Zd Zd Zd ZddZd Zy)CSSSelectorBaseFNc                <    t        |t              sd d|f}|| _        y N*)
isinstancetuplecompleteName)r   rk   s     r   r>   zCSSSelectorBase.__init__   s     ,. #|4L(r   c                n    t        | j                  | j                         | j                  f      | _        y r
   )hashfullNamespecificity
qualifiers_hashr   s    r   _updateHashzCSSSelectorBase._updateHash   s&    4==$*:*:*<dooNO
r   c                \    | j                   t        j                  |       S | j                   S r
   )rq   object__hash__r   s    r   ru   zCSSSelectorBase.__hash__   s%    ::??4((zzr   c                     | j                   d   S )Nr   rk   r   s    r   nsPrefixzCSSSelectorBase.nsPrefix         ##r   c                     | j                   d   S )N   rw   r   s    r   r   zCSSSelectorBase.name   ry   r   c                     | j                   d   S )NrD   rw   r   s    r   	namespacezCSSSelectorBase.namespace  ry   r   c                     | j                   dd S )NrD      rw   r   s    r   rn   zCSSSelectorBase.fullName  s      1%%r   c                z    t        |       j                  g| j                         | j                         }d|z  S )Nz<%s %d:%d:%d:%d %s >)r@   r2   ro   asString)r   strArgss     r   __repr__zCSSSelectorBase.__repr__
  s8    :&&M)9)9);MT]]_M%//r   c                "    | j                         S r
   r   r   s    r   __str__zCSSSelectorBase.__str__      }}r   c                P    | j                         | j                  | j                  fS r
   )ro   rn   rp   r   s    r   _as_comparison_keyz"CSSSelectorBase._as_comparison_key  s       "DMM4??CCr   c                D    | j                         |j                         k(  S r
   r   r   others     r   __eq__zCSSSelectorBase.__eq__  s    &&(E,D,D,FFFr   c                D    | j                         |j                         k  S r
   r   r   s     r   __lt__zCSSSelectorBase.__lt__  s    &&(5+C+C+EEEr   c                \    | j                   | j                         | _         | j                   S r
   )_specificity_calcSpecificityr   s    r   ro   zCSSSelectorBase.specificity  s+    $ $ 5 5 7D   r   c                   d}d}t        | j                  dk7        }| j                  D ]  }|j                         r|dz  }|j	                         s|j                         r|dz  }?|j                         r|dz  }U|j                         sf|j                  j                         \  }}}}||z  }||z  }||z  } | j                  |||fS )z9From http://www.w3.org/TR/CSS21/cascade.html#specificity.r   rh   rD   )intr   rp   isHashisClassisAttrisPseudo
isCombinerselectorro   rE   )	r   	hashCountqualifierCountelementCount	qualifierihqes	            r   r   z CSSSelectorBase._calcSpecificity  s    	499+, 	"I!Q	""$	(8(8(:!###%!%%'&//;;=
1aQ	!#!	" {{I~|CCr   c                   y| j                   d   dj                  j                  fvry| j                   d   dvr'| j                   d   j                  j                  k7  ryt	        fd| j
                  D              S )NFrD   rh   r   )Nr   rh   c              3  @   K   | ]  }|j                          y wr
   matches).0r   rK   s     r   	<genexpr>z*CSSSelectorBase.matches.<locals>.<genexpr>?  s     O)9$$W-O   )rn   
domElementtagNamenamespaceURIallrp   r   rK   s    `r   r   zCSSSelectorBase.matches2  sx    ? ==C););)C)C#DDMM!O3a G$6$6$C$CCOtOOOr   c                   g }| j                   +|j                  | j                    d| j                          n|j                  | j                         | j                  D ]R  }|j	                         r!|j                  d|j                                4|j                  |j                                T dj                  |      S )N|r   r   )rx   appendr   rp   r   insertr   join)r   resultr   s      r   r   zCSSSelectorBase.asStringA  s    ==$MMT]]O1TYYK89MM$))$ 	,A||~a.ajjl+		,
 wwvr   )rh   r`   ra   strr
   )r2   r3   r4   rE   rq   r   r>   rr   ru   propertyrx   r   r}   rn   r   r   r   r   r   ro   r   r   r   r1   r   r   re   re      s    FEL)
P
 $ $ $ $ $ $ & &0DGF!
D&Pr   re   c                      e Zd ZdZy)CSSInlineSelectorTN)r2   r3   r4   rE   r1   r   r   r   r   S  s    Fr   r   c                  b    e Zd ZU g Zded<   d Zed        Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zy)CSSMutableSelectorzClassVar[list]rp   c                    t        | j                  | j                  D cg c]  }|j                          c}      S c c}w r
   )CSSImmutableSelectorrk   rp   asImmutable)r   r   s     r   r   zCSSMutableSelector.asImmutable]  s2    #IAI
 	
Is   =
c                *    |j                  ||        |S r
   )addCombination)	selectorAop	selectorBs      r   combineSelectorsz#CSSMutableSelector.combineSelectorsb  s      Y/r   c                :    | j                  t        ||             y r
   )_addQualifierCSSSelectorCombinationQualifier)r   r   r   s      r   r   z!CSSMutableSelector.addCombinationg  s    :2uEFr   c                8    | j                  t        |             y r
   )r   CSSSelectorHashQualifierr   hashIds     r   	addHashIdzCSSMutableSelector.addHashIdj  s    3F;<r   c                8    | j                  t        |             y r
   )r   CSSSelectorClassQualifier)r   class_s     r   addClasszCSSMutableSelector.addClassm  s    4V<=r   c                8    | j                  t        |             y r
   r   CSSSelectorAttributeQualifier)r   rL   s     r   addAttributezCSSMutableSelector.addAttributep  s    8BCr   c                <    | j                  t        |||             y r
   r   r   rL   r   
attr_values       r   addAttributeOperationz(CSSMutableSelector.addAttributeOperations  s    82zRSr   c                8    | j                  t        |             y r
   r   CSSSelectorPseudoQualifierr   r   s     r   	addPseudozCSSMutableSelector.addPseudov  s    5d;<r   c                :    | j                  t        ||             y r
   r   r)   s      r   addPseudoFunctionz$CSSMutableSelector.addPseudoFunctiony  s    5dFCDr   c                d    | j                   r| j                   j                  |       y |g| _         y r
   )rp   r   )r   r   s     r   r   z CSSMutableSelector._addQualifier~  s$    ??OO""9-(kDOr   N)r2   r3   r4   rp   __annotations__r   rc   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   Z  sQ    !#J#

  G=>DT=E
*r   r   c                  2     e Zd Zdd fdZed        Z xZS )r   c                d    t        |      | _        t        |   |       | j	                          y r
   )rj   rp   superr>   rr   )r   rk   rp   	__class__s      r   r>   zCSSImmutableSelector.__init__  s(    
+&r   c                <     | |j                   |j                        S r
   )rk   rp   )clsr   s     r   fromSelectorz!CSSImmutableSelector.fromSelector  s    8(((*=*=>>r   )rh   r1   r`   )r2   r3   r4   r>   classmethodr   __classcell__r   s   @r   r   r     s     ? ?r   r   c                  z    e Zd Zed        Zed        Zed        Zed        Zed        Zd Z	e
d        Zd
dZy	)CSSSelectorQualifierBasec                      yNFr1   r1   r   r   r   zCSSSelectorQualifierBase.isHash      r   c                      yr   r1   r1   r   r   r   z CSSSelectorQualifierBase.isClass  r   r   c                      yr   r1   r1   r   r   r   zCSSSelectorQualifierBase.isAttr  r   r   c                      yr   r1   r1   r   r   r   z!CSSSelectorQualifierBase.isPseudo  r   r   c                      yr   r1   r1   r   r   r   z#CSSSelectorQualifierBase.isCombiner  r   r   c                    | S r
   r1   r   s    r   r   z$CSSSelectorQualifierBase.asImmutable  s    r   c                    t         r
   r   r   s    r   r   z!CSSSelectorQualifierBase.asString  r   r   c                "    | j                         S r
   r   r   s    r   r   z CSSSelectorQualifierBase.__str__  r   r   Nr   )r2   r3   r4   rc   r   r   r   r   r   r   r   r   r   r1   r   r   r   r     s              " "r   r   c                  B    e Zd Zd	dZed        Zd Zd Zd Zd Z	d Z
y)
r   c                    || _         y r
   r   r   s     r   r>   z!CSSSelectorHashQualifier.__init__  s	    r   c                      yNTr1   r1   r   r   r   zCSSSelectorHashQualifier.isHash      r   c                .    t        | j                  f      S r
   )rm   r   r   s    r   ru   z!CSSSelectorHashQualifier.__hash__  s    T[[N##r   c                     d| j                    S )N#r   r   s    r   r   z!CSSSelectorHashQualifier.asString  s    4;;-  r   c                <    |j                         | j                  k(  S r
   )r    r   r   s     r   r   z CSSSelectorHashQualifier.matches  s      "dkk11r   c                4    | j                   |j                   k(  S r
   r   r   s     r   r   zCSSSelectorHashQualifier.__eq__  s    {{ell**r   c                4    | j                   |j                   k  S r
   r   r   s     r   r   zCSSSelectorHashQualifier.__lt__  s    {{U\\))r   Nr`   )r2   r3   r4   r>   rc   r   ru   r   r   r   r   r1   r   r   r   r     s4      $!2+*r   r   c                  B    e Zd Zd	dZed        Zd Zd Zd Zd Z	d Z
y)
r   c                    || _         y r
   classId)r   r  s     r   r>   z"CSSSelectorClassQualifier.__init__  	    r   c                      yr   r1   r1   r   r   r   z!CSSSelectorClassQualifier.isClass  r   r   c                .    t        | j                  f      S r
   )rm   r  r   s    r   ru   z"CSSSelectorClassQualifier.__hash__  s    T\\O$$r   c                     d| j                    S )N.r  r   s    r   r   z"CSSSelectorClassQualifier.asString  s    4<<.!!r   c                    |j                   j                  j                  d      }|&| j                  |j                  j                         v S y)Nr"   F)r   
attributesgetr  r   split)r   rK   r   s      r   r   z!CSSSelectorClassQualifier.matches  sE    ''2266w?
!<<:#3#3#9#9#;;;r   c                4    | j                   |j                   k(  S r
   r  r   s     r   r   z CSSSelectorClassQualifier.__eq__  s    ||u}},,r   c                4    | j                   |j                   k  S r
   r  r   s     r   r   z CSSSelectorClassQualifier.__lt__  s    ||emm++r   Nr`   )r2   r3   r4   r>   rc   r   ru   r   r   r   r   r1   r   r   r   r     s4      %"-,r   r   c                  J    e Zd ZddecZZZdefddZed        Z	d Z
d Zd Zy)r   Nc                h    || _         || j                  ur|| _        || j                  ur|| _        y y r
   )r   r   r   r   s       r   r>   z&CSSSelectorAttributeQualifier.__init__  s4    	TWWDGTZZ'#DJ (r   c                      yr   r1   r1   r   r   r   z$CSSSelectorAttributeQualifier.isAttr  r   r   c                Z    t        | j                  | j                  | j                  f      S r
   )rm   r   r   r   r   s    r   ru   z&CSSSelectorAttributeQualifier.__hash__  s     TYY455r   c                    | j                   t        u rd| j                   dS d| j                   | j                   | j                    dS )N[])r   r5   r   r   r   s    r   r   z&CSSSelectorAttributeQualifier.asString   sD    ::'tyyk##499+dggYtzzl!44r   c                   | j                   '|j                  | j                  t              t        k7  S | j                   dk(  r-| j                  |j                  | j                  t              k(  S | j                   dk(  rX|j
                  j                  j                  | j                        }|&| j                  |j                  j                         v S y| j                   dk(  rY|j
                  j                  j                  | j                        }|'| j                  |j                  j                  d      v S yd| j                   d| }t        |      )N=z~=Fz|=-zUnknown operator z for )
r   r   r   r5   r   r   r  r  r  RuntimeError)r   rK   r   r_   s       r   r   z%CSSSelectorAttributeQualifier.matches  s   77???499n=OO77c>::N!KKK77d? ++66::499EJ%zzZ%5%5%;%;%===77d? ++66::499EJ%zzZ%5%5%;%;C%@@@!$''E$:3r   r`   )r2   r3   r4   r5   r   r   r   r>   rc   r   ru   r   r   r1   r   r   r   r     s>    D.OD"e$(^ $  65
 r   r   c                  8    e Zd ZdddZed        Zd Zd Zd Zy)	r   c                2    || _         t        |      | _        y r
   )r   rj   r*   )r   rL   r*   s      r   r>   z#CSSSelectorPseudoQualifier.__init__  s    	Fmr   c                      yr   r1   r1   r   r   r   z#CSSSelectorPseudoQualifier.isPseudo  r   r   c                D    t        | j                  | j                  f      S r
   )rm   r   r*   r   s    r   ru   z#CSSSelectorPseudoQualifier.__hash__#  s    TYY,--r   c                r    | j                   rd| j                   S d| j                   d| j                    dS )N:())r*   r   r   s    r   r   z#CSSSelectorPseudoQualifier.asString&  s6    ;;tyyk?"499+Qt{{m1--r   c                N    |j                  | j                  | j                        S r
   )r+   r   r*   r   s     r   r   z"CSSSelectorPseudoQualifier.matches+  s    $$TYY<<r   Nr0   r`   )	r2   r3   r4   r>   rc   r   ru   r   r   r1   r   r   r   r     s*    $  ..
=r   r   c                  <    e Zd ZddZed        Zd Zd Zd Zd Z	y)	r   c                     || _         || _        y r
   )r   r   )r   r   r   s      r   r>   z(CSSSelectorCombinationQualifier.__init__0  s     r   c                      yr   r1   r1   r   r   r   z*CSSSelectorCombinationQualifier.isCombiner4  r   r   c                D    t        | j                  | j                  f      S r
   )rm   r   r   r   s    r   ru   z(CSSSelectorCombinationQualifier.__hash__8  s    TWWdmm,--r   c                j     t        |       | j                  | j                  j                               S r
   )r@   r   r   r   r   s    r   r   z+CSSSelectorCombinationQualifier.asImmutable;  s&    tDz$''4==#<#<#>??r   c                R    | j                   j                          | j                   S r
   )r   r   r   r   s    r   r   z(CSSSelectorCombinationQualifier.asString>  s#    --((*+DGG955r   c                4   | j                   | j                  c}|dk(  r"t        fd|j                         D              S |dk(  r.t	        |j                         d       }|yj                  |      S |dk(  rj                  |j                               S y )N c              3  @   K   | ]  }j                  |        y wr
   r   )r   parentr   s     r   r   z:CSSSelectorCombinationQualifier.matches.<locals>.<genexpr>D  s     WFx''/Wr   >F+)r   r   anyr-   nextr   r/   )r   rK   r   r1  r   s       @r   r   z'CSSSelectorCombinationQualifier.matchesA  s    wwH9Wg>T>T>VWWW9'002D9F~##F++9##G$>$>$@AAr   Nr`   )
r2   r3   r4   r>   rc   r   ru   r   r   r   r1   r   r   r   r   /  s0    !  .@6r   r   c                      e Zd ZddZddZy)CSSTerminalFunctionc                |    || _         |D cg c]  }t        |t              r|n
t        |      ! c}| _        y c c}w r
   )r   ri   r   r*   )r   r   r*   params       r   r>   zCSSTerminalFunction.__init__U  s7    	IO
@EZs+EU;
 
s   $9c                l    dj                  | j                  dj                  | j                              S )Nz<CSS function: {}({})>z, )formatr   r   r*   r   s    r   r   zCSSTerminalFunction.__repr__[  s&    '..tyy$))DKK:PQQr   Nr`   r   )r2   r3   r4   r>   r   r1   r   r   r7  r7  T  s    
Rr   r7  c                      e Zd ZdZd ZddZy)CSSTerminalOperatorr1   c                .    t         j                  | |      S r
   )rj   __new__)r   argss     r   r?  zCSSTerminalOperator.__new__b  s    }}S$''r   c                2    dt         j                  |       z   S )Nr   )rj   r   r   s    r   r   zCSSTerminalOperator.__repr__e  s    ennT***r   Nr   )r2   r3   r4   	__slots__r?  r   r1   r   r   r=  r=  _  s    I(+r   r=  c                      e Zd Zd Zd Zy)CSSDeclarationsc                     yr   r1   r   s     r   r   zCSSDeclarations.__eq__o      r   c                     yr   r1   r   s     r   r   zCSSDeclarations.__lt__r  rF  r   N)r2   r3   r4   r   r   r1   r   r   rD  rD  n  s    r   rD  c                      e Zd Zd Zd Zd Zy)
CSSRulesetc                    | j                         D cg c]  \  }}||v r|j                  |      r||f  }}}|j                          |S c c}}w r
   )rQ   r   rW   )r   rK   rL   
nodeFilterdeclarationsruleResultss         r   rI   zCSSRuleset.findCSSRulesForw  s^     -1JJL
(
LL(z/A/A'/J &
 

 	
s   #Ac                ,    | j                  ||      dd  S Nr\   rI   r   rK   rL   s      r   rV   zCSSRuleset.findCSSRuleFor  s     ##GX6rs;;r   c                    |j                         D ]C  \  }}|| v r5| |   r0t        j                  | |         | |<   | |   j                  |       ?|| |<   E y)zXXX Bugfix for use in PISA.N)rQ   copyupdate)r   styleskvs       r   mergeStyleszCSSRuleset.mergeStyles  sW    LLN 	DAqDyT!W))DG,QQq!Q	r   N)r2   r3   r4   rI   rV   rX  r1   r   r   rI  rI  v  s    <
r   rI  c                      e Zd Zd Zd Zy)CSSInlineRulesetc                (    || v rt               | fgS g S r
   )r   rQ  s      r   rI   z CSSInlineRuleset.findCSSRulesFor  s     t&($/00	r   c                ,     | j                   |i |dd  S rO  rP  )r   r@  kws      r   rV   zCSSInlineRuleset.findCSSRuleFor  s#     $t##T0R055r   N)r2   r3   r4   rI   rV   r1   r   r   rZ  rZ    s    
6r   rZ  c                     e Zd ZU eZeZeZe	Z
eZeZi Zded<   dZdZdZeefd/dZd Zd Zd Zd	 Zd
 ZdddZd Zd Zd0dZd Zd Zd Z d Z!d Z"d Z#e$d        Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,	 	 	 	 	 	 	 	 d1dZ-d Z.e$d         Z/d! Z0d" Z1d#d$d%Z2d& Z3e$d'        Z4e$d0d(       Z5e$d)        Z6e$d*        Z7e$d+        Z8e$d,        Z9d- Z:e$d.        Z;y)2
CSSBuilderzClassVar[dict]xmlnsSynonymsNTc                J    | j                  |       | j                  |       y )NtrackImportance)setMediumSetsetTrackImportance)r   	mediumSetrc  s      r   r>   zCSSBuilder.__init__  s!    )$@r   c                    |syd|v ry| j                  |      }t        | j                         j                  |            S )NFr   T)MediumSetFactoryboolgetMediumSetintersection)r   mediumss     r   isValidMediumzCSSBuilder.isValidMedium  sB    G''0D%%'44W=>>r   c                    | j                   S r
   )rf  r   s    r   rj  zCSSBuilder.getMediumSet  s    ~~r   c                0    | j                  |      | _        y r
   )rh  rf  r   rf  s     r   rd  zCSSBuilder.setMediumSet  s    ..y9r   c                B    | j                         j                  |       y r
   )rj  rT  rp  s     r   updateMediumSetzCSSBuilder.updateMediumSet  s    ""9-r   c                    | j                   S r
   rb  r   s    r   getTrackImportancezCSSBuilder.getTrackImportance  s    ###r   rb  c                   || _         y r
   rb  )r   rc  s     r   re  zCSSBuilder.setTrackImportance  s
    .r   c                v    | j                   }| j                   j                         | _         || _        i | _        y r
   )__dict__rS  _restoreState
namespaces)r   rx  s     r   
_pushStatezCSSBuilder._pushState  s.    **,*r   c                &    | j                   | _        y r
   )rx  rw  r   s    r   	_popStatezCSSBuilder._popState  s    **r   c                    |xs | j                   }| j                  rIg g }}|D ]0  }|d   r|j                  |d d        |j                  |d d        2  ||       ||      fS  ||      S rO  )DeclarationsFactoryrc  r   )r   rL  r~  normal	importantds         r   _declarationszCSSBuilder._declarations  s    1MT5M5M "BIF! *R5$$QsV,MM!CR&)	*
 'v.0CI0NNN"<00r   c                J    | j                   j                  |xs d |      xs d S r
   )r`  r  )r   uris     r   _xmlnsGetSynonymzCSSBuilder._xmlnsGetSynonym  s$    !!%%ckT37?4?r   c                $    | j                          y r
   rz  r   s    r   beginStylesheetzCSSBuilder.beginStylesheet      r   c                $    | j                          y r
   r|  r   s    r   endStylesheetzCSSBuilder.endStylesheet      r   c                   | j                   r|| j                         | j                         }}|D ]'  \  }}|j                  |       |j                  |       ) |D ]'  \  }}|j                  |       |j                  |       ) ||fS | j                         }	|D ]  }
|	j                  |
        |D ]  }|	j                  |        |	S r
   )rc  RulesetFactoryrX  )r   stylesheetElementsstylesheetImportsr  r  normalStylesheetimportantStylesheetnormalStyleElementimportantStyleElementr   
stylesheetstyleElements               r   r  zCSSBuilder.stylesheet  s     $ 3 3 5t7J7J7LIF9J ;5 "5""#34%%&9:; >P =9"$9""#56%%&;<= 9$$$$&+ 	+Jz*	+ / 	-L|,	-r   c                $    | j                          y r
   r  r   s    r   beginInlinezCSSBuilder.beginInline  r  r   c                $    | j                          y r
   r  r   s    r   	endInlinezCSSBuilder.endInline  r  r   c                ,    t        j                  |       S r
   )r   parseSpecialRules)rL  s    r   specialRuleszCSSBuilder.specialRules  s    ++L99r   c                P    | j                  |      }| j                  |t              S r
   )r  r  rZ  r   rL  s     r   rE   zCSSBuilder.inline  s&    ((6!!,0@AAr   c                   | j                  |      }| j                  r^| j                  |      \  }}| j                         | j                         }}|D ]!  }|j	                         }|r|||<   |s|||<   # ||fS | j                  |      }|D cg c]  }|j	                         |f }}| j                  |      S c c}w r
   )r  rc  r  r  r   )	r   	selectorsrL  
normalDeclimportantDeclr  r  sr   s	            r   rY   zCSSBuilder.ruleset  s    ((6 (,(:(:<(H%J $ 3 3 5t7J7J7LIF 1MMO *F1I #0IaL1 9$$)),7;DEa1==?L1EE""6** Fs   B=c                z    |dk(  r|d|fS | j                   j                  |d       }| j                  |      }|||fS rg   )ry  r  r  )r   rx   r   xmlnss       r   resolveNamespacePrefixz!CSSBuilder.resolveNamespacePrefix!  sI    s?c4((##Hd3%%e,%&&r   c                    || _         y r
   )charset)r   r  s     r   	atCharsetzCSSBuilder.atCharset*  r	  r   c                J    | j                  |      r |j                  |      S y r
   )rm  parseExternal)r   import_rl  r   s       r   atImportzCSSBuilder.atImport-  s&    g&*9**733r   c                "    || j                   |<   y r
   )ry  )r   nsprefixr  s      r   atNamespacezCSSBuilder.atNamespace2  s    $'!r   c                *    | j                  |      r|S y r
   )rm  )r   rl  rY   s      r   atMediazCSSBuilder.atMedia5  s    g&Nr   c                   t         )7This is overridden by xhtml2pdf.context.pisaCSSBuilder.r   )r   r   
pseudopagedataisLandscape
pageBorders         r   atPagezCSSBuilder.atPage:  s
     "!r   c                F    | j                  | j                  d      g|      S )r  rh   )rY   r   r  s     r   
atFontFacezCSSBuilder.atFontFaceF  s    ||T]]3/0,??r   c                    |t         fS r
   r5   )_atIdent
_cssParsersrcs      r   atIdentzCSSBuilder.atIdentJ      N""r   c                $    | j                  |      S r
   )SelectorFactoryr   s     r   r   zCSSBuilder.selectorP  s    ##D))r   c                <    | j                   j                  |||      S r
   )r  r   )r   r   r   r   s       r   r   zCSSBuilder.combineSelectorsS  s    ##44YINNr   F)r  c               ,    | j                   r|||fS ||fS r
   rb  )r   r   r   r  s       r   r   zCSSBuilder.propertyX  s"    %++e}r   c                    |dv r't        |t              r|j                  |       |S ||gS |||gS t        |t              r| j                  |d   ||      |d<   |S | j	                  |||      S )N),r/  r\   )ri   listr   combineTermsTermOperatorFactory)r   termAr   termBs       r   r  zCSSBuilder.combineTerms]  s    %&U#5>!:%-7NeT" ))%)R?E"IL''r599r   c                    | S r
   r1   r   s    r   	termIdentzCSSBuilder.termIdentl      r   c                    |r| |fS | S r
   r1   )r   unitss     r   
termNumberzCSSBuilder.termNumberp  s    %<r   c                    | S r
   r1   r   s    r   termRGBzCSSBuilder.termRGBv  r  r   c                    | S r
   r1   r   s    r   termURIzCSSBuilder.termURIz  r  r   c                    | S r
   r1   r   s    r   
termStringzCSSBuilder.termString~  r  r   c                    | S r
   r1   r   s    r   termUnicodeRangezCSSBuilder.termUnicodeRange  r  r   c                &    | j                  ||      S r
   )TermFunctionFactory)r   r   r   s      r   termFunctionzCSSBuilder.termFunction  s    ''e44r   c                    | t         fS r
   r  )r  s    r   termUnknownzCSSBuilder.termUnknown  r  r   r`   r
   )r   r   r  z
str | Noner  dictr  ri  )<r2   r3   r4   rI  r  r   r  setrh  rD  r~  r7  r  r=  r  r`  r   rf  rc  r  r>   rm  rj  rd  rr  rt  re  rz  r|  r  r  r  r  r  r  r  rc   r  rE   rY   r  r  r  r  r  r  r  r  r   r   r   r  r  r  r  r  r  r  r  r  r1   r   r   r_  r_    s   N(O)--$&M>&IOG!*O A?:.$ 59 /
+
1@& : :B+*'
(

"
" 
" 	
" 
"@ # #
*O
 27 
:    
        5 # #r   r_  c                  8     e Zd ZeZdddd fdZd Zd Z xZS )	CSSParserT)createc               X    |s|r|J  | j                   di |}t        | 	  |       y Nr1   )createCSSBuilderr   r>   )r   
cssBuilderr  r]  r   s       r   r>   zCSSParser.__init__  s6    f%%%...44J$r   c                &     | j                   di |S r  )CSSBuilderFactory)r   r]  s     r   r  zCSSParser.createCSSBuilder  s    %t%%+++r   c                r    t        |      j                         r| j                  |      S t        d|z        )Nz&Cannot resolve external CSS file: "%s")r   is_file	parseFiler  )r   cssResourceNames     r   r  zCSSParser.parseExternal  s3     ((*>>/22CoUVVr   r
   r`   )	r2   r3   r4   r_  r  r>   r  r  r   r   s   @r   r  r    s     "%$ %,Wr   r  )&__doc__
__future__r   rS  abcr   pathlibr   typingr   xhtml2pdf.w3cr   r   r   CSSParseErrorr   r7   re   r   CSSSelectorAbstractr   r   r   r   r   r   r   r   r7  rj   r=  r  rD  rI  rZ  CSSBuilderAbstractr_  r  r1   r   r   <module>r     s7  . #     /  ''" "H~ ~Le eV (*)*G*G (*\	?? 	?& @*7 *0, 8 ,8( $< ( V=!9 =*&> JR R+% +d  2	6z? 	6"k#-- k#fW	## Wr   