o
    >Di                     @  s   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l	m
Z
 ddlmZ ddlmZmZ er<dd	lmZ dd
lmZ G dd deZG dd deZdS )z;
AST renderers for inspecting the markdown parsing result.
    )annotationsN)TYPE_CHECKINGAnyoverload)HTMLRenderer   )camel_to_snake_case)Rendererforce_delegate)inline)Elementc                   @  sT   e Zd ZdZdZedddZedddZedddZedddZdd ZdS )ASTRenderera  Render as AST structure.

    Example::

        >>> print(markdown('# heading', ASTRenderer))
        {'footnotes': [],
         'link_ref_defs': {},
         'children': [{'level': 1, 'children': ['heading'], 'element': 'heading'}],
         'element': 'document'}
    Felementinline.RawTextreturndict[str, Any]c                 C  s"   d|j r
t|jn|j|j dS )Nraw_text)r   childrenescape)r   htmlunescaper   selfr    r   K/var/www/Datamplify/venv/lib/python3.10/site-packages/marko/ast_renderer.pyrender_raw_text#   s   zASTRenderer.render_raw_textlist[Element]list[dict[str, Any]]c                 C     d S Nr   r   r   r   r   render_children-      zASTRenderer.render_childrenr   c                 C  r   r   r   r   r   r   r   r    0   r!   strc                 C  r   r   r   r   r   r   r   r    3   r!   c                   sl   t |tr fdd|D S t |tr|S dd |j D }d|v r, |d |d< t|jj|d< |S )Nc                   s   g | ]}  |qS r   render).0er   r   r   
<listcomp>8   s    z/ASTRenderer.render_children.<locals>.<listcomp>c                 S  s    i | ]\}}| d s||qS )_
startswithr%   kvr   r   r   
<dictcomp>;   s     z/ASTRenderer.render_children.<locals>.<dictcomp>r   r   )	
isinstancelistr"   __dict__itemsr$   r   	__class____name__)r   r   rvr   r'   r   r    6   s   

N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r"   r   r"   )	r5   
__module____qualname____doc__delegater
   r   r   r    r   r   r   r   r      s    	r   c                      s>   e Zd ZdZdZd fddZd fd	d
ZdddZ  ZS )XMLRenderera  Render as XML format AST.

    It will render the parsed result and XML string and you can print it or
    write it to a file.

    Example::

        >>> print(markdown('# heading', XMLRenderer))
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document SYSTEM "CommonMark.dtd">
        <document footnotes="[]" link_ref_defs="{}">
        <heading level="1">
            heading
        </heading>
        </document>
    Fr   c                   s   d| _ t  S Nr   )indentsuper	__enter__r'   r4   r   r   r?   V   s   
zXMLRenderer.__enter__argsr   Nonec                   s   d| _ t j| S r<   )r=   r>   __exit__)r   rA   r@   r   r   rC   Z   s   zXMLRenderer.__exit__r   r   r"   c                   sR  g }| j u r|d j d  |d j d  dd |j D }ddd | D }t|jj}|d j d	| | d
  t	|dd pRt	|dd }|r  jd7  _t
|trv|d j tt|dd   n| fdd|D    jd8  _|d j d| d
  n|d d d d |d< d|S )N z&<?xml version="1.0" encoding="UTF-8"?>z+<!DOCTYPE document SYSTEM "CommonMark.dtd">c                 S  s(   i | ]\}}| d s|dvr||qS )r)   )bodyr   r*   r,   r   r   r   r/   e   s    z/XMLRenderer.render_children.<locals>.<dictcomp> c                 s  s&    | ]\}}d | d| dV  qdS )rD   z=""Nr   r,   r   r   r   	<genexpr>j   s   $ z.XMLRenderer.render_children.<locals>.<genexpr><>rE   r      r   c                 3  s    | ]}  |V  qd S r   r#   )r%   childr'   r   r   rH   v   s    z</z />
)	root_nodeappendr=   r2   r3   joinr   r4   r5   getattrr0   r"   r   escape_htmljsondumpsextend)r   r   linesattrsattr_strelement_namer   r   r'   r   r    ^   s4   
 

zXMLRenderer.render_children)r   r;   )rA   r   r   rB   )r   r   r   r"   )	r5   r7   r8   r9   r:   r?   rC   r    __classcell__r   r   r@   r   r;   B   s    r;   )r9   
__future__r   r   rT   typingr   r   r   marko.html_rendererr   helpersr   rendererr	   r
   markor   marko.elementr   r   r;   r   r   r   r   <module>   s    -