
    ]h?                         d Z ddlmZmZmZmZ dgZdZdZddl	m
Z
 ddlmZ ddlZddlZd	 Z G d
 dej"                  j$                        Zy)zSelector is a single Selector of a CSSStyleRule SelectorList.
Partly implements http://www.w3.org/TR/css3-selectors/.

TODO
    - .contains(selector)
    - .isSubselector(selector)
    )unicode_literalsdivisionabsolute_importprint_functionSelectorrestructuredtextz$Id$)
Deprecated)_SimpleNamespacesNc                 (    t        | t              r| S y N)
isinstancelist)ps    /home/pod-website-builder.sw7ft.com/pod-website-builder/website-analyzer/venv/lib/python3.12/site-packages/css_parser/css/selector.pyas_listr      s    !T     c                        e Zd ZdZ	 	 d fd	Zd Zd Zd Zd Zd Z	 e
e	d	      Z e
d
 d	      Z e
d d	      Zd Zd Z e
eed	      Z e
d d	      Z e
d       Z ed      d        Z e
ed	      Z xZS )r   a  
    (css_parser) a single selector in a :class:`~css_parser.css.SelectorList`
    of a :class:`~css_parser.css.CSSStyleRule`.

    Format::

        # implemented in SelectorList
        selectors_group
          : selector [ COMMA S* selector ]*
          ;

        selector
          : simple_selector_sequence [ combinator simple_selector_sequence ]*
          ;

        combinator
          /* combinators can be surrounded by white space */
          : PLUS S* | GREATER S* | TILDE S* | S+
          ;

        simple_selector_sequence
          : [ type_selector | universal ]
            [ HASH | class | attrib | pseudo | negation ]*
          | [ HASH | class | attrib | pseudo | negation ]+
          ;

        type_selector
          : [ namespace_prefix ]? element_name
          ;

        namespace_prefix
          : [ IDENT | '*' ]? '|'
          ;

        element_name
          : IDENT
          ;

        universal
          : [ namespace_prefix ]? '*'
          ;

        class
          : '.' IDENT
          ;

        attrib
          : '[' S* [ namespace_prefix ]? IDENT S*
                [ [ PREFIXMATCH |
                    SUFFIXMATCH |
                    SUBSTRINGMATCH |
                    '=' |
                    INCLUDES |
                    DASHMATCH ] S* [ IDENT | STRING ] S*
                ]? ']'
          ;

        pseudo
          /* '::' starts a pseudo-element, ':' a pseudo-class */
          /* Exceptions: :first-line, :first-letter, :before and :after. */
          /* Note that pseudo-elements are restricted to one per selector and */
          /* occur only in the last simple_selector_sequence. */
          : ':' ':'? [ IDENT | functional_pseudo ]
          ;

        functional_pseudo
          : FUNCTION S* expression ')'
          ;

        expression
          /* In CSS3, the expressions are identifiers, strings, */
          /* or of the form "an+b" */
          : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
          ;

        negation
          : NOT S* negation_arg S* ')'
          ;

        negation_arg
          : type_selector | universal | HASH | class | attrib | pseudo
          ;

    c                     t         t        |           t        | j                        | _        d| _        || _        d| _        |r|| _	        || _
        y)z
        :Parameters:
            selectorText
                initial value of this selector
            parent
                a SelectorList
            readonly
                default to False
        logNr   r   r   r   )superr   __init__r
   _log_Selector__namespaces_element_parent_specificityselectorText	_readonly)selfr   parentreadonly	__class__s       r   r   zSelector.__init__o   sK     	h&(-$))<( ,D!r   c                     | j                         r| j                  | j                         f}n| j                  }d| j                  j                  d|dS )Nzcss_parser.css.z(selectorText=))_Selector__getNamespacesr   _getUsedNamespacesr$   __name__)r!   sts     r   __repr__zSelector.__repr__   sI    !##T%<%<%>?B""B7;~~7N7NPRSSr   c                     d| j                   j                  | j                  | j                  | j	                         t        |       fz  S )NzP<css_parser.css.%s object selectorText=%r specificity=%r _namespaces=%r at 0x%x>)r$   r)   r   specificityr(   idr!   s    r   __str__zSelector.__str__   sH    *-1^^-D-D-1->->-1-=-=-1-D-D-F-/X	-77 	7r   c                     t               }| j                  D ]^  }|j                  |j                  }}|j	                  d      s|dk(  s2t        |t              sC|d   dvsK|j                  |d          ` |S )z3Return list of actually used URIs in this Selector.	-selector	universalr   )N*)setseqtypevalueendswithr   tupleadd)r!   urisitemtype_vals        r   _getUsedUriszSelector._getUsedUris   sl    uHH 	!DDJJ3E~~k*e{.B#u%#a&*CQ 		!
 r   c                     | j                         }t        | j                        }t        | j                  j                               D ]  \  }}||v s|||<    |S )z%Return actually used namespaces only.r   )r@   r
   r   r   _namespacesitems)r!   useduris
namespacesr   uris        r   r(   zSelector._getUsedNamespaces   s]    $$&&4995
d..4467 	$FAsh #
1	$ r   c                     	 | j                   j                  j                  j                  S # t        $ r | j
                  cY S w xY w)zEUse own namespaces if not attached to a sheet, else the sheet's ones.)r   
parentRuleparentStyleSheetrE   AttributeErrorr   r/   s    r   __getNamespaceszSelector.__getNamespaces   s>    	%<<**;;FFF 	%$$$	%s   ), AAzIf this Selector is attached to a CSSStyleSheet the namespaces of that sheet are mirrored here. While the Selector (or parent SelectorList or parentRule(s) of that are not attached a own dict of {prefix: namespaceURI} is used.)docc                     | j                   S r   )r   r/   s    r   <lambda>zSelector.<lambda>   s
    DMM r   z*Effective element target of this selector.c                     | j                   S r   )r   r/   s    r   rN   zSelector.<lambda>   s
    4<< r   zn(DOM) The SelectorList that contains this Selector or None if this Selector is not attached to a SelectorList.c                 @    t         j                  j                  |       S )zReturn serialized format.)
css_parserserdo_css_Selectorr/   s    r   _getSelectorTextzSelector._getSelectorText   s    ~~--d33r   c                     !"#$%&'()*  j                           j                  |      \  }%	  j                  j                  j                  j
                  % j                  |      }|s j                  j                  d       yg }|D ]  }|\  }}}}|dk(  r#|r! j                  |d         dk(  r
|d||f|d<   3|dk(  r&|r$ j                  |d         dk(  rdd|z   ||f|d<   ^|dk(  r|r j                  |d         j                  d      rj j                  |d         j                  d      sG j                  |d         j                  d      rd	}nd
}| j                  |d         |z   ||f|d<   |dk(  r2|dk(  r-|r+d j                  |d         k(  rdd|z   ||d   d   f|d<   )|dk(  rm|rk j                  |d         j                  d      rH j                  |d         j                  d      rd	}nd
}| j                  |d         |z   ||f|d<   |dk(  r\|rZ j                  |d         dk(  rC j                  |d         j                  d      r d j                  |d         |z   ||f|d<   |dk(  r|j                  d|||f       |dk(  rt|rr j                  |d          j                  j                   dfv rF j                  |d         j#                  d      dk(  r d j                  |d         dz   ||f|d<   |dk(  r|j                  d|||f       |j                  |        t%        |      }dgddg ddd(ddK%( fd	d)d*d"d&d'dd d!d" d#d$$$d%z   #d&!dLfd'	}	dL!()fd(	}
dL!'( *fd)	}dL"( fd*	}dL!$'( *fd+	}dL#( fd,	}dL ( fd-	}dL#( fd.	}dL!"#'( *f
d/	}dL!'( *fd0	}dL!'( *fd1	}dL !#'( )*fd2	}dL&( fd3	}dL( fd4	} j'                         } j)                  )||i d5|d|d6|d7|d|d|d|d
|d	|d|d8|d9|d:|d;|d<|d=|d>||
|	|d?@      \  }}|xr (dA   }t+        (dB         dCkD  s|s/dD} j                  j                  dE j-                  |      z         |dk(  r/dD} j                  j                  dF j-                  |      z         |)k(  r1|r/dD} j                  j                  dG j-                  |      z         |r<t/        |d   j0                  dH      r#|d   j0                  j3                         dk(  r|d= |rK% _        (dI    _        t9        (dJ          _         j=                  |        j?                          _        yy# t        $ r Y qw xY w)Mat  
        :param selectorText:
            parsable string or a tuple of (selectorText, dict-of-namespaces).
            Given namespaces are ignored if this object is attached to a
            CSSStyleSheet!

        :exceptions:
            - :exc:`~xml.dom.NamespaceErr`:
              Raised if the specified selector uses an unknown namespace
              prefix.
            - :exc:`~xml.dom.SyntaxErr`:
              Raised if the specified CSS string value has a syntax error
              and is unparsable.
            - :exc:`~xml.dom.NoModificationAllowedErr`:
              Raised if this rule is readonly.
        z Selector: No selectorText given.:z::IDENT.class(pseudo-elementpseudo-classFUNCTIONznot(negation   r4   namespace_prefix|r3    Nr   T)contextelement_PREFIXr-   
wellformed c                    
d   d   }|r|d   |d   }}nd\  }}|dk(  r	|dd 
d<   y
d   
d   dc}
d<   n |dk(  rd	|v r|j                  d	      \  }}nd}|j                  d
      s|dk(  rd|k(  r|r}|dk(  rt        j                  }nc|	j	                  dd      }nN|dk(  rd}nF	|   }|?d
d<   j
                  j                  d|z  |t        j                  j                         y||f}|r|dk(  rNd|k(  r
d   dxx   dz  cc<   n8d|k(  s|dv r|dk7  s|dk7  r%
d   dxx   dz  cc<   n|dv r
d   dxx   dz  cc<   |s	|dv r|
d<   | j                  ||||       y)a  
                appends to seq

                namespace_prefix, IDENT will be combined to a tuple
                (prefix, name) where prefix might be None, the empty string
                or a prefix.

                Saved are also:
                    - specificity definition: style, id, class/att, type
                    - element: the element this Selector is for
                rd   rW      r`   NNrf   Nr3   rb   r2   attribute-selectorr4   rc   Frg   z-Selector: No namespaceURI found for prefix %r)tokenerrorr_   r.   r-      [)rZ   r]   r]   z:where()type-selectornegation-type-selectorr\   )rq   r3   re   )linecol)splitr9   rQ   _ANYNSgetr   rn   xmldomNamespaceErrappend)r6   r?   typrm   rd   rs   rt   prefixnamespaceURIrE   newr!   s            r   r{   z)Selector._setSelectorText.<locals>.append0  s    i., %a%(#D *ID#)#%("XC	Ny>--0^T*FC	NK'C3J"%))C.KFC!F LL-1C,3F}'1'8'8 (2~~b$'?2') (2&'9'/05C- IIOO -<>D-E2725''2F2F , H # (-C 'Z"7s{M*1-2-s.G'G.0C94D.q1Q61 ]]M*1-2-3*H#H%(C	N

3$C
8r   z:type_selector universal HASH class attrib pseudo negation z"HASH class attrib pseudo negation element_namez0type_selector universal HASH class attrib pseudor&   zprefix attribute	attributezcombinator ]r8   ]z$PLUS - DIMENSION NUMBER STRING IDENTz )z combinatorc                 \     |t         j                  j                  |g      d|       | S )z(special implementation for comment tokenCOMMENTrm   )rQ   css
CSSComment)expectedr6   rm   	tokenizerr{   s       r   _COMMENTz+Selector._setSelectorText.<locals>._COMMENT  s*    sJNN55ug>	"$r   c                     d   d   }|j                  d      r!|r|d   j                  dvr |d|       | S |dk7  rd| v r |d	|       	z   S | S )
Nrd   rW   pseudo-+-Sr   attrib
combinator
descendant)
startswithr8   )
r   r6   rm   r   rd   r   r{   r   r   simple_selector_sequences
        r   _Sz%Selector._setSelectorText.<locals>._S  ss    i.,%%i0s2w}}D8sAs%8#O(\X-E3<u=3j@@ $Or   c                     	d   d   }
j                  |      }d| v r ||d|       d|k(  rS z   S d	d<   
j                  j                  d|       | S )	Nrd   rW   r3   r   r_   Frg   zSelector: Unexpected universal._tokenvaluer   rn   r   r6   rm   r   rd   r?   r{   r   negationendr   r!   simple_selector_sequence2s         r   
_universalz-Selector._setSelectorText.<locals>._universal  s|    i.,&&u-(*3[>!W,**8:EE ).C%IIOO9 $ H#Or   c                     	d   d   }
j                  |      }d|k(  rd| v r ||d|       S d| v r ||d|       S d	d	<   
j                  j                  d
|       | S )Nrd   rW   r   r}   rf   r   type_selectorFrg   z&Selector: Unexpected namespace prefix.r   )r   r6   rm   r   rd   r?   r{   attname2r   r   r!   s         r   _namespace_prefixz4Selector._setSelectorText.<locals>._namespace_prefix  s     i.,&&u-w&8x+?3Ye<#O$03Ye<''(-C%IIOO@ $ O#Or   c                 D   d   d   }j                  |d      j                  |      }}d| v rL|dv rd} ||||       |j                  d	      rd   j                  |       	S d
|k(  r
S d|k(  rS z   S dd<   j                  j                  d|       | S )ah  
                /* '::' starts a pseudo-element, ':' a pseudo-class */
                /* Exceptions: :first-line, :first-letter, :before and
                :after. */
                /* Note that pseudo-elements are restricted to one per selector
                and */
                /* occur only in the last simple_selector_sequence. */
                rd   rW   T	normalizepseudo)z:first-linez:first-letterz:beforez:afterr\   r   r[   r_   Frg   z%Selector: Unexpected start of pseudo.)r   _typer9   r{   r   rn   )r   r6   rm   r   rd   r?   r|   r{   r   expressionstartr   r   r!   r   s          r   _pseudoz*Selector._setSelectorText.<locals>._pseudo  s     i.,++ET+BDJJuDUSx' ) )
 /3S6||C( I--c2..#w.**)S0))8:EE ).C%IIOO?u $ N#Or   c                     	d   d   }
j                  |      
j                  |      }}|j                  d      r ||||       S d	d<   
j                  j	                  d|z  |       | S )Nrd   rW   r   r   Frg   Selector: Unexpected %s.r   r   r   r   rn   )r   r6   rm   r   rd   r?   r|   r{   
expressionr   r!   s          r   _expressionz.Selector._setSelectorText.<locals>._expression  s    i.,++E2DJJu4ES%%i03S6%%(-C%IIOO2S8 $ G#Or   c                     	d   d   }
j                  |      
j                  |      }}d|k(  r d| v r |||j                         |       S d	d<   
j                  j	                  d|z  |       | S )	Nrd   rW   r   r   r   Frg   r   )r   r   lowerr   rn   )r   r6   rm   r   rd   r?   r|   r{   attvaluer   r!   s          r   _attcombinatorz1Selector._setSelectorText.<locals>._attcombinator  s     i.,++E2DJJu4ESw&<8+C3SYY[>#O(-C%IIOO2S8 $ G#Or   c                    
d   d   }j                  |      j                  |      }}d|k(  rd| v r ||||       S |j                  d      r ||||       	S d
d<   j                  j	                  d	|       | S )
Nrd   rW   r   r8   r   r   Frg   zSelector: Unexpected STRING.)r   _stringtokenvaluer   r   rn   )r   r6   rm   r   rd   r|   r?   r{   attendr   r   r!   s          r   _stringz*Selector._setSelectorText.<locals>._string  s    i.,::e,d.D.DU.KS w&7h+>3S6!M ''	23S6%% ).C%IIOO6e $ E#Or   c                   
 d   d   }j                  |      j                  |      }}d|k(  rd| v r ||d|       S d|k(  rd| v r ||d|       	S d	|k(  r ||d
|       S |j                  d      r ||||       S d| v s| k(  r ||d|       
z   S dd<   j                  j	                  d|       | S )Nrd   rW   r   r   rl   r   r8   zattribute-valuer_   rr   r   r   rq   Frg   zSelector: Unexpected IDENT.r   )r   r6   rm   r   rd   r?   r|   r{   attcombinatorr   r   r   r   r   r   r!   r   s          r   _identz)Selector._setSelectorText.<locals>._ident*  s   i.,++E2DJJu4ES w&;(+B3%9G(((W-@3%6eD!M  7*3%=UK&& ''	23S6%%$0LH4L3_EB4zAA ).C%IIOO$AOO#Or   c                     	d   d   }
j                  |      }d| v r ||d|       d|k(  rS z   S d	d<   
j                  j                  d|       | S )	Nrd   rW   rZ   r   r_   Frg   zSelector: Unexpected class.r   r   s         r   _classz)Selector._setSelectorText.<locals>._classP  sv    i.,&&u-h&3WE:!W,**8:EE ).C%IIOO$AOO#Or   c                     	d   d   }
j                  |      }d| v r ||d|       d|k(  rS z   S d	d<   
j                  j                  d	|       | S )
Nrd   rW   HASHr.   r   r_   Frg   zSelector: Unexpected HASH.r   r   s         r   _hashz(Selector._setSelectorText.<locals>._hasha  sv    i.,&&u-X%3T7!W,**8:EE ).C%IIOO$@ON#Or   c                 `   d   d   }j                  |      }d|k(  r<d|k(  r7d| v r3 ||d|       d   j                         }d   d   }d|k(  rS z   S d|k(  rd|k(  rd	| v r ||d
|       
S d|k(  r5d|k(  r0d| v r, ||d|       d   j                          d   d   }z   S |dv rX|j                  d      rGddd}|dk(  r,|r*|d   j                  k(  r|j	                  d|||          S  ||||   |       S d|k(  rA|j                  d      r0| k(  r+ ||d|       d   j                          d|k(  rS z   S d|k(  r&d| v r" ||d|       d   j                  d       	S |dv rGd	| v rCdddd}|r*|d   j                  k(  r|j	                  d|||          S  ||||   |       S d|k(  r=dd<   j                  j                  dt        j                  j                  |        | S dd<   j                  j                  d!|       | S )"Nrd   rW   r   r   zattribute-endr   r_   =r   equalsr&   znegation-endr   r   plusminus)+-r   zfunction-endr\   rp   zattribute-startz+>~childzadjacent-siblingzfollowing-sibling)>r   ~,Frg   zSelector: Single selector only.)rn   rm   zSelector: Unexpected CHAR.)r   popr   r8   replacer{   r   rn   rx   ry   InvalidModificationErr)r   r6   rm   r   rd   r?   _namesr   r{   attnamer   r   r   r   r   r!   r   r   s          r   _charz(Selector._setSelectorText.<locals>._charr  s   i.,&&u- #:(g"5#/3_EB!)n002G!)nR0G!W,**8:EECZH$7%13XU;#O CZJ'$9cXo3^5A	N&&(!)nR0G3j@@ D[W%7%7	%B#)8Fczcc"gmmq.@BVC[9 &% sC%*,%%CZG$6$6y$A8+3^5A	N&&('72))7*DD CZH$83%6eD	N))(3"NE\lh&> %/02F s2w}}1BVC[9 43 sCEB33CZ(-C%IIOO9!gg<<# $ % $O ).C%IIOO4E $ C#Or   c                     j                  |d      }d| v r"d   j                  d        ||d|       S dd<   j                  j                  d	|       | S )
NTr   r_   rd   znegation-startr   Frg   zSelector: Unexpected negation.)r   r{   r   rn   )	r   r6   rm   r   r?   r{   negation_argr   r!   s	        r   	_negationz,Selector._setSelectorText.<locals>._negation  sq    &&u&=)	N))*53%5UC''(-C%IIOO8 $ G#Or   c                 L    dd<   j                   j                  d|       | S )zinvalidates selectorFrg   zSelector: Unexpected ATKEYWORD.r   )r   rn   )r   r6   rm   r   r   r!   s       r   
_atkeywordz-Selector._setSelectorText.<locals>._atkeyword  s-    $)L!		5U   Dr   CHARr   STRINGNUMBER	DIMENSIONPREFIXMATCHSUFFIXMATCHSUBSTRINGMATCH	DASHMATCHINCLUDES)r   r   	ATKEYWORD)r   r6   r   productionsrg   rd   ro   Fz,Selector: Invalid or incomplete selector: %sz#Selector: No element name found: %sz(Selector: Cannot end with combinator: %sstripre   r-   rk   r   ) _checkReadonly_splitNamespacesOffr"   rH   rI   rE   rJ   
_tokenize2r   rn   r   r   r9   r   r{   _prodsrX   finditer_tempSeq_parselen	_valuestrhasattrr8   r   r   r   r:   r   _setSeqr(   )+r!   r   r   tokenstr|   r?   linrt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   newseqrg   r   r   r{   r   r   r   r   r   r   r   r   r   rE   r   r   r   r   r   s+   `                         @@@@@@@@@@@@@@@@@r   _setSelectorTextzSelector._setSelectorText   s   " 	 $(#;#;L#I j	 //@@KKJ OOL1	IIOO>? F 6%%&"S#s#:&##F2J/36"%tS#!6F2JG^ ,,VBZ8C?")3s7C!=F2JG^((4??D ,,VBZ8AA#F''r
3>>tD,*"#T%5%5fRj%A#%EsC!PF2JJ&3&=Vt//r
;;",cCifRjm!LF2JJ&6 ,,VBZ8CCCH''r
3>>tD,*"#T%5%5fRj%A#%EsC!PF2JCZF

6":.2DD((4==cB"-t/?/?r
/KC/O"%s",F2JCZMM;S#">?CZF

6":.4;;3D3Dk2RR ,,VBZ8==cBbH"4"&"2"26":">s"BC"NF2JCZMM#5sC"EF MM!$m6%p VI  "d""".!%	C AL9^(A$(L%)LMLK(G"H*MHFDO(4/J&J $ $ $ $$$ $&&$ &$P$ $$ $ $ $.$$ $$L$ $"$ $"S$ S$j$ $  ]]_F#';;1i6VU 6$f6#U6 &w6 %f	6
 01B6 (6 ,W6 .w6 )*6 &{6 )+6 +N6 +N6  .~!6" ).#6$ (%6( #%(0*4-6 $/ $7 J4 $9L(9J 3y>"Q&f"
		 N"&..">!? @ >)"
		 E"&..">!? @ 33"
		 J"&..">!? @ '&*"2"2G<":##))+r12J $.! #I$)#m*<$=!V$$($;$;$=! e  		s   *W 	WWz:(DOM) The parsable textual representation of the selector.c                     | j                   S r   )r   r/   s    r   rN   zSelector.<lambda>  s    (9(9 r   a  Specificity of this selector (READONLY).
                Tuple of (a, b, c, d) where:

                a
                    presence of style in document, always 0 if not used on a
                    document
                b
                    number of ID selectors
                c
                    number of .class selectors
                d
                    number of Element (type) selectorsc                 >    t        t        | j                              S r   )boolr   r6   r/   s    r   rN   zSelector.<lambda>)  s    tCM': r   zUse property parent insteadc                     | j                   S r   )r"   r/   s    r   _getParentListzSelector._getParentList+  s    {{r   z'DEPRECATED, see property parent instead)NNF)r)   
__module____qualname____doc__r   r+   r0   r@   r(   r'   propertyrB   re   r"   rT   r   r   r-   rg   r	   r   
parentList__classcell__)r$   s   @r   r   r      s    Sj 26".T7% ? 89K 1GIG /*+F
4R	>h ,.>!01L 9 :;K :;J-. / .GIJr   )r   
__future__r   r   r   r   __all____docformat____version__css_parser.helperr	   css_parser.utilr
   rQ   xml.domrx   r   utilBase2r    r   r   <module>r     sO    S R," ( -  
WIz$$ WIr   