
     hl                     |   d Z ddlZddlZddlmZ ddlmZ d Zej        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ej                  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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&e          Z G d' d(ee          Z G d) d*ej                  Z G d+ d,ej                  ZdS )-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:
    python 2.3 (or greater)
    sets, cssParser, re (via cssParser)
    N   )	cssParser)
cssSpecialc                     t          |  N)StopIteration)values    M/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/xhtml2pdf/w3c/css.pystopIterr   -   s    

    c                   D    e Zd ZefdZd Zd Zd Zd ZddZ	d Z
d	 Zd
S )CSSElementInterfaceAbstractc                      t          d          NSubclass responsibilityNotImplementedError)selfnamedefaults      r
   getAttrz#CSSElementInterfaceAbstract.getAttr=       !";<<<r   c                 .    |                      dd          S )Nid r   r   s    r
   	getIdAttrz%CSSElementInterfaceAbstract.getIdAttr@   s    ||D"%%%r   c                 .    |                      dd          S )Nclassr   r   r   s    r
   getClassAttrz(CSSElementInterfaceAbstract.getClassAttrC   s    ||GR(((r   c                      t          d          r   r   r   s    r
   getInlineStylez*CSSElementInterfaceAbstract.getInlineStyleF   r   r   c                      t          d          r   r   r   s    r
   matchesNodez'CSSElementInterfaceAbstract.matchesNodeI   r   r    c                      t          d          r   r   r   r   paramss      r
   inPseudoStatez)CSSElementInterfaceAbstract.inPseudoStateL   r   r   c                      t          d          )z;Results must be compatible with CSSElementInterfaceAbstractr   r   r   s    r
   iterXMLParentsz*CSSElementInterfaceAbstract.iterXMLParentsO   s    !";<<<r   c                      t          d          r   r   r   s    r
   getPreviousSiblingz.CSSElementInterfaceAbstract.getPreviousSiblingS   r   r   Nr&   )__name__
__module____qualname__NotImplementedr   r   r!   r#   r%   r*   r,   r.   r&   r   r
   r   r   <   s        $2 = = = =& & &) ) )= = == = == = = == = == = = = =r   r   c                   \    e Zd ZdZdZdZd
dZd
dZddZe	fdZ
e	fdZd Zd Ze	fd	ZdS )CSSCascadeStrategyNc                 @    ||| _         ||| _        |	|| _        d S d S r   )authoruser	userAgenrr   r7   r8   	userAgents       r
   __init__zCSSCascadeStrategy.__init__^   s5     DKDI &DNNN ! r   c                 f    || j         }|| j        }|| j        }|                     |||          S r   )r7   r8   r9   	__class__r:   s       r
   copyWithUpdatez!CSSCascadeStrategy.copyWithUpdatef   s=    >[F<9DI~~fdI666r   c              #   &  K   | j         | j         d         V  | j         d         V  | j        | j        d         V  | j        | j        d         V  | j        d         V  |r|d         V  |d         V  | j        | j        d         V  d S d S Nr   r   )r9   r8   r7   )r   inlines     r
   iterCSSRulesetsz"CSSCascadeStrategy.iterCSSRulesetsq   s      >%.####.####9 )A,;"+a.   +a.    	)OOO)OOO9 )A, ! r   c                 \    |                      ||          }|                     |||          S )M  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   s1     ##GX66((xAAAr   c                 t                           ||          } fd|                                D             S )rE   c                 H    g | ]\  }}|                     ||          fS r&   )rG   ).0rI   rJ   r   r   s      r
   
<listcomp>z8CSSCascadeStrategy.findStylesForEach.<locals>.<listcomp>   sD     5 5 5"Hd 444T8WMMN 5 5 5r   )findCSSRulesForEachitems)r   rH   	attrNamesr   ruless   `  ` r
   findStylesForEachz$CSSCascadeStrategy.findStylesForEach   sS     (()<<5 5 5 5 5&+kkmm5 5 5 	5r   c                    g }|                                 }| j        H|| j        d                             ||          z  }|| j        d                             ||          z  }| j        $|| j        d                             ||          z  }| j        H|| j        d                             ||          z  }|| j        d                             ||          z  }|r>||d                             ||          z  }||d                             ||          z  }| j        $|| j        d                             ||          z  }|                                 |S rA   )r#   r9   findCSSRuleForr8   r7   sort)r   rH   rI   rS   rB   s        r
   rF   z"CSSCascadeStrategy.findCSSRulesFor   sS   '')) >%T^A&55gxHHHET^A&55gxHHHE9 TYq\00(CCCE;"T[^227HEEEET[^227HEEEE 	AVAY--gx@@@EVAY--gx@@@E9 TYq\00(CCCE

r   c                 L   t          d |D                       }|                                }|                     |          D ]5}|                                D ]\  }}||                    ||          z  }6|                                D ]}|                                 |S )Nc              3      K   | ]}|g fV  	d S r   r&   )rN   r   s     r
   	<genexpr>z9CSSCascadeStrategy.findCSSRulesForEach.<locals>.<genexpr>   s&      66DdBZ666666r   )dictr#   rC   rQ   rV   rW   )r   rH   rR   rS   rB   rulesetrI   	attrRuless           r
   rP   z&CSSCascadeStrategy.findCSSRulesForEach   s    66I66666''))++F33 	G 	GG',{{}} G G#)W33GXFFF		G  	 	INNr   c                 r    |r|d         d         }||         S |t           ur|S t          d|d|          )Nr   zCould not find style for 'z' in )r3   LookupError)r   rJ   rI   r   styles        r
   rG   z'CSSCascadeStrategy._extractStyleForRule   sN     	 HQKE?"N**Nk888TTRSSSr   )NNNr   )r0   r1   r2   r7   r8   r9   r<   r?   rC   r3   rK   rT   rF   rP   rG   r&   r   r
   r5   r5   Y   s        FDI' ' ' '7 7 7 7   * 7E 	B 	B 	B 	B =K 
5 
5 
5 
5  <
 
 
 <J T T T T T Tr   r5   c                       e Zd ZdZdZdZddZd Zd Zd Z	 e
e	          Zd Z e
e          Zd	 Z e
e          Zd
 Z e
e          Zd Zd Zd Zd Zd Zd Zd ZddZd ZdS )CSSSelectorBaseFN*c                 H    t          |t                    sd d|f}|| _        d S Nrd   )
isinstancetuplecompleteName)r   ri   s     r
   r<   zCSSSelectorBase.__init__   s.    ,.. 	5 #|4L(r   c                 l    t          | j        |                                 | j        f          | _        d S r   )hashfullNamespecificity
qualifiers_hashr   s    r
   _updateHashzCSSSelectorBase._updateHash   s,    4=$*:*:*<*<doNOO


r   c                 R    | j         t                              |           S | j         S r   )ro   object__hash__r   s    r
   rs   zCSSSelectorBase.__hash__   s$    :??4(((zr   c                     | j         d         S )Nr   ri   r   s    r
   getNSPrefixzCSSSelectorBase.getNSPrefix        ##r   c                     | j         d         S )N   ru   r   s    r
   getNamezCSSSelectorBase.getName   rw   r   c                     | j         d         S )Nr   ru   r   s    r
   getNamespacezCSSSelectorBase.getNamespace   rw   r   c                      | j         dd         S )Nr      ru   r   s    r
   getFullNamezCSSSelectorBase.getFullName   s     1%%r   c                 |    | j         j        f|                                 z   |                                 fz   }d|z  S )Nz<%s %d:%d:%d:%d %s >)r>   r0   rm   asString)r   strArgss     r
   __repr__zCSSSelectorBase.__repr__   s;    >*,t/?/?/A/AAT]]__DVV%//r   c                 *    |                                  S r   r   r   s    r
   __str__zCSSSelectorBase.__str__      }}r   c                 D    |                                  | j        | j        fS r   )rm   rl   rn   r   s    r
   _as_comparison_keyz"CSSSelectorBase._as_comparison_key  s      ""DM4?CCr   c                 V    |                                  |                                 k    S Python 3r   r   others     r
   __eq__zCSSSelectorBase.__eq__  s%    &&((E,D,D,F,FFFr   c                 V    |                                  |                                 k     S r   r   r   s     r
   __lt__zCSSSelectorBase.__lt__  s%    &&((5+C+C+E+EEEr   c                 P    | j         |                                 | _         | j         S r   )_specificity_calcSpecificityr   s    r
   rm   zCSSSelectorBase.specificity  s(    $ $ 5 5 7 7D  r   c                    d}d}t          | j        dk              }| j        D ]}|                                r|dz  }|                                r|dz  }6|                                r|dz  }P|                                r|dz  }j|                                r-|j        	                                \  }}}}||z  }||z  }||z  }| j
        |||fS )z8from http://www.w3.org/TR/CSS21/cascade.html#specificityr   rd   r   )intr   rn   isHashisClassisAttrisPseudo
isCombinerselectorrm   rB   )r   	hashCountqualifierCountelementCountqihes           r
   r   z CSSSelectorBase._calcSpecificity  s    	49+,, 	" 	"Axxzz "Q		 
"!# "!# "! "Z3355
1aQ	!#!{I~|CCr   c                     |dS | j         d         d|j        j        fvrdS | j         d         dvr| j         d         |j        j        k    rdS | j        D ]}|                    |          s dS dS )NFr   rd   r   )Nr   rd   T)rl   
domElementtagNamenamespaceURIrn   matches)r   rH   	qualifiers      r
   r   zCSSSelectorBase.matches*  s    ?5 =C);)C#DDD5=?22t}Q7G7K]Kj7j7j5 	 	I$$W-- uu 4r   c                    g }| j         %|                    | j         d| j                   n|                    | j                   | j        D ]f}|                                r)|                    d|                                           ?|                    |                                           gd                    |          S )N|r   r   )nsPrefixappendr   rn   r   insertr   join)r   resultr   s      r
   r   zCSSSelectorBase.asString:  s    =$MMT]]]DII>????MM$)$$$ 	, 	,A||~~ ,a....ajjll++++wwvr   )rd   r   )r0   r1   r2   rB   ro   r   r<   rp   rs   rv   propertyr   rz   r   r|   	namespacer   rl   r   r   r   r   r   rm   r   r   r   r&   r   r
   rc   rc      sp       FEL) ) ) )
P P P  
$ $ $ x$$H$ $ $ 8GD$ $ $ &&I& & & x$$H0 0 0  D D DG G GF F F! ! !
D D D*        r   rc   c                       e Zd ZdZdS )CSSInlineSelectorTN)r0   r1   r2   rB   r&   r   r
   r   r   K  s        FFFr   r   c                   d    e Zd Zg Zd Zd Z ee          Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 ZdS )CSSMutableSelectorc                 J    t          | j        d | j        D                       S )Nc                 6    g | ]}|                                 S r&   asImmutable)rN   r   s     r
   rO   z2CSSMutableSelector.asImmutable.<locals>.<listcomp>U  s     7a7a7aA7a7a7ar   )CSSImmutableSelectorri   rn   r   s    r
   r   zCSSMutableSelector.asImmutableT  s(    #D$57a7aQUQ`7a7a7abbbr   c                 2    |                     ||           |S r   )addCombination)klass	selectorAop	selectorBs       r
   combineSelectorsz#CSSMutableSelector.combineSelectorsW  s      Y///r   c                 L    |                      t          ||                     d S r   )_addQualifierCSSSelectorCombinationQualifier)r   r   r   s      r
   r   z!CSSMutableSelector.addCombination]  s'    :2uEEFFFFFr   c                 J    |                      t          |                     d S r   )r   CSSSelectorHashQualifierr   hashIds     r
   	addHashIdzCSSMutableSelector.addHashId`  s%    3F;;<<<<<r   c                 J    |                      t          |                     d S r   )r   CSSSelectorClassQualifier)r   class_s     r
   addClasszCSSMutableSelector.addClassc  s%    4V<<=====r   c                 J    |                      t          |                     d S r   r   CSSSelectorAttributeQualifier)r   rI   s     r
   addAttributezCSSMutableSelector.addAttributef  s%    8BBCCCCCr   c                 N    |                      t          |||                     d S r   r   r   rI   r   	attrValues       r
   addAttributeOperationz(CSSMutableSelector.addAttributeOperationi  s)    82yQQRRRRRr   c                 J    |                      t          |                     d S r   r   CSSSelectorPseudoQualifierr   r   s     r
   	addPseudozCSSMutableSelector.addPseudol  s%    5d;;<<<<<r   c                 L    |                      t          ||                     d S r   r   r(   s      r
   addPseudoFunctionz$CSSMutableSelector.addPseudoFunctiono  s'    5dFCCDDDDDr   c                 \    | j         r| j                             |           d S |g| _         d S r   )rn   r   )r   r   s     r
   r   z CSSMutableSelector._addQualifiert  s5    ? 	*O""9-----(kDOOOr   N)r0   r1   r2   rn   r   r   classmethodr   r   r   r   r   r   r   r   r&   r   r
   r   r   Q  s        Jc c c   #{#344G G G= = => > >D D DS S S= = =E E E
* * * * *r   r   c                   2    e Zd ZddZd Z ee          ZdS )r   rd   r&   c                     t          |          | _        t                              | |           |                                  d S r   )rh   rn   rc   r<   rp   )r   ri   rn   s      r
   r<   zCSSImmutableSelector.__init__~  s?    
++  |444r   c                 .     | |j         |j                  S r   )ri   rn   )r   r   s     r
   fromSelectorz!CSSImmutableSelector.fromSelector  s    uX*H,?@@@r   N)rd   r&   )r0   r1   r2   r<   r   r   r&   r   r
   r   r   }  sE           A A A ;|,,LLLr   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	CSSSelectorQualifierBasec                     dS NFr&   r   s    r
   r   zCSSSelectorQualifierBase.isHash      ur   c                     dS r   r&   r   s    r
   r   z CSSSelectorQualifierBase.isClass  r   r   c                     dS r   r&   r   s    r
   r   zCSSSelectorQualifierBase.isAttr  r   r   c                     dS r   r&   r   s    r
   r   z!CSSSelectorQualifierBase.isPseudo  r   r   c                     dS r   r&   r   s    r
   r   z#CSSSelectorQualifierBase.isCombiner  r   r   c                     | S r   r&   r   s    r
   r   z$CSSSelectorQualifierBase.asImmutable  s    r   c                 *    |                                  S r   r   r   s    r
   r   z CSSSelectorQualifierBase.__str__  r   r   N)
r0   r1   r2   r   r   r   r   r   r   r   r&   r   r
   r   r     s}                        r   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	r   c                     || _         d S r   r   r   s     r
   r<   z!CSSSelectorHashQualifier.__init__  s    r   c                     dS NTr&   r   s    r
   r   zCSSSelectorHashQualifier.isHash      tr   c                 ,    t          | j        f          S r   )rk   r   r   s    r
   rs   z!CSSSelectorHashQualifier.__hash__  s    T[N###r   c                     d| j         z   S )N#r   r   s    r
   r   z!CSSSelectorHashQualifier.asString  s    T[  r   c                 <    |                                 | j        k    S r   )r   r   r   rH   s     r
   r   z CSSSelectorHashQualifier.matches  s      ""dk11r   c                 "    | j         |j         k    S r   r   r   s     r
   r   zCSSSelectorHashQualifier.__eq__  s    {el**r   c                 "    | j         |j         k     S r   r   r   s     r
   r   zCSSSelectorHashQualifier.__lt__  s    {U\))r   N)
r0   r1   r2   r<   r   rs   r   r   r   r   r&   r   r
   r   r     s}            $ $ $! ! !2 2 2+ + +* * * * *r   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	r   c                     || _         d S r   classId)r   r   s     r
   r<   z"CSSSelectorClassQualifier.__init__      r   c                     dS r   r&   r   s    r
   r   z!CSSSelectorClassQualifier.isClass  r   r   c                 ,    t          | j        f          S r   )rk   r   r   s    r
   rs   z"CSSSelectorClassQualifier.__hash__  s    T\O$$$r   c                     d| j         z   S )N.r   r   s    r
   r   z"CSSSelectorClassQualifier.asString  s    T\!!r   c                     |j         j                            d          }| | j        |j                                        v S dS )Nr    F)r   
attributesgetr   r	   splitr   rH   r   s      r
   r   z!CSSSelectorClassQualifier.matches  sA    &155g>>	 <9?#8#8#:#:::ur   c                 "    | j         |j         k    S r   r   r   s     r
   r   z CSSSelectorClassQualifier.__eq__  s    |u},,r   c                 "    | j         |j         k     S r   r   r   s     r
   r   z CSSSelectorClassQualifier.__lt__  s    |em++r   N)
r0   r1   r2   r<   r   rs   r   r   r   r   r&   r   r
   r   r     s}            % % %" " "  - - -, , , , ,r   r   c                   @    e Zd ZddecZZZdefdZd Zd Z	d Z
d ZdS )r   Nc                 X    || _         || j        ur|| _        || j        ur	|| _        d S d S r   )r   r   r	   r   s       r
   r<   z&CSSSelectorAttributeQualifier.__init__  s=    	TWDGDJ&&"DJJJ '&r   c                     dS r   r&   r   s    r
   r   z$CSSSelectorAttributeQualifier.isAttr  r   r   c                 D    t          | j        | j        | j        f          S r   )rk   r   r   r	   r   s    r
   rs   z&CSSSelectorAttributeQualifier.__hash__  s    TY4555r   c                 f    | j         t          u rd| j        dS d| j        | j        | j         dS )N[])r	   r3   r   r   r   s    r
   r   z&CSSSelectorAttributeQualifier.asString  sA    :'''!YYY(( (!YY<<r   c                 L   | j         )|                    | j        t                    t          k    S | j         dk    r)| j        |                    | j        t                    k    S | j         dk    rH|j        j                            | j                  }| | j        |j                                        v S dS | j         dk    rI|j        j                            | j                  }|!| j        |j                            d          v S dS t          d| j         d|           )N=z~=Fz|=-zUnknown operator z for )
r   r   r   r3   r	   r   r  r  r	  RuntimeErrorr
  s      r
   r   z%CSSSelectorAttributeQualifier.matches  s   7???49n==OOW^^:N!K!KKKW__*599$)DDI$zY_%:%:%<%<<<5W__*599$)DDI$zY_%:%:3%?%???5l4777DDIJJJr   )r0   r1   r2   r3   r   r   r	   r<   r   rs   r   r   r&   r   r
   r   r     s}        D.OD"e$(N # # # #  6 6 6= = =
K K K K Kr   r   c                   .    e Zd ZddZd Zd Zd Zd ZdS )	r   r&   c                 <    || _         t          |          | _        d S r   )r   rh   r)   )r   rI   r)   s      r
   r<   z#CSSSelectorPseudoQualifier.__init__  s    	Fmmr   c                     dS r   r&   r   s    r
   r   z#CSSSelectorPseudoQualifier.isPseudo  r   r   c                 8    t          | j        | j        f          S r   )rk   r   r)   r   s    r
   rs   z#CSSSelectorPseudoQualifier.__hash__  s    TY,---r   c                 J    | j         r
d| j        z   S d| j        d| j         dS )N:())r)   r   r   s    r
   r   z#CSSSelectorPseudoQualifier.asString  s6    ; 	8?"	8 !%			4;;;77r   c                 B    |                     | j        | j                  S r   )r*   r   r)   r   s     r
   r   z"CSSSelectorPseudoQualifier.matches  s    $$TY<<<r   Nr/   )r0   r1   r2   r<   r   rs   r   r   r&   r   r
   r   r     sd        $ $ $ $  . . .8 8 8= = = = =r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )r   c                 "    || _         || _        d S r   )r   r   )r   r   r   s      r
   r<   z(CSSSelectorCombinationQualifier.__init__  s     r   c                     dS r   r&   r   s    r
   r   z*CSSSelectorCombinationQualifier.isCombiner   r   r   c                 8    t          | j        | j        f          S r   )rk   r   r   r   s    r
   rs   z(CSSSelectorCombinationQualifier.__hash__#  s    TWdm,---r   c                 f    |                      | j        | j                                                  S r   )r>   r   r   r   r   s    r
   r   z+CSSSelectorCombinationQualifier.asImmutable&  s&    ~~dgt}'@'@'B'BCCCr   c                 F    | j                                         | j        S r   )r   r   r   r   s    r
   r   z(CSSSelectorCombinationQualifier.asString)  s"    //111477;;r   c                 h   | j         | j        c}|dk    r-t          fd|                                D                       S |dk    r;t	          |                                d           }|dS                     |          S |dk    r'                    |                                          S d S )N c              3   B   K   | ]}                     |          V  d S r   r   )rN   parentr   s     r
   rZ   z:CSSSelectorCombinationQualifier.matches.<locals>.<genexpr>/  s1      WWFx''//WWWWWWr   >F+)r   r   anyr,   nextr   r.   )r   rH   r   r+  r   s       @r
   r   z'CSSSelectorCombinationQualifier.matches,  s    wH99WWWWg>T>T>V>VWWWWWW3YY'0022D99F~u##F+++3YY##G$>$>$@$@AAA Yr   N)	r0   r1   r2   r<   r   rs   r   r   r   r&   r   r
   r   r     sv        ! ! !  . . .D D D< < <
B 
B 
B 
B 
Br   r   c                       e Zd Zd Zd ZdS )CSSTerminalFunctionc                 6    || _         d |D             | _        d S )Nc                 Z    g | ](}t          |t                    r|nt          |          )S r&   )rg   str)rN   params     r
   rO   z0CSSTerminalFunction.__init__.<locals>.<listcomp>@  s1    [[[5
5# 6 6FuuCJJ[[[r   )r   r)   r(   s      r
   r<   zCSSTerminalFunction.__init__>  s#    	[[TZ[[[r   c                 N    d| j         dd                    | j                  dS )Nz<CSS function: r  z, z)>)r   r   r)   r   s    r
   r   zCSSTerminalFunction.__repr__B  s)     +/999dii6L6L6L6LMMr   N)r0   r1   r2   r<   r   r&   r   r
   r1  r1  =  s:        \ \ \N N N N Nr   r1  c                       e Zd Zd Zd ZdS )CSSTerminalOperatorc                 8    t                               | |          S r   )rh   __new__)r   argss     r
   r:  zCSSTerminalOperator.__new__G  s    }}UD)))r   c                 <    dt                               |           z   S )Nr   )rh   r   r   s    r
   r   zCSSTerminalOperator.__repr__J  s    ennT****r   N)r0   r1   r2   r:  r   r&   r   r
   r8  r8  F  s2        * * *+ + + + +r   r8  c                       e Zd Z	 d Zd ZdS )CSSDeclarationsc                     dS r   Fr&   r   s     r
   r   zCSSDeclarations.__eq__U      ur   c                     dS r@  r&   r   s     r
   r   zCSSDeclarations.__lt__Y  rA  r   N)r0   r1   r2   r   r   r&   r   r
   r>  r>  R  s5              r   r>  c                        e Zd Zd Zd Zd ZdS )
CSSRulesetc                 t    fd|                                  D             }|                                 |S )Nc                 P    g | ]"\  }}|v 	|                               ||f#S r&   r*  )rN   
nodeFilterdeclarationsrI   rH   s      r
   rO   z.CSSRuleset.findCSSRulesFor.<locals>.<listcomp>`  sM     U U U6Nj, L00z7I7I'7R7R0 #L1000r   )rQ   rW   )r   rH   rI   ruleResultss    `` r
   rF   zCSSRuleset.findCSSRulesFor_  s]    U U U U URVR\R\R^R^ U U Ur   c                 >    |                      ||          dd          S Nr_   rF   r   rH   rI   s      r
   rV   zCSSRuleset.findCSSRuleFore  s#     ##GX66rss;;r   c                     |                                 D ]O\  }}|| v rA| |         r9t          j        | |                   | |<   | |                             |           J|| |<   PdS )z XXX Bugfix for use in PISA N)rQ   copyupdate)r   styleskvs       r
   mergeStyleszCSSRuleset.mergeStylesj  ss    LLNN 	 	DAqDyyT!Wy)DG,,QQq!!!!Q	 	r   N)r0   r1   r2   rF   rV   rT  r&   r   r
   rD  rD  ^  sA          < < <
    r   rD  c                       e Zd Zd Zd ZdS )CSSInlineRulesetc                 0    || v rt                      | fgS g S r   )r   rM  s      r
   rF   z CSSInlineRuleset.findCSSRulesForu  s&    t&(($/00	r   c                 ,     | j         |i |dd          S rK  rL  )r   r;  kws      r
   rV   zCSSInlineRuleset.findCSSRuleForz  s%     $t#T0R0055r   N)r0   r1   r2   rF   rV   r&   r   r
   rV  rV  t  s2          
6 6 6 6 6r   rV  c                   .   e Zd ZeZeZeZe	Z
eZeZi ZdZdZdZeef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 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!Z0d" Z1d# Z2d,d$Z3d% Z4d& Z5d' Z6d( Z7d) Z8d* Z9dS ).
CSSBuilderNTc                 Z    |                      |           |                     |           d S r   )setMediumSetsetTrackImportance)r   	mediumSettrackImportances      r
   r<   zCSSBuilder.__init__  s0    )$$$00000r   c                     |sdS d|v rdS |                      |          }t          |                                                     |                    S )NFallT)MediumSetFactoryboolgetMediumSetintersection)r   mediumss     r
   isValidMediumzCSSBuilder.isValidMedium  sZ     	5G4''00D%%''44W==>>>r   c                     | j         S r   )r_  r   s    r
   re  zCSSBuilder.getMediumSet  s
    ~r   c                 :    |                      |          | _        d S r   )rc  r_  r   r_  s     r
   r]  zCSSBuilder.setMediumSet  s    ..y99r   c                 T    |                                                      |           d S r   )re  rP  rk  s     r
   updateMediumSetzCSSBuilder.updateMediumSet  s(    ""9-----r   c                     | j         S r   r`  r   s    r
   getTrackImportancezCSSBuilder.getTrackImportance  s    ##r   c                     || _         d S r   ro  )r   r`  s     r
   r^  zCSSBuilder.setTrackImportance  s    .r   c                 l    | j         }| j                                         | _         || _        i | _        d S r   )__dict__rO  _restoreState
namespaces)r   rt  s     r
   
_pushStatezCSSBuilder._pushState  s1    **,,*r   c                     | j         | _        d S r   )rt  rs  r   s    r
   	_popStatezCSSBuilder._popState  s    *r   c                     |p| j         }| j        rbg g }}|D ]E}|d         r|                    |d d                    (|                    |d d                    F ||           ||          fS  ||          S rK  )DeclarationsFactoryr`  r   )r   rH  rz  normal	importantds         r
   _declarationszCSSBuilder._declarations  s    1MT5M 		5 "BIF! * *R5 *$$QssV,,,,MM!CRC&))))&&v..0C0CI0N0NNN&&|444r   c                 @    | j                             |pd |          pd S r   )xmlnsSynonymsr  )r   uris     r
   _xmlnsGetSynonymzCSSBuilder._xmlnsGetSynonym  s$    !%%ckT377?4?r   c                 .    |                                   d S r   rv  r   s    r
   beginStylesheetzCSSBuilder.beginStylesheet      r   c                 .    |                                   d S r   rx  r   s    r
   endStylesheetzCSSBuilder.endStylesheet      r   c                    | j         r|                                 |                                 }}|D ]/\  }}|                    |           |                    |           0|D ]/\  }}|                    |           |                    |           0||fS |                                 }	|D ]}
|	                    |
           |D ]}|	                    |           |	S r   )r`  RulesetFactoryrT  )r   stylesheetElementsstylesheetImportsr{  r|  normalStylesheetimportantStylesheetnormalStyleElementimportantStyleElementr   
stylesheetstyleElements               r
   r  zCSSBuilder.stylesheet  s!    	 $ 3 3 5 5t7J7J7L7LIF9J ; ;5 "5""#3444%%&9::::=O = =9"$9""#5666%%&;<<<<9$$((**F/ / /
"":.... 2 1 1""<0000Mr   c                 .    |                                   d S r   r  r   s    r
   beginInlinezCSSBuilder.beginInline  r  r   c                 .    |                                   d S r   r  r   s    r
   	endInlinezCSSBuilder.endInline  r  r   c                 *    t          j        |          S r   )r   parseSpecialRulesr   rH  s     r
   specialRuleszCSSBuilder.specialRules  s    +L999r   c                 b    |                      |          }|                     |t                    S r   )r  r~  rV  r  s     r
   rB   zCSSBuilder.inline  s,    ((66!!,0@AAAr   c                    |                                | j        rk|                               \  }}|                                 |                                 }}|D ]$}|                                }|r|||<   |r|||<   %||fS |                               fd|D             }|                     |          S )Nc                 <    g | ]}|                                 fS r&   r   )rN   srH  s     r
   rO   z&CSSBuilder.ruleset.<locals>.<listcomp>  s&    III!q}}5IIIr   )r  r`  r~  r  r   )	r   	selectorsrH  
normalDeclimportantDeclr{  r|  r  r   s	     `      r
   r\   zCSSBuilder.ruleset  s     ((66  	/(,(:(:<(H(H%J $ 3 3 5 5t7J7J7L7LIF 1 1MMOO + *F1I  1#0IaL9$$--l;;LIIIIyIIIF&&v...r   c                     |dk    r|d|fS | j                             |d           }|                     |          }|||fS rf   )ru  r  r  )r   r   r   xmlnss       r
   resolveNamespacePrefixz!CSSBuilder.resolveNamespacePrefix  sO    s??c4((##Hd33%%e,,%&&r   c                     || _         d S r   )charset)r   r  s     r
   	atCharsetzCSSBuilder.atCharset  r  r   c                 P    |                      |          r |j        |          S d S r   )rh  parseExternal)r   import_rg  r   s       r
   atImportzCSSBuilder.atImport  s0    g&& 	4*9*7333tr   c                     || j         |<   d S r   )ru  )r   nsprefixr  s      r
   atNamespacezCSSBuilder.atNamespace  s    $'!!!r   c                 4    |                      |          r|S d S r   )rh  )r   rg  r\   s      r
   atMediazCSSBuilder.atMedia  s"    g&& 	Ntr   c                 V    |                      |                     d          g|          S zG
        This is overriden by xhtml2pdf.context.pisaCSSBuilder
        rd   r\   r   )r   page
pseudopagerH  s       r
   atPagezCSSBuilder.atPage!  '     ||T]]3//0,???r   c                 V    |                      |                     d          g|          S r  r  r  s     r
   
atFontFacezCSSBuilder.atFontFace'  r  r   c                     |t           fS r   r3   )r   atIdentr   srcs       r
   r  zCSSBuilder.atIdent-      N""r   c                 ,    |                      |          S r   )SelectorFactoryr   s     r
   r   zCSSBuilder.selector2  s    ##D)))r   c                 :    | j                             |||          S r   )r  r   )r   r   r   r   s       r
   r   zCSSBuilder.combineSelectors5  s    #44YINNNr   Fc                 "    | j         r|||fS ||fS r   ro  )r   r   r	   r|  s       r
   r   zCSSBuilder.property:  s$     	,%++e}r   c                    |dv r0t          |t                    r|                    |           |S ||gS |||gS t          |t                    r"|                     |d         ||          |d<   |S |                     |||          S )N),r(  r_   )rg   listr   combineTermsTermOperatorFactory)r   termAr   termBs       r
   r  zCSSBuilder.combineTerms?  s    %&& U###5>!ZEM7N%&&  !--eBiUCCb	++E2u===r   c                     |S r   r&   r   r	   s     r
   	termIdentzCSSBuilder.termIdentO      r   c                     |r||fS |S r   r&   )r   r	   unitss      r
   
termNumberzCSSBuilder.termNumberR  s     	 %<r   c                     |S r   r&   r  s     r
   termRGBzCSSBuilder.termRGBW  r  r   c                     |S r   r&   r  s     r
   termURIzCSSBuilder.termURIZ  r  r   c                     |S r   r&   r  s     r
   
termStringzCSSBuilder.termString]  r  r   c                     |S r   r&   r  s     r
   termUnicodeRangezCSSBuilder.termUnicodeRange`  r  r   c                 .    |                      ||          S r   )TermFunctionFactory)r   r   r	   s      r
   termFunctionzCSSBuilder.termFunctionc  s    ''e444r   c                     |t           fS r   r  )r   r  s     r
   termUnknownzCSSBuilder.termUnknownf  r  r   )Tr   )F):r0   r1   r2   rD  r  r   r  setrc  r>  rz  r1  r  r8  r  r  r_  r`  r  r<   rh  re  r]  rm  rp  r^  rv  rx  r~  r  r  r  r  r  r  r  rB   r\   r  r  r  r  r  r  r  r  r   r   r   r  r  r  r  r  r  r  r  r  r&   r   r
   r[  r[    s       N(O)--MIOG!*O 1 1 1 1? ? ?  : : :. . .$ $ $/ / / /
  + + +5 5 5 5@ @ @      (    : : :B B B/ / /.' ' '    
( ( (  
@ @ @@ @ @# # #
* * *O O O
   
> > >      
        5 5 5# # # # #r   r[  c                   &    e Zd ZeZddZd Zd ZdS )	CSSParserNTc                 p    |s|r|J  | j         di |}t          j                            | |           d S Nr&   )createCSSBuilderr   r  r<   )r   
cssBuildercreaterY  s       r
   r<   zCSSParser.__init__q  sT     	5f 	5%%%..4444J$$T:66666r   c                      | j         di |S r  )CSSBuilderFactory)r   rY  s     r
   r  zCSSParser.createCSSBuilderw  s    %t%+++++r   c                     t           j                            |          r|                     |          S t	          d|z            )Nz&Cannot resolve external CSS file: "%s")ospathisfile	parseFiler  )r   cssResourceNames     r
   r  zCSSParser.parseExternalz  s>    7>>/** 	3>>/222EWXXXr   r   )r0   r1   r2   r[  r  r<   r  r  r&   r   r
   r  r  n  sQ        "7 7 7 7, , ,Y Y Y Y Yr   r  ) __doc__rO  r  r   r   r   r   CSSParseErrorrr   r   r5   rc   r   CSSSelectorAbstractr   r   r   r   r   r   r   r   r1  rh   r8  r[   r>  rD  rV  CSSBuilderAbstractr[  r  r&   r   r
   <module>r     s   .  				                  '= = = = =& = = =:xT xT xT xT xT xT xT xT~n n n n nf n n nf       '* '* '* '* '*)*G '* '* '*X
- 
- 
- 
- 
-? 
- 
- 
-&    v   .* * * * *7 * * *2, , , , , 8 , , ,:&K &K &K &K &K$< &K &K &KR= = = = =!9 = = =*B B B B B&> B B BDN N N N N& N N N+ + + + +% + + +	 	 	 	 	d 	 	 	       ,	6 	6 	6 	6 	6z? 	6 	6 	6 c# c# c# c# c#- c# c# c#TY Y Y Y Y	# Y Y Y Y Yr   