
    eiI                         d 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d	d
ddddZddddddZd Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zd  Zy)!a  
Fancy lists in the style of Pandoc.

---
# A Python implementation of John Gruber's Markdown.

# Started by Manfred Stienstra (http://www.dwerg.net/).
# Maintained for a few years by Yuri Takhteyev (http://www.freewisdom.org).
# Currently maintained by Waylan Limberg (https://github.com/waylan),
# Dmitry Shachnev (https://github.com/mitya57) and Isaac Muse (https://github.com/facelessuser).

# Copyright 2007-2023 The Python Markdown Project (v. 1.7 and later)
# Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
# Copyright 2004 Manfred Stienstra (the original version)

# License: BSD (see LICENSE.md for details).
---

Adapted to support "fancy" behavior by Copyright 2024 Isaac Muse.

Work in progress, not fully tested.
    )BlockProcessor)Treeprocessor   )Block)BlocksExtensionN   
   2   d   i  i  )IVXLCDMdecimalzlower-alphazupper-alphazlower-romanzupper-roman1aAir   c                 4   | j                         } d}d}|t        |       k  ru|dz   t        |       k  rAt        | |      t        | |dz         k  r%|t        | |dz         t        | |      z
  z  }|dz  }n|t        | |      z  }|dz  }|t        |       k  ru|S )zv
    Convert Roman numeral to integer.

    Values should be validated before as no validation during conversion.
    r   r      )upperlen	ROMAN_MAP)stotalr   s      U/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/pymdownx/fancylists.py	roman2intr!   )   s     	
	A E	A
c!f*q53q6>i!o	!AE(0CCYqQx(9QqT?::EFA Yqt_$EFA c!f* L    c                   d     e Zd ZdZdZdgZddddddddddd
Z fd	Zd
 Zd Z	d Z
d Zd Z xZS )FancyOListProcessorz"Process fancy ordered list blocks.olr   r   r   r   r   )
zdot-decimalzparen-decimalz	dot-romanzparen-romanz	dot-ROMANzparen-ROMANz	dot-alphazparen-alphaz	dot-ALPHAzparen-ALPHAc                 R   t         |   |       |d   }d|v | _        d|v | _        |d   | _        |d   | _        d}d|v r|dz  }d|v r|d	z  }d|vr|d
z  }d|v r|dz  }t        j                  d| j                  dz
  |fz  t        j                        | _
        t        j                  d| j                  dz
  |fz  t        j                        | _        t        j                  d| j                  | j                  dz  dz
  |fz  t        j                        | _        d| _        y)Initialize.additional_ordered_stylesalpharomaninject_styleinject_class genericz| \#a  
            | (?=[IVXLCDM]{2})
              M*
              (?:C[MD]|D(?:C{0,4}|C{5}\b)|(?:C{0,9}|C{10}\b))
              (?:X[CL]|L(?:X{0,4}|X{5}\b)|(?:X{0,9}|X{10}\b))
              (?:I[XV]|V(?:I{0,4}|I{5}\b)|(?:I{0,9}|I{10}\b))
            | (?=[ivxlcdm])
              m*
              (?:c[md]|d(?:c{0,4}|c{5}\b)|(?:c{0,9}|c{10}\b))
              (?:x[cl]|l(?:x{0,4}|x{5}\b)|(?:x{0,9}|x{10}\b))
              (?:i[xv]|v(?:i{0,4}|i{5}\b)|(?:i{0,9}|i{10}\b))
            z<
                | [IVXLCDM](?=\)|\.[ ]{2})
                zD
            | [a-z]
            | [A-Z](?=\)|\.[ ]{2})
            z#^[ ]{0,%d}(?:(?:\d+%s)[).])[ ]+(.*)r   z+^[ ]{0,%d}((?:(?:\d+%s)[).]|[-*+]))[ ]+(.*)z(^[ ]{%d,%d}(?:(?:\d+%s)[).]|[-*+])[ ]+.*r   r   N)super__init__alpha_enabledroman_enabledr+   r,   recompile
tab_lengthVERBOSElist_rechild_re	indent_re
startswith)selfparserconfig
list_typesformats	__class__s        r    r0   zFancyOListProcessor.__init__T   sY    	 78
$
2$
2">2">2
"wGj    G j(   j   G zz2doo6I75SSJJ
 

:dooPQ>QSZ=[[JJ
 74??DOO^_L_bcLcel:mmJJ

 r"   c                 J    t        | j                  j                  |            S )z(Test to see if block starts with a list.)boolr7   match)r;   parentblocks      r    testzFancyOListProcessor.test   s     DLL&&u-..r"   c                 h   | j                  |      }| j                  ||j                  d      |      \  }}||j                  | j                  v ri|j
                  j                  dd      |k(  rI|}|d   j                  rHt        j                  d      }|d   j                  |_        d|d   _        |d   j                  d|       | j                  |d         }|K|j                  r?t        j                  |d   d      }|j                  j                         |_        d|_        t        j                  |d      }	| j                  j                  j!                  d       |j                  d      }
| j                  j#                  |	|
g       | j                  j                  j%                          n5|j                  d	v r|}n#| j&                  d
k(  r|=|j
                  j                  dd      j)                  d      r||j
                  d<   |}n| j*                  |   |d}| j,                  rdt.        |d       d|d<   | j0                  rdt.        |d       |d<   t        j                  || j&                  |      }n t        j                  || j&                        }| j(                  dk7  r5|j
                  j                  dd      s| j(                  |j
                  d<   | j                  j                  j!                  d       |D ]t  }|j)                  d| j2                  z        r!| j                  j#                  |d   |g       Bt        j                  |d      }	| j                  j#                  |	|g       v | j                  j                  j%                          y)zProcess list items.r   N__fancylistr-   pli	looselist)r%   ulr%   forcetyperH   list-style-type: rP   ;stylefancylists-classr   startlist )	lastChild	get_itemspoptagSIBLING_TAGSattribgettextetreeElementinserttail
SubElementlstripr<   statesetparseBlocksresetTAGr:   OL_TYPESr+   OL_STYLEr,   r5   )r;   rD   blockssiblingitems
fancy_typelstrJ   lchrK   	firstitemr^   items                r    runzFancyOListProcessor.run   s     ..( !NN7FJJqM6Jz GKK43D3D$DNN}b1Z? C 2w|| MM#&R!BBq!$ ..R)C388$$SWc2* !!#t,BKK!!+.		!IKK##B4KK##% ZZ<'C xx4&7>>+=+=mR+P+[+[\c+d4>GNN=1!C&*mmJ&?PZ[F((,=hvf~>V=WWX*Yw((,78P7Q*Rw**C &&vtxx8 #%cjjnnWb.I&*oo

7# 	f%  	4Ds4??23''B$8 %%c40''TF3	4 	!r"   c                    |j                  d      j                  d      ry|j                  d      d   j                         }|dk(  r#|j                  d      dd j	                  d      S |d	k(  r&t        t        |j                  d      dd             S |d
k(  r7t        t        |j                  d      dd j                               dz
        S y)z/Translate list convention into a logical start.r   #r   -r   NrI   (r*   r)   @   )	groupr:   splitlowerrf   strr!   ordr   )r;   rq   mts       r    	get_startzFancyOListProcessor.get_start   s     771:  %S!!$**,	>771:cr?))#..'\yCR122'\s1771:cr?0023b899 r"   c                 ^   |j                  d      dd }|j                  d      d   }d}|dk(  r|dz  }n|dk(  r|dz  }n||fS |j                  d	      r|j                  d
d      d   }|dk(  s|j                         dk(  r|j	                         s|j                         dk(  r<| j
                  r0|j                         r t        |      dkD  sO|j                         dv s=|j                         dk(  rJ| j                  r>t        |      dk(  r0|j                         r |r||j                  d
d      d   z   n|}||fS d}|dk(  r ||r|j                  d
d      d   ndz  }||fS |j	                         r	|dz  }||fS t        |      dk(  r|j                         r|j                         r`|dv }| j                  r&| j
                  r|r|r|dz   |k7  r|dk7  r	|dz  }||fS | j                  r|s|dz   |k(  s|s	|dz  }||fS |dz  }||fS |j                         r\|dv }| j                  r&| j
                  r|r|r|dz   |k7  r|dk7  r	|dz  }||fS | j                  r|s|dz   |k(  s|s	|dz  }||fS |dz  }||fS |j                         r	|dz  }||fS |j                         r|dz  }||fS )z)Get the fancy type for a given list item.r   NrI   r-   .zdot-)zparen-rN   ry   rx   r   r*   r   ivxlcdmr)   r   IVXLCDMROMANr   ALPHA)r|   r:   r}   r~   isdigitr2   isalphar   r1   islowerisupper)	r;   r   firstrq   valuesep	list_typeltypein_romans	            r    get_fancy_typez"FancyOListProcessor.get_fancy_type  s;    
3Bggajn	 #:ICZ!Ij((   )$$S!,Q/E |)+KKMW,&&MMOZ!^u{{}	'A')d.@.@SZST_Y^YfYfYhHQY)9)9#q)A!)DDW`
!:-- J C<
))#q1!4	QIJ *$$I ]]_"IF *$$E Z1_}} I-&& ..!8W9LQ[8[`eil`l (I0 *$$/ ''I<OT^;^fn(I, *$$) (I( *$$'  I-&& ..!8W9LQ[8[`eil`l (I *$$ ''I<OT^;^fn(I *$$ (I *$$ ]]_ I *$$ ]]_ I*$$r"   c                 t   d}| j                   dk(  r6|4|j                  | j                  v r|j                  j	                  dd      }|}g }g }|j                  d      D ]0  }|r|j                  |       | j                  j                  |      }	|	r{| j                  |	| |      \  }}|r||k7  r|j                  |       e|s&| j                   dk(  r| j                  ||	      | _        |}|j                  |	j                  d             | j                  j                  |      rN|d   j                  d| j                  z        rdj                  |d   |      |d<   |j                  |       dj                  |d   |      |d<   3 |r!|j!                  d	dj#                  |             ||fS )
zBreak a block into list items.r-   r%   rH   
r   rI   rX   z{}
{}r   )rk   r\   r]   r^   r_   r}   appendr8   rC   r   r   r:   r|   r9   r5   formatrc   join)
r;   ro   rE   rn   rq   fancyrp   restliner   s
             r    rZ   zFancyOListProcessor.get_itemsT  s    
88t"w{{d6G6G'G$^^//rB
KK% (	=D D! ##D)A %)$7$7u9e$L!z Uj0KK% T!1&*nnUA&>DO"
 QWWQZ( %%d+9''doo(=> (b	4 @E"I LL& %OOE"It<b	Q(	=V MM!TYYt_-j  r"   )__name__
__module____qualname____doc__rk   r]   rl   r0   rF   rv   r   r   rZ   __classcell__r@   s   @r    r$   r$   B   s[    ,
C6LH@D/
["z:K%Z:!r"   r$   c                   @    e Zd ZdZdZdZdddddd	Zd
 Zd Zd Z	d Z
y)FancyListBlockzCollapse code.
fancylistsTr   r)   r   r*   r   r   c                     | j                   d   }| j                   d   | _        | j                   d   | _        d|v | _        d|v | _        y)zHandle initialization.r(   r+   r,   r*   r)   N)r=   r+   r,   r2   r1   )r;   ordered_styless     r    on_initzFancyListBlock.on_init  sO     %@A KK7 KK7$6$6r"   c                    d| _         d| _        d| _        	 | j                  j	                         D ]  }|j	                  d      D cg c]  }|j                          c}\  }}|dk(  r`|dv r\|j                         dk(  r| j                  st        d      |j                         d	k(  r| j                  st        d      || _         |d
k(  rt        dt        |            | _        t        d       	 yc c}w # t        $ r Y yw xY w)zHandle on validate event.r   Nr   =rP   )r   r   r   r   r   r   zAlphabetical lists not enabledr   rV   zNot a valid optionFT)rP   rV   countargumentr}   stripr~   r1   
ValueErrorr2   maxint	Exception)r;   rD   r   xnamer   s         r    on_validatezFancyListBlock.on_validate  s     	

	]]((* ;23''#,?Qqwwy?e6>e/H&H{{}+D4F4F()IJJ{{}+D4F4F()IJJ %DIW_!$QE
!3DJ$%9::;  @  		s$   0C< C7BC< 7C< <	DDc                 |   | j                   d| j                  | j                      z   d}| j                  t        | j                        |d<   | j                  rdt
        | j                       d|d<   | j                  rdt
        | j                       |d<   || _        t        j                  |d	|      | _
        |S )
zCreate the element.zforce-rO   rV   rQ   rR   rS   rT   rU   r%   )rP   OL_TYPErV   r   r+   rm   r,   rD   ra   re   r%   )r;   rD   r^   s      r    	on_createzFancyListBlock.on_create  s     ))Ht||DII?V4VW::!!$**oF7O 1(4992E1FaHF7O +HTYY,?+@AF7O""648r"   c                 z    t        | j                        s&| j                  j                  | j                         yy)zOn end.N)rW   r%   rD   remove)r;   rE   s     r    on_endzFancyListBlock.on_end  s*     DGG}KKtww' r"   N)r   r   r   r   NAMEARGUMENTr   r   r   r   r    r"   r    r   r     s9    DHG72 (r"   r   c                   ,     e Zd ZdZdgZdZ fdZ xZS )FancyUListProcessorzProcess unordered list blocks.rM   c                 z    t         |   ||       t        j                  d| j                  dz
  z        | _        y)r'   z^[ ]{0,%d}[-+*][ ]+(.*)r   N)r/   r0   r3   r4   r5   r7   )r;   r<   r=   r@   s      r    r0   zFancyUListProcessor.__init__  s4     	(zz"<RS@S"TUr"   )r   r   r   r   r]   rk   r0   r   r   s   @r    r   r     s    (6L
CV Vr"   r   c                       e Zd ZdZd Zy)FancyListTreeprocessorzClean up fancy list metadata.c                 j    |j                  d      D ]  }d|j                  v s|j                  d=   |S )z-Remove intermediate fancy list type metadata.r%   rH   )iterr^   )r;   rootr%   s      r    rv   zFancyListTreeprocessor.run  s:     ))D/ 	-B		)IIm,	- r"   N)r   r   r   r   rv   r   r"   r    r   r     s
    'r"   r   c                   (     e Zd ZdZ fdZd Z xZS )FancyListExtensionzHTML Blocks Extension.c                 J    g ddgddgddgd| _         t        |   |i | y)r'   )r*   r)   r.   z?Specify the ordered list formats to add in addition to decimal.Fz=Inject style attribute with the appropriate 'list-style-type'z/Inject a class indicating the 'list-style-type')r(   r+   r,   N)r=   r/   r0   )r;   argskwargsr@   s      r    r0   zFancyListExtension.__init__  sG    
 .Q*
 O
 A
 	$)&)r"   c                    | j                         }|j                  t        |       t        |j                  |      }t        |j                  |      }|j                  j                  j                  |dd       |j                  j                  j                  |dd       |j                  j                  t        |      dd       y)z!Add Details to Markdown instance.olist(   ulist   zolist-cleanupr	   N)	
getConfigsregisterr   r$   r<   r   blockprocessorstreeprocessorsr   )r;   mdrn   r=   r%   rM   s         r    extendMarkdownBlocksz'FancyListExtension.extendMarkdownBlocks  s     "/ F3 F3
		!!**2w;
		!!**2w;
""#9"#=PRSr"   )r   r   r   r   r0   r   r   r   s   @r    r   r     s     *(	Tr"   r   c                      t        | i |S )zReturn extension.)r   )r   r   s     r    makeExtensionr     s     t.v..r"   )r   markdown.blockprocessorsr   markdown.treeprocessorsr   blocks.blockr   rn   r   xml.etree.ElementTreera   ElementTreer3   r   rm   r!   r$   r   r   r   r   r   r   r"   r    <module>r      s   , 4 1  # % % 	!"2CcM	 
				2L!. L!^
D(U D(N
V- 
V	] 	 T  TF/r"   