U
    Th                     @   s   d dl Z d dlZd dlm  mZ d dlmZ d dlmZ G dd deZ	G dd de j
ZG dd	 d	eZG d
d de j
ZG dd deZG dd de j
ZdS )    N)SimpleTagInlineProcessor)Preprocessorc                       sL   e Zd ZdZdZeededZ fddZ	dd Z
dd	 Z  ZS )
PlantUMLPreprocessorz@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/utf-8c                    s    t  | tdtj| _d S )Nz@startuml\s*(.*?)\s*@enduml)super__init__recompileDOTALLpatternselfmd	__class__ './modules/kaiten/markdown/extensions.pyr      s    zPlantUMLPreprocessor.__init__c                 C   sP   dd l }dd l}d| d}||d}|dd }||| jdS )Nr   z
@startuml
z
@endumlr      )base64zlibcompressencodeZ	b64encode	translateb64_to_plantumldecode)r   textr   r   Zzlibbed_strZcompressed_strr   r   r   encode_plantuml   s    z$PlantUMLPreprocessor.encode_plantumlc                    s.   d |} fdd} j||}|dS )N
c                    s6   |  d} |}d| }d| d| d| dS )N   z&https://www.plantuml.com/plantuml/svg/zP<div class="plantuml-diagram"><div class="plantuml-code" style="display: none;">z</div><img src="z" data-plantuml-encoded="z" alt="UML Diagram"></div>)groupr   )matchZuml_codeZencodedZplantuml_urlr   r   r   replace_plantuml!   s
    


z2PlantUMLPreprocessor.run.<locals>.replace_plantuml)joinr   subsplit)r   linesr   r#   Znew_textr   r"   r   run   s    
zPlantUMLPreprocessor.run)__name__
__module____qualname__Zplantuml_alphabetZbase64_alphabetbytes	maketransr   r   r   r   r(   __classcell__r   r   r   r   r   	   s   	r   c                   @   s   e Zd ZdZdd ZdS )PlantUMLExtensionuH   
    Расширение Markdown для PlantUML диаграмм
    c                 C   s   |j t|dd d S )NZplantuml   )preprocessorsregisterr   r   r   r   r   extendMarkdown4   s    z PlantUMLExtension.extendMarkdownNr)   r*   r+   __doc__r3   r   r   r   r   r/   0   s   r/   c                       s$   e Zd Z fddZdd Z  ZS )MentionPreprocessorc                    s   t  | d| _d S )Nu   @([a-zA-Zа-яА-ЯёЁ0-9_]+))r   r   r   r   r   r   r   r   9   s    zMentionPreprocessor.__init__c                 C   s,   g }|D ]}t | jd|}|| q|S )Nz9<span data-user-name="\1" class="user-mention">@\1</span>)r   r%   r   append)r   r'   Z	new_linesliner   r   r   r(   =   s    zMentionPreprocessor.run)r)   r*   r+   r   r(   r.   r   r   r   r   r6   8   s   r6   c                   @   s   e Zd ZdZdd ZdS )MentionExtensionu\   
    Расширение Markdown для упоминаний пользователя
    c                 C   s   |j t|dd d S )NZmention   )r1   r2   r6   r   r   r   r   r3   N   s    zMentionExtension.extendMarkdownNr4   r   r   r   r   r9   J   s   r9   c                   @   s   e Zd Zdd ZdS )StrikethroughProcessorc                 C   s8   t d}|dd |d|_||d|dfS )NspanZstyleztext-decoration: line-through;r   r   )etreeZElementsetr    r   startend)r   mdataelemr   r   r   handleMatchS   s    
z"StrikethroughProcessor.handleMatchN)r)   r*   r+   rD   r   r   r   r   r;   R   s   r;   c                   @   s   e Zd ZdZdd ZdS )StrikethroughExtensionuT   
    Расширение Markdown для зачеркнутого текста
    c                 C   s   t dd}|j|dd d S )Nz(\~\~)(.+?)(\~\~)r<   Zstrikethrough   )r;   ZinlinePatternsr2   )r   r   Zstrikethrough_procr   r   r   r3   ^   s    
z%StrikethroughExtension.extendMarkdownNr4   r   r   r   r   rE   Z   s   rE   )Zmarkdownr   Zxml.etree.ElementTreer=   ZElementTreeZmarkdown.inlinepatternsr   Zmarkdown.preprocessorsr   r   Z	Extensionr/   r6   r9   r;   rE   r   r   r   r   <module>   s   '