o
    ôSk[kr  ã                   @   s’  d dl mZ 	 d dlZd dlZd dlZd dlZddlmZ ddlmZ dd„ Z	ej
Z
G dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deejƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZG d$d%„ d%eƒZG d&d'„ d'eƒZG d(d)„ d)eeƒZG d*d+„ d+ej ƒZ!G d,d-„ d-ej"ƒZ"dS ).é    )Úabsolute_importNé   )Ú	cssParser)Ú
cssSpecialc                 C   s   t | Ž ‚©N)ÚStopIteration)Úvalue© r	   úC/var/www/html/env/lib/python3.10/site-packages/xhtml2pdf/w3c/css.pyÚstopIter2   ó   r   c                   @   sR   e Zd Zefdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„Z	dd„ Z
dd„ ZdS )ÚCSSElementInterfaceAbstractc                 C   ó   t dƒ‚©NúSubclass responsibility©ÚNotImplementedError)ÚselfÚnameÚdefaultr	   r	   r
   ÚgetAttrA   r   z#CSSElementInterfaceAbstract.getAttrc                 C   ó   |   dd¡S )NÚidÚ ©r   ©r   r	   r	   r
   Ú	getIdAttrE   ó   z%CSSElementInterfaceAbstract.getIdAttrc                 C   r   )NÚclassr   r   r   r	   r	   r
   ÚgetClassAttrI   r   z(CSSElementInterfaceAbstract.getClassAttrc                 C   r   r   r   r   r	   r	   r
   ÚgetInlineStyleM   r   z*CSSElementInterfaceAbstract.getInlineStylec                 C   r   r   r   r   r	   r	   r
   ÚmatchesNodeQ   r   z'CSSElementInterfaceAbstract.matchesNoder	   c                 C   r   r   r   ©r   r   Úparamsr	   r	   r
   ÚinPseudoStateU   r   z)CSSElementInterfaceAbstract.inPseudoStatec                 C   r   )z;Results must be compatible with CSSElementInterfaceAbstractr   r   r   r	   r	   r
   ÚiterXMLParentsY   s   z*CSSElementInterfaceAbstract.iterXMLParentsc                 C   r   r   r   r   r	   r	   r
   ÚgetPreviousSibling^   r   z.CSSElementInterfaceAbstract.getPreviousSiblingN©r	   )Ú__name__Ú
__module__Ú__qualname__ÚNotImplementedr   r   r   r    r!   r$   r%   r&   r	   r	   r	   r
   r   @   s    
r   c                   @   sj   e Zd ZdZdZdZddd„Zddd„Zddd„Ze	fdd	„Z
e	fd
d„Zdd„ Zdd„ Ze	fdd„ZdS )ÚCSSCascadeStrategyNc                 C   s2   |d ur|| _ |d ur|| _|d ur|| _d S d S r   )ÚauthorÚuserÚ	userAgenr©r   r-   r.   Ú	userAgentr	   r	   r
   Ú__init__i   s   
ÿzCSSCascadeStrategy.__init__c                 C   s8   |d u r| j }|d u r| j}|d u r| j}|  |||¡S r   )r-   r.   r/   Ú	__class__r0   r	   r	   r
   ÚcopyWithUpdateq   s   z!CSSCascadeStrategy.copyWithUpdatec                 c   s’   � | j d ur| j d V  | j d V  | jd ur| jd V  | jd ur.| jd V  | jd V  |r:|d V  |d V  | jd urG| jd V  d S d S ©Nr   r   )r/   r.   r-   )r   Úinliner	   r	   r
   ÚiterCSSRulesets}   s   €





ÿz"CSSCascadeStrategy.iterCSSRulesetsc                 C   s   |   ||¡}|  |||¡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   Úruler	   r	   r
   ÚfindStyleFor“   s   zCSSCascadeStrategy.findStyleForc                    s&   ˆ  ||¡}‡ ‡fdd„t |¡D ƒS )r8   c                    s"   g | ]\}}|ˆ  ||ˆ ¡f‘qS r	   )r:   )Ú.0r<   r=   ©r   r   r	   r
   Ú
<listcomp>¨   s    ÿz8CSSCascadeStrategy.findStylesForEach.<locals>.<listcomp>)ÚfindCSSRulesForEachÚsixÚ	iteritems)r   r;   Ú	attrNamesr   Úrulesr	   r@   r
   ÚfindStylesForEachŸ   s   ÿz$CSSCascadeStrategy.findStylesForEachc                 C   sð   g }|  ¡ }| jd ur!|| jd  ||¡7 }|| jd  ||¡7 }| jd ur1|| jd  ||¡7 }| jd urL|| jd  ||¡7 }|| jd  ||¡7 }|rb||d  ||¡7 }||d  ||¡7 }| jd urr|| jd  ||¡7 }| ¡  |S r5   )r    r/   ÚfindCSSRuleForr.   r-   Úsort)r   r;   r<   rF   r6   r	   r	   r
   r9   ¬   s"   



z"CSSCascadeStrategy.findCSSRulesForc                 C   sj   t dd„ |D ƒƒ}| ¡ }|  |¡D ]}t |¡D ]\}}|| ||¡7 }qqt |¡D ]}| ¡  q,|S )Nc                 s   s   � | ]}|g fV  qd S r   r	   )r?   r   r	   r	   r
   Ú	<genexpr>Ì   s   € z9CSSCascadeStrategy.findCSSRulesForEach.<locals>.<genexpr>)Údictr    r7   rC   rD   rH   Ú
itervaluesrI   )r   r;   rE   rF   r6   Úrulesetr<   Ú	attrRulesr	   r	   r
   rB   Ë   s   ÿ
z&CSSCascadeStrategy.findCSSRulesForEachc                 C   s4   |r|d d }|| S |t ur|S td||f ƒ‚)Néÿÿÿÿr   z#Could not find style for '%s' in %r)r+   ÚLookupError)r   r=   r<   r   Ústyler	   r	   r
   r:   Ú   s   z'CSSCascadeStrategy._extractStyleForRule)NNNr   )r(   r)   r*   r-   r.   r/   r2   r4   r7   r+   r>   rG   r9   rB   r:   r	   r	   r	   r
   r,   c   s    


r,   c                   @   s¼   e Zd ZdZdZdZd$dd„Zdd„ Zdd	„ Zd
d„ Z	e
e	ƒZdd„ Ze
eƒZdd„ Ze
eƒZdd„ Ze
eƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd%d d!„Zd"d#„ ZdS )&ÚCSSSelectorBaseFNÚ*c                 C   s   t |tƒs
d d|f}|| _d S ©NrS   )Ú
isinstanceÚtupleÚcompleteName)r   rW   r	   r	   r
   r2   î   s   


zCSSSelectorBase.__init__c                 C   s   t | j|  ¡ | jfƒ| _d S r   )ÚhashÚfullNameÚspecificityÚ
qualifiersÚ_hashr   r	   r	   r
   Ú_updateHashô   s   zCSSSelectorBase._updateHashc                 C   s   | j d u r
t | ¡S | j S r   )r\   ÚobjectÚ__hash__r   r	   r	   r
   r_   ø   ó   

zCSSSelectorBase.__hash__c                 C   ó
   | j d S )Nr   ©rW   r   r	   r	   r
   ÚgetNSPrefixþ   ó   
zCSSSelectorBase.getNSPrefixc                 C   ra   )Né   rb   r   r	   r	   r
   ÚgetName  rd   zCSSSelectorBase.getNamec                 C   ra   )Nr   rb   r   r	   r	   r
   ÚgetNamespace  rd   zCSSSelectorBase.getNamespacec                 C   s   | j dd… S )Nr   é   rb   r   r	   r	   r
   ÚgetFullName  ó   zCSSSelectorBase.getFullNamec                 C   s$   | j jf|  ¡  |  ¡ f }d| S )Nz<%s %d:%d:%d:%d %s >)r3   r(   rZ   ÚasString)r   ÚstrArgsr	   r	   r
   Ú__repr__  s   zCSSSelectorBase.__repr__c                 C   ó   |   ¡ S r   ©rk   r   r	   r	   r
   Ú__str__  r   zCSSSelectorBase.__str__c                 C   s(   |   ¡ |  ¡ ko| j|jko| j|jkS ©úPython 3)rZ   rY   r[   ©r   Úotherr	   r	   r
   Ú__eq__"  s
   
ÿ
ýzCSSSelectorBase.__eq__c                 C   s4   |   |¡ o|  ¡ | ¡ k p| j|jk p| j|jk S rq   )ru   rZ   rY   r[   rs   r	   r	   r
   Ú__lt__*  s   
ÿ
ýzCSSSelectorBase.__lt__c                 C   sJ   t |  ¡ | ¡ ƒ}|dkr|S t | j|jƒ}|dkr|S t | j|jƒ}|S )úPython 2r   )ÚcmprZ   rY   r[   )r   rt   Úresultr	   r	   r
   Ú__cmp__2  s   zCSSSelectorBase.__cmp__c                 C   s   | j d u r
|  ¡ | _ | j S r   )Ú_specificityÚ_calcSpecificityr   r	   r	   r
   rZ   >  r`   zCSSSelectorBase.specificityc                 C   sª   d}d}t | jdkƒ}| jD ]?}| ¡ r|d7 }q| ¡ r"|d7 }q| ¡ r+|d7 }q| ¡ r4|d7 }q| ¡ rM|j 	¡ \}}}}||7 }||7 }||7 }q| j
|||fS )z8from http://www.w3.org/TR/CSS21/cascade.html#specificityr   rS   r   )Úintr   r[   ÚisHashÚisClassÚisAttrÚisPseudoÚ
isCombinerÚselectorrZ   r6   )r   Ú	hashCountÚqualifierCountÚelementCountÚqÚiÚhÚer	   r	   r
   r|   D  s&   




€z CSSSelectorBase._calcSpecificityc                 C   sj   |d u r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 ]
}| |¡s2 dS q(dS )NFr   rS   r   )Nr   rS   T)rY   Ú
domElementÚtagNameÚnamespaceURIr[   Úmatches)r   r;   Ú	qualifierr	   r	   r
   rŽ   Z  s    

ÿzCSSSelectorBase.matchesc                 C   sp   g }| j d ur| d| j | jf ¡ n| | j¡ | jD ]}| ¡ r+| d| ¡ ¡ q| | ¡ ¡ qd |¡S )Nz%s|%sr   r   )ÚnsPrefixÚappendr   r[   r‚   Úinsertrk   Újoin)r   ry   r‡   r	   r	   r
   rk   k  s   


zCSSSelectorBase.asString)rS   r   )r(   r)   r*   r6   r\   r{   r2   r]   r_   rc   Úpropertyr�   rf   r   rg   Ú	namespaceri   rY   rm   rp   ru   rv   rz   rZ   r|   rŽ   rk   r	   r	   r	   r
   rR   è   s0    

rR   c                   @   s   e Zd ZdZdS )ÚCSSInlineSelectorTN)r(   r)   r*   r6   r	   r	   r	   r
   r–   {  s    r–   c                   @   sh   e Zd Zg Zdd„ Zdd„ ZeeƒZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCSSMutableSelectorc                 C   s   t | jdd„ | jD ƒƒS )Nc                 S   s   g | ]}|  ¡ ‘qS r	   ©ÚasImmutable)r?   r‡   r	   r	   r
   rA   …  s    z2CSSMutableSelector.asImmutable.<locals>.<listcomp>)ÚCSSImmutableSelectorrW   r[   r   r	   r	   r
   r™   „  s   zCSSMutableSelector.asImmutablec                 C   s   |  ||¡ |S r   )ÚaddCombination)ÚklassÚ	selectorAÚopÚ	selectorBr	   r	   r
   ÚcombineSelectorsˆ  s   z#CSSMutableSelector.combineSelectorsc                 C   ó   |   t||ƒ¡ d S r   )Ú_addQualifierÚCSSSelectorCombinationQualifier)r   rž   rt   r	   r	   r
   r›   �  ó   z!CSSMutableSelector.addCombinationc                 C   ó   |   t|ƒ¡ d S r   )r¢   ÚCSSSelectorHashQualifier©r   ÚhashIdr	   r	   r
   Ú	addHashId”  ó   zCSSMutableSelector.addHashIdc                 C   r¥   r   )r¢   ÚCSSSelectorClassQualifier)r   Úclass_r	   r	   r
   ÚaddClass˜  rª   zCSSMutableSelector.addClassc                 C   r¥   r   ©r¢   ÚCSSSelectorAttributeQualifier)r   r<   r	   r	   r
   ÚaddAttributeœ  rª   zCSSMutableSelector.addAttributec                 C   s   |   t|||ƒ¡ d S r   r®   ©r   r<   rž   Ú	attrValuer	   r	   r
   ÚaddAttributeOperation   ó   z(CSSMutableSelector.addAttributeOperationc                 C   r¥   r   ©r¢   ÚCSSSelectorPseudoQualifier©r   r   r	   r	   r
   Ú	addPseudo¤  rª   zCSSMutableSelector.addPseudoc                 C   r¡   r   rµ   r"   r	   r	   r
   ÚaddPseudoFunction¨  r¤   z$CSSMutableSelector.addPseudoFunctionc                 C   s"   | j r| j  |¡ d S |g| _ d S r   )r[   r‘   )r   r�   r	   r	   r
   r¢   ®  s   z CSSMutableSelector._addQualifierN)r(   r)   r*   r[   r™   r    Úclassmethodr›   r©   r­   r°   r³   r¸   r¹   r¢   r	   r	   r	   r
   r—   €  s    r—   c                   @   s&   e Zd Zddd„Zdd„ ZeeƒZdS )	rš   rS   r	   c                 C   s"   t |ƒ| _t | |¡ |  ¡  d S r   )rV   r[   rR   r2   r]   )r   rW   r[   r	   r	   r
   r2   ·  s   
zCSSImmutableSelector.__init__c                 C   s   | |j |jƒS r   )rW   r[   )rœ   rƒ   r	   r	   r
   ÚfromSelector¾  rj   z!CSSImmutableSelector.fromSelectorN)rS   r	   )r(   r)   r*   r2   r»   rº   r	   r	   r	   r
   rš   ¶  s    
rš   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚCSSSelectorQualifierBasec                 C   ó   dS ©NFr	   r   r	   r	   r
   r~   Ë  ó   zCSSSelectorQualifierBase.isHashc                 C   r½   r¾   r	   r   r	   r	   r
   r   Ï  r¿   z CSSSelectorQualifierBase.isClassc                 C   r½   r¾   r	   r   r	   r	   r
   r€   Ó  r¿   zCSSSelectorQualifierBase.isAttrc                 C   r½   r¾   r	   r   r	   r	   r
   r�   ×  r¿   z!CSSSelectorQualifierBase.isPseudoc                 C   r½   r¾   r	   r   r	   r	   r
   r‚   Û  r¿   z#CSSSelectorQualifierBase.isCombinerc                 C   s   | S r   r	   r   r	   r	   r
   r™   ß  r¿   z$CSSSelectorQualifierBase.asImmutablec                 C   rn   r   ro   r   r	   r	   r
   rp   ã  r   z CSSSelectorQualifierBase.__str__N)
r(   r)   r*   r~   r   r€   r�   r‚   r™   rp   r	   r	   r	   r
   r¼   Ê  s    r¼   c                   @   óL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )r¦   c                 C   ó
   || _ d S r   ©r¨   r§   r	   r	   r
   r2   è  rd   z!CSSSelectorHashQualifier.__init__c                 C   r½   ©NTr	   r   r	   r	   r
   r~   ì  r¿   zCSSSelectorHashQualifier.isHashc                 C   ó   t | jfƒS r   )rX   r¨   r   r	   r	   r
   r_   ð  r   z!CSSSelectorHashQualifier.__hash__c                 C   ó
   d| j  S )Nú#rÂ   r   r	   r	   r
   rk   ô  rd   z!CSSSelectorHashQualifier.asStringc                 C   s   |  ¡ | jkS r   )r   r¨   ©r   r;   r	   r	   r
   rŽ   ø  rj   z CSSSelectorHashQualifier.matchesc                 C   ó   | j |j kS rq   rÂ   rs   r	   r	   r
   ru   û  ó   zCSSSelectorHashQualifier.__eq__c                 C   ó   | j |j k S rq   rÂ   rs   r	   r	   r
   rv   ÿ  rÉ   zCSSSelectorHashQualifier.__lt__c                 C   ó   t | j|jƒS ©rw   )rx   r¨   rs   r	   r	   r
   rz     ó   z CSSSelectorHashQualifier.__cmp__N)r(   r)   r*   r2   r~   r_   rk   rŽ   ru   rv   rz   r	   r	   r	   r
   r¦   ç  s    r¦   c                   @   rÀ   )r«   c                 C   rÁ   r   ©ÚclassId)r   rÏ   r	   r	   r
   r2   	  rd   z"CSSSelectorClassQualifier.__init__c                 C   r½   rÃ   r	   r   r	   r	   r
   r     r¿   z!CSSSelectorClassQualifier.isClassc                 C   rÄ   r   )rX   rÏ   r   r	   r	   r
   r_     r   z"CSSSelectorClassQualifier.__hash__c                 C   rÅ   )NÚ.rÎ   r   r	   r	   r
   rk     rd   z"CSSSelectorClassQualifier.asStringc                 C   s*   |j j d¡}|d ur| j|j ¡ v S dS )Nr   F)r‹   Ú
attributesÚgetrÏ   r   Úsplit©r   r;   r²   r	   r	   r
   rŽ     s   z!CSSSelectorClassQualifier.matchesc                 C   rÈ   rq   rÎ   rs   r	   r	   r
   ru      rÉ   z CSSSelectorClassQualifier.__eq__c                 C   rÊ   rq   rÎ   rs   r	   r	   r
   rv   $  rÉ   z CSSSelectorClassQualifier.__lt__c                 C   rË   rÌ   )rx   rÏ   rs   r	   r	   r
   rz   (  rÍ   z!CSSSelectorClassQualifier.__cmp__N)r(   r)   r*   r2   r   r_   rk   rŽ   ru   rv   rz   r	   r	   r	   r
   r«     s    r«   c                   @   sJ   e Zd ZddeZZZdefdd„Zdd„ Zdd„ Z	dd	„ Z
d
d„ ZdS )r¯   Nc                 C   s.   || _ || jur|| _|| jur|| _d S d S r   )r   rž   r   r±   r	   r	   r
   r2   0  s   


ÿz&CSSSelectorAttributeQualifier.__init__c                 C   r½   rÃ   r	   r   r	   r	   r
   r€   8  r¿   z$CSSSelectorAttributeQualifier.isAttrc                 C   s   t | j| j| jfƒS r   )rX   r   rž   r   r   r	   r	   r
   r_   ;  r¤   z&CSSSelectorAttributeQualifier.__hash__c                 C   s*   | j tu rd| jf S d| j| j| j f S )Nz[%s]z[%s%s%s])r   r+   r   rž   r   r	   r	   r
   rk   >  s   
z&CSSSelectorAttributeQualifier.asStringc                 C   sº   | j d u r| | jt¡tkS | j dkr| j| | jt¡kS | j dkr8|jj | j¡}|d ur6| j|j ¡ v S dS | j dkrT|jj | j¡}|d urR| j|j d¡v S dS t	d| j | f ƒ‚)Nú=z~=Fz|=ú-zUnknown operator %r for %r)
rž   r   r   r+   r   r‹   rÑ   rÒ   rÓ   ÚRuntimeErrorrÔ   r	   r	   r
   rŽ   C  s   



z%CSSSelectorAttributeQualifier.matches)r(   r)   r*   r+   r   rž   r   r2   r€   r_   rk   rŽ   r	   r	   r	   r
   r¯   -  s    r¯   c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )r¶   r	   c                 C   s   || _ t|ƒ| _d S r   )r   rV   r#   )r   r<   r#   r	   r	   r
   r2   X  s   z#CSSSelectorPseudoQualifier.__init__c                 C   r½   rÃ   r	   r   r	   r	   r
   r�   \  r¿   z#CSSSelectorPseudoQualifier.isPseudoc                 C   ó   t | j| jfƒS r   )rX   r   r#   r   r	   r	   r
   r_   _  ó   z#CSSSelectorPseudoQualifier.__hash__c                 C   s    | j rd| j S d| j| j f S )Nú:z:%s(%s))r#   r   r   r	   r	   r
   rk   b  s   
z#CSSSelectorPseudoQualifier.asStringc                 C   s   |  | j| j¡S r   )r$   r   r#   rÇ   r	   r	   r
   rŽ   h  rÙ   z"CSSSelectorPseudoQualifier.matchesNr'   )r(   r)   r*   r2   r�   r_   rk   rŽ   r	   r	   r	   r
   r¶   W  s    
r¶   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )r£   c                 C   ó   || _ || _d S r   )rž   rƒ   )r   rž   rƒ   r	   r	   r
   r2   m  ó   
z(CSSSelectorCombinationQualifier.__init__c                 C   r½   rÃ   r	   r   r	   r	   r
   r‚   r  r¿   z*CSSSelectorCombinationQualifier.isCombinerc                 C   rØ   r   )rX   rž   rƒ   r   r	   r	   r
   r_   v  rÙ   z(CSSSelectorCombinationQualifier.__hash__c                 C   s   |   | j| j ¡ ¡S r   )r3   rž   rƒ   r™   r   r	   r	   r
   r™   z  r¤   z+CSSSelectorCombinationQualifier.asImmutablec                 C   s   d| j  ¡ | jf S )Nz%s%s)rƒ   rk   rž   r   r	   r	   r
   rk   ~  r¤   z(CSSSelectorCombinationQualifier.asStringc                    s¼   | j dkr2|d ur0| | jj¡r0z| ¡ D ]‰ ‡ fdd„| jjD ƒ qW dS  ty/   Y dS w dS | j dkrO|d urM| | jj¡rM| jjd  |¡rMdS dS | j dkr\| j | ¡ ¡S d S )	Nú c                    s"   g | ]}|  ˆ ¡rtd ƒrd‘qS )r   N)rŽ   r   )r?   r�   ©Úparentr	   r
   rA   ‡  s
    ÿ
ÿz;CSSSelectorCombinationQualifier.matches.<locals>.<listcomp>TFú>r   ú+)	rž   r!   rƒ   rY   r%   r[   r   rŽ   r&   rÇ   r	   rÞ   r
   rŽ   �  s*   
ÿþÿ

ÿz'CSSSelectorCombinationQualifier.matchesN)	r(   r)   r*   r2   r‚   r_   r™   rk   rŽ   r	   r	   r	   r
   r£   l  s    r£   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚCSSTerminalFunctionc                 C   rÛ   r   )r   r#   r"   r	   r	   r
   r2   œ  rÜ   zCSSTerminalFunction.__init__c                 C   s   d| j d | j¡f S )Nz<CSS function: %s(%s)>z, )r   r“   r#   r   r	   r	   r
   rm   ¡  r´   zCSSTerminalFunction.__repr__N)r(   r)   r*   r2   rm   r	   r	   r	   r
   rã   ›  s    rã   c                   @   râ   )ÚCSSTerminalOperatorc                 G   s   t  | |¡S r   )rV   Ú__new__)rœ   Úargsr	   r	   r
   rå   ¦  r   zCSSTerminalOperator.__new__c                 C   s   dt  | ¡ S )Nrž   )rV   rm   r   r	   r	   r
   rm   ª  rj   zCSSTerminalOperator.__repr__N)r(   r)   r*   rå   rm   r	   r	   r	   r
   rä   ¥  s    rä   c                   @   s   e Zd Z	 dd„ Zdd„ ZdS )ÚCSSDeclarationsc                 C   r½   ©rr   Fr	   rs   r	   r	   r
   ru   ´  ó   zCSSDeclarations.__eq__c                 C   r½   rè   r	   rs   r	   r	   r
   rv   ¸  ré   zCSSDeclarations.__lt__N)r(   r)   r*   ru   rv   r	   r	   r	   r
   rç   ±  s    rç   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
CSSRulesetc                    s&   ‡ ‡fdd„t  | ¡D ƒ}| ¡  |S )Nc                    s*   g | ]\}}ˆ |v r|  ˆ¡r||f‘qS r	   )rŽ   )r?   Ú
nodeFilterÚdeclarations©r<   r;   r	   r
   rA   ¿  s    ÿz.CSSRuleset.findCSSRulesFor.<locals>.<listcomp>)rC   rD   rI   )r   r;   r<   ÚruleResultsr	   rí   r
   r9   ¾  s   zCSSRuleset.findCSSRulesForc                 C   s   |   ||¡dd … S ©NrO   ©r9   ©r   r;   r<   r	   r	   r
   rH   Å  s   zCSSRuleset.findCSSRuleForc                 C   sR   t  |¡D ]!\}}|| v r"| | r"t | | ¡| |< | |  |¡ q|| |< qdS )z XXX Bugfix for use in PISA N)rC   rD   ÚcopyÚupdate)r   ÚstylesÚkÚvr	   r	   r
   ÚmergeStylesË  s   
ûzCSSRuleset.mergeStylesN)r(   r)   r*   r9   rH   r÷   r	   r	   r	   r
   rê   ½  s    rê   c                   @   râ   )ÚCSSInlineRulesetc                 C   s   || v r
t ƒ | fgS g S r   )r–   rñ   r	   r	   r
   r9   Ö  s   z CSSInlineRuleset.findCSSRulesForc                 O   s   | j |i |¤Ždd … S rï   rð   )r   ræ   Úkwr	   r	   r
   rH   Ü  s   zCSSInlineRuleset.findCSSRuleForN)r(   r)   r*   r9   rH   r	   r	   r	   r
   rø   Õ  s    rø   c                   @   sz  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d„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ ZdRdd„Zdd„ Zdd„ ZdSdd„Zdd„ Zdd„ Zdd„ Zdd„ Z dd „ Z!d!d"„ Z"d#d$„ Z#d%d&„ Z$d'd(„ Z%d)d*„ Z&d+d,„ Z'd-d.„ Z(d/d0„ Z)d1d2„ Z*d3d4„ Z+d5d6„ Z,d7d8„ Z-d9d:„ Z.d;d<„ Z/dTd>d?„Z0d@dA„ Z1dBdC„ Z2dSdDdE„Z3dFdG„ Z4dHdI„ Z5dJdK„ Z6dLdM„ Z7dNdO„ Z8dPdQ„ Z9dS )UÚ
CSSBuilderNTc                 C   s   |   |¡ |  |¡ d S r   )ÚsetMediumSetÚsetTrackImportance)r   Ú	mediumSetÚtrackImportancer	   r	   r
   r2   ò  s   
zCSSBuilder.__init__c                 C   s0   |sdS d|v r
dS |   |¡}t|  ¡  |¡ƒS )NFÚallT)ÚMediumSetFactoryÚboolÚgetMediumSetÚintersection)r   Úmediumsr	   r	   r
   ÚisValidMedium÷  s   
zCSSBuilder.isValidMediumc                 C   ó   | j S r   )rý   r   r	   r	   r
   r    ó   zCSSBuilder.getMediumSetc                 C   s   |   |¡| _d S r   )r   rý   ©r   rý   r	   r	   r
   rû     rÙ   zCSSBuilder.setMediumSetc                 C   s   |   ¡  |¡ d S r   )r  ró   r  r	   r	   r
   ÚupdateMediumSet	  rª   zCSSBuilder.updateMediumSetc                 C   r  r   ©rþ   r   r	   r	   r
   ÚgetTrackImportance  r  zCSSBuilder.getTrackImportancec                 C   rÁ   r   r
  )r   rþ   r	   r	   r
   rü     rd   zCSSBuilder.setTrackImportancec                 C   s"   | j }| j  ¡ | _ || _i | _d S r   )Ú__dict__rò   Ú_restoreStateÚ
namespaces)r   r  r	   r	   r
   Ú
_pushState  s   
zCSSBuilder._pushStatec                 C   s   | j | _d S r   )r  r  r   r	   r	   r
   Ú	_popState  r   zCSSBuilder._popStatec                 C   sj   |p| j }| jr1g g }}|D ]}|d r| |d d… ¡ q| |d d… ¡ q||ƒ||ƒfS ||ƒS rï   )ÚDeclarationsFactoryrþ   r‘   )r   rì   r  ÚnormalÚ	importantÚdr	   r	   r
   Ú_declarations"  s   

zCSSBuilder._declarationsc                 C   s   | j  |pd |¡p
d S r   )ÚxmlnsSynonymsrÒ   )r   Úurir	   r	   r
   Ú_xmlnsGetSynonym0  s   zCSSBuilder._xmlnsGetSynonymc                 C   ó   |   ¡  d S r   ©r  r   r	   r	   r
   ÚbeginStylesheet7  r   zCSSBuilder.beginStylesheetc                 C   r  r   ©r  r   r	   r	   r
   ÚendStylesheet;  r   zCSSBuilder.endStylesheetc                 C   s˜   | j r2|  ¡ |  ¡ }}|D ]\}}| |¡ | |¡ q|D ]\}}| |¡ | |¡ q||fS |  ¡ }	|D ]}
|	 |
¡ q8|D ]}|	 |¡ qB|	S r   )rþ   ÚRulesetFactoryr÷   )r   ÚstylesheetElementsÚstylesheetImportsr  r  ÚnormalStylesheetÚimportantStylesheetÚnormalStyleElementÚimportantStyleElementry   Ú
stylesheetÚstyleElementr	   r	   r
   r%  ?  s   

zCSSBuilder.stylesheetc                 C   r  r   r  r   r	   r	   r
   ÚbeginInlineT  r   zCSSBuilder.beginInlinec                 C   r  r   r  r   r	   r	   r
   Ú	endInlineX  r   zCSSBuilder.endInlinec                 C   s
   t  |¡S r   )r   ÚparseSpecialRules©r   rì   r	   r	   r
   ÚspecialRules\  rd   zCSSBuilder.specialRulesc                 C   s   |   |¡}|  |t¡S r   )r+  r  rø   r*  r	   r	   r
   r6   `  s   
zCSSBuilder.inlinec           	         sˆ   |   ˆ ¡‰ | jr1|  ˆ ¡\}}|  ¡ |  ¡ }}|D ]}| ¡ }|r&|||< |r,|||< q||fS |  ˆ ¡‰ ‡ fdd„|D ƒ}|  |¡S )Nc                    s   g | ]}|  ¡ ˆ f‘qS r	   r˜   )r?   Ús©rì   r	   r
   rA   w  s    z&CSSBuilder.ruleset.<locals>.<listcomp>)r+  rþ   r  r  r™   )	r   Ú	selectorsrì   Ú
normalDeclÚimportantDeclr  r  r,  ry   r	   r-  r
   rM   e  s   
€

zCSSBuilder.rulesetc                 C   s4   |dkr	|d|fS | j  |d ¡}|  |¡}|||fS rT   )r  rÒ   r  )r   r�   r   Úxmlnsr	   r	   r
   ÚresolveNamespacePrefix}  s
   


z!CSSBuilder.resolveNamespacePrefixc                 C   rÁ   r   )Úcharset)r   r3  r	   r	   r
   Ú	atCharset‡  rd   zCSSBuilder.atCharsetc                 C   s   |   |¡r
| |¡S d S r   )r  ÚparseExternal)r   Úimport_r  r   r	   r	   r
   ÚatImport‹  s   

zCSSBuilder.atImportc                 C   s   || j |< d S r   )r  )r   Únsprefixr  r	   r	   r
   ÚatNamespace‘  rj   zCSSBuilder.atNamespacec                 C   s   |   |¡r|S d S r   )r  )r   r  rM   r	   r	   r
   ÚatMedia•  s   
zCSSBuilder.atMediac                 C   s   |   |  d¡g|¡S ©zG
        This is overriden by xhtml2pdf.context.pisaCSSBuilder
        rS   ©rM   rƒ   )r   ÚpageÚ
pseudopagerì   r	   r	   r
   ÚatPage›  ó   zCSSBuilder.atPagec                 C   s   |   |  d¡g|¡S r;  r<  r*  r	   r	   r
   Ú
atFontFace¢  r@  zCSSBuilder.atFontFacec                 C   s   |t fS r   ©r+   )r   ÚatIdentr   Úsrcr	   r	   r
   rC  ©  r   zCSSBuilder.atIdentc                 C   s
   |   |¡S r   )ÚSelectorFactoryr·   r	   r	   r
   rƒ   ¯  rd   zCSSBuilder.selectorc                 C   s   | j  |||¡S r   )rE  r    )r   r�   rž   rŸ   r	   r	   r
   r    ³  rÙ   zCSSBuilder.combineSelectorsFc                 C   s   | j r|||fS ||fS r   r
  )r   r   r   r  r	   r	   r
   r”   ¹  s   
zCSSBuilder.propertyc                 C   sp   |dv rt |tƒr| |¡ |S ||gS |d u r|d u r|gS t |tƒr1|  |d ||¡|d< |S |  |||¡S )N)ú,rÝ   rO   )rU   Úlistr‘   ÚcombineTermsÚTermOperatorFactory)r   ÚtermArž   ÚtermBr	   r	   r
   rH  ¿  s   


zCSSBuilder.combineTermsc                 C   ó   |S r   r	   ©r   r   r	   r	   r
   Ú	termIdentÐ  r¿   zCSSBuilder.termIdentc                 C   s   |r||fS |S r   r	   )r   r   Úunitsr	   r	   r
   Ú
termNumberÔ  s   zCSSBuilder.termNumberc                 C   rL  r   r	   rM  r	   r	   r
   ÚtermRGBÚ  r¿   zCSSBuilder.termRGBc                 C   rL  r   r	   rM  r	   r	   r
   ÚtermURIÞ  r¿   zCSSBuilder.termURIc                 C   rL  r   r	   rM  r	   r	   r
   Ú
termStringâ  r¿   zCSSBuilder.termStringc                 C   rL  r   r	   rM  r	   r	   r
   ÚtermUnicodeRangeæ  r¿   zCSSBuilder.termUnicodeRangec                 C   s   |   ||¡S r   )ÚTermFunctionFactory)r   r   r   r	   r	   r
   ÚtermFunctionê  r   zCSSBuilder.termFunctionc                 C   s   |t fS r   rB  )r   rD  r	   r	   r
   ÚtermUnknownî  r   zCSSBuilder.termUnknown)Tr   )F):r(   r)   r*   rê   r  r—   rE  Úsetr   rç   r  rã   rU  rä   rI  r  rý   rþ   r3  r2   r  r  rû   r	  r  rü   r  r  r  r  r  r  r%  r'  r(  r+  r6   rM   r2  r4  r7  r9  r:  r?  rA  rC  rƒ   r    r”   rH  rN  rP  rQ  rR  rS  rT  rV  rW  r	   r	   r	   r
   rú   å  sd    





rú   c                   @   s*   e Zd ZeZd	dd„Zdd„ Zdd„ ZdS )
Ú	CSSParserNTc                 K   s6   |s|r|d u s
J ‚| j di |¤Ž}tj | |¡ d S ©Nr	   )ÚcreateCSSBuilderr   rY  r2   )r   Ú
cssBuilderÚcreaterù   r	   r	   r
   r2   ù  s   zCSSParser.__init__c                 K   s   | j di |¤ŽS rZ  )ÚCSSBuilderFactory)r   rù   r	   r	   r
   r[     rÙ   zCSSParser.createCSSBuilderc                 C   s.   t j |¡rt|dƒ}|  |d¡S td| ƒ‚)NÚrTz&Cannot resolve external CSS file: "%s")ÚosÚpathÚisfileÚopenÚ	parseFiler×   )r   ÚcssResourceNameÚcssFiler	   r	   r
   r5    s   
zCSSParser.parseExternalrÃ   )r(   r)   r*   rú   r^  r2   r[  r5  r	   r	   r	   r
   rY  õ  s
    
rY  )#Ú
__future__r   r`  Úsysrò   rC   r   r   r   r   ÚCSSParseErrorr^   r   r,   rR   r–   ÚCSSSelectorAbstractr—   rš   r¼   r¦   r«   r¯   r¶   r£   rã   rV   rä   rK   rç   rê   rø   ÚCSSBuilderAbstractrú   rY  r	   r	   r	   r
   Ú<module>   sB   
#  6!%*/
  