o
    g.                     @  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gZe
de
jZd	d
 Zdd Zdd Zdd Zdd Z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to_html_stringto_xhtml_stringz)&(?!(?:\#[0-9]+|\#x[0-9a-f]+|[0-9a-z]+);)c                 C  s   t d| t| j)Nzcannot serialize {!r} (type {}))	TypeErrorformattype__name__text r   T/var/www/html/bloggers_ems/venv/lib/python3.10/site-packages/markdown/serializers.py_raise_serialization_error9   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_attribQ   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_htmld   s   r$   c           
      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)
writeelemr   r,   r   enamespace_urir1   kvr   r   r   r-   u   s\   




r-   r(   c                 C  s,   | d usJ g }|j }t|| | d|S )N )appendr-   join)rootr   datar5   r   r   r   _write_html   s
   
r@   elementr   returnstrc                 C     t t|  ddS )z: Serialize element and its children to a string of HTML5. r(   r   r@   r   getrootrA   r   r   r   r	         c                 C  rD   )z: Serialize element and its children to a string of XHTML. r)   rE   rF   rH   r   r   r   r
      rI   )r(   )rA   r   rB   rC   )__doc__
__future__r   xml.etree.ElementTreer   r   r   r   r   r   re__all__compileIr   r   r   r#   r$   r-   r@   r	   r
   r   r   r   r   <module>   s   $	
9
