
    $gH                        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dS )!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                    |                                  } d}d}|t          |           k     r|dz   t          |           k     r^t          | |                  t          | |dz                     k     r3|t          | |dz                     t          | |                  z
  z  }|dz  }n|t          | |                  z  }|dz  }|t          |           k     |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      S/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/pymdownx/fancylists.py	roman2intr!   )   s     	
		A E	A
c!ff**q53q66>>i!o	!AE(0CCCYqQx(9QqT?::EFAA Yqt_$EFA c!ff** 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                 D   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| _        dS )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))
            | 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   so    	   78
$
2$
2">2">2
""wGj    
 
G j((   j    G z2do6I75SSJ
 
 
:doPQ>QSZ=[[J
 
 74?DO^_L_bcLcel:mmJ
 

 r"   c                 P    t          | j                            |                    S )z(Test to see if block starts with a list.)boolr7   match)r;   parentblocks      r    testzFancyOListProcessor.test   s"     DL&&u--...r"   c                    |                      |          }|                     ||                    d          |          \  }}|v|j        | j        v rg|j                            dd          |k    rG|}|d         j        rOt          j	        d          }|d         j        |_        d|d         _        |d         
                    d|           |                      |d                   }|G|j        r@t          j        |d         d          }|j                                        |_        d|_        t          j        |d          }	| j        j                            d           |                    d          }
| j                            |	|
g           | j        j                                         n|j        d	v r|}n| j        d
k    r|;|j                            dd                              d          r||j        d<   |}n| j        |         |d}| j        rdt.          |d                   d|d<   | j        rdt.          |d                   |d<   t          j        || j        |          }nt          j        || j                  }| j        dk    r*|j                            dd          s| j        |j        d<   | j        j                            d           |D ]s}|                    d| j        z            r#| j                            |d         |g           Bt          j        |d          }	| j                            |	|g           t| j        j                                         dS )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   sp    ..(( !NN7FJJqMM6JJz GK43D$D$DN}b11Z?? C 2w| % M#&&R!BBq!$$$ ..R))C38$SWc22** !#t,,BK!!+...		!IK##B444K##%%%% Z<''CC x4&7>+=+=mR+P+P+[+[\c+d+d&4>GN=1!CC&*mJ&?PZ[[F( Z*Yhvf~>V*Y*Y*Yw( S*R8P*R*Rw* CC &vtx88 #%%cjnnWb.I.I%&*o
7# 	f%%%  	4 	4Ds4?233 4''B$8888 %c400''TF3333 	!!!!!r"   c                 >   |                     d                              d          rdS |                    d          d                                         }|dk    r0|                     d          dd                             d          S |d	k    r7t          t          |                     d          dd                             S |d
k    rLt          t          |                     d          dd                                                   dz
            S dS )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::  %% 	3S!!!$**,,	>>771::crc?))#...'\\yCRC11222'\\s1771::crc?002233b8999 \r"   c                    |                     d          dd         }|                     d          d         }d}|dk    r|dz  }n|dk    r|dz  }n||fS |                    d	          r|                    d
d          d         }|dk    s|                                dk    r|                                s|                                dk    rD| j        r=|                                r)t          |          dk    s\|                                dv sF|                                dk    rU| j        rNt          |          dk    r;|                                r'|r||                    d
d          d         z   n|}||fS d}|dk    r%||r|                    d
d          d         ndz  }n3|                                r|dz  }nt          |          dk    r|                                r|	                                rK|dv }| j        r | j        r|r|r|dz   |k    r|dk    r|dz  }n| j        r|s|dz   |k    s|s|dz  }n|dz  }n|
                                rJ|dv }| j        r | j        r|r|r|dz   |k    r|dk    r|dz  }nS| j        r|s|dz   |k    s|s|dz  }n9|dz  }n3|
                                r|dz  }n|	                                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    

3B3ggajjn	 #::IICZZ!IIj((   )) 	$$S!,,Q/E ||)+++KKMMW,,& -MMOO - ZZ!^^u{{}}	'A'A'))d.@)SZZST__Y^YfYfYhYh_HQ`Y)9)9#q)A)A!)DDDW`
!:-- J C<<
Q))#q11!44	QII]]__ "	!"IIZZ1___}} ) I-&) .) ") ,4) :CW9LQ[8[8[`eil`l`l (II' ) )I<OT^;^;^fn;^(II(II ) I-&) .) ") ,4) :CW9LQ[8[8[`eil`l`l (II' ) )I<OT^;^;^fn;^(II(I]]__ 	! II]]__ 	! I*$$r"   c                    d}| j         dk    r+|)|j        | j        v r|j                            dd          }|}g }g }|                    d          D ]W}|r|                    |           | j                            |          }	|	r| 	                    |	| |          \  }}|r||k    r|                    |           p|s&| j         dk    r| 
                    ||	          | _        |}|                    |	                    d                     | j                            |          r[|d                             d| j        z            r!d	                    |d         |          |d<   !|                    |           8d	                    |d         |          |d<   Y|r)|                    d
d                    |                     ||fS )zBreak a block into list items.r-   r%   NrH   
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_itemsS  s    
8t"w{d6G'G'G$^//rBB
KK%% (	= (	=D  D!!! ##D))A = %)$7$7u9e$L$L!z  Uj00KK%%%  ?T!1!1&*nnUA&>&>DO"
 QWWQZZ(((( %%d++ 
=9''do(=>> ' (b	4 @ @E"II LL&&&& %OOE"It<<b		  	.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? ? ? ? ?B/ / /
[" [" ["z: : :K% K% K%Z:! :! :! :! :! :! :!r"   r$   c                   B    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
dS )FancyListBlockzCollapse code.
fancylistsTr   r)   r   r*   r   r   c                     | j         d         }| j         d         | _        | j         d         | _        d|v | _        d|v | _        dS )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 K7 K7$6$6r"   c                    d| _         d| _        d| _        	 | j                                        D ]}d |                    d          D             \  }}|dk    rh|dv rd|                                dk    r| j        st          d	          |                                d
k    r| j        st          d	          || _         |dk    r#t          dt          |                    | _        t          d          n# t          $ r Y dS w xY wdS )zHandle on validate event.r   Nr   c                 6    g | ]}|                                 S  )strip).0xs     r    
<listcomp>z.FancyListBlock.on_validate.<locals>.<listcomp>  s     ???Qqwwyy???r"   =rP   )r   r   r   r   r   r   zAlphabetical lists not enabledr   rV   zNot a valid optionFT)rP   rV   countargumentr}   r~   r1   
ValueErrorr2   maxint	Exception)r;   rD   r   namer   s        r    on_validatezFancyListBlock.on_validate  s.    	

	]((** ; ;??!''#,,???e6>>e/H&H&H{{}}++D4F+()IJJJ{{}}++D4F+()IJJJ %DIIW__!$QE

!3!3DJJ$%9:::;  	 	 	55	 ts   C#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   NrV   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|DI?V4VWW:!!$*ooF7O 	IH(492EHHHF7O 	BAHTY,?AAF7O"6488r"   c                 p    t          | j                  s!| j                            | j                   dS dS )zOn end.N)rW   r%   rD   remove)r;   rE   s     r    on_endzFancyListBlock.on_end  s<     DG}} 	(Ktw'''''	( 	(r"   N)r   r   r   r   NAMEARGUMENTr   r   r   r   r   r   r"   r    r   r     s{        DH G7 7 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                     t                                          ||           t          j        d| j        dz
  z            | _        dS )r'   z^[ ]{0,%d}[-+*][ ]+(.*)r   N)r/   r0   r3   r4   r5   r7   )r;   r<   r=   r@   s      r    r0   zFancyUListProcessor.__init__  sB     	(((z"<RS@S"TUUr"   )r   r   r   r   r]   rk   r0   r   r   s   @r    r   r     sS        ((6L
CV V V V V V V V Vr"   r   c                       e Zd ZdZd ZdS )FancyListTreeprocessorzClean up fancy list metadata.c                 X    |                     d          D ]}d|j        v r|j        d= |S )z-Remove intermediate fancy list type metadata.r%   rH   )iterr^   )r;   rootr%   s      r    rv   zFancyListTreeprocessor.run  s:     ))D// 	- 	-B	))Im,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                 `    g ddgddgddgd| _          t                      j        |i | dS )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__  sb    
 .--Q*
 O
 A
 
 	$)&)))))r"   c                    |                                  }|                    t          |           t          |j        |          }t          |j        |          }|j        j                            |dd           |j        j                            |dd           |j                            t          |          dd           dS )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3 F33
	!**2w;;;
	!**2w;;;
""#9"#=#=PRSSSSSr"   )r   r   r   r   r0   r   r   r   s   @r    r   r     sT          * * * * *(	T 	T 	T 	T 	T 	T 	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 3 3 3 3 3 1 1 1 1 1 1       # # # # # # % % % % % % % % % 				!"2CcMM	 
				   2K! K! K! K! K!. K! K! K!\
D( D( D( D( D(U D( D( D(N
V 
V 
V 
V 
V- 
V 
V 
V	 	 	 	 	] 	 	 	 T  T  T  T  T  T  T  TF/ / / / /r"   