
    }f                        d dl mZ ddlmZ ddlmZ ddlmZmZm	Z	 g dZ
 G d de      Z G d	 d
e      Z G d de      Z G d d      Zy)    )annotations   )CodegenError)Node)RendererRenderingFormatterrender)DelegatingRenderingFormatterModelRendererNullModelRendererCodeGeneratorc                  4     e Zd Z fdZd fd	Z fdZ xZS )r
   c                L    t        |d      sJ t        | 	          || _        y )Nr	   )hasattrsuper__init__delegate)selfr   	__class__s     S/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/tatsu/codegen/cgbase.pyr   z%DelegatingRenderingFormatter.__init__   s%    x***     c                n     | j                   j                  |fd|i|}|t        |   |fd|i|}|S )Njoin)r   r	   r   )r   itemr   fieldsresultr   s        r   r	   z#DelegatingRenderingFormatter.render   sE    %%%d@@@>W^D>t>v>Fr   c                f    t        |t              r| j                  |      S t        |   ||      S N)
isinstancer   r	   r   convert_field)r   value
conversionr   s      r   r    z*DelegatingRenderingFormatter.convert_field   s.    eT";;u%%7(
;;r    )__name__
__module____qualname__r   r	   r    __classcell__r   s   @r   r
   r
      s    !< <r   r
   c                  p     e Zd Zd	 fd	Zd Z fdZed        Zed        Zed        Z	d Z
 fdZ xZS )
r   c                    t         |   |       || _        || _        |j                  | _        | j                          y )N)template)r   r   _codegen_node	formatter__postinit__)r   codegennoder,   r   s       r   r   zModelRenderer.__init__$   s:    (+
 **r   c                     y r    r   s    r   r0   zModelRenderer.__postinit__-   s    r   c                    	 t         |   |       y # t        $ r+ |j                  d      r t	        | j
                  |      cY S w xY w)N_)r   __getattr__AttributeError
startswithgetattrr2   )r   namer   s     r   r8   zModelRenderer.__getattr__0   sD    	,G% 	,s#499d++	,s    1AAc                    | j                   S r   )r.   r5   s    r   r2   zModelRenderer.node8   s    zzr   c                    | j                   S r   r-   r5   s    r   r1   zModelRenderer.codegen<       }}r   c                    | j                   S r   r?   r5   s    r   contextzModelRenderer.context@   r@   r   c                8    | j                   j                  |      S r   )r1   get_renderer)r   r   s     r   rD   zModelRenderer.get_rendererD   s    ||((..r   c           	     r   |j                  dd       }t        | j                  t              rX|j	                  t        | j                        j                         D ci c]  \  }}|j                  d      s|| c}}       n|j	                  | j                         t        | $  dd|i|S c c}}w )Nr,   r7   )r!   r4   )
popr   r2   r   updatevarsitemsr:   r   r	   )r   r   r,   kvr   s        r   r	   zModelRenderer.renderG   s    ::j$/dii&MM !%TYY 5 5 71<<, qD MM		M*w~:x:6::s   B3
r   )r%   r&   r'   r   r0   r8   propertyr2   r1   rB   rD   r	   r(   r)   s   @r   r   r   #   s]    ,      /; ;r   r   c                      e Zd ZdZdZy)r   z)A `ModelRenderer` that generates nothing.r$   N)r%   r&   r'   __doc__r,   r4   r   r   r   r   V   s
    3Hr   r   c                  2    e Zd ZdZddZd Zd Zd Zd	dZy)
r   z
    A **CodeGenerator** is an abstract class that finds a
    ``ModelRenderer`` class with the same name as each model's node and
    uses it to render the node.
    Nc                d    t        |       | _        i | _        || j                  |      | _        y y r   )r
   r/   
_renderers_find_module_renderers)r   moduless     r   r   zCodeGenerator.__init__c   s2    5d;"99'BDO r   c                    i }|D ]S  }t        |      j                         D ]5  \  }}t        |t              st	        |t
              s(|t
        us1|||<   7 U |S r   )rH   rI   r   type
issubclassr   )r   rS   r   moduler<   dtypes         r   rR   z$CodeGenerator._find_module_renderersi   sh     	)F#F|113 )e!%.!%7-#(F4L)	) r   c                t   t        |t              sy |j                  j                  }|j                  g}|rt|j	                         }|j                  }|| j
                  v r | j
                  |   }|| j
                  |<   |S |j                  D ]  }||vs|j                  |        |rtt        d| d      )NzRenderer for z
 not found)	r   r   r   r%   rF   rQ   	__bases__appendr   )r   r2   node_class_nameclassesclsr<   rendererbases           r   _find_renderer_classz"CodeGenerator._find_renderer_classw   s    $%..11>>"++-C<<Dt&??403;0 )w&NN4()  ]?*;:FGGr   c                2   t        |t              sy | j                  |      }|!t        dt	        |      j
                         	 t        |t              sJ  || |      S # t        $ r+} t	        |      t        |      |j
                        |d }~ww xY w)NzRenderer not found for )
r   r   ra   r   rU   r%   rV   r   	Exceptionstr)r   r   renderer_classes       r   rD   zCodeGenerator.get_renderer   s    $%2248!)$t**=*=)>? 	Bnm<<<!$-- 	B$q'#a&."9"9:A	Bs   A" "	B+&BBc                z    | j                  |      }|t        |fd|i|S t         |j                  di |      S )Nr   r4   )rD   r	   rd   )r   r   r   r   r_   s        r   r	   zCodeGenerator.render   sF    $$T*$4T4V44?8??,V,--r   r   r#   )	r%   r&   r'   rN   r   rR   ra   rD   r	   r4   r   r   r   r   \   s#    CH*B.r   r   N)
__future__r   
exceptionsr   objectmodelr   	renderingr   r   r	   __all__r
   r   r   r   r4   r   r   <module>rm      sM    " %  < <<#5 <(0;H 0;f C. C.r   