
    gi7                        d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 erddl
mZ ddlmZ  e	dd	
          Zej        Z G d d	          Z e	de
          ZddZdS )z
Base renderer class
    )annotationsN)TYPE_CHECKINGAnyCallableTypeVar   Document)Element_TRenderer)boundc                  j    e Zd ZU dZdZded<    ej        d          ZddZ	ddZ
ddZddZddZdS )r   a  The base class of renderers.

    A custom renderer should subclass this class and include your own render functions.

    A render function should:

    * be named as ``render_<element_name>``, where the ``element_name`` is the snake
      case form of the element class name, the renderer will search the corresponding
      function in this way.
    * accept the element instance and return any output you want.

    If no corresponding render function is found, renderer will fallback to call
    :meth:`Renderer.render_children`.
    Tbooldelegatez<&(#[0-9]{1,7};|#[xX][0-9a-fA-F]{1,6};|[^\t\n\f <&#;]{1,32};)returnNonec                    d | _         d S N)	root_nodeselfs    f/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/marko/renderer.py__init__zRenderer.__init__-   s    *.    r   r   c                (    | j         t          _         | S )z>Provide a context so that root_node can be reset after render.)_charrefhtmlr   s    r   	__enter__zRenderer.__enter__0   s    r   argsr   c                6    t           t          _        d | _        d S r   )_charref_bakr   r   r   )r   r    s     r   __exit__zRenderer.__exit__5   s    $r   elementr   c                l   ddl m} | j        s4t          ||          r|| _        n |            | _        |g| j        _        t          |d          rOd|                    d          z   }t          | |d          }|#t          |dd	          s| j        r ||          S | 	                    |          S )
zRenders the given element to string.

        :param element: a element to be rendered.
        :returns: the output string or any values.
        r   r	   get_typerender_T)
snake_caseN_force_delegateF)
blockr
   r   
isinstancechildrenhasattrr&   getattrr   render_children)r   r$   r
   	func_namerender_funcs        r   renderzRenderer.render9   s     	$##### ~ 	4'8,, 4!( "*+2)'7J'' 	,!G$4$4$4$E$EEI!$	488K&%6>> 'BF- ' #{7+++##G,,,r   c                T      fd|j         D             }d                    |          S )a  
        Recursively renders child elements. Joins the rendered
        strings with no space in between.

        If newlines / spaces are needed between elements, add them
        in their respective templates, or override this function
        in the renderer subclass, so that whitespace won't seem to
        appear magically for anyone reading your program.

        :param element: a branch node who has children attribute.
        c                :    g | ]}                     |          S  )r2   ).0childr   s     r   
<listcomp>z,Renderer.render_children.<locals>.<listcomp>^   s%    EEE5DKK&&EEEr    )r,   join)r   r$   rendereds   `  r   r/   zRenderer.render_childrenR   s4     FEEEG4DEEEwwx   r   N)r   r   )r   r   r   r   )r    r   r   r   )r$   r   r   r   )r$   r   r   r   )__name__
__module____qualname____doc__r   __annotations__recompiler   r   r   r#   r2   r/   r5   r   r   r   r      s          & HrzO H/ / / /   
   - - - -2! ! ! ! ! !r   _Ffuncr   c                    d| _         | S )z_
    A decorator to allow delegation for the specified method even if cls.delegate = False
    T)r)   )rD   s    r   force_delegaterF   e   s      DKr   )rD   rC   r   rC   )r?   
__future__r   r   rA   typingr   r   r   r   r*   r
   r$   r   r   r   r"   r   rC   rF   r5   r   r   <module>rI      s    # " " " " "  				 8 8 8 8 8 8 8 8 8 8 8 8 !      WT$$$}L! L! L! L! L! L! L! L!^ WT"""     r   