
    A6i                         d Z ddlZddlZ	 ddlmZ ddlm	Z	 ddl
mZ ddlmc mZ ddlmc mZ ddlmZ  G d d	e      Zy# e$ r	 ddlmZ Y =w xY w)
z
.. module:: lesscpy.plib.call
    :synopsis: Call parse node

    Copyright (c)
    See LICENSE for details.
.. moduleauthor:: Johann T. Mariusson <jtm@robot.is>
    N)quote)string_types   )Node
lessColorsc                   j    e 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y)CallzCall node. Node represents a function call.
    All builtin none-color functions are in this node.
    This node attempts calls on built-ins and lets non-builtins
    through.
    increment(3px)     --> 4px
    unknown(3px)       -->  unknown(3px)
    c                 8   dj                  | j                  d         }| j                  | j                  dd |      }|dk(  rd}n|dv rd}t        j                         }|D cg c]  }t	        |t
              r|d	vr| }}t        | |      r	  t        | |      | S t        ||      r	  t        ||      | }	 |d
z   S |dj                  |D cg c]  }| c}      z   S c c}w # t        $ r Y Tw xY w# t        $ r |cY S w xY w# t        $ r Y Rw xY wc c}w )zParse Node within scope.
        the functions ~( and e( map to self.escape
        and %( maps to self.sformat
        args:
            scope (Scope): Current scope
         r   r   Nz%(sformat)~eescapez(), )
jointokensprocessColor
isinstancer   hasattrgetattr
ValueError	TypeError)	selfscopenameparsedcolortargsresultps	            T/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/lesscpy/plib/call.pyparsez
Call.parse    s?    wwt{{1~&dkk!"ou54<DZD
a.!5. 
 
 4*wtT*D11 5$--t4"!C<'
 bgg&1Qq1222'
   ! "!M" 1sN   $C#C( ,D <C7 	D
(	C43C47DD DD 	DDc                 J    t        j                  |j                  d            S )zoLess Escape.
        args:
            string (str): string to escape
        returns:
            str
        r   )utilitydestringstripr   stringr!   s      r$   r   zCall.escapeD   s     S 122    c                 ^   |}g }t        j                  d|      }|r|st        d      d}|D ]L  }	 t        t        j
                  dj                  |t              ||         }|j                  |       |dz  }N |j                  dd      }|j                  dd      }|t        |      z  S )	z String format.
        args:
            string (str): string to format
            args (list): format options
        returns:
            str
        z	(%[asdA])zNot enough arguments...r   )%A%sr   r.   r/   z%d)refindallSyntaxErrorurlquoter'   r(   getstrappendreplacetuple)	r   r+   r!   formatitemsminvs	            r$   r   zCall.sformatM   s     JJ{F+T788 	A&& c!Sk$q'#A LLOFA	 d+d+e$$r,   c                 T    	 t        j                  |      \  }}y# t        $ r Y yw xY w)zbIs number
        args:
            string (str): match
        returns:
            bool
        FT)r'   analyze_numberr2   )r   r+   r!   r=   us        r$   isnumberzCall.isnumberf   s4    	))&1DAq   		s    	''c                     |t         v S )zaIs color
        args:
            string (str): match
        returns:
            bool
        r   r*   s      r$   iscolorzCall.iscolors   s     ##r,   c                     t        j                  |      }t        j                  dt        j                        }|j                  |      S )z_Is url
        args:
            string (str): match
        returns:
            bool
        z^(?:http|ftp)s?://(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::\d+)?(?:/?|[/?]\S+)$)r'   r(   r0   compile
IGNORECASEmatch)r   r+   r!   argregexs        r$   isurlz
Call.isurl|   sA     v&

 MM
 {{3r,   c                 N    t        j                  d      }|j                  |      S )zbIs string
        args:
            string (str): match
        returns:
            bool
        z\'[^\']*\'|"[^"]*")r0   rF   rH   )r   r+   r!   rJ   s       r$   isstringzCall.isstring   s"     

01{{6""r,   c                 
    |dv S )zhIs less keyword
        args:
            string (str): match
        returns:
            bool
        )whenandnot r*   s      r$   	iskeywordzCall.iskeyword   s     ///r,   c                 d    t        j                  |      \  }}t        j                  |dz   |      S )zk Increment function
        args:
            value (str): target
        returns:
            str
        r   r'   r@   	with_unitr   valuer!   r=   rA   s        r$   	incrementzCall.increment   /     %%e,1  Q**r,   c                 d    t        j                  |      \  }}t        j                  |dz
  |      S )zk Decrement function
        args:
            value (str): target
        returns:
            str
        r   rU   rW   s        r$   	decrementzCall.decrement   rZ   r,   c                 n    t        |      dk  ryt        |D cg c]  }t        |       c}      S c c}w )ze Add integers
        args:
            args (list): target
        returns:
            str
        r   r   )lensumint)r   r!   r>   s      r$   addzCall.add   s/     t9>D)qCF)**)s   2c           	          t        j                  |      \  }}t        j                  t        t        j                  t        |                  |      S )ze Round number
        args:
            value (str): target
        returns:
            str
        )r'   r@   rV   r`   away_from_zero_roundfloatrW   s        r$   roundz
Call.round   sD     %%e,1  ,,U1X67< 	<r,   c                     t        j                  |      \  }}t        j                  t        t	        j
                  |            |      S )zd Ceil number
        args:
            value (str): target
        returns:
            str
        )r'   r@   rV   r`   mathceilrW   s        r$   rh   z	Call.ceil   s8     %%e,1  TYYq\!2A66r,   c                     t        j                  |      \  }}t        j                  t        t	        j
                  |            |      S )ze Floor number
        args:
            value (str): target
        returns:
            str
        )r'   r@   rV   r`   rg   floorrW   s        r$   rj   z
Call.floor   s8     %%e,1  TZZ]!3Q77r,   c                 ~    t        j                  |      \  }}t        |dz        }d}t        j                  ||      S )zp Return percentage value
        args:
            value (str): target
        returns:
            str
        g      Y@%)r'   r@   r`   rV   rW   s        r$   
percentagezCall.percentage   s=     %%e,1E	N  A&&r,   N)__name__
__module____qualname____doc__r%   r   r   rB   rD   rK   rM   rS   rY   r\   ra   re   rh   rj   rm   rR   r,   r$   r
   r
      sS    "3H3%2$ *#0++	+	<78
'r,   r
   )rq   r0   rg   urllib.parser   r3   ImportErrorurllibsixr   noder   lesscpy.lessc.utilitylesscr'   lesscpy.lessc.colorr   r   lesscpy.lib.colorsr   r
   rR   r,   r$   <module>r{      sS    
 ).   ' ' # # )U'4 U'  )()s   A AA