
    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dS )    N)SimpleTagInlineProcessor)Preprocessorc                        e Zd ZdZdZe                    e                    d          e                    d                    Z fdZ	d Z
d Z xZS )PlantUMLPreprocessorz@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/utf-8c                     t                                          |           t          j        dt          j                  | _        d S )Nz@startuml\s*(.*?)\s*@enduml)super__init__recompileDOTALLpattern)selfmd	__class__s     './modules/kaiten/markdown/extensions.pyr
   zPlantUMLPreprocessor.__init__   s5    z"@")LL    c                    dd l }dd l}d| d}|                    |                    d                    }|dd         }|                    |                              | 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   s    ,T,,,mmDKK$8$899$QrT*//99$:NOOVVW^___r   c                      d                     |          } fd} j                            ||          }|                    d          S )N
c                 z    |                      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"   )matchuml_codeencodedplantuml_urlr   s       r   replace_plantumlz2PlantUMLPreprocessor.run.<locals>.replace_plantuml!   sh    {{1~~H**844GMGMMLEM ) DK  r   )joinr   subsplit)r   linesr   r,   new_texts   `    r   runzPlantUMLPreprocessor.run   sY    yy		 		 		 		 		 <##$4d;;~~d###r   )__name__
__module____qualname__plantuml_alphabetbase64_alphabetbytes	maketransr   r   r
   r"   r2   __classcell__)r   s   @r   r   r   	   s        ZXOoow''  )) O
M M M M M` ` `$ $ $ $ $ $ $r   r   c                       e Zd ZdZd ZdS )PlantUMLExtensionuH   
    Расширение Markdown для PlantUML диаграмм
    c                 X    |j                             t          |          dd           d S )Nplantuml   )preprocessorsregisterr   )r   r   s     r   extendMarkdownz PlantUMLExtension.extendMarkdown4   s,    
!!"6r":":JLLLLLr   Nr3   r4   r5   __doc__rB    r   r   r<   r<   0   s2         M M M M Mr   r<   c                       e Zd Zd ZdS )MentionProcessorc                    |                     d          }t          j        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elems        r   handleMatchzMentionProcessor.handleMatch9   sw    771::}V$$!8,,,.)))"NN	QWWQZZ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dS )MentionExtensionu\   
    Расширение Markdown для упоминаний пользователя
    c                 ^    t          dd          }|j                            |dd           d S )Nu$   (^|\s)@([a-zA-Zа-яА-ЯёЁ0-9_]+)rI   mention   )rG   inlinePatternsrA   )r   r   mention_procs      r   rB   zMentionExtension.extendMarkdownF   s4    '(OQWXX
""<C@@@@@r   NrC   rE   r   r   rX   rX   B   s2         A A A A Ar   rX   c                       e Zd Zd ZdS )StrikethroughProcessorc                     t          j        d          }|                    dd           |                    d          |_        ||                    d          |                    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   sX    }V$$:;;;GGAJJ	QWWQZZq))r   NrV   rE   r   r   r_   r_   K   s#        * * * * *r   r_   c                       e Zd ZdZd ZdS )StrikethroughExtensionuT   
    Расширение Markdown для зачеркнутого текста
    c                 ^    t          dd          }|j                            |dd           d S )Nz(\~\~)(.+?)(\~\~)rI   strikethrough   )r_   r\   rA   )r   r   strikethrough_procs      r   rB   z%StrikethroughExtension.extendMarkdownW   s5    34H&QQ
""#5LLLLLr   NrC   rE   r   r   rc   rc   S   s2         M M M M Mr   rc   )markdownr   xml.etree.ElementTreerL   ElementTreemarkdown.inlinepatternsr   markdown.preprocessorsr   r   	Extensionr<   rG   rX   r_   rc   rE   r   r   <module>rn      s    				 % % % % % % % % % < < < < < < / / / / / /$$ $$ $$ $$ $$< $$ $$ $$NM M M M M* M M M* * * * */ * * *A A A A Ax) A A A* * * * *5 * * *M M M M MX/ M M M M Mr   