U
    XiG                     @   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   )Zpreprocessorsregisterr   r   r   r   r   extendMarkdown4   s    z PlantUMLExtension.extendMarkdownNr)   r*   r+   __doc__r2   r   r   r   r   r/   0   s   r/   c                   @   s   e Zd Zdd ZdS )MentionProcessorc                 C   sN   | d}td}|d| |dd d| |_||d|dfS )Nr   spanzdata-user-nameclasszuser-mention@r   )r    etreeElementsetr   startend)r   mdatausernameelemr   r   r   handleMatch9   s    

zMentionProcessor.handleMatchNr)   r*   r+   rB   r   r   r   r   r5   8   s   r5   c                   @   s   e Zd ZdZdd ZdS )MentionExtensionu\   
    Расширение Markdown для упоминаний пользователя
    c                 C   s   t dd}|j|dd d S )Nu$   (^|\s)@([a-zA-Zа-яА-ЯёЁ0-9_]+)r6   Zmention   )r5   inlinePatternsr1   )r   r   Zmention_procr   r   r   r2   F   s    
zMentionExtension.extendMarkdownNr3   r   r   r   r   rD   B   s   rD   c                   @   s   e Zd Zdd ZdS )StrikethroughProcessorc                 C   s8   t d}|dd |d|_||d|dfS )Nr6   Zstyleztext-decoration: line-through;r   r   )r9   r:   r;   r    r   r<   r=   )r   r>   r?   rA   r   r   r   rB   L   s    
z"StrikethroughProcessor.handleMatchNrC   r   r   r   r   rG   K   s   rG   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(\~\~)(.+?)(\~\~)r6   Zstrikethrough   )rG   rF   r1   )r   r   Zstrikethrough_procr   r   r   r2   W   s    
z%StrikethroughExtension.extendMarkdownNr3   r   r   r   r   rH   S   s   rH   )Zmarkdownr   Zxml.etree.ElementTreer9   ZElementTreeZmarkdown.inlinepatternsr   Zmarkdown.preprocessorsr   r   Z	Extensionr/   r5   rD   rG   rH   r   r   r   r   <module>   s   '
	