
    A6i                     B    d 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.block
    :synopsis: Block parse node.

    Copyright (c)
    See LICENSE for details.
.. moduleauthor:: Johann T. Mariusson <jtm@robot.is>
   )Node    )utility)
Identifierc                   0    e Zd ZdZd ZddZd Zd Zd Zy)	Blockz Block node. Represents one parse-block.
    Can contain property nodes or other block nodes.
    identifier {
        propertys
        inner blocks
    }
    c           
      :   | j                   s|j                          | j                  \  | _        }| j                  |_        |j
                  j                  | j                         | j                  j                   s| j                  j                  |       |sg }t        t        j                  |D cg c]  }|s|j                  |       c}            }g | _         g | _        g }g }|D ]  }t        |t              s| j                   j                  |       /|j                  d   .|j                  j                  d   dk(  r|j                  |       l| j                  j                  |        |D ]M  }| j                  j                  d   dk(  r| j                  j                  dd d   d   d   }|j                  j                  dd d   }dd|d|gg}	t        t        |	      |j                   |j                  z   g      j                  |      }||z  }|D ]  }
|j                  |
        t        | j                  d   |j                   |j                  z   g      j                  |      }|D ]I  }t        |j                  d   |gg      j                  |      }||z  }|D ]  }
|j                  |
        K P |j
                  j!                          |j!                          | j                  s| j                   r| g|z   S |S | gS c c}w )zParse block node.
        args:
            scope (Scope): Current scope
        raises:
            SyntaxError
        returns:
            self, or a list of new blocks if media queries need to be rotated
        r   Nr   z@media    )r   andr   )parsedpushtokensnamecurrentrealappendparselistr   flatteninner
isinstancer   r   	add_blockpop)selfscoper   pinner_media_queriessibling_media_queriesmbpart_apart_bcondblockcbscbnew_mbs                 U/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/lesscpy/plib/block.pyr   zBlock.parse   s    {{JJL#{{DIu IIEMJJdii(99##		&%)MQ1!''%.)MNOEDKDJ> #%$&! )!!U+KK&&q) XXa[,q1AX1M'..q1JJ%%a() * 3 99##A&(2!YY--ab1!4Q7:FWW^^AB/2F #"$5"(D 
4 0"))bhh2FGHNNuUB)R/)!# /./  QRXX1E FGMMeTC! 3!&		!rd';!<!B!B5!I-7-%+ 3E!OOE23	3)34 JJNNIIKzzT[[v 555,,6M[ *Ns   5L=Lc                 j    	 | j                   d   j                  |      S # t        t        f$ r Y yw xY w)zkRaw block name
        args:
            clean (bool): clean name
        returns:
            str
        r   N)r   rawAttributeError	TypeError)r   cleans     r(   r*   z	Block.rawy   s7    	;;q>%%e,,	* 		s     22c                    d}g }| j                   j                  |      }| j                  r}t        d | j                  D              ra|j	                  |dj                  | j                  D cg c]  }|s|j                  |       c}      d       |j                  ||z         t        | d      r!| j                   j                  rt        | j                        dkD  rdj                  | j                  D cg c]  }|j                  |       c}      }|j                  |d   |d   |d   z         j                  |d         }|d   s|j                         }|j	                  ||d   |z   d       |j                  ||z         nG|j                  dj                  | j                  D cg c]  }|j                  |       c}             dj                  |      S c c}w c c}w c c}w )	zxFormat block (CSS)
        args:
            fills (dict): Fill elements
        returns:
            str (CSS)
        z.%(identifier)s%(ws)s{%(nl)s%(proplist)s}%(eb)sc              3   N   K   | ]  }t        t        |            d k7  r|  yw)z(<class 'lesscpy.plib.variable.Variable'>N)strtype).0r   s     r(   	<genexpr>zBlock.fmt.<locals>.<genexpr>   s+      OtAw<#MM Os   #% )
identifierproplistr   r   nltab)r   fmtr   anyupdatejoinr   hasattrsubparselenr   replacerstripstrip)r   fillsfoutr   r   r   s          r(   r9   z	Block.fmt   s    =yy}}U#;;3 O;;O O LLt{{@!au@A	  JJq5y!4!yy!!c$**o&9tzz B!u BCeDk&+DkE%L&@BBH&*/,C8  T{!KKME"& %eu 4  

1u9%

277$**#EQAEE%L#EFGwws|% A
 !C $Fs   -G(5G(=G-4G2c                     | j                   \  }}|r!|D cg c]  }|r|j                         n| }}|r|j                         }t        ||gd      S c c}w )zB Return a full copy of self
        returns: Block object
        r   )r   copyr   )r   r   r   us       r(   rG   z
Block.copy   sX     kke389aQVVX)9E999;DdE]A&& :s   Ac                     | j                   d   r]| j                   d   D cg c]  }|r|j                         n| }}|D cg c]  }|s|	 }}t        j                  ||t               |S yc c}w c c}w )zCopy block contents (properties, inner blocks).
        Renames inner block from current scope.
        Used for mixins.
        args:
            scope (Scope): Current scope
        returns:
            list (block contents)
        r   N)r   rG   r   renamer   )r   r   rH   r   r   rE   s         r(   
copy_innerzBlock.copy_inner   sm     ;;q>48KKNCq!affh*CFC$*1*C*NN3u-J	 D*s   A.A3
A3N)F)	__name__
__module____qualname____doc__r   r*   r9   rG   rK        r(   r   r      s#    _B
#J	'rQ   r   N)rO   noder   lesscpy.lesscr   lesscpy.plib.identifierr   r   rP   rQ   r(   <module>rU      s#     ! .tD trQ   