
    eiL                       d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmc mZ dd	lZdd	lZdd	lZdd
lmZmZmZ erddlmZ  ej6                  dj9                  ej:                  d   ej:                  dd dz  ej:                  d               Z ej6                  d      Z ej6                  d      Z  ej6                  d      Z! ej6                  d      Z" ej6                  d      Z# G d d      Z$d!dZ%d"dZ&d#dZ' G d de	      Z( G d de      Z) G d de      Z* G d d e      Z+y	)$zGeneric blocks extension.    )annotations)	ExtensionMarkdown)BlockProcessor)Treeprocessor)BlockParser)util   N)castAnyTYPE_CHECKING   )Blockz^([\> ]*){}({}){}$z([0-9]+)zC(?:^|\n)[ ]{0,3}(/{3,})[ ]*([\w-]+)[ ]*(?:\|[ ]*(.*?)[ ]*)?(?:\n|$)z'(?m)(?:^|\n)[ ]{0,3}(/{3,})[ ]*(?:\n|$)z(?m)^[ ]{0,3}(-{3})[ ]*(?:\n|$)z"(?m)^(?:[ ]{4,}(?!\s).*?(?:\n|$))+c                      e Zd ZdZddZy)
BlockEntryzTrack Block entries.c                <    || _         || _        || _        d| _        y)zBlock entry.FN)blockelparenthungry)selfr   r   r   s       Z/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/pymdownx/blocks/__init__.py__init__zBlockEntry.__init__1   s      $
!#%+!    N)r   r   r   etree.Elementr   r   returnNone)__name__
__module____qualname____doc__r    r   r   r   r   .   s
    "r   r   c                    d}	 t        j                  |       }|i }t        |t              sd}t        d|      S # t        $ r Y w xY w)zE
    Get frontmatter from string.

    YAML-ish key value pairs.
    Ndict[str, Any])yaml	safe_load
isinstancedict	Exceptionr   )stringfrontmatters     r   get_frontmatterr-   :   sZ     KnnV,K+t,K  +..  s   +; 	AAc                h    g }| j                  d      D ]  }||z
  }|j                  ||d         |S )z0Reindent the code to where it is supposed to be.
N)splitappend)textposlevelindentedlineindexs         r   reindentr8   O   sC     H

4  &eUV%& Or   c                   d}	 ddl m} | j                  d   }t        ||      r|j                  }g }|D ]  }g }|j                  d      D ]k  }	t        j                  |	      }
|
r?|
j                  d      }t        |
j                  d            }d}|Z|j                  j                  |d      \  }}|9t        |||      }|j                  |       |j                  j                  |       ||rt!        |j                  d      d         }|t        | j"                  j$                        k  r\| j"                  j$                  |   }t        |t&        j(                        rt'        j*                  |d	d
      }|j-                  |       |H|j-                  |	       [|j-                  |	       n |j-                  dj/                  |              |S # t
        $ r Y w xY w)zlLook for SuperFences code placeholders and other HTML stash placeholders and revert them back to plain text.Nr
   )SuperFencesBlockPreprocessorfenced_code_blockr/   r   )NN:unicodehtml)encodingmethod)superfencesr:   preprocessorsr(   	extensionr*   r0   FENCED_BLOCK_REmatchgrouplenstashgetr8   extendremoveint	htmlStashrawHtmlBlocksetreeElementtostringr1   join)mdblocksis_rawrA   r:   	processor
new_blocksr   	new_linesr6   mkeyindent_leveloriginalr3   coder7   s                    r   unescape_markdownr^   Y   s    K>$$%89	i!=>#--K J 0	KK% 	'D%%d+Aggaj  #1771:*$/$5$5$9$9#|$LMHc+'#|D!((.#))005 #		#q 12Es2<<#=#=>>#%<<#=#=e#D%h>',~~h[a'bH!((2 #$$T*  &9	': 	$))I./?0B K  s   -G   	G-,G-c                  ,     e Zd ZdZd fdZddZ xZS )BlocksTreeprocessorzBlocks tree processor.c                2    t         |   |       || _        y)zInitialize.N)superr   rT   )r   rS   rT   	__class__s      r   r   zBlocksTreeprocessor.__init__   s     	r   c                    | j                   j                  rb| j                   j                  j                  d      }|j                  j	                  |j
                         | j                   j                  rayy)zUpdate tab IDs.r   N)rT   inline_stackpopr   on_inline_endr   )r   rootentrys      r   runzBlocksTreeprocessor.run   sP     kk&&KK,,003EKK%%ehh/ kk&&r   )rS   r   rT   BlocksProcessor)rh   r   r   r   )r   r    r!   r"   r   rj   __classcell__rc   s   @r   r`   r`      s     0r   r`   c                       e Zd ZdZd fdZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZ xZS )rk   zGeneric block processor.c                \   || _         i | _        i | _        dh| _        t	        |j
                  j                               | _        | j                  j                  d       h d| _	        h d| _
        t	        | j                        | j                  | j                  z  | j                  z  z
  | _        | j                  | j                  z  | _        t        | 9  |       i | _        g | _        g | _        d| _        d| _        d| _        t*        | _        t.        | _        t2        | _        y)zInitialization.hrr>   >   pdddth1h2h3h4h5h6litdthlegendaddresssummary>   prer]   mathstylecanvasoptionscripttextareaN)rS   rT   config
empty_tagssetblock_level_elementscopyblock_level_tagsadd	span_tagsraw_tags
block_tagsspan_and_blocks_tagsrb   r   trackersstackre   workingcached_parentcached_blockRE_STARTstartRE_ENDendRE_INDENT_YAML_LINE	yaml_line)r   parserrS   rc   s      r   r   zBlocksProcessor.__init__   s     /113' #B$;$;$@$@$B C!!&)
 cd3348VY]YhYh8hi$(OOdnn$D!  46')
.0*. 488< 
,r   c                l   g }|j                  d      }|D ]N  }|j                  d|z        r|j                  ||d        ,|j                         s|j                  d       N n |r.dj	                  |      dj	                  |t        |      d       fS dj	                  |t        |      d       dfS )z;Remove a tab from the front of each line of the given text.r/    N )r0   
startswithr1   striprR   rG   )r   r2   lengthnewtextlinesr6   s         r   detab_by_lengthzBlocksProcessor.detab_by_length   s     

4  	DsV|,tFG}-ZZ\r"	 99W%tyys7|}1E'FFFyys7|}-.22r   c                    |j                   | j                  v rt        d|j                    d      || j                  |j                   <   || j                  |j                   <   i | j                  |j                   <   y)zRegister a block.zThe block name z is already registered!N)NAMErT   
ValueErrorr   r   )r   br   s      r   registerzBlocksProcessor.register   sc     66T[[ qvvh6MNOOAFF$AFF "affr   c                   | j                  |      y| j                  j                  |      }|r(|j                         dkD  r|d|j                          nd}|j                  d      j	                         }|| j
                  v r | j
                  |   t        |j                  d            | j                  |   | | j                  |         }||j                         d }| j                  ||j                        \  }}|j                  d      }	|du}
|
r |j                  ||	fi |}
|
r(||f| _        || j                  j                  ||g       |
S y)z+Test to see if we should process the block.NTr   r
   r      F)
get_parentr   searchrF   lowerrT   rG   r   r   r   split_headerr   	_validater   r   parseBlocks)r   r   r   rY   pre_textnamegeneric_blockoptionsthe_rest	argumentsstatuss              r   testzBlocksProcessor.test   sS    ??6". JJe$,-GGIMuZaggi(tH 771:##%Dt{{" 1D 1#aggaj/4==QUCVX\^b^i^ijn^o p aeegh %)$5$5e]=Q=Q$R!GGAJ	 !, 4]44VYR'RF )6(AD%  +//
Cr   c                    | j                   j                          | j                  j                          d| _        | j                  j                         D ci c]  }|i  c}| _        yc c}w zReset.N)r   clearre   r   rT   keysr   )r   ds     r   _resetzBlocksProcessor._reset  sS     	

!(,(8(8(:;1B;;s   
A+c                8   d}d}d}d}| j                   j                  |      D ]#  }t        |j                  d            |k(  s!|} n |rI|d|j	                  d       }|r|j                  d      r|dd n|}d}||j                  d      d }|r|}n|}|||fS )z;Search for end and split the blocks while removing the end.NFr   r   r/   r   T)r   finditerrG   rF   r   endswith)	r   r   r   goodbadr   rY   rE   temps	            r   	split_endzBlocksProcessor.split_end  s      XX&&u- 	E5;;q>"f,	 !''!*%D$(MM$$7tCRyTC q#D D S#~r   c                n   d}g }| j                   j                  |      D ]#  }t        |j                  d            |k(  s!|} n |r:||j	                  d      d }|j                  d|       |d|j	                  d       }| j                  j                  |      }|st        j                  |j                  d            }|j                  d||j                         d        |j                         rt        |      dj                  |      fS |j                  d|       i dj                  |      fS )zSplit, YAML-ish header out.Nr   r   r/   )r   r   rG   rF   r   insertr   rE   textwrapdedentr   r-   rR   )r   r   r   rY   rT   rE   r   r   s           r   r   zBlocksProcessor.split_header5  s    XX&&u- 	E5;;q>"f,	 
$CMM!S!+1771:&ENN  '=__QWWQZ0FMM!U15578_-||~&v.		&0AAAa499V$$$r   c                   | j                   | j                   }d| _         |S |}|a| j                  s	 y| j                  d   j                  r$| j                  d   j                  |u r	|| _         |S || j	                  |      }|ay)zGet parent.Nr   )r   r   r   r   	lastChild)r   r   r   s      r   r   zBlocksProcessor.get_parentQ  s     )''F!%DM%+::  zz"~$$B)>)>$)F%)"~~d+  r   c                2    |j                   | j                  v S )zIs tag raw.)tagr   r   r   s     r   rU   zBlocksProcessor.is_rawe  s     ww$--''r   c                2    |j                   | j                  v S )zIs tag block.)r   r   r   s     r   is_blockzBlocksProcessor.is_blockj  s     ww$//))r   c                   |r`| j                   rS|j                  d      }| j                   d   }|j                  j                  |j                        }|j                         D ci c]  }|D ]  }||  }}}t        | j                         dkD  r| j                   d   j                  nd}	d}
|	)|j                  |	d      }	|	|	j                  dv r|
dz  }
*	 | j                  t        t        |      |
| j                  z        \  }}|r|j                  d|       | j                  ||j                  j                        \  }}}||j                  d|       |||j                  j!                         }|dvrd}|dk(  xs |dk(  xr | j#                  |      }|d	k(  xs |dk(  xr | j%                  |      }|s|st        |      rt'        |      d   nd}||j(                  n|j*                  }d
j-                  t/        | j0                  |g|            j3                  d      }|r||s|nd
|z   z  }n|}||rt5        j6                  |      n||_        n|rt5        j6                  |      n||_        n| j8                  j:                  j=                  d       | j>                  }|| _        | j8                  jA                  ||       | j8                  j:                  jC                          || _        |rM|j                  jE                  |j                         | jF                  jI                  |       | j                   d= |n|r| j                   rS| j                   rd| j                   d   _%        yyc c}}w )zParse the blocks.r   r   r   Nrz   rr   )r   inlinerawautor   r   z

r/   rT   T)&r   rf   r   on_addr   iterrG   rI   r   r   r   str
tab_lengthr   r   r   on_markdownr   rU   listr2   tailrR   r^   rS   r   mutilAtomicStringr   stater   r   
parseChunkreset_endre   r1   r   )r   rT   current_parentr   ri   targetrq   c
parent_mapr   rz   ar   r   moder   	is_atomicchildr2   r   s                       r   parse_blockszBlocksProcessor.parse_blockso  s#    "JJqMA JJrNE[[''1F )7(;(;(=I1qI!!Q$I!IJI*-djj/A*=TZZ^&&4FB$#5%zz\1a''S!b4??6JKDAqa# ..EKK,>,>?KAsCa% }!3{{..099!D7?Xtv~/W$--PVBW EMUdfn.TVAT	 H03FDL,E*/-6;;UZZD$5dggsI$NOUUVZ[A
: }BKe&8&8&>QU
 BKU%7%7%=PT
 KK%%))(3"llG#(DLKK**615KK%%++-#*DL   *!!((/JJrN ~_ b ::$(DJJrN! K Js   )Nc                    | j                  |      }|W||j                  urH|j                  j                  |j                        }|j	                  |       |j                  |       yyy)a;  
        Capture leaked content.

        Old school, non-block admonitions, details,
        and content tabs strongly control where there content is inserted and
        can cause content leakage outside of the Blocks container.
        Look for such content and pull it back into the container if found.
        N)r   r   r   r   rK   r1   )r   r   ri   
last_childr   s        r   capture_leaked_contentz&BlocksProcessor.capture_leaked_content  s\     ^^F+
!j&@[[''1FMM*%MM*% 'A!r   c                   | j                  |      }||}| j                  r| j                  \  }}d| _        |j                  d       |r|j                  d|       |J|j                  dv r<|j
                  }|j
                  r$d|_        t        j                  |d      }||_        |j                  |      }| j                  j                  t        |||             | j                  ||       yt        t        | j                              D ]Y  }	| j                  |	   }
|
j                  s||
j                   u s.| j#                  ||
       d|
_        | j                  ||        y y)z!Convert to details/summary block.Nr   r   r   rq   F)r   r   rf   r   r   r2   rO   
SubElement_creater   r1   r   r   rangerG   r   r   r   )r   r   rT   r   r   r   r2   rq   r   rri   s              r   rj   zBlocksProcessor.run  sM    v&F #'#4#4 M5 $D JJqMa' !fjjL&@{{;;"$FK((5A!AF &&v.B JJjFCD ff- 3tzz?+ 

1<<Fell$: //> $)EL%%ff5r   )r   r   rS   r   r   r   )r2   r   r   rL   r   ztuple[str, str])r   ztype[Block]r   r%   r   r   )r   r   r   r   r   boolr   r   )r   r   r   rL   r   z#tuple[str | None, str | None, bool])r   r   r   rL   r   z!tuple[dict[str, Any] | None, str])r   r   r   zetree.Element | None)r   r   r   r   )rT   	list[str]r   r   r   r   )r   r   ri   r   r   r   )r   r   rT   r   r   r   )r   r    r!   r"   r   r   r   r   r   r   r   r   rU   r   r   r   rj   rl   rm   s   @r   rk   rk      sL    "(-T3 #)V<@%8((
*
V)p& 0r   rk   c                       e Zd ZdZddZddZy)BlocksMgrExtensionzAdd generic Blocks extension.c                R   |j                  |        t        j                  |dg       t        |j                  |      | _        |j                  j                  j                  | j
                  dd       t        || j
                        }|j                  j                  |dd       y) Add Blocks to Markdown instance./rT   g(\V@blocks_on_inline_endg=
ףp3@N)
registerExtensionr	   escape_charsrk   r   rC   blockprocessorsr   r`   treeprocessors)r   rS   trees      r   extendMarkdownz!BlocksMgrExtension.extendMarkdown  s     	T""se$(B7
		!!**4>>8UK"2t~~6
""4)?Gr   c                8    | j                   j                          yr   )rC   r   )r   s    r   r   zBlocksMgrExtension.reset  s     	r   NrS   r   r   r   r   )r   r    r!   r"   r  r   r#   r   r   r   r   
  s    '
H r   r   c                  (    e Zd ZdZddZddZddZy)	BlocksExtensionzBlocks Extension.c                    d|j                   j                  vr)t               }|j                  |       |j                  }|S t        d|j                   j                  d         }|S )r   rT   rk   )r   r  r   r  rC   r   )r   rS   extmgrs       r   register_block_mgrz"BlocksExtension.register_block_mgr"  s_     299444$&Cr"--C 
 ("))*C*CH*MNC
r   c                J    | j                  |      }| j                  ||       y)zExtend markdown.N)r  extendMarkdownBlocks)r   rS   r  s      r   r  zBlocksExtension.extendMarkdown-  s$     %%b)!!"c*r   c                     y)zExtend Markdown blocks.Nr#   )r   rS   	block_mgrs      r   r  z$BlocksExtension.extendMarkdownBlocks3  s    r   N)rS   r   r   rk   r  )rS   r   r  rk   r   r   )r   r    r!   r"   r  r  r  r#   r   r   r	  r	    s    	+&r   r	  )r+   r   r   zdict[str, Any] | None)r2   r   r3   rL   r4   rL   r   r   )rS   r   rT   r   rU   r   r   r   ),r"   
__future__r   markdownr   r   markdown.blockprocessorsr   markdown.treeprocessorsr   markdown.blockparserr   r	   r   r   xml.etree.ElementTreerO   ElementTreerer&   r   typingr   r   r   r   r   compileformatHTML_PLACEHOLDERrD   r   r   RE_YAML_STARTRE_YAML_ENDr   r   r-   r8   r^   r`   rk   r   r	  r#   r   r   <module>r      s:    " ( 3 1 , "  % % 	   + + "**  q!q${2r" 2::J 
.

 

=>bjj& !bjj!FG 	" 	"/*.b0- 0$kn k\   *&i &r   