U
    7h                     @   s  d Z G dd dZdd Zdd Zeddd	 ed
dd	 eddd	 eddd	 eddd	 eddd	 eddd	 eddd	 eddd	 eddd	 eddd	 eddd	 eddd	 dZe D ]\ZZee_qG dd deZ	G dd deZ
e
 Z
G dd  d Zd!S )"z-
Parser and utilities for the smart 'if' tag
c                   @   s@   e Zd ZdZdZdZd ZZdd Zdd Z	dd Z
d	d
 ZdS )	TokenBasezi
    Base class for operators and literals, mainly for debugging and for throwing
    syntax errors.
    Nc                 C   s   | d| j d S )Nz.Not expecting '%s' in this position in if tag.error_classidselfparser r   Q/var/www/formularioweb/env/lib/python3.8/site-packages/django/template/smartif.pynud   s    zTokenBase.nudc                 C   s   | d| j d S )Nz/Not expecting '%s' as infix operator in if tag.r   r   leftr   r   r   r	   led   s    zTokenBase.ledc                 C   s   | j S )zH
        Return what to display in error messages for this node
        )r   r   r   r   r	   display!   s    zTokenBase.displayc                 C   s,   dd | j | j| jfD }dd| d S )Nc                 S   s   g | ]}|d k	rt |qS N)str).0xr   r   r	   
<listcomp>(   s      z&TokenBase.__repr__.<locals>.<listcomp>( ))r   firstsecondjoin)r   outr   r   r	   __repr__'   s    zTokenBase.__repr__)__name__
__module____qualname____doc__r   valuer   r   r
   r   r   r   r   r   r   r	   r      s   r   c                    s   G  fdddt }|S )ze
    Create an infix operator, given a binding power and a function that
    evaluates the node.
    c                       s(   e Zd Z Z fddZfddZdS )zinfix.<locals>.Operatorc                    s   || _ | | _| S r   )r   
expressionr   r   bpr   r	   r   5   s    zinfix.<locals>.Operator.ledc                    s.   z || j | jW S  tk
r(   Y dS X d S NF)r   r   	Exceptionr   contextfuncr   r	   eval:   s    zinfix.<locals>.Operator.evalN)r   r   r   lbpr   r+   r   r$   r*   r   r	   Operator2   s   r.   r   r$   r*   r.   r   r-   r	   infix,   s    r1   c                    s   G  fdddt }|S )ze
    Create a prefix operator, given a binding power and a function that
    evaluates the node.
    c                       s(   e Zd Z Z fddZfddZdS )zprefix.<locals>.Operatorc                    s   |  | _d | _| S r   )r"   r   r   r   r#   r   r	   r
   O   s    zprefix.<locals>.Operator.nudc                    s*   z || j W S  tk
r$   Y dS X d S r%   )r   r&   r'   r)   r   r	   r+   T   s    zprefix.<locals>.Operator.evalN)r   r   r   r,   r
   r+   r   r-   r   r	   r.   L   s   r.   r/   r0   r   r-   r	   prefixF   s    r2      c                 C   s   | | p| | S r   r+   r(   r   yr   r   r	   <lambda>a       r7      c                 C   s   | | o| | S r   r4   r5   r   r   r	   r7   b   r8      c                 C   s   | |  S r   r4   )r(   r   r   r   r	   r7   c   r8   	   c                 C   s   | | | | kS r   r4   r5   r   r   r	   r7   d   r8   c                 C   s   | | | | kS r   r4   r5   r   r   r	   r7   e   r8   
   c                 C   s   | | | | kS r   r4   r5   r   r   r	   r7   f   r8   c                 C   s   | | | | k	S r   r4   r5   r   r   r	   r7   g   r8   c                 C   s   | | | | kS r   r4   r5   r   r   r	   r7   h   r8   c                 C   s   | | | | kS r   r4   r5   r   r   r	   r7   i   r8   c                 C   s   | | | | kS r   r4   r5   r   r   r	   r7   j   r8   c                 C   s   | | | | kS r   r4   r5   r   r   r	   r7   k   r8   c                 C   s   | | | | k S r   r4   r5   r   r   r	   r7   l   r8   c                 C   s   | | | | kS r   r4   r5   r   r   r	   r7   m   r8   )orandnotinnot inisis notz==z!=>z>=<z<=c                   @   s@   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	dd Z
dS )LiteralzO
    A basic self-resolvable object similar to a Django template variable.
    literal    c                 C   s
   || _ d S r   r!   r   r!   r   r   r	   __init__   s    zLiteral.__init__c                 C   s
   t | jS r   )reprr!   r   r   r   r	   r      s    zLiteral.displayc                 C   s   | S r   r   r   r   r   r	   r
      s    zLiteral.nudc                 C   s   | j S r   rI   r'   r   r   r	   r+      s    zLiteral.evalc                 C   s   d| j | jf S )Nz(%s %r))r   r!   r   r   r   r	   r      s    zLiteral.__repr__N)r   r   r   r    r   r,   rK   r   r
   r+   r   r   r   r   r	   rF   u   s   rF   c                   @   s   e Zd ZdZdd ZdS )EndTokenrH   c                 C   s   | dd S )Nz'Unexpected end of expression in if tag.)r   r   r   r   r	   r
      s    zEndToken.nudN)r   r   r   r,   r
   r   r   r   r	   rM      s   rM   c                   @   sB   e Zd ZeZdd Zdd Zdd Zdd Zdd
dZ	dd Z
dS )IfParserc                 C   s   t |}g }d}||k r|| }|dkrR|d |k rR||d  dkrRd}|d7 }n0|dkr|d |k r||d  dkrd}|d7 }|| | |d7 }q|| _d| _|  | _d S )NrH   rB      r?   rC   r@   rA   )lenappendtranslate_tokentokenspos
next_tokencurrent_token)r   rS   Z
num_tokensZmapped_tokensitokenr   r   r	   rK      s     $
$
zIfParser.__init__c              	   C   s:   zt | }W n" ttfk
r.   | | Y S X | S d S r   )	OPERATORSKeyError	TypeError
create_var)r   rX   opr   r   r	   rR      s
    zIfParser.translate_tokenc                 C   s6   | j t| jkrtS | j| j  }|  j d7  _ |S d S )NrO   )rT   rP   rS   rM   r   retvalr   r   r	   rU      s
    zIfParser.next_tokenc                 C   s*   |   }| jtk	r&| d| j  |S )Nz$Unused '%s' at end of if expression.)r"   rV   rM   r   r   r^   r   r   r	   parse   s    
zIfParser.parserH   c                 C   sH   | j }|  | _ || }|| j jk rD| j }|  | _ ||| }q|S r   )rV   rU   r
   r,   r   )r   Zrbptr   r   r   r	   r"      s    


zIfParser.expressionc                 C   s   t |S r   )rF   rJ   r   r   r	   r\      s    zIfParser.create_varN)rH   )r   r   r   
ValueErrorr   rK   rR   rU   r`   r"   r\   r   r   r   r	   rN      s   	

rN   N)r    r   r1   r2   rY   itemskeyr]   r   rF   rM   rN   r   r   r   r	   <module>   s.   
!