U
    \> eÕ  ã                   @  sŽ   d Z ddlmZ ddlmZ ddlmZ ddlm  m	Z ddl
Z
ddlmZ d	d	d	d	d
œdd„ZG dd„ deƒZG dd„ deƒZdd„ ZdS )z‹
Converts `[[WikiLinks]]` to relative links.

See the [documentation](https://Python-Markdown.github.io/extensions/wikilinks)
for details.
é    )Úannotationsé   )Ú	Extensioné   )ÚInlineProcessorN)ÚAnyÚstr)ÚlabelÚbaseÚendÚreturnc                 C  s   t  dd| ¡}d |||¡S )z1 Build a URL from the label, a base, and an end. z([ ]+_)|(_[ ]+)|([ ]+)Ú_z{}{}{})ÚreÚsubÚformat)r	   r
   r   Zclean_label© r   úA/tmp/pip-unpacked-wheel-wj0og6ym/markdown/extensions/wikilinks.pyÚ	build_url   s    r   c                      s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚWikiLinkExtensionz# Add inline processor to Markdown. c                   s2   ddgddgddgt dgdœ| _tƒ jf |Ž d S )Nú/z%String to append to beginning or URL.zString to append to end of URL.ÚwikilinkzCSS hook. Leave blank for none.z Callable formats URL from label.)Úbase_urlÚend_urlÚ
html_classr   )r   ÚconfigÚsuperÚ__init__)ÚselfÚkwargs©Ú	__class__r   r   r   (   s    üzWikiLinkExtension.__init__c                 C  s2   || _ d}t||  ¡ ƒ}||_ |j |dd¡ d S )Nz\[\[([\w0-9_ -]+)\]\]r   éK   )ÚmdÚWikiLinksInlineProcessorZ
getConfigsZinlinePatternsÚregister)r   r"   ZWIKILINK_REZwikilinkPatternr   r   r   ÚextendMarkdown2   s
    z WikiLinkExtension.extendMarkdown)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   Ú__classcell__r   r   r   r   r   %   s   
r   c                      sH   e Zd ZdZdddœ‡ fdd„Zdddd	œd
d„Zddœdd„Z‡  ZS )r#   z Build link from `wikilink`. r   zdict[str, Any])Úpatternr   c                   s   t ƒ  |¡ || _d S ©N)r   r   r   )r   r+   r   r   r   r   r   ?   s    z!WikiLinksInlineProcessor.__init__zre.Match[str]z$tuple[etree.Element | str, int, int])ÚmÚdatar   c           	      C  s„   |  d¡ ¡ rj|  ¡ \}}}|  d¡ ¡ }| jd |||ƒ}t d¡}||_| d|¡ |rn| d|¡ nd}|| d¡| 	d¡fS )Nr   r   ÚaÚhrefÚclassÚ r   )
ÚgroupÚstripÚ_getMetar   ÚetreeÚElementÚtextÚsetÚstartr   )	r   r-   r.   r   r   r   r	   Úurlr/   r   r   r   ÚhandleMatchC   s    
z$WikiLinksInlineProcessor.handleMatchztuple[str, str, str])r   c                 C  sˆ   | j d }| j d }| j d }t| jdƒr~d| jjkrF| jjd d }d| jjkrb| jjd d }d| jjkr~| jjd d }|||fS )	z$ Return meta data or `config` data. r   r   r   ÚMetaZwiki_base_urlr   Zwiki_end_urlZwiki_html_class)r   Úhasattrr"   r=   )r   r   r   r   r   r   r   r5   Q   s    


z!WikiLinksInlineProcessor._getMeta)r&   r'   r(   r)   r   r<   r5   r*   r   r   r   r   r#   <   s   r#   c                  K  s
   t f | ŽS r,   )r   )r   r   r   r   ÚmakeExtension`   s    r?   )r)   Ú
__future__r   r2   r   Zinlinepatternsr   Úxml.etree.ElementTreer6   ÚElementTreer   Útypingr   r   r   r#   r?   r   r   r   r   Ú<module>   s   $