
    $gU                        d Z ddl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
mZ 	 ddlmZ ddlmZmZ ddlmZ dd	lmZ  ed
  ej        d          dd         D                       Z ed          ZdZn# e$ r dZdZY nw xY w ej        d          ZdZdZdZdZi dddgdddgdddgdddgd dd!gd"dd#gd$d%d&gd'd(d)gd*d"d+gd,g d-gd.d/d0gd1dd2gd3dd4gd5i d6gd7d8d9gd:dd;gd<d8d=gdd>gdd?gd8d@gddAgdBZ er G dC dDe          Z! G dE dFe          Z" G dG dH          Z# G dI dJe          Z$ G dK dLe          Z%dM Z&dS )Na*  
Highlight.

A library for managing code highlighting.

All Changes Copyright 2014-2017 Isaac Muse.

---

CodeHilite Extension for Python-Markdown
========================================

Adds code/syntax highlighting to standard Python-Markdown code blocks.

See <https://pythonhosted.org/Markdown/extensions/code_hilite.html>
for documentation.

Original code Copyright 2006-2008 [Waylan Limberg](http://achinghead.com/).

All changes Copyright 2008-2014 The Python Markdown Project

License: [BSD](http://www.opensource.org/licenses/bsd-license.php)
    N)	Extension)Treeprocessor)OrderedDict)	highlight)get_lexer_by_nameguess_lexer)find_formatter_class)__version__c                 ,    g | ]}t          |          S  )int).0ns     R/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/pymdownx/highlight.py
<listcomp>r   #   s    ???a3q66???    .   htmlTF)r   r   z^<(div)(\s*class="(.*?)")?\s*>z"<pre{}><code{}{}{}>{}</code></pre>z <pre{}{}{}><code>{}</code></pre> class="{}"z id="{}"use_pygmentsz[Use Pygments to highlight code blocks. Disable if using a JavaScript library. Default: True
guess_langz-Automatic language detection - Default: False	css_classr   z&CSS class to apply to wrapper element.pygments_styledefaultz?Pygments HTML Formatter Style (color scheme) - Default: default	noclassesz8Use inline styles instead of CSS classes - Default falselinenumszGDisplay line numbers in block code output (not inline) - Default: Falselinenums_styletablez#Line number style -Default: "table"linenums_specialz,Globally make nth line special - Default: -1linenums_classzMControl the linenums class name when not using Pygments - Default: 'linenums'extend_pygments_langzBExtend pygments language with special language entry - Default: []language_prefix	language-zRControls the language prefix for non-Pygments code blocks. - Defaults: "language-"code_attr_on_prezTAttach attribute list values on pre element instead of code element - Default: False
auto_titlezCInject the lexer name as the title for block code - Defaults: Falseauto_title_mapzAUser defined mapping of overrides for "auto_title" - Defaults: {}
line_spans zIf set to a nonempty string, e.g. foo, the formatter will wrap each output line in a span tag with an id of foo-<code_block_number>-<line_number>. . - Defaults: ""anchor_linenumszyIf set to True, will wrap line numbers in <a> tags. Used in combination with linenums and line_anchors. - Defaults: Falseline_anchorszIf set to a nonempty string, e.g. foo, the formatter will wrap each output line in an anchor tag with an id (and name) of foo-<code_block_number>-<line_number>. - Defaults: ""zmIf set to True, the language name used will be included as a class attached to the element. - Defaults: FalsezStrips leading and trailing newlines from code blocks. This is Pygments default behavior. Setting this to False disables this and will retain leading and trailing newlines. This has no affect on inline code. - Defaults: TruezVThe assumed highlight language of a code block when no language is set. - Default textzXUsed internally to communicate if extension has been explicitly enabled - Default: False)pygments_lang_classstripnldefault_lang_enabledc                   $    e Zd ZdZd Zd Zd ZdS )InlineHtmlFormatterzFormat the code blocks.c              #      K   |E d{V  dS )zDo not wrap with `div`.Nr   )selfinners     r   	_wrap_divzInlineHtmlFormatter._wrap_div   s&       r   c                 ,    |                      |          S )zOverload wrap.)
_wrap_coder4   sources     r   wrapzInlineHtmlFormatter.wrap   s     ??6***r   c              #   Z   K   dV  |D ]\  }}||                                 fV  dV  dS )z6Return source, but do not wrap in inline <code> block.)r   r*   N)strip)r4   r:   its       r   r8   zInlineHtmlFormatter._wrap_code   sL       KKK # #1l""""KKKKKr   N)__name__
__module____qualname____doc__r6   r;   r8   r   r   r   r2   r2      sG        %%	 	 	
	+ 	+ 	+
	 	 	 	 	r   r2   c                   p    e Zd ZdZ ej        d          Z ej        d          Zd Zd Z	d Z
d Zd Zd	S )
BlockHtmlFormatterz1Adds ability to output line numbers in a new way.zE(<span[^>]*?)(class="[^"]*\blinenos?\b[^"]*)"([^>]*)>([^<]+)(</span>)z(<pre[^>]*>)(?!<span></span>)c                     |                     dd          dk    | _        | j        rd|d<   t          j        | fi | dS )Initialize.linenosFzpymdownx-inlineinlineN)getpymdownx_inlineHtmlFormatter__init__)r4   optionss     r   rM   zBlockHtmlFormatter.__init__   sT     $+;;y%#@#@DU#UD # .%-	""433733333r   c                 j   |                     d                                          s|                     d          n|                     d          }|                     d          |                     d          z   dz   |                     d          z   dz   |z   dz   |                     d          z   S )	zFormat the custom line number.      r   "   z data-linenos="z ">   )grouprstrip)r4   mlnums      r   _format_custom_linez&BlockHtmlFormatter._format_custom_line   s     &'WWQZZ%6%6%8%8H1771:::aggajjD 



 

 "	" %)	) ,1	1
 

r   c              #   j   K   |D ]-\  }}|r | j                             | j        |          }||fV  .dS )a  
            Wrapper to handle block inline line numbers.

            For our special inline version, don't display line numbers via `<span>  1</span>`,
            but include as `<span data-linenos="  1"></span>` and use CSS to display them:
            `[data-linenos]:before {content: attr(data-linenos);}`.  This allows us to use
            inline and copy and paste without issue.
            N)RE_SPAN_NUMSsubrY   r4   r5   r?   lines       r   _wrap_customlinenumsz'BlockHtmlFormatter._wrap_customlinenums   sX       !  4 Q,001I4PPDg r   c                     | j         dk    r| j        r|                     |          }t                              | |          S )zWrap the source code.r   )rH   rK   r_   rL   r;   r9   s     r   r;   zBlockHtmlFormatter.wrap   sB     |q  T%9 226:: %%dF333r   c              #      K   t                               | |          D ]$\  }}|| j                            d|          fV  %dS )aC  
            Wrapper to handle line numbers better in table.

            Pygments currently has a bug with line step where leading blank lines collapse.
            Use the same fix Pygments uses for code content for code line numbers.
            This fix should be pull requested on the Pygments repository.
            z\1<span></span>N)rL   _wrap_tablelinenosRE_TABLE_NUMSr\   r]   s       r   rb   z%BlockHtmlFormatter._wrap_tablelinenos   sa       );;D%HH J J4+//0BDIIIIIIIJ Jr   N)r@   rA   rB   rC   recompiler[   rc   rM   rY   r_   r;   rb   r   r   r   rE   rE      s        ?? "rz"jkk"
#CDD	4 	4 	4	 	 	&	 	 		4 	4 	4
	J 
	J 
	J 
	J 
	Jr   rE   c                   F    e Zd ZdZ	 	 	 	 	 	 ddZd Zd Zd Z	 	 	 ddZdS )	HighlightzHighlight class.Fr   TNr!   r   r   r%   r*   c                 V   || _         || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _	        || _
        || _        || _        || _        || _        || _        || _        | j        r| j        sd| _        |i }|| _        |g }i | _        |D ]}t'          |t(          t*          f          re|                    d          }|N|| j        vrE|                    d          |                    di           g| j        |                                <   dS )rG   __codelinenoNnamelangrN   )r   r   r   r   r   r   r    r"   r$   r&   r'   r)   r,   r+   r-   r.   r/   r(   r#   
isinstancedictr   rJ   lower)r4   r   r   r   r   r#   r   r    r   r"   r$   r&   r'   r(   r)   r+   r,   r-   r.   r/   languagerj   s                         r   rM   zHighlight.__init__   sV    %,(" , 0,. 0$$(.#6 ( 	/(9 	/ .D!N,'#% $&!, 	 	H(T;$788 ||F++#D4M(M(M V,, Y33?D-djjll;		 	r   c                 `    | j                             |                                |i f          S )zGet extended language.)r#   rJ   rn   )r4   ro   s     r   get_extended_languagezHighlight.get_extended_language  s+     (,,X^^-=-="~NNNr   c                    |}d|i}|r-|                      |          \  }}|                    |           	 t          |fi |}n# t          $ r d}Y nw xY w|N| j        du s|r| j        dk    r8n| j        dk    r,	 t          |fi |}|j        d         }n# t          $ r Y nw xY w|!t          | j        pdfi |}|j        d         }||fS )zGet the Pygments lexer.r.   NTrI   blockr   text)rq   updater   	Exceptionr   r   aliasesr/   )	r4   srcro   rI   r.   rj   lexer_optionsrN   lexers	            r   	get_lexerzHighlight.get_lexer"  s>    "G, 	* $ : :8 D DHg  )))	%h@@-@@EE 	 	 	EEE	 =4''F'T_-H-H-HX\XgkrXrXr'==}==E =+DD    D=%d&7&A6SS]SSE=#Dd{s#   A AA<B 
B$#B$c                     |                     dd          }|                     dd          }|                     dd          }|S )zBasic HTML escaping.&&amp;<&lt;>&gt;replace)r4   txts     r   escapezHighlight.escape>  sB     kk#w''kk#v&&kk#v&&
r   r   r   c                 l   |i }|	r
|	dd         ng }| j         r|dk    p| j         duo|dk    o|dk     }d}|s| j        r| j        }t          r| j        rt          dk     rt          d          |rd}n| j        }|                     ||||          \  }}| j        r|	                    d| j
        |z              |r| j        nd}|rI|rGd                    |sdn|          }d	                    |          |z   }|                                }|}|
rt                              |
          nd}|
r|
nt!          |          }|sd}nhg }|                                D ]5\  }}|                    d
          r|                    | d| d           6|rd	d	                    |          z   nd}|r|dk     rd}|r|dk     rd}| j        dk    r|dk     r| j        }|r|dk     rd}||rg }|X| j        rQd	                    d |j                                        D                       }| j                            ||          }|r|                                }|rt4          nt6          } ||||||| j        | j        |d|s|nd| j        r|s| j         d| nd| j        r|s| j         d| nd|s| j         nd          }tC          |||          }|r|}d}ntD          #                    |          } | -| $                    d          }!| %                    d          }"|r| &                    d          rOd                    d	                    |          | &                    d                                                    }	njd                    d	                    |                    }	nA| &                    d          r*d	| &                    d          '                                z   nd}	|d|"          d| &                    d           | |	 | d||!d          }n|rj| (                    |          }|r|	                    d|           |r|	                    d| j
        |z              |rd	                    |          nd}|
}nM| j)        r|r|	                    d|           |r|	                    d| j
        |z              |r-tT                              d	                    |                    nd}|
rt                              |
          nd}|r4d	d	                    d |                                D                       z   nd}| j)        sP|rtT                              |          nd}#tV                              |#|||| (                    |                    }n0tX                              |||| (                    |                    }|r;i }$|r||$d<   |r||$d<   |D ]
\  }}||$|<   t[          j.        d|$          }%||%_/        |%S |                                S )zHighlight code.Nr   Fr*   )r      zHPymdownx Highlight requires at least Pygments 2.12+ if enabling PygmentsTz {} zdata-="rR   rQ   c                 b    g | ],}|                                 r|                                n|-S r   )islowertitle)r   ws     r   r   z'Highlight.highlight.<locals>.<listcomp>  s1     ] ] ]Qaiikk!@q ] ] ]r   -)cssclassrH   linenostart
linenosteplinenospecialstyler   hl_lineswrapcodefilename	linespanslineanchorsanchorlinenosr   z class="{} {}"rS   r   r   r   c              3   ,   K   | ]\  }}| d | dV  dS )r   rR   Nr   )r   kvs      r   	<genexpr>z&Highlight.highlight.<locals>.<genexpr>  s2      %M%Mtq!llalll%M%M%M%M%M%Mr   classidcode)0r   r/   pygmentsr   p_verRuntimeErrorr.   r{   r-   insertr$   r   formatjoinr=   ID_ATTRstritems
startswithappendr    r'   rj   splitr(   rJ   r2   rE   r   r   r)   r,   r+   r   RE_PYG_CODEmatchendstartrU   lstripr   r&   
CLASS_ATTR	CODE_WRAPCODE_WRAP_ON_PREetreeElementrt   )&r4   rx   ro   r   r   	linestartlinesteplinespecialrI   classesid_valueattrsr   code_block_countclass_nameslinenums_enabled	class_strr.   rz   	lang_namer   strippedid_str	lineno_idattr_strtempr   r   rj   html_formatter	formatterr   rW   r   r   highlight_class
attributesels&                                         r   r   zHighlight.highlightF  sO    =E$+3gaaajj]-yA~ ;]%'9IM 1*n 	 	 	)D- 	)(H  t	^) t	^w"#mnnn ',  $~~c8VWMME9' H""1d&:Y&FGGG.>It**EH ) ) %y-ORRi P PI # 5 5	 AI(00H (I19AW^^H---rF$,G#6F2G2GI @!KKMM 2 2DAq||G,, 2qLLALLL11137?3$//R  x!|| y1}}	$))kAoo"3  {Q6}}xx ] ]%*JZJZJ\J\ ] ] ]^^+//d;; & 5;R00@RN&" %#)).!&,4">BodV\dT_::y:::bd:>:KbTZbt(669666`b:@Kd22e  I& S%33D b%	%%d++=%%((CGGAJJE" R771:: R&6&=&=chh{>S>SUVU\U\]^U_U_UeUeUgUg&h&hGG&3&:&:388K;P;P&Q&QGG?@wwqzz"Q#

(9(9(;(;";";r"6E6laaQWWQZZaaa(aaUYZ]Z^Z^U_aaD 	^;;s##D 1""1i000 G""1d&:X&EFFF1<D---"IFF $ 1 1""1i000 G""1d&:X&EFFFDOW
))#((;*?*?@@@UWI19AW^^H---rFQV^sSXX%M%Mu{{}}%M%M%MMMMM\^H( ^DM"U:#4#4Y#?#?#?SU ''HVZVaVabeVfVfgg'..vy(DKKX[L\L\]] 	 J 0&/
7#  *#)
4  " "1 !
1vz22BBGI::<<r   )Fr   TFNNr!   r   r   r%   FFNr*   Fr*   FTr*   )r   Nr!   r!   r!   FNr*   NNr   )	r@   rA   rB   rC   rM   rq   r{   r   r   r   r   r   rg   rg      s         HLTVKVRTSW- - - -^O O O
  8   >Bbf%&]  ]  ]  ]  ]  ] r   rg   c                   .     e Zd ZdZ fdZd Zd Z xZS )HighlightTreeprocessorz%Highlight source code in code blocks.c                 X    || _         t                                          |           dS rG   N)extsuperrM   )r4   mdr   	__class__s      r   rM   zHighlightTreeprocessor.__init__  s*     r   c                     |                     dd          }|                     dd          }|                     dd          }|S )zUnescape code.r   r   r   r   r~   r}   r   )r4   rt   s     r   code_unescapez$HighlightTreeprocessor.code_unescape  s@    ||FC((||FC((||GS))r   c           	         |                     d          }|D ]}t          |          dk    r|d         j        dk    r| j        xj        dz  c_        t          di d| j        d         d| j        d         d| j        d         d| j        d         d	| j        d	         d
| j        d
         d| j        d         d| j        d         d| j        d         d| j        d         d| j        d         d| j        d         d| j        d         d| j        d         d| j        d         d| j        d         }| j        j        	                    |
                    |                     |d         j                                      d          d| j        d         | j        j                            }|                                 d|_        ||_        dS )z*Find code blocks and store in `htmlStash`.prerQ   r   r   r   r   r   r   r   r   r    r"   r#   r$   r&   r'   r(   r-   r.   r/   
r*   r   )r   pNr   )iterlentagr   pygments_code_blockrg   configr   	htmlStashstorer   r   rt   rV   clear)r4   rootblocksrs   r   placeholders         r   runzHighlightTreeprocessor.run  sI    5!! $	) $	)E5zzQ58<6#9#9,,1,,    #{<88#';/?#@#@ "&^!<!< #k+66	
 "[44 $(;/?#@#@ &*[1C%D%D $(;/?#@#@ *.5K)L)L %)K0A$B$B &*[1C%D%D  ${<88 $(;/?#@#@ )-4I(J(J !K	22  "&^!<!<!$ #g/55NN**58=99@@FFK0)-)E	 #      	(
I$	) $	)r   )r@   rA   rB   rC   rM   r   r   __classcell__r   s   @r   r   r     s\        //      () () () () () () ()r   r   c                   :     e Zd ZdZ fdZd Zd Zd Zd Z xZ	S )HighlightExtensionz&Configure highlight settings globally.c                 v    t          j        t                    | _         t	                      j        |i | dS r   )copydeepcopyDEFAULT_CONFIGr   r   rM   )r4   argskwargsr   s      r   rM   zHighlightExtension.__init__$  s8     mN33$)&)))))r   c                     d}| j         r|                                 }|Ci }t          j        t                    }|                                D ]}||         d         ||<   |S )zGet the specified extension.Nr   )enabled
getConfigsr   r   r   keys)r4   targetconfig_cloner   s       r   get_pymdownx_highlight_settingsz2HighlightExtension.get_pymdownx_highlight_settings*  so     < 	'__&&F>F=88L!&&(( / /(OA.q		r   c                     t           S )zGet the highlighter.)rg   r4   s    r   get_pymdownx_highlighterz+HighlightExtension.get_pymdownx_highlighter:  s
     r   c                    |                                  }d| _        || _        |                    dd          | _        | j        rOt          | j        |           }|                                  |_        | j        j                            |dd           d}d}| j        j	        D ](}t          |t                    r|j         o| j        } n)|d}d}|r3|dk    r| j                            |            dS | | j        j	        |<   dS dS )	z"Add support for code highlighting.r!   r0   Fzindent-highlight   r   NT)r   r   r   rJ   r   r   r   treeprocessorsregisterregisteredExtensionsrl   r   registerExtension)r4   r   r   htindexr   r   s          r   extendMarkdownz!HighlightExtension.extendMarkdown?  s+    ""#% zz*e44< 	H'66B))BIG"++B0BBGGG7/ 	 	C#122 "{?;t| HE 	;{{))$/////6:,U333		; 	;r   c                     d| _         dS )zReset.r!   N)r   r   s    r   resetzHighlightExtension.reset]  s     $&   r   )
r@   rA   rB   rC   rM   r   r   r  r  r   r   s   @r   r   r   !  sz        00* * * * *     
; ; ;<& & & & & & &r   r   c                      t          | i |S )zReturn extension.)r   )r   r   s     r   makeExtensionr  c  s     t.v...r   )'rC   rd   markdownr   markdown.treeprocessorsr   xml.etree.ElementTreer   ElementTreer   collectionsr   r   r   pygments.lexersr   r   pygments.formattersr	   r
   pygments_vertupler   r   rL   ImportErrorre   r   r   r   r   r   r   r2   rE   rg   r   r   r  r   r   r   <module>r     s_   . 
			       1 1 1 1 1 1 % % % % % % % % %  # # # # # #
"""""">>>>>>>>888888444444E??#5<#5c#:#:2A2#>???@@E((00MHH   HEEE bj:;;0	5 

^	^ 	7^ 0^ 	,^( 	)^2 Q3^: -;^B 
6C^J WK^R 
LS^Z \[^b ^c^j Mk^r 
Ks^z 
	^{^D 	E^N 
	UO^Z 	w
 		 	`
 	bu^ ^ ^@  YJ    m   *CJ CJ CJ CJ CJ] CJ CJ CJLx  x  x  x  x  x  x  x v8) 8) 8) 8) 8)] 8) 8) 8)v?& ?& ?& ?& ?& ?& ?& ?&D/ / / / /s   AA: :	BB