
    #hJ                        S r SSKJr  SSKrSSKrSSKJrJrJr  SS jr	 " S S\R                  5      r " S	 S
5      rg)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                F  ^ U c  g[        U [        5      (       a  U $ [        U [        5      (       a  U R                  " SSU0TD6$ [	        U 5      (       a$  UR                  U4S j[        U 5       5       5      $ [        U [        [        -  5      (       a  U $ [        U 5      $ )zRender the given item joinc              3  D   >#    U  H  oc  M  [        U40 TD6v   M     g 7fNrender).0efieldss     O/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/tatsu/rendering.py	<genexpr>render.<locals>.<genexpr>   s!      
)3AF1s      )	
isinstancestrRendererr   r   r
   iterintfloat)itemr
   r   s     `r   r   r      s    |	D#			D(	#	#{{////	yy 
)-d
 
 	
 
D#+	&	&4y    c                  2   ^  \ rS rSrSS jrU 4S jrSrU =r$ )RenderingFormatter   c                    [        U4SU0UD6$ )Nr
   r   selfr   r
   r   s       r   r   RenderingFormatter.render    s    d0000r   c                  >^ ^ SU;  a  [         TT ]  T R                  U5      U5      $ UR                  S5      u  p4mUS:X  a  SnU(       d  SnSnOSU;   a  UR                  S5      u  p5OSn[	        U5      n[	        U5      nT(       d  Sm[        U5      (       a&  [        UR                  UU 4S jU 5       5      X55      $ [        TT R                  U5      -  X55      $ )	N:z\n
r   *   z%sc              3  L   >#    U  H  nTTR                  U5      -  v   M     g 7fr   r   )r   vfmtr#   s     r   r   2RenderingFormatter.format_field.<locals>.<genexpr>:   s     =u!t{{1~-us   !$)superformat_fieldr   splitr   r   r   r
   )r#   valueformat_specindsepmultr,   	__class__s   `     @r   r/   RenderingFormatter.format_field#   s    k!7'E(:KHH#))#.#%<CCDCZ		#ICD#h4yC%===u==s  #E 22C>>r   r   r	   )__name__
__module____qualname____firstlineno__r   r/   __static_attributes____classcell__r6   s   @r   r   r      s    1? ?r   r   c                      \ rS rSrSrSr\R                  " 5       r\	" 5       r
SS jr\S 5       r\S 5       r\S 5       r\R"                  S	 5       rSS
 jrSS jrSS jrS rS rS rS rSrg)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                    Ub  Xl         g g r   )template)r#   rC   s     r   __init__Renderer.__init__N   s    $M  r   c                ,    [        U R                  5      $ r   )next_counterclss    r   counterRenderer.counterR   s    CLL!!r   c                @    [         R                  " 5       [        l        g r   )	itertoolscountr   rH   rI   s    r   reset_counterRenderer.reset_counterV   s    %OO-r   c                    U R                   $ r   
_formatterr#   s    r   	formatterRenderer.formatterZ   s    r   c                    Xl         g r   rS   )r#   r1   s     r   rV   rW   ^   s    r   c                @    U R                   R                  " U4SU0UD6$ )z'A shortcut for self._formatter.render()r
   )rT   r   r"   s       r   rendRenderer.rendb   s!    %%d@@@@r   c                4    [        U R                  U5      X#S9$ )N)r   
multiplier)r   rZ   )r#   r   r3   r]   s       r   r   Renderer.indentf   s    diiocIIr   c                4    [        U R                  U5      US9$ )N)tabwidth)r   rZ   )r#   r   r`   s      r   r   Renderer.trimi   s    DIIdOh77r   c                    g)z0Pre-render fields before rendering the template.Nr   )r#   r   s     r   render_fieldsRenderer.render_fieldsl   s    r   c           	        UR                  SS 5      nUR                  U R                  R                  S9  UR                  [	        U 5      R                  5        VVs0 s H  u  p4UR                  S5      (       a  M  X4_M!     snn5        U R                  U5      nUb  UnOUc  U R                  n U R                  R                  " [        U5      40 UD6$ s  snnf ! [         aU  nS U R                  R                  U5       5       nU H'  nU(       d  M  X;  d  M  [        U[        U 5      5      Ue   e S nAff = f)NrC   r?   _c              3  *   #    U  H	  oS    v   M     g7f)r   Nr   )r   ps     r   r   "Renderer.render.<locals>.<genexpr>   s     B"AQaD"As   )popupdater6   r9   varsitems
startswithrc   rC   rT   formatr   KeyErrorparsetype)	r#   r   rC   kr+   overrider   keyskeys	            r   r   Renderer.renderp   s   ::j$/ 7 78"4j..0J0daS8ITQT0J	
 %%
 H}}H	??))$x.CFCC K  	B$//"7"7"ABD33,"3T
3:  	s0   C
=C
2%C 
D=(,D8D8D88D=c                "    U R                  5       $ r   r   rU   s    r   __str__Renderer.__str__   s    {{}r   c                    [        U 5      $ r   )r   rU   s    r   __repr__Renderer.__repr__   s    4yr   )rT   rC   r   r8   )r   r)   )r)   )r9   r:   r;   r<   __doc__rC   rN   rO   rH   r   rT   rD   classmethodrK   rP   propertyrV   setterrZ   r   r   rc   r   ry   r|   r=   r   r   r   r   r   @   s     H H#%J% " " . .      AJ82r   r   r8   )r~   
__future__r   rN   stringutilr   r   r   r   	Formatterr   r   r   r   r   <module>r      s?    #   & &$?)) ?BM Mr   