o
    G1b                     @   s"   d dl mZ G dd dejZdS )   )cssc                   @   s   e Zd ZdZdZdd dd dd dd dd d	d d
Zd'ddZdd Zdd Ze	fddZ
dd Zdd Zdd Zd(ddZd)ddZdd  Zd!d" Zd#d$ Zd%d& ZdS )*CSSDOMElementInterfacezNAn implementation of css.CSSElementInterfaceAbstract for xml.dom Element NodesNc                 C      t |   S NboolgetPreviousSiblingself r   (/xhtml2pdf/w3c/cssDOMElementInterface.py<lambda>       zCSSDOMElementInterface.<lambda>c                 C      t |  S r   r   r	   r   r   r   r          c                 C   r   r   r   getNextSiblingr	   r   r   r   r   "   r   c                 C   r   r   r   r	   r   r   r   r   $   r   c                 C   s   t |   ot |   S r   r   r   r   r	   r   r   r   r   '   s    c                 C   s   t |  pt |  S r   r   r	   r   r   r   r   )   s    )zfirst-childznot-first-childz
last-childznot-last-childzmiddle-childznot-middle-childc                 C   s    || _ |d ur| | d S d S r   )
domElementonCSSParserVisit)r
   r   	cssParserr   r   r   __init__3   s   zCSSDOMElementInterface.__init__c                 C   s(   |   }|r||}| | d S d S r   )getStyleAttrZparseInlinesetInlineStyle)r
   r   ZstyleSrcstyler   r   r   r   :   s
   
z'CSSDOMElementInterface.onCSSParserVisitc                 C   s4   |\}}|d| j jfvrdS |dv rdS || j jkS )N*F)N r   T)r   tagNameZnamespaceURI)r
   Znamespace_tagName	namespacer   r   r   r   matchesNodeC   s   z"CSSDOMElementInterface.matchesNodec                 C   s    | j j|}|d ur|jS |S r   )r   Z
attributesgetvalue)r
   namedefault	attrValuer   r   r   getAttrN   s   zCSSDOMElementInterface.getAttrc                 C      |  ddS )Nidr   r%   r	   r   r   r   	getIdAttrV      z CSSDOMElementInterface.getIdAttrc                 C   r&   )Nclassr   r(   r	   r   r   r   getClassAttrZ   r*   z#CSSDOMElementInterface.getClassAttrc                 C   s   |  dd S )Nr   r(   r	   r   r   r   r   ^   r*   z#CSSDOMElementInterface.getStyleAttrr   c                 C   s   | j |dd }|| S )Nc                 S   s   dS )NFr   r	   r   r   r   r   c   s    z6CSSDOMElementInterface.inPseudoState.<locals>.<lambda>)_pseudoStateHandlerLookupr    )r
   r"   paramshandlerr   r   r   inPseudoStateb   s   z$CSSDOMElementInterface.inPseudoStateFc                 c   s`    | j }| j}|s|j}|d ur*|j|jkr.||V  |j}|d ur,|j|jksd S d S d S d S r   )	__class__r   Z
parentNodenodeTypeELEMENT_NODE)r
   ZincludeSelfklasscurrentr   r   r   iterXMLParentsg   s   
$z%CSSDOMElementInterface.iterXMLParentsc                 C   *   | j j}|r|j|jkr|S |j}|sd S r   )r   ZpreviousSiblingr2   r3   r
   Zsiblingr   r   r   r   q      z)CSSDOMElementInterface.getPreviousSiblingc                 C   r7   r   )r   ZnextSiblingr2   r3   r8   r   r   r   r   {   r9   z%CSSDOMElementInterface.getNextSiblingc                 C   s   | j S r   r   r	   r   r   r   getInlineStyle   s   z%CSSDOMElementInterface.getInlineStylec                 C   s
   || _ d S r   r:   )r
   r   r   r   r   r      s   
z%CSSDOMElementInterface.setInlineStyler   )r   )F)__name__
__module____qualname____doc__r   r-   r   r   r   NotImplementedr%   r)   r,   r   r0   r6   r   r   r;   r   r   r   r   r   r      s.    
	




r   N)r   r   ZCSSElementInterfaceAbstractr   r   r   r   r   <module>   s   
