
    A6i3                     `    d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	  G d d      Z
y)	z
    Lexer for LESSCSS.

    http://www.dabeaz.com/ply/ply.html
    http://www.w3.org/TR/CSS21/grammar.html#scanner
    http://lesscss.org/#docs

    Copyright (c)
    See LICENSE for details.
    <jtm@robot.is>
    N)string_types)dom)css)reservedc                   >   e Zd ZdZdZg dZe e eej
                  j                                     z  Zh dZ
e
j                  ej
                  j                                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 e jB                  djE                  e#jH                              d        Z% e jB                  djE                  e#jL                              d        Z'd Z(d Z) e jB                  djE                  e#jH                              d        Z*d Z+d  Z,d! Z-d" Z.d# Z/d$ Z0d% Z1d& Z2d' Z3d( Z4d) Z5d* Z6d+ Z7d, Z8d- Z9d. Z:d/ Z;d0 Z<d1 Z=d2 Z>d3 Z?d4 Z@d5 ZAd6 ZBd7 ZCd8 ZDd9 ZEd: ZFd; ZGd< ZHd= ZId> ZJd? ZKd@ ZLyA)B	LessLexer))parn	inclusive)escapequotesr
   )escapeapostropher
   )istringquotesr
   )istringapostropher
   )	iselectorr
   )
mediaqueryr
   )importr
   z
<>=%!/*-+&))	css_identcss_dom	css_classcss_idcss_propertycss_vendor_propertycss_user_propertycss_comment
css_string	css_color
css_filter
css_numbercss_importantcss_vendor_hackcss_uricss_ms_filtercss_keyframe_selectorcss_media_typecss_media_featuret_andt_nott_onlyless_variableless_commentless_open_format	less_whenless_andless_nott_wst_popent_pcloset_semicolont_tildet_colont_commat_eopent_ecloset_isopen	t_iscloset_bopent_bclose>   r%   r&   r   r'   r   r   r   r   r   r   r   r(   r#   r   r   &c                     | j                  t        j                  t        j                  z         d | _        d | _        d| _        y )N)reflagsT)buildreUNICODE
IGNORECASElastnext_pretok)selfs    V/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/lesscpy/lessc/lexer.py__init__zLessLexer.__init__3   s2    

2::5
6	
    c                     |S )z=\[[^\]]*\]|(not|lang|nth-[a-z\-]+)\(.+\)|and[ 	]\([^><=\{]+\) rE   ts     rF   t_css_filterzLessLexer.t_css_filter9   s	     rH   c                     |S )z(?:progid:|DX\.)[^;\(]*rJ   rK   s     rF   t_css_ms_filterzLessLexer.t_css_ms_filter?       rH   c                 (    d|j                   _        |S )\{Flexerin_property_declrK   s     rF   	t_t_bopenzLessLexer.t_t_bopenC       #( rH   c                     |S )z\}rJ   rK   s     rF   
t_t_bclosezLessLexer.t_t_bcloseH   rP   rH   c                     |S :rJ   rK   s     rF   	t_t_colonzLessLexer.t_t_colonL   rP   rH   c                 (    d|j                   _        |S ),FrS   rK   s     rF   	t_t_commazLessLexer.t_t_commaP   rW   rH   c                     |S )zK-?(\d*\.\d+|\d+)(s|%|in|ex|[ecm]m|p[txc]|deg|g?rad|ms?|k?hz|dpi|dpcm|dppx)?rJ   rK   s     rF   t_css_numberzLessLexer.t_css_numberU   rP   rH   c                 D   |j                   j                         }|d   }|dk(  r>d|_        |j                  j                  dk7  rD|j                  j                  d       n'|dk(  r-d|_        t        |      dv r	 t        |dd	 d
       d|_        n|dk(  rd|_        n|dk(  rd|_        n|dk(  rd|_        n|dv rd|_        n|t        j                  v rd|_        d|j                  _        n|t        j                  v s |j                         t        j                  v r|j                  j                  sd|_        nG|j                  d      rd|_        d|j                  _        n|dk(  rd|_        d|j                  _        ||_         |S # t        $ r Y w xY w)u{   ((\-|\.|\#|\-\-)?([_a-z]|[-ÿ]|\\[0-9a-f]{1,6}|\\[^\s
0-9a-f])([_a-z0-9\-]|[-ÿ]|\\[0-9a-f]{1,6}|\\[^\s
0-9a-f])*)|\.r   .r   r   #r   )         N   r   whenr+   andr,   notr-   )fromtor"   r   Tr   z--r   -r   )valuestriptyperT   lexstate
push_statelenint
ValueErrorr   
propertiesrU   r   elementslower
startswith)rE   rL   vcs       rF   t_css_identzLessLexer.t_css_identY   sk    GGMMOaD8
 !AFww;."";/#XAF1v!"rN(AF &[ AF%ZAF%ZAF. ,AF#.. #AF'+AGG$3<<cll*AGG4L4L AF\\$(AF'+AGG$#X*AF'+AGG$3 " s   >F 	FFc                     |S )z@\{[^@\}]+\}rJ   rK   s     rF   t_iselector_less_variablez#LessLexer.t_iselector_less_variable   rP   rH   c                 :    |j                   j                          |S )"|\'rT   	pop_staterK   s     rF   t_iselector_t_eclosezLessLexer.t_iselector_t_eclose   s     	
rH   c                     |S )z<\[[^\]]*\]|(not|lang|nth-[a-z\-]+)\(.+\)|and[ 	]\([^><\{]+\)rJ   rK   s     rF   t_iselector_css_filterz LessLexer.t_iselector_css_filter   s	     rH   c                     |S )z[_a-z0-9\-]+rJ   rK   s     rF   t_iselector_css_classzLessLexer.t_iselector_css_class   s	     rH   c                 H    |j                   j                          d|_        |S z
[ \t\f\v]+ )rT   r   rp   rK   s     rF   t_iselector_t_wszLessLexer.t_iselector_t_ws   s     
 	
rH   c                 :    |j                   j                          |S rR   r   rK   s     rF   t_iselector_t_bopenzLessLexer.t_iselector_t_bopen       	rH   c                 :    |j                   j                          |S r[   r   rK   s     rF   t_iselector_t_colonzLessLexer.t_iselector_t_colon   r   rH   c                     |S )rl   rJ   rK   s     rF   t_mediaquery_t_notzLessLexer.t_mediaquery_t_not   rP   rH   c                     |S )onlyrJ   rK   s     rF   t_mediaquery_t_onlyzLessLexer.t_mediaquery_t_only   rP   rH   c                     |S )rk   rJ   rK   s     rF   t_mediaquery_t_andzLessLexer.t_mediaquery_t_and   rP   rH   c                     |S )\(rJ   rK   s     rF   t_mediaquery_t_popenzLessLexer.t_mediaquery_t_popen   s	     rH   |c                     |S NrJ   rK   s     rF   t_mediaquery_css_media_typez%LessLexer.t_mediaquery_css_media_type   rP   rH   c                     |S r   rJ   rK   s     rF   t_mediaquery_css_media_featurez(LessLexer.t_mediaquery_css_media_feature   rP   rH   c                 :    |j                   j                          |S r   r   rK   s     rF   t_mediaquery_t_bopenzLessLexer.t_mediaquery_t_bopen   r   rH   c                 n    |j                   j                          |j                   j                          |S ;r   rK   s     rF   t_mediaquery_t_semicolonz"LessLexer.t_mediaquery_t_semicolon   s+    
 	
 	
rH   c                 <    |j                   j                  d       |S )Nr   rT   rt   rK   s     rF   t_import_css_media_typez!LessLexer.t_import_css_media_type   s    
 	
<(rH   c                 :    |j                   j                          |S r   r   rK   s     rF   t_import_t_semicolonzLessLexer.t_import_t_semicolon   r   rH   c                 :   |j                   j                         }|t        j                  v rnt        j                  |   |_        |j                  dk(  r|j
                  j                  d       |S |j                  dk(  r|j
                  j                  d       |S )z@@?[\w-]+|@\{[^@\}]+\}	css_mediar   
css_importr   )rp   rz   r   tokensrr   rT   rt   )rE   rL   r|   s      rF   t_less_variablezLessLexer.t_less_variable   sw    GGMMO__Q'AFvv$""<0  <'""8,rH   c                     |S )z \#[0-9]([0-9a-f]{5}|[0-9a-f]{2})rJ   rK   s     rF   t_css_colorzLessLexer.t_css_color  rP   rH   c                     |S )zedata:[^\)]+|(([a-z]+://)?((/?[\.a-z:]+[\w\.:]*[\/][\/]?)+|([a-z][\w\.\-]+(\.[a-z0-9]+))(\#[a-z]+)?))+rJ   rK   s     rF   t_parn_css_urizLessLexer.t_parn_css_uri  	     rH   c                     |S )uh   (([_a-z]|[-ÿ]|\\[0-9a-f]{1,6}|\\[^
\s0-9a-f])([_a-z0-9\-]|[-ÿ]|\\[0-9a-f]{1,6}|\\[^
\s0-9a-f])*)rJ   rK   s     rF   t_parn_css_identzLessLexer.t_parn_css_ident  r   rH   c                 t    |j                   xj                  |j                  j                  d      z  c_        y)z[\n\r]+
NrT   linenorp   countrK   s     rF   	t_newlinezLessLexer.t_newline  s!    	!''----rH   c                 t    |j                   xj                  |j                  j                  d      z  c_        y)z(/\*(.|\n|\r)*?\*/)r   Nr   rK   s     rF   t_css_commentzLessLexer.t_css_comment  s$    	!''----rH   c                      y)z//.*NrJ   rK   s     rF   t_less_commentzLessLexer.t_less_comment#  s    rH   c                     d|_         |S )z!\s*importantz
!importantrp   rK   s     rF   t_css_importantzLessLexer.t_css_important'  s    rH   c                     d|_         |S r   r   rK   s     rF   t_t_wszLessLexer.t_t_ws,  s    rH   c                 <    |j                   j                  d       |S )r   r	   r   rK   s     rF   	t_t_popenzLessLexer.t_t_popen1      	6"rH   c                 <    |j                   j                  d       |S )z%\(r	   r   rK   s     rF   t_less_open_formatzLessLexer.t_less_open_format6  r   rH   c                 :    |j                   j                          |S z\)r   rK   s     rF   t_parn_t_pclosezLessLexer.t_parn_t_pclose;  r   rH   c                     |S r   rJ   rK   s     rF   
t_t_pclosezLessLexer.t_t_pclose@  rP   rH   c                 (    d|j                   _        |S )r   FrS   rK   s     rF   t_t_semicolonzLessLexer.t_t_semicolonD  rW   rH   c                     |j                   d   dk(  r|j                  j                  d       |S |j                   d   dk(  r|j                  j                  d       |S )z~"|~\'rh   "r   'r   rp   rT   rt   rK   s     rF   	t_t_eopenzLessLexer.t_t_eopenI  sU    771:GG~.  WWQZ4GG12rH   c                     |S )~rJ   rK   s     rF   	t_t_tildezLessLexer.t_t_tildeQ  rP   rH   c                     |S z@\{[^@"\}]+\}rJ   rK   s     rF   t_escapequotes_less_variablez&LessLexer.t_escapequotes_less_variableU  rP   rH   c                     |S z@\{[^@\'\}]+\}rJ   rK   s     rF    t_escapeapostrophe_less_variablez*LessLexer.t_escapeapostrophe_less_variableY  rP   rH   c                 :    |j                   j                          |S r   r   rK   s     rF   t_escapequotes_t_eclosez!LessLexer.t_escapequotes_t_eclose]  r   rH   c                 :    |j                   j                          |S z\'r   rK   s     rF   t_escapeapostrophe_t_eclosez%LessLexer.t_escapeapostrophe_t_ecloseb  r   rH   c                 v    |j                   xj                  |j                  j                  d      z  c_        |S )z"[^"@]*"|\'[^\'@]*\'r   r   rK   s     rF   t_css_stringzLessLexer.t_css_stringg  &    	!''----rH   c                     |j                   d   dk(  r|j                  j                  d       |S |j                   d   dk(  r|j                  j                  d       |S )r   r   r   r   r   r   r   rK   s     rF   
t_t_isopenzLessLexer.t_t_isopenl  sU    771:GG/  WWQZ4GG23rH   c                     |S r   rJ   rK   s     rF   t_istringquotes_less_variablez'LessLexer.t_istringquotes_less_variablet  rP   rH   c                     |S r   rJ   rK   s     rF   !t_istringapostrophe_less_variablez+LessLexer.t_istringapostrophe_less_variablex  rP   rH   c                 v    |j                   xj                  |j                  j                  d      z  c_        |S )z[^\'@]+r   r   rK   s     rF   t_istringapostrophe_css_stringz(LessLexer.t_istringapostrophe_css_string|  r   rH   c                 v    |j                   xj                  |j                  j                  d      z  c_        |S )z[^"@]+r   r   rK   s     rF   t_istringquotes_css_stringz$LessLexer.t_istringquotes_css_string  r   rH   c                 :    |j                   j                          |S r   r   rK   s     rF   t_istringquotes_t_isclosez#LessLexer.t_istringquotes_t_isclose  r   rH   c                 :    |j                   j                          |S r   r   rK   s     rF   t_istringapostrophe_t_isclosez'LessLexer.t_istringapostrophe_t_isclose  r   rH   c                 d    t        d|j                  d   |j                  j                  fz        )NzIllegal character '%s' line %dr   )SyntaxErrorrp   rT   r   skiprK   s     rF   t_errorzLessLexer.t_error  s.    ,
AGGNN/KKM 	MrH   c                 ^    t        j                   dd| i|| _        d| j                  _        y )NmoduleFrJ   )lexrT   rU   )rE   kwargss     rF   r>   zLessLexer.build  s&    WW3D3F3
&+

#rH   c                     t        |      5 }| j                  j                  |j                                ddd       | S # 1 sw Y   | S xY w)z
        Lex file.
        N)openrT   inputread)rE   filenamefs      rF   filezLessLexer.file  s?     (^ 	'qJJQVVX&	'	's   *A  A
c                 
   t        |t              r>t        |      5 }| j                  j	                  |j                                ddd       y| j                  j	                  |j                                y# 1 sw Y   yxY w)zh
        Load lexer with content from `file` which can be a path or a file
        like object.
        N)
isinstancer   r  rT   r  r  )rE   r	  r  s      rF   r  zLessLexer.input  sc    
 dL)d +q

  *+ + JJTYY[)+ +s   *A99Bc                    | j                   r| j                   }d| _         |S 	 | j                  j                         }|s|S |j                  dk(  r;| j                  s.| j
                  r#| j
                  j                  | j                  vrid| _        |j                  dk(  r| j
                  r| j
                  j                  dvr| j
                  j                  dk7  rt        |d      r2|j                  j                  dk(  s~|j                  j                  d	k(  se|| _         t        j                         }d|_        d
|_        |j                  |_        |j                  |_        || _        d| j                  _        |S || _        	 |S )z
        Token function. Contains 2 hacks:
            1.  Injects ';' into blocks where the last property
                leaves out the ;
            2.  Strips out whitespace from nonsignificant locations
                to ease parsing.
        Nr.   Fr:   )r9   r:   r1   rT   r   r   r   )rC   rT   tokenrr   rD   rB   significant_wshasattrrs   r  LexTokenrp   r   lexposrU   )rE   rL   toks      rF   r  zLessLexer.token  sJ    ::

ADJH

  "AvvKKtyy~~T5H5HHDKvv#		diinnLc6chlhqhqhvhv  {H  iH$Q0agg6F6F.6X\]\c\c\l\l  qC  ]C
lln(	XX
XX
	.3

+
DIrH   N)M__name__
__module____qualname__statesliteralsr   listsetr   valuesr  updaterG   rM   rO   rV   rY   r]   r`   rb   r~   r   r   r   r   r   r   r   r   r   r   r   r  TOKENjoinr   media_typesr   media_featuresr   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   r   r   r   r   r   r   r   r>   r	  r  r  rJ   rH   rF   r   r      s   	F H
F d3x--/011F%N (//0023

5n


 SYYsxx() * SYYsxx**+, -
	 SYYsxx() *
	.












,
	*"rH   r   )__doc__r?   ply.lexr  sixr   lesscpy.libr   r   r   r   rJ   rH   rF   <module>r$     s*   
 
      | |rH   