
    e                        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
 Zd Zd Zd Z e	j                   defdefdefdefdg      ZddZddZ G d de      Z G d de      Zd Zy)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                R    |j                  dd      \  }}||j                  d      fS )N=r   "splitstripstkvs       ?/usr/lib/python3/dist-packages/markdown/extensions/attr_list.py_handle_double_quoter   %   '    773?DAqaggcl?    c                R    |j                  dd      \  }}||j                  d      fS )Nr   r   'r   r   s       r   _handle_single_quoter   *   r   r   c                &    |j                  dd      S )Nr   r   )r   r   r   s     r   _handle_key_valuer   /   s    773?r   c                j    |j                  d      rd|dd  fS |j                  d      rd|dd  fS ||fS )N.r   #id)
startswithr   s     r   _handle_wordr$   3   sC    ||CAabEz||CQqrU{a4Kr   z[^ =]+=".*?"z[^ =]+='.*?'z[^ =]+=[^ =]+z[^ =]+) Nc                2    t         j                  |       d   S )z= Parse attribute list and return a list of attribute tuples. r   )_scannerscan)strs    r   	get_attrsr*   D   s    ==a  r   c                    | j                   dv S )N)h1h2h3h4h5h6)tag)elems    r   isheaderr4   I   s    88;;;r   c                     e Zd ZdZ ej
                  dj                  e            Z ej
                  dj                  e            Z ej
                  dj                  e            Z	 ej
                  d      Z
d
dZddZddZy	)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]+c                @   |j                         D ]
  }| j                  j                  |j                        rg| j                  }t        |      s|j                  dv r| j                  }t        |      r|j                  dk(  rd }t        |      D ]  \  }}|j                  dv s|} n |{|d   j                  rl|j                  |d   j                        }|s| j                  ||j                  d             |d   j                  d |j                          |d   _	        ||dkD  r||dz
     j                  rv|j                  ||dz
     j                        }|sY| j                  ||j                  d             ||dz
     j                  d |j                          ||dz
     _	        |j                  s|j                  |j                        }|s| j                  ||j                  d             |j                  d |j                          |_        t        |      r|d   j                  r|j                  |d   j                        }|sX| j                  ||j                  d             |d   j                  d |j                          |d   _	        t        |      s|d   j                  j                  d      j                         |d   _	        |j                  s|j                  |j                        }|s| j                  ||j                  d             |j                  d |j                          |_        t        |      sa|j                  j                  d      j                         |_        |j                  s| j                   j#                  |j                        }|s| j                  ||j                  d             |j                  |j%                         d  |_	         y )N)dttdthli)ulolr   r   r!   )itermdis_block_levelr2   BLOCK_REr4   	HEADER_RElen	enumeratetailsearchassign_attrsgroupstarttextrstrip	INLINE_REmatchend)selfdocr3   REposichildms           r   runzAttrListTreeprocessor.runY   s   HHJ 9	8Dww%%dhh/]]D>TXX1C%CBt9T!1C$-dO "5 994"#C!" {tBx}}IId2hmm4 --dAGGAJ?,0HMM*1779,EDHMS1Wc!e9I9IIId3q5k&6&67 --dAGGAJ?/3CE{/?/?
/KDQK,IIdii0 --dAGGAJ?(,		*1779(=DIY48==		$r(--0A))$
;(,Rjqwwy(AR#D>,0HMM,@,@,E,L,L,NDHMYY		$)),A))$
;$(IIjqwwy$9	#D>(,		(8(8(=(D(D(FDI 99,,TYY7A))$
;$(IIaeegh$7	s9	8r   c                   t        |      D ]t  \  }}|dk(  rI|j                  d      }|r#|j                  ddj                  ||             A|j                  d|       T|j                  | j	                  |      |       v y)z Assign `attrs` to element. r    classz{} {}N)r*   getsetformatsanitize_name)rP   r3   attrsr   r   clss         r   rH   z"AttrListTreeprocessor.assign_attrs   st    e$ 
	3DAqCxhhw'HHWgnnS!&<=HHWa( ++A.2
	3r   c                :    | j                   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)rP   names     r   r]   z#AttrListTreeprocessor.sanitize_name   s    
 ||T**r   N)rQ   r	   returnNone)r3   r	   r^   r)   re   rf   )rd   r)   re   r)   )__name__
__module____qualname__BASE_RErecompiler\   rC   rB   rM   rb   rW   rH   r]    r   r   r6   r6   M   s~    2G

>009:Irzz*11':;H

6==12Ibjj H IG:8x3+r   r6   c                      e Zd ZdZd Zy)AttrListExtensionz. Attribute List extension for Python-Markdown c                r    |j                   j                  t        |      dd       |j                  |        y )N	attr_list   )treeprocessorsregisterr6   registerExtension)rP   r@   s     r   extendMarkdownz AttrListExtension.extendMarkdown   s.    
""#8#<k1M
T"r   N)rg   rh   ri   __doc__rv   rm   r   r   ro   ro      s
    8#r   ro   c                     t        di | S )Nrm   )ro   )kwargss    r   makeExtensionrz      s    &v&&r   )r)   r)   re   zlist[tuple[str, str]])r3   r	   re   bool)rw   
__future__r   typingr    r   rs   r   rk   xml.etree.ElementTreer	   r   r   r   r$   Scannerr'   r*   r4   r6   ro   rz   rm   r   r   <module>r      s   " #    * 	-

 2::*+*+() !
<[+M [+|#	 #'r   