
    XiG                         d dl Z d dlZd dlmc mZ d dlmZ d dlmZ  G d de      Z	 G d de j                        Z G d d	e      Z G d
 de j                        Z G d de      Z G d de j                        Zy)    N)SimpleTagInlineProcessor)Preprocessorc                        e Zd ZdZdZej                  ej                  d      ej                  d            Z fdZ	d Z
d Z xZS )PlantUMLPreprocessorz@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/utf-8c                 v    t         |   |       t        j                  dt        j                        | _        y )Nz@startuml\s*(.*?)\s*@enduml)super__init__recompileDOTALLpattern)selfmd	__class__s     './modules/kaiten/markdown/extensions.pyr
   zPlantUMLPreprocessor.__init__   s'    zz"@"))L    c                     dd l }dd l}d| d}|j                  |j                  d            }|dd }|j	                  |      j                  | j                        j                  d      S )Nr   z
@startuml
z
@endumlr      )base64zlibcompressencode	b64encode	translateb64_to_plantumldecode)r   textr   r   zlibbed_strcompressed_strs         r   encode_plantumlz$PlantUMLPreprocessor.encode_plantuml   sg    TF),mmDKK$89$Qr*/99$:N:NOVVW^__r   c                      dj                  |      } fd} j                  j                  ||      }|j                  d      S )N
c                 j    | j                  d      }j                  |      }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"   )matchuml_codeencodedplantuml_urlr   s       r   replace_plantumlz2PlantUMLPreprocessor.run.<locals>.replace_plantuml!   sY    {{1~H**84GCG9MLEEMJ O)N*CG9 Mr   )joinr   subsplit)r   linesr   r,   new_texts   `    r   runzPlantUMLPreprocessor.run   s>    yy		 <<##$4d;~~d##r   )__name__
__module____qualname__plantuml_alphabetbase64_alphabetbytes	maketransr   r   r
   r"   r2   __classcell__)r   s   @r   r   r   	   sI    ZXOoow'  )O
M`$r   r   c                       e Zd ZdZd Zy)PlantUMLExtensionuH   
    Расширение Markdown для PlantUML диаграмм
    c                 P    |j                   j                  t        |      dd       y )Nplantuml   )preprocessorsregisterr   )r   r   s     r   extendMarkdownz PlantUMLExtension.extendMarkdown4   s     
!!"6r":JLr   Nr3   r4   r5   __doc__rB    r   r   r<   r<   0   s    Mr   r<   c                       e Zd Zd Zy)MentionProcessorc                     |j                  d      }t        j                  d      }|j                  d|       |j                  dd       d| |_        ||j                  d      |j                  d      fS )Nr   spanzdata-user-nameclasszuser-mention@r   )r'   etreeElementsetr   startend)r   mdatausernameelems        r   handleMatchzMentionProcessor.handleMatch9   sd    771:}}V$!8,.)zN	QWWQZq))r   Nr3   r4   r5   rU   rE   r   r   rG   rG   8   s    *r   rG   c                       e Zd ZdZd Zy)MentionExtensionu\   
    Расширение Markdown для упоминаний пользователя
    c                 V    t        dd      }|j                  j                  |dd       y )Nu$   (^|\s)@([a-zA-Zа-яА-ЯёЁ0-9_]+)rI   mention   )rG   inlinePatternsrA   )r   r   mention_procs      r   rB   zMentionExtension.extendMarkdownF   s(    '(OQWX
""<C@r   NrC   rE   r   r   rX   rX   B   s    Ar   rX   c                       e Zd Zd Zy)StrikethroughProcessorc                     t        j                  d      }|j                  dd       |j                  d      |_        ||j                  d      |j                  d      fS )NrI   styleztext-decoration: line-through;r   r   )rL   rM   rN   r'   r   rO   rP   )r   rQ   rR   rT   s       r   rU   z"StrikethroughProcessor.handleMatchL   sK    }}V$:;GGAJ	QWWQZq))r   NrV   rE   r   r   r_   r_   K   s    *r   r_   c                       e Zd ZdZd Zy)StrikethroughExtensionuT   
    Расширение Markdown для зачеркнутого текста
    c                 V    t        dd      }|j                  j                  |dd       y )Nz(\~\~)(.+?)(\~\~)rI   strikethrough   )r_   r\   rA   )r   r   strikethrough_procs      r   rB   z%StrikethroughExtension.extendMarkdownW   s)    34H&Q
""#5Lr   NrC   rE   r   r   rc   rc   S   s    Mr   rc   )markdownr   xml.etree.ElementTreerL   ElementTreemarkdown.inlinepatternsr   markdown.preprocessorsr   r   	Extensionr<   rG   rX   r_   rc   rE   r   r   <module>rn      sz     	 % % < /$$< $$NM** M*/ *Ax)) A*5 *MX// Mr   