o
    >h                     @  s   d Z ddlmZ ddlmZ ddlmZmZmZmZm	Z	 ddl
Z
ddlmZmZmZ ddgZe
d	e
jZd&ddZd'ddZd(ddZd(ddZd)ddZd*d+d!d"Zd,d$dZd,d%dZdS )-a  
Python-Markdown provides two serializers which render [`ElementTree.Element`][xml.etree.ElementTree.Element]
objects to a string of HTML. Both functions wrap the same underlying code with only a few minor
differences as outlined below:

1. Empty (self-closing) tags are rendered as `<tag>` for HTML and as `<tag />` for XHTML.
2. Boolean attributes are rendered as `attrname` for HTML and as `attrname="attrname"` for XHTML.
    )annotations)ProcessingInstruction)CommentElementTreeElementQName
HTML_EMPTYN)CallableLiteralNoReturnto_html_stringto_xhtml_stringz)&(?!(?:\#[0-9]+|\#x[0-9a-f]+|[0-9a-z]+);)textstrreturnr   c                 C  s   t d| t| j)Nzcannot serialize {!r} (type {}))	TypeErrorformattype__name__r    r   t/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/markdown/serializers.py_raise_serialization_error:   s   r   c              	   C  sd   z!d| v rt d| } d| v r| dd} d| v r| dd} | W S  ttfy1   t|  Y d S w )N&&amp;<&lt;>&gt;RE_AMPsubreplacer   AttributeErrorr   r   r   r   r   _escape_cdata@   s   r$   c              	   C  s   z5d| v rt d| } d| v r| dd} d| v r| dd} d| v r)| dd} d	| v r3| d	d
} | W S  ttfyE   t|  Y d S w )Nr   r   r   r   r   r   "&quot;
z&#10;r   r   r   r   r   _escape_attribR   s   r(   c              	   C  sx   z+d| v rt d| } d| v r| dd} d| v r| dd} d| v r)| dd} | W S  ttfy;   t|  Y d S w )	Nr   r   r   r   r   r   r%   r&   r   r   r   r   r   _escape_attrib_htmle   s   r)   writeCallable[[str], None]elemr   r   Literal['html', 'xhtml']Nonec           
      C  s  |j }|j}|tu r| dt|  n|tu r | dt|  n|d u r8|r,| t| |D ]}t| || q.nd }t|trZ|jd d dkrV|jdd  dd\}}nt	d| d|  |
 }|rt|}|D ]0\}}	t|trx|j}t|	tr|	j}	nt|	}	||	kr|dkr| d	|	  ql| d
||	 ql|r| dt|  |dkr| tv r| d n0| d |r| dv r| | n| t| |D ]}t| || q| tvr| d| d  |jr| t|j d S d S )Nz	<!--%s-->z<?%s?>   {}z QName objects must define a tag.r   htmlz %sz {}="{}"z xmlns="%s"xhtmlz />r   )scriptstylez</)tagr   r   r$   r   _serialize_html
isinstancer   split
ValueErroritemssortedr)   r   r(   lowerr   tail)
r*   r,   r   r6   r   enamespace_urir;   kvr   r   r   r7   v   s\   




r7   r2   rootc                 C  s,   | d usJ g }|j }t|| | d|S )N )appendr7   join)rC   r   datar*   r   r   r   _write_html   s
   
rH   elementc                 C     t t|  ddS )z: Serialize element and its children to a string of HTML5. r2   r   rH   r   getrootrI   r   r   r   r         c                 C  rJ   )z: Serialize element and its children to a string of XHTML. r3   rK   rL   rN   r   r   r   r      rO   )r   r   r   r   )r   r   )r   r   r   r   )r*   r+   r,   r   r   r-   r   r.   )r2   )rC   r   r   r-   r   r   )rI   r   r   r   )__doc__
__future__r   xml.etree.ElementTreer   r   r   r   r   r   retypingr	   r
   r   __all__compileIr    r   r$   r(   r)   r7   rH   r   r   r   r   r   r   <module>   s    $	




9
