
    ei                         d Z ddlZddlmc mZ ddlmZ ddlmZ ddl	m
Z
 ddl	mZmZ ddlmZ ddlmZ  G d	 d
e      Z G d de      Z G d de      ZdededefdZy)z
Extension for "enhanced" blockquotes.

This extension deviates from Python Markdown's original blockquote extension by:

- not grouping consecutive block quotes together.
- Allowing optional callout behavior that mimics GitHub or Obsidian.
    N)BlockProcessor)Treeprocessor)util)	ExtensionMarkdown)BlockParser)Anyc                        e Zd ZdZ ej
                  d      Z ej
                  d      Zdede	e
ef   ddf fdZd	ej                  d
e
defdZd	ej                  dee
   ddfdZde
de
fdZ xZS )QuotesProcessorzProcess blockquotes.z(^|\n)[ ]{0,3}>[ ]?(.*)z4> *\[!([\w-]+(?: *\| *[\w-]+)*)]([-+])?(.*?)(?:\n|$)parserconfigreturnNc                 8    t         |   |       |d   | _        y)Initialize.calloutsN)super__init__r   )selfr   r   	__class__s      Q/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/pymdownx/quotes.pyr   zQuotesProcessor.__init__   s     	 z*    parentblockc                 x    t        | j                  j                  |            xr t        j                          S )zTest for block quote.)boolREsearchr   nearing_recursion_limit)r   r   r   s      r   testzQuotesProcessor.test   s-     DGGNN5)*Q43O3O3Q/QQr   blocksc                    |j                  d      }g }d}| j                  j                  |      }|r|d|j                          }| j                  j                  ||g       ||j                         d j                  d      }|r| j                  rd}	d}
|D ]9  }|r0|j                         dk7  r| j                  j                  |      }	 n|
dz  }
; |	r|	j                  d      j                  d      D cg c]  }|j                          }}|	j                  d      r|	j                  d      d	k(  rd
nd}|	j                  d      r|	j                  d      j                         nd}|s|d   j                         }d||
<   |j                  |
|       dj                  |D cg c]  }| j                  |       c}      }|rdj                  |      |dni }t!        j"                  |d|      }| j                  j$                  j'                  d       | j                  j)                  ||       | j                  j$                  j+                          yc c}w c c}w )zCreate blockquote.r    N
>   |   +openclosed    )
data-alertdata-alert-collapse
blockquote)popr   r   startr   parseBlockssplitr   strip
RE_CALLOUTmatchgrouptitleinsertjoincleanetree
SubElementstateset
parseChunkreset)r   r   r    r   alertdetailsmbeforelinesm2indexlinexr8   lattrsquotes                    r   runzQuotesProcessor.run$   s    

1GGNN5!:AGGI&FKK##FVH5!'')*%++D1E! D

 3!__2248QJE	
 020A0A#0FG1QWWYGEGxx{,.HHQK3,>&H3588A;BHHQK--/BE  %a 0#%E%LLL.IIe<tzz!}<=E TYsxxwO^`  u= 	l+ue,!% H =s   <I+I$rI   c                     | j                   j                  |      }|j                         dk(  ry|r|j                  d      S |S )z$Remove `>` from beginning of a line.r$   r"   r'   )r   r6   r4   r7   )r   rI   rD   s      r   r;   zQuotesProcessor.cleanN   s=     GGMM$::<3771:Kr   )__name__
__module____qualname____doc__recompiler   r5   r   dictstrr	   r   r<   Elementr   r   listrN   r;   __classcell__r   s   @r   r   r      s    	.	/BSTJ+{ +DcN +t +R5== R R R
("%-- ("c ("t ("T	# 	# 	r   r   c                   H    e Zd ZdZdej
                  dej
                  fdZy)QuotesTreeprocessorzQConvert "special" quotes to the common output format for Admonitions and Details.rootr   c                 "   |j                  d      D ]  }|j                  j                  d      s |j                  j                  dd      }|r~d|_        |j	                  d      }|dk(  rd|j                  d<   |j                  j                  dd      j                  d	      }||j                  j                         d
k(  rd|_        nd|_        |j	                  d      }|j                  j                  dd      j                  d	      }|j                  d       |~|j                  j                         d
k(  ra|j                  j                  dd      j                  d	      }|j                  d       d	j                  d |D              |j                  d<   |j                  |j                  j                  dd             d	j                  d |D              |j                  d<   |j                  d= |j                  d=  |S )z'Find and convert "special" blockquotes.r/   r-   r.   r"   rC   *r)   classr,   psummarydiv
admonitionzadmonition-titlec              3   &   K   | ]	  }|s|  y wN .0_cs     r   	<genexpr>z*QuotesTreeprocessor.run.<locals>.<genexpr>s   s     8OB8O   c              3   &   K   | ]	  }|s|  y wrg   rh   ri   s     r   rl   z*QuotesTreeprocessor.run.<locals>.<genexpr>u   s     ,BBrR,Brm   )	iterattribgettagfindr3   lowerappendr:   )r   r^   bcollapsechildcc2s          r   rN   zQuotesTreeprocessor.run]   s    <( 	4Axx||L)88<<(=rB%AEFF3KE6)+1(Wb177<A(UYY__->#-E$-	!AEFF3KEWb177<AHH\*(UYY__->#-E"\\--gr:@@E		"45038Ob8O0OW-lB78$'HH,B!,B$B!HH\*HH23/	40 r   N)rP   rQ   rR   rS   r<   rX   rN   rh   r   r   r]   r]   Z   s     [ %-- r   r]   c                   @     e Zd ZdZdededdf fdZdeddfdZ xZS )	QuotesExtensionz,Add blockquotes extension to Markdown class.argskwargsr   Nc                 :    dddgi| _         t        |   |i | y)r   r   Fz6Enable GitHub/Obsidian style callouts - Default: FalseN)r   r   r   )r   r}   r~   r   s      r   r   zQuotesExtension.__init__~   s-      XY
 	$)&)r   mdc                    |j                  |        | j                         }|j                  j                  j	                  t        |j                  |      dd       |d   r'|j                  j	                  t        |      dd       yy)zAdd support for blockquotes.rM      r   quotesg=
ףp3@N)registerExtension
getConfigsr   blockprocessorsregisterr   treeprocessorsr]   )r   r   r   s      r   extendMarkdownzQuotesExtension.extendMarkdown   sq     	T""
		!!**?299f+MwXZ[*&&':2'>%P r   )	rP   rQ   rR   rS   r	   r   r   r   rZ   r[   s   @r   r|   r|   {   s6    6*c *S *T *Q Qd Qr   r|   r}   r~   r   c                      t        | i |S )zReturn extension.)r|   )r}   r~   s     r   makeExtensionr      s     D+F++r   )rS   rT   xml.etree.ElementTreer<   ElementTreemarkdown.blockprocessorsr   markdown.treeprocessorsr   markdownr   r   r   markdown.blockparserr   typingr	   r   r]   r|   r   rh   r   r   <module>r      sk    
 % % 3 1  ( , Dn DN- BQi Q*, , ,	 ,r   