
    }fJ                    ~    d Z ddlmZ ddlZddlZddlmZmZmZ ddZ	 G d dej                        Z G d	 d
      Zy)z
The Renderer class provides the infrastructure for generating template-based
code. It's used by the .grammars module for parser generation.
    )annotationsN   )indentisitertrimc                   | yt        | t              r| S t        | t              r | j                  dd|iS t	        |       r#|j                  fdt        |       D              S t        | t        t        z        r| S t        |       S )zRender the given item joinc              3  <   K   | ]  }|t        |fi   y wNrender).0efieldss     N/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/tatsu/rendering.py	<genexpr>zrender.<locals>.<genexpr>   s$      
$%q}F1
s    )	
isinstancestrRendererr   r   r
   iterintfloat)itemr
   r   s     `r   r   r      s    |	D#		D(	#t{{////	yy 
)-d
 
 	
 
D#+	&4y    c                  &     e Zd ZddZ fdZ xZS )RenderingFormatterc                    t        |fd|i|S )Nr
   r   selfr   r
   r   s       r   r   zRenderingFormatter.render    s    d0000r   c                    d|vrt             j                  |      |      S |j                  d      \  }}|dk(  rd}|sd}d}nd|v r|j                  d      \  }}nd}t	        |      }t	        |      }sdt        |      r&t        |j                   fd|D              ||      S t         j                  |      z  ||      S )	N:z\n
r   *   z%sc              3  F   K   | ]  }j                  |      z    y wr   r   )r   vfmtr!   s     r   r   z2RenderingFormatter.format_field.<locals>.<genexpr>:   s     =!t{{1~-=s   !)superformat_fieldr   splitr   r   r   r
   )r!   valueformat_specindsepmultr)   	__class__s   `     @r   r+   zRenderingFormatter.format_field#   s    k!7'E(:KHH#))#.S#%<CCDCZ		#ICD#h4yC%==u==sD  #E 22C>>r   r	   )__name__
__module____qualname__r   r+   __classcell__r2   s   @r   r   r      s    1? ?r   r   c                      e Zd ZdZdZ ej                         Z e       Z	ddZ
ed        Zed        Zed        Zej                   d        Zdd	Zdd
ZddZd Zd Zd Zd Zy)r   a+  Renders the fileds in the current object using a template
    provided statically, on the constructor, or as a parameter
    to render().

    Fields with a leading underscore are not made available to
    the template. Additional fields may be made available by
    overriding render_fields().
    z{__class__}Nc                    ||| _         y y r   )template)r!   r;   s     r   __init__zRenderer.__init__N   s    $DM  r   c                ,    t        | j                        S r   )next_counterclss    r   counterzRenderer.counterR   s    CLL!!r   c                >    t        j                         t        _        y r   )	itertoolscountr   r?   r@   s    r   reset_counterzRenderer.reset_counterV   s    %OO-r   c                    | j                   S r   
_formatterr!   s    r   	formatterzRenderer.formatterZ   s    r   c                    || _         y r   rH   )r!   r-   s     r   rK   zRenderer.formatter^   s	    r   c                @     | j                   j                  |fd|i|S )z'A shortcut for self._formatter.render()r
   )rI   r   r    s       r   rendzRenderer.rendb   s#    %t%%d@@@@r   c                <    t        | j                  |      ||      S )N)r   
multiplier)r   rN   )r!   r   r/   rP   s       r   r   zRenderer.indentf   s    diiocjIIr   c                :    t        | j                  |      |      S )N)tabwidth)r   rN   )r!   r   rR   s      r   r   zRenderer.trimi   s    DIIdOh77r   c                     y)z0Pre-render fields before rendering the template.Nr   )r!   r   s     r   render_fieldszRenderer.render_fieldsl   s    r   c           	     `   |j                  dd       }|j                  | j                  j                         |j                  t	        |       j                         D ci c]  \  }}|j                  d      r|| c}}       | j                  |      }||}n|| j                  }	  | j                  j                  t        |      fi |S c c}}w # t        $ rL}d | j                  j                  |      D        }|D ]  }|s||vst        |t        |             |  d }~ww xY w)Nr;   r8   _c              3  &   K   | ]	  }|d      yw)r   Nr   )r   ps     r   r   z"Renderer.render.<locals>.<genexpr>   s     BQAaDBs   )popupdater2   r4   varsitems
startswithrT   r;   rI   formatr   KeyErrorparsetype)	r!   r   r;   kr(   overrider   keyskeys	            r   r   zRenderer.renderp   s   ::j$/ 7 78"4j..0JdaS8IQTJ	
 %%
 H}}H	)4??))$x.CFCC K  	B$//"7"7"ABD ;3f,"3T
3:; 	s0    C
:C
,%C 	D-!)D(D(D((D-c                "    | j                         S r   r   rJ   s    r   __str__zRenderer.__str__   s    {{}r   c                    t        |       S r   )r   rJ   s    r   __repr__zRenderer.__repr__   s    4yr   r   r3   )r   r&   )r&   )r4   r5   r6   __doc__r;   rD   rE   r?   r   rI   r<   classmethodrB   rF   propertyrK   setterrN   r   r   rT   r   rg   ri   r   r   r   r   r   @   s     Hy H#%J% " " . .      AJ82r   r   r3   )rj   
__future__r   rD   stringutilr   r   r   r   	Formatterr   r   r   r   r   <module>rr      s?    #   & &$?)) ?BM Mr   