
    #h                        S SK Jr  SSKJr  SSKJr  SSKJrJrJ	r	  / SQr
 " S S\5      r " S	 S
\5      r " S S\5      r " S S5      rg)    )annotations   )CodegenError)Node)RendererRenderingFormatterrender)DelegatingRenderingFormatterModelRendererNullModelRendererCodeGeneratorc                  D   ^  \ rS rSrU 4S jrSU 4S jjrU 4S jrSrU =r$ )r
      c                T   > [        US5      (       d   e[        TU ]	  5         Xl        g )Nr	   )hasattrsuper__init__delegate)selfr   	__class__s     T/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/tatsu/codegen/cgbase.pyr   %DelegatingRenderingFormatter.__init__   s&    x****     c                r   > U R                   R                  " U4SU0UD6nUc  [        TU ]  " U4SU0UD6nU$ )Njoin)r   r	   r   )r   itemr   fieldsresultr   s        r   r	   #DelegatingRenderingFormatter.render   sC    %%d@@@>W^D>t>v>Fr   c                n   > [        U[        5      (       a  U R                  U5      $ [        TU ]  X5      $ N)
isinstancer   r	   r   convert_field)r   value
conversionr   s      r   r#   *DelegatingRenderingFormatter.convert_field   s/    eT"";;u%%7(;;r   )r    )	__name__
__module____qualname____firstlineno__r   r	   r#   __static_attributes____classcell__r   s   @r   r
   r
      s    !< <r   r
   c                     ^  \ rS rSrSU 4S jjrS rU 4S jr\S 5       r\S 5       r	\S 5       r
S rU 4S	 jrS
rU =r$ )r   #   c                z   > [         TU ]  US9  Xl        X l        UR                  U l        U R                  5         g )N)template)r   r   _codegen_node	formatter__postinit__)r   codegennoder3   r   s       r   r   ModelRenderer.__init__$   s6    (+
 **r   c                    g r!    r   s    r   r7   ModelRenderer.__postinit__-   s    r   c                   >  [         TU ]  U5        g ! [         a0    UR                  S5      (       a  e [	        U R
                  U5      s $ f = f)N_)r   __getattr__AttributeError
startswithgetattrr9   )r   namer   s     r   rA   ModelRenderer.__getattr__0   sG    	,G% 	,s##499d++	,s    7AAc                    U R                   $ r!   )r5   r=   s    r   r9   ModelRenderer.node8   s    zzr   c                    U R                   $ r!   r4   r=   s    r   r8   ModelRenderer.codegen<       }}r   c                    U R                   $ r!   rJ   r=   s    r   contextModelRenderer.context@   rL   r   c                8    U R                   R                  U5      $ r!   )r8   get_renderer)r   r   s     r   rQ   ModelRenderer.get_rendererD   s    ||((..r   c           	       > UR                  SS 5      n[        U R                  [        5      (       a`  UR	                  [        U R                  5      R                  5        VVs0 s H  u  p4UR                  S5      (       a  M  X4_M!     snn5        OUR	                  U R                  S9  [        TU ]$  " SSU0UD6$ s  snnf )Nr3   r@   )r$   r<   )
popr"   r9   r   updatevarsitemsrC   r   r	   )r   r   r3   kvr   s        r   r	   ModelRenderer.renderG   s    ::j$/dii&&MM !%TYY 5 5 7 7<<, AD 7 MM		M*w~:x:6::s   $B>
B>
)r4   r5   r6   r!   )r)   r*   r+   r,   r   r7   rA   propertyr9   r8   rN   rQ   r	   r-   r.   r/   s   @r   r   r   #   s]    ,      /; ;r   r   c                      \ rS rSrSrSrSrg)r   V   z)A `ModelRenderer` that generates nothing.r(   r<   N)r)   r*   r+   r,   __doc__r3   r-   r<   r   r   r   r   V   s
    3Hr   r   c                  >    \ rS rSrSrS
S jrS rS rS rSS jr	S	r
g)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                f    [        U 5      U l        0 U l        Ub  U R                  U5      U l        g g r!   )r
   r6   
_renderers_find_module_renderers)r   moduless     r   r   CodeGenerator.__init__c   s2    5d;"99'BDO r   c                    0 nU Hb  n[        U5      R                  5        HB  u  pE[        U[        5      (       d  M  [	        U[
        5      (       d  M3  U[
        Ld  M>  XRU'   MD     Md     U$ r!   )rV   rW   r"   type
issubclassr   )r   rd   r   modulerE   dtypes         r   rc   $CodeGenerator._find_module_renderersi   s`    F#F|113!%..!%77-#(4L  4  r   c                   [        U[        5      (       d  g UR                  R                  nUR                  /nU(       a~  UR	                  5       nUR                  nXPR
                  ;   a  U R
                  U   nX`R
                  U'   U$ UR                   H  nXs;  d  M
  UR                  U5        M     U(       a  M~  [        SU S35      e)NzRenderer for z
 not found)	r"   r   r   r)   rT   rb   	__bases__appendr   )r   r9   node_class_nameclassesclsrE   rendererbases           r   _find_renderer_class"CodeGenerator._find_renderer_classw   s    $%%..11>>"++-C<<D&??403;0&NN4( & g ]?*;:FGGr   c                H   [        U[        5      (       d  g U R                  U5      nUc!  [        S[	        U5      R
                   35      e [        U[        5      (       d   eU" X5      $ ! [         a+  n[	        U5      " [        U5      UR
                  5      UeS nAff = f)NzRenderer not found for )
r"   r   rt   r   rg   r)   rh   r   	Exceptionstr)r   r   renderer_classes       r   rQ   CodeGenerator.get_renderer   s    $%%2248!)$t**=*=)>? 	Bnm<<<<!$-- 	Bq'#a&."9"9:A	Bs   A, ,
B!6&BB!c                |    U R                  U5      nUc  [        U4SU0UD6$ [        UR                  " S0 UD65      $ )Nr   r<   )rQ   r	   rx   )r   r   r   r   rr   s        r   r	   CodeGenerator.render   sD    $$T*$4T4V448??,V,--r   )rb   r6   r!   r'   )r)   r*   r+   r,   r^   r   rc   rt   rQ   r	   r-   r<   r   r   r   r   \   s#    CH*B.r   r   N)
__future__r   
exceptionsr   objectmodelr   	renderingr   r   r	   __all__r
   r   r   r   r<   r   r   <module>r      sM    " %  < <<#5 <(0;H 0;f C. C.r   