
    A6i:                     J    d Z ddlZddlmZ ddlmZ ddlmZ  G d de      Zy)	z
.. module:: lesscpy.plib.identifier
    :synopsis: Identifier node.

    Copyright (c)
    See LICENSE for details.
.. moduleauthor:: Johann T. Mariusson <jtm@robot.is>
    N   )Node)utility)reservedc                   0    e Zd ZdZd Zd ZddZd Zd Zy)	
Identifierz2Identifier node. Represents block identifier.
    c                    g }g }d| _         | j                  rt        | j                  d      rt        t	        j
                  | j                  j                  |      j                  d      D cg c]  }|j                         dgz    c}            | _        | j                  j                          | j                  rt        d | j                  D              rtg }| j                  D ]@  }t        |d      r!|j                  |j                  |             0|j                  |       B t        t	        j
                  |            | _        | j                  rK| j                  d   | j                   v r0t        t	        j
                  | j                              }d| _        nd| _        t	        j
                  | j                        D ]v  }|dk(  r|j                  d	       |d
v r/|r|d   dk(  r|j                          |j                  d|z         M|dk(  r|j                  |       g }f|j                  |       x |j                  |       |r| j                  ||      n|}d }	|D 
cg c]'  }
t        t	        j
                   |	|
|                  ) }}
|D 
cg c]5  }
t	        j                  |
      D cg c]  \  }}|dk7  s|rd|vr| c}}7 c}}}
| _        | S c c}w c c}
w c c}}w c c}}}
w )zParse node. Block identifiers are stored as
        strings with spaces replaced with ?
        args:
            scope (Scope): Current scope
        raises:
            SyntaxError
        returns:
            self
        )@mediaz
@keyframesz@-moz-keyframesz@-webkit-keyframesz@-ms-keyframesparse,c              3   4   K   | ]  }t        |d         yw)r   N)hasattr).0ts     Z/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/lesscpy/plib/identifier.py	<genexpr>z#Identifier.parse.<locals>.<genexpr>)   s     Hqwq'2Hs   r   TF*z* z>+~ z?%s?c                     | D cg c]<  }t        j                  |      r#|t        j                  vr|j	                  |      n|> c}S c c}w )N)r   is_variabler   tokensswap)r   scoper   s      r   replace_variablesz+Identifier.parse.<locals>.replace_variablesJ   sR        ''*13G 

1NOP  s   AA	?)_subpr   r   listr   flattenr   splitpopanyappendsubparserootpairwiseparsed)selfr   namesnameid
tmp_tokensr   nr'   r   partijs                r   r   zIdentifier.parse   s    >
;;74;;8"kk//6<<SA! HHJ#&! DK
 KKOO;;3HDKKHHJ[[ )1g&%%aggen5%%a(	)
 wz:;DK;;4;;q>TZZ745D DM!DM__T[[1 #8KK%%ZRC
KK
+#XLL&DKKN# 	T,15%(u	 
 !24!?@A
 
    "**40
!QCxA#Q, 
  m!Z


 s$   .K-3,K2'K=K7K=7K=c                    |j                   }|r|d   }|j                  rg }|D ]  }|j                  d      }|rg }|j                  D ](  }|s|d   | j                  vs|j	                  |       * t        t        j                  ||            }	|	D ]  }
g }|D ]z  }|dk(  rb|
j                  d      }|r%|d   j                  d      r|j                  d       |d   dk(  r|j                          |j                  |       j|j	                  |       | |j	                  |        
|j                  D ]  }|rz|d   | j                  vrig }|d   dk(  r|j                  |       n;|j                  |       |d   dk7  r|j	                  d       |j                  |       |j	                  |       |j	                  |         |S |S )zFind root of identifier, from scope
        args:
            scope (Scope): current scope
            names (list): identifier name list (, separated identifiers)
        returns:
            list
        r   &r   ]r   r
   )	scopenamer'   countr   r#   r   r   permutations_with_replacementr!   endswithextend)r(   r   r)   parentparsed_namesr*   ampersand_countfiltered_partsr.   permutationspermutationr'   	name_partparent_parts                 r   r%   zIdentifier.root\   s    BZF}}!! %:D&*jjoO&)+$*MM <D#Qtzz(A . 5 5d ;< (,#AA .A(B ,8 8K%'F-1 	=	#,#32=//!2DK'-&*2E2Ec2J(.c(:'22#'=(3(9$*MM+$>$*MM)$<	= )//78 %+MM :D#Qtzz(A)+#'7h#6$*MM$$7$*MM$$7'+Bx3(.c(:$*MM$$7 , 3 3F ; , 3 3D 9:3%:L $#    c                     |r2dj                  d | j                  D              j                  dd      S dj                  d | j                  D              j                         j                  d      S )zlRaw identifier.
        args:
            clean (bool): clean name
        returns:
            str
         c              3   >   K   | ]  }d j                  |        ywrC   Njoinr   ps     r   r   z!Identifier.raw.<locals>.<genexpr>   s     ;!2771:;   r   r   %c              3   >   K   | ]  }d j                  |        yw)rK   NrF   rH   s     r   r   z!Identifier.raw.<locals>.<genexpr>   s     99rJ   )rG   r'   replacestrip)r(   cleans     r   rawzIdentifier.raw   sZ     77;t{{;;CCCMMxx9T[[99??AGGLLrA   c                     t        | j                  t              r| j                  D cg c]  }| c}n| j                  }t        |d      S c c}w )zL Return copy of self
        Returns:
            Identifier object
        r   )
isinstancer   r   r   )r(   r   r   s      r   copyzIdentifier.copy   sD      T2 #kk*1*8< 	&!$$ +s   	Ac                     dj                  d | j                  D              }t        j                  dd|      |z  }|j	                  d|d         j	                  dd      S )	zvFormat identifier
        args:
            fills (dict): replacements
        returns:
            str (CSS)
        z,$$c              3   Z   K   | ]#  }d j                  |      j                          % ywrE   )rG   rN   rH   s     r   r   z!Identifier.fmt.<locals>.<genexpr>   s!     B"''!***,Bs   )+z\?(.)\?z%(ws)s\1%(ws)sz$$nlz  r   )rG   r'   resubrM   )r(   fillsr*   s      r   fmtzIdentifier.fmt   sV     zzBdkkBBvvi!2D9EA||D%+.66tSAArA   N)F)	__name__
__module____qualname____doc__r   r%   rP   rS   rZ    rA   r   r   r      s%    FP4l	M%	BrA   r   )	r^   rW   noder   lesscpy.lesscr   lesscpy.libr   r   r_   rA   r   <module>rc      s(    
  !  _B _BrA   