o
    ñÅ[hQ  ã                   @   sf   d dl mZ d dl mZ dZdZdZdZdZdZd	d
„ Z	G dd„ dƒZ
G dd„ dƒZG dd„ dƒZdS )é   )Únodes)Úerrorsz{#z#}z{%z%}z{{z}}c                 C   s   t | ||d ¡ S )N)Úis_page_template)ÚParserÚparse)Útemplate_stringÚtemplate_idr   © r	   ú€/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/otree/templating/compiler.pyÚcompile   s
   ÿþr   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTokenc                 C   s6   |  ¡ }|r
|d nd| _|| _|| _|| _|| _d S )Né    Ú )ÚsplitÚkeywordÚtypeÚtextr   Úline_number)ÚselfÚ
token_typeZ
token_textr   r   Úwordsr	   r	   r
   Ú__init__   s   
zToken.__init__c              	   C   s*   d| j › dt| jƒ› d| j› d| j› d	S )Nú(z, ú))r   Úreprr   r   r   ©r   r	   r	   r
   Ú__str__   s   (ÿzToken.__str__N)Ú__name__Ú
__module__Ú__qualname__r   r   r	   r	   r	   r
   r      s    r   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚLexerc                 C   s"   || _ || _g | _d| _d| _d S )Nr   r   )r   r   ÚtokensÚindexr   )r   r   r   r	   r	   r
   r   '   s
   
zLexer.__init__c                 C   s`   | j t| jƒk r-|  t¡r|  ¡  n|  t¡s|  t¡r!|  ¡  n|  	¡  | j t| jƒk s| j
S )N)r#   Úlenr   ÚmatchÚCOMMENT_STARTÚread_comment_tagÚINSTRUCTION_STARTÚINSTRUCTION_START_OLDÚread_instruction_tagÚ	read_textr"   r   r	   r	   r
   Útokenize.   s   


úzLexer.tokenizec                 C   s   | j  || j¡r
dS dS )NTF)r   Ú
startswithr#   )r   Útargetr	   r	   r
   r%   8   s   zLexer.matchc                 C   s0   | j | j dkr|  jd7  _|  jd7  _d S )NÚ
r   )r   r#   r   r   r	   r	   r
   Úadvance=   s   zLexer.advancec                 C   st   |  j ttƒ7  _ | j}| j t| jƒk r0|  t¡r$|  j ttƒ7  _ d S |  ¡  | j t| jƒk sd}t 	|| j
|¡‚)NzUnclosed comment tag)r#   r$   r&   r   r   r%   ÚCOMMENT_ENDr0   r   ÚTemplateLexingErrorr   )r   Ústart_line_numberÚmsgr	   r	   r
   r'   B   s   
üzLexer.read_comment_tagc                 C   s°   |  j ttƒ7  _ | j }| j}| j t| jƒk rN|  t¡s!|  t¡rB| j|| j …  ¡ }| j	 
td|| j|ƒ¡ |  j ttƒ7  _ d S |  ¡  | j t| jƒk sd}t || j|¡‚)NZINSTRUCTIONzUnclosed instruction tag)r#   r$   r(   r   r   r%   ÚINSTRUCTION_ENDÚINSTRUCTION_END_OLDÚstripr"   Úappendr   r   r0   r   r2   )r   Ústart_indexr3   r   r4   r	   r	   r
   r*   M   s   ÿø	zLexer.read_instruction_tagc                 C   s‚   | j }| j}| j t| jƒk r+|  t¡rn|  t¡s|  t¡rn|  ¡  | j t| jƒk s| j|| j … }| j	 
td|| j|ƒ¡ d S )NÚTEXT)r#   r   r$   r   r%   r&   r(   r)   r0   r"   r8   r   r   )r   r9   r3   r   r	   r	   r
   r+   ]   s   
ûzLexer.read_textN)
r   r   r    r   r,   r%   r0   r'   r*   r+   r	   r	   r	   r
   r!   &   s    
r!   c                   @   r   )r   c                 C   s   || _ || _d| _|| _d S )Nr   )r   r   Únum_nested_blocksr   )r   r   r   r   r	   r	   r
   r   m   s   
zParser.__init__c           
      C   s  t  ¡ g}g }t| j| jƒ ¡ D ]Û}| jrG| jdkrG|jdkrG|j	 
¡ rGt|j	ƒt|j	 ¡ ƒ }|j	d |…  d¡}| j|7  _t d|¡‚|jdkrX|d j t  |¡¡ q|jt jv r‹|jdkrj|  jd7  _t j|j \}}||ƒ}|d j |¡ |rŠ| |¡ | |¡ q|jt jv rÓt|ƒdkrŸd}	t |	|¡‚|d |jkr¸d	|j› d
|d › d}	t |	|¡‚|d  ¡  | ¡  | ¡  |jdkrÒ|  jd8  _q|jdkràd}	t |	|¡‚|d j t  |¡¡ q|r
|d j}d|d › d|j› d|j› d}	t |	|¡‚| ¡ S )Nr   r:   r/   z&All content must be inside a block tagéÿÿÿÿÚblockr   zUnexpected tagzUnexpected 'z1' tag. Was expecting the following closing tag: 'z'.Zendblockr   zEmpty instruction tagz9Unexpected end of template. Was expecting a closing tag 'z' to close the 'z' tag opened in line Ú.)r   ÚNoder!   r   r   r,   r   r;   r   r   r7   r$   ÚlstripÚcountr   r   ZTemplateSyntaxErrorÚchildrenr8   ZTextNoder   Zinstruction_keywordsZinstruction_endwordsZ
exit_scopeÚpopZ	PrintNodeÚtoken)
r   ÚstackZ	expectingrD   Znum_leading_whitespaceZnum_leading_newlinesZ
node_classZendwordÚnoder4   r	   r	   r
   r   s   sv   
ÿ

ÿÿ



€
ÿÿ
€

ÿþþÿzParser.parseN)r   r   r    r   r   r	   r	   r	   r
   r   l   s    r   N)r   r   r   r&   r1   r)   r6   r(   r5   r   r   r!   r   r	   r	   r	   r
   Ú<module>   s    F