o
    ÈÝg°  ã                   @  sÐ   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	Z	er&dd	l
mZ d
d„ Zdd„ Zdd„ Zdd„ Ze	 defdefdefdefdg¡Zd'dd„Zd(dd „ZG d!d"„ d"eƒZG d#d$„ d$eƒZd%d&„ ZdS ))zè
 Adds attribute list syntax. Inspired by
[Maruku](http://maruku.rubyforge.org/proposal.html#attribute_lists)'s
feature of the same name.

See the [documentation](https://Python-Markdown.github.io/extensions/attr_list)
for details.
é    )Úannotations)ÚTYPE_CHECKINGé   )Ú	Extensioné   )ÚTreeprocessorN)ÚElementc                 C  ó   |  dd¡\}}|| d¡fS )Nú=r   ú"©ÚsplitÚstrip©ÚsÚtÚkÚv© r   úT/var/www/html/gwz/venv/lib/python3.10/site-packages/markdown/extensions/attr_list.pyÚ_handle_double_quote%   ó   r   c                 C  r	   )Nr
   r   ú'r   r   r   r   r   Ú_handle_single_quote*   r   r   c                 C  s   |  dd¡S )Nr
   r   )r   ©r   r   r   r   r   Ú_handle_key_value/   s   r   c                 C  s<   |  d¡rd|dd … fS |  d¡rd|dd … fS ||fS )NÚ.r   ú#Úid)Ú
startswithr   r   r   r   Ú_handle_word3   s
   

r    z[^ =]+=".*?"z[^ =]+='.*?'z[^ =]+=[^ =]+z[^ =]+)ú NÚstrÚreturnúlist[tuple[str, str]]c                 C  s   t  | ¡d S )z= Parse attribute list and return a list of attribute tuples. r   )Ú_scannerÚscan)r"   r   r   r   Ú	get_attrsD   s   r'   Úelemr   Úboolc                 C  s
   | j dv S )N)Úh1Úh2Úh3Úh4Úh5Úh6)Útag)r(   r   r   r   ÚisheaderI   s   
r1   c                   @  sh   e Zd ZdZe d e¡¡Ze d e¡¡Ze d e¡¡Z	e d¡Z
ddd	„Zddd„Zddd„ZdS )ÚAttrListTreeprocessorz!\{\:?[ ]*([^\}\n ][^\}\n]*)[ ]*\}z[ ]+{}[ ]*$z\n[ ]*{}[ ]*$z^{}zÃ[^A-Z_a-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd\:\-\.0-9\u00b7\u0300-\u036f\u203f-\u2040]+Údocr   c                 C  s–  |  ¡ D ]C}| j |j¡r'| j}t|ƒs|jdv r| j}t|ƒr¼|jdkr¼d }t|ƒD ]\}}|jdv r:|} nq-|d u rf|d j	rf| 
|d j	¡}|re|  || d¡¡ |d j	d | ¡ … |d _	q|d ur|dkr||d  j	r| 
||d  j	¡}|rœ|  || d¡¡ ||d  j	d | ¡ … ||d  _	q|jr»| 
|j¡}|r»|  || d¡¡ |jd | ¡ … |_qt|ƒrø|d j	rø| 
|d j	¡}|r÷|  || d¡¡ |d j	d | ¡ … |d _	t|ƒr÷|d j	 d¡ ¡ |d _	q|jr&| 
|j¡}|r&|  || d¡¡ |jd | ¡ … |_t|ƒr&|j d¡ ¡ |_q|j	rH| j |j	¡}|rH|  || d¡¡ |j	| ¡ d … |_	qd S )N)ÚdtÚtdÚthÚli)ÚulÚoléÿÿÿÿr   r   r   )ÚiterÚmdÚis_block_levelr0   ÚBLOCK_REr1   Ú	HEADER_REÚlenÚ	enumerateÚtailÚsearchÚassign_attrsÚgroupÚstartÚtextÚrstripÚ	INLINE_REÚmatchÚend)Úselfr3   r(   ÚREÚposÚiÚchildÚmr   r   r   ÚrunY   sj   
þ€$€€€
€€ÇzAttrListTreeprocessor.runr(   Úattrsr"   r#   ÚNonec                 C  sb   t |ƒD ]*\}}|dkr%| d¡}|r| dd ||¡¡ q| d|¡ q| |  |¡|¡ qdS )z Assign `attrs` to element. r   Úclassz{} {}N)r'   ÚgetÚsetÚformatÚsanitize_name)rL   r(   rS   r   r   Úclsr   r   r   rD   •   s   
öz"AttrListTreeprocessor.assign_attrsÚnamec                 C  s   | j  d|¡S )z{
        Sanitize name as 'an XML Name, minus the ":"'.
        See https://www.w3.org/TR/REC-xml-names/#NT-NCName
        Ú_)ÚNAME_REÚsub)rL   r[   r   r   r   rY   £   s   z#AttrListTreeprocessor.sanitize_nameN)r3   r   )r(   r   rS   r"   r#   rT   )r[   r"   r#   r"   )Ú__name__Ú
__module__Ú__qualname__ÚBASE_REÚreÚcompilerX   r?   r>   rI   r]   rR   rD   rY   r   r   r   r   r2   M   s    


<r2   c                   @  s   e Zd ZdZdd„ ZdS )ÚAttrListExtensionz. Attribute List extension for Python-Markdown c                 C  s"   |j  t|ƒdd¡ | | ¡ d S )NÚ	attr_listé   )ÚtreeprocessorsÚregisterr2   ÚregisterExtension)rL   r<   r   r   r   ÚextendMarkdown­   s   z AttrListExtension.extendMarkdownN)r_   r`   ra   Ú__doc__rk   r   r   r   r   re   «   s    re   c                  K  s   t di | ¤ŽS )Nr   )re   )Úkwargsr   r   r   ÚmakeExtension²   s   rn   )r"   r"   r#   r$   )r(   r   r#   r)   )rl   Ú
__future__r   Útypingr   Ú r   rh   r   rc   Úxml.etree.ElementTreer   r   r   r   r    ÚScannerr%   r'   r1   r2   re   rn   r   r   r   r   Ú<module>   s0   	û
	
^