
    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.expression
    :synopsis: Expression node.

    Copyright (c)
    See LICENSE for details.
.. moduleauthor:: Johann T. Mariusson <jtm@robot.is>
    N   )Node)utility)colorc                   (    e Zd ZdZd Zd Zd Zd Zy)
ExpressionzExpression node. Parses all expression except
    color expressions (handled in the color class)
    and unary negation (handled in the NegatedExpression class).
    c                    t        | j                        dk(  sJ | j                  | j                  |      }|D cg c]2  }t        |      j	                         rt        |t              r|d   n|4 c}\  }}}	 t        j                  |d      \  }}t        j                  |d      \  }	}
|du s|	du r/dj                  t        |      t        |      t        |      g      S |dk(  s|
dk(  r&t        j                         j                  |||f      S |dk(  r5|dk(  r0dj                  t        |      t        |      t        |      dg      S | j                  ||	|      }t        |t              r|S | j                  |||
      S c c}w # t        $ r2 dj                  t        |      t        |      t        |      g      cY S w xY w)	z Parse Node
        args:
            scope (Scope): Scope object
        raises:
            SyntaxError
        returns:
            str
           r   zIllegal element in expression Fr   / )lentokensprocessstrstrip
isinstancetupler   analyze_numberSyntaxErrorjoinr   Coloroperatebool
with_units)selfscopeexpreAOBauabubouts               Z/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/lesscpy/plib/expression.pyparsezExpression.parse   s    DKK A%&%||DKK/9=
451v||~ q%(AaDa/
1a	6**1.MNEAr**1.MNEAr J!u*88SVSVSV455=B'M;;=((!Q336a3h77CFCFCFC899ll1a#c4 JsB++'
  	688SVSVSV455	6s   7F:2F
 
8GGc                     |st        |      S |s|rE|r#|r!||k(  rt        |      |z   S t        |      |z   S |rt        |      |z   S |rt        |      |z   S t        |      S )zReturn value with unit.
        args:
            val (mixed): result
            ua (str): 1st unit
            ub (str): 2nd unit
        raises:
            SyntaxError
        returns:
            str
        )r   repr)r   valr$   r&   s       r(   r   zExpression.with_units8   sk     s8Ob8s8b=( s8b=(3x"}$3x"}$Cy    c           
         t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  d	j                  |      }|t        d|z         |||      }|dv rt        |      |k(  rt        |      }|S )zPerform operation
        args:
            vala (mixed): 1st value
            valb (mixed): 2nd value
            oper (str): operation
        returns:
            mixed
        )	+-*r   =><z>=z=<zUnknown operation %sz+-*/)operatoraddsubmultruediveqgtltgelegetr   int)r   valavalboper	operationrets         r(   r   zExpression.operateU   s     !!++++

 #d) 	 4t;<<d#6>c#h#oc(C
r-   c                 @    t        j                  | j                        S )zQReturn str representation of expression
        returns:
            str
        )r   flattenr   )r   s    r(   
expressionzExpression.expressionp   s    
 t{{++r-   N)__name__
__module____qualname____doc__r)   r   r   rH    r-   r(   r   r      s    
,@:6,r-   r   )rL   r5   noder   lesscpy.lesscr   r   r   rM   r-   r(   <module>rP      s&      ! c, c,r-   