Files
intellecton/venv/lib/python3.12/site-packages/pymdownx/__pycache__/superfences.cpython-312.pyc
T

251 lines
42 KiB
Plaintext
Raw Normal View History

Ë
j…ŽãóXdZddlmZddlmZddlmZddlmZddl m
Z ddl Z ddl
Z
dd lmZd
Zd Zd Ze
j&d
«Ze
j&d«Ze
j&d«Ze
j&d«ZdZe
j&dj3e j4de j4dddze j4d««ZGdde«ZdZGdd«ZdZ dZ!dZ"dZ#d*dZ$d+dZ%d*d „Z&Gd!„d"e«Z'Gd#„d$e«Z(Gd%„d&e(«Z)Gd'„d(e«Z*d)„Z+y),a9
SuperFences.
pymdownx.superfences
Nested Fenced Code Blocks
This is a modification of the original Fenced Code Extension.
Algorithm has been rewritten to allow for fenced blocks in blockquotes,
lists, etc. And also , allow for special UML fences like 'flow' for flowcharts
and `sequence` for sequence diagrams.
Modified: 2014 - 2017 Isaac Muse <isaacmuse@gmail.com>
---
Fenced Code Extension for Python Markdown
=========================================
This extension adds Fenced Code Blocks to Python-Markdown.
See <https://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html>
for documentation.
Original code Copyright 2007-2008 [Waylan Limberg](https://github.com/waylan).
All changes Copyright 2008-2014 The Python Markdown Project
License: [BSD](http://www.opensource.org/licenses/bsd-license.php)
é)Ú Extension)Ú Preprocessor)ÚCodeBlockProcessor)Ú get_attrs)ÚutilNé)ÚQuotesExtensionúú)ú ú a(?x)
(?P<fence>~{3,}|`{3,})
(?:[ \t]*\.?(?P<lang>[\w#.+-]+)(?=[\t ]|$))? # Language
(?:
[ \t]*(\{(?P<attrs>[^\n]*)\}) | # Optional attributes or
(?P<options>
(?:
(?:[ \t]*[a-zA-Z][a-zA-Z0-9_]*(?:=(?P<quot>"|').*?(?P=quot))?)(?=[\t ]|$) # Options
)+
) |
(?P<unrecognized>
(?:([ \t]*[^\s]+)(?=[\t ]|$))+
)
)?[ \t]*$
z3^(?P<hl_lines>\d+(?:-\d+)?(?:[ \t]+\d+(?:-\d+)?)*)$zS(?P<linestart>[\d]+)(?:[ \t]+(?P<linestep>[\d]+))?(?:[ \t]+(?P<linespecial>[\d]+))?zh(?x)
(?:
(?P<key>[a-zA-Z][a-zA-Z0-9_]*)(?:=(?P<quot>"|')(?P<value>.*?)(?P=quot))?
)
z %s[ \t]*$z^([\> ]*){}({}){}$éÿÿÿÿz([0-9]+)cóeZdZdZy)ÚSuperFencesExceptionz=Special exception to ensure one is raised when a fence fails.N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__©óúW/home/antigravity/intellecton/venv/lib/python3.12/site-packages/pymdownx/superfences.pyrrSsÚGrrcór|jdd«}|jdd«}|jdd«}|S)zBasic html escaping.ú&z&amp;ú<z&lt;r z&gt;)Úreplace)Útxts rÚ_escaperWs9ð +‰+c˜
#€CØ
+‰+c˜
"€CØ
+‰+c˜
"€CØ €Jrcó6eZdZdZdZdZd dZdZdZdZ y)
Ú CodeStashz 
Stash code for later retrieval.
Store original fenced code here in case we were
too greedy and need to restore in an indented code
block.
cói|_y)ú Initialize.N©Ústash©Úselfs rÚ__init__zCodeStash.__init__ió ðˆ
rcó,t|j«S)zLength of stash.)Úlenr$r%s rÚ__len__zCodeStash.__len__nsô4—::ÐrNcó>|jj||«}|S)zGet the code from the key.)r$Úget)r&ÚkeyÚdefaultÚcodes rr-z
CodeStash.getssðz‰z~‰~˜c 7Ó+ˆØˆ rcó|j|=y)zRemove the stashed code.Nr#)r&r.s rÚremovezCodeStash.removeysð
J‰Js‰Orcó&||f|j|<y)zStore the code in the stash.Nr#)r&r.r0Ú indent_levels rÚstorezCodeStash.store~sð  Ð
rcói|_y©zClear the stash.Nr#r%s rÚ clear_stashzCodeStash.clear_stashƒr(r©N)
rrrrr'r+r-r2r5r8rrrr r `s%ñòò
ó
ò ò

rr c ó8|d}|d}|d}|r|jd|«|rd|dnd}|r djd j|««nd}|r)d d jd
|j«D««znd}d j|||t |««S) zFormat source as code blocks.ÚclassesÚid_valueÚattrsrú id="úú class="{}"r
c3ó2K|]\}}|d|dŒy­w©z="r?Nr©Ú.0Úvs rú <genexpr>z$fence_code_format.<locals>.<genexpr>•ó èø€ÒB©D¨A¨q˜a˜S  1 # Qœ<ÑBùóz <pre{}{}{}><code>{}</code></pre>©ÚinsertÚformatÚjoinÚitemsr© ÚsourceÚlanguageÚ
class_nameÚoptionsÚmdÚkwargsr;r<r=s rÚfence_code_formatrWð€GØ!€HØ 7‰O€EáØq˜%á&.xj Ñ"°B€HÙ9@ˆm×" 3§8¡8¨GÓ#4Ô5Àb€GÙFKˆC#—(B°E·K±K³MÔ BÐQS€Eà 4°X¸ÌwÐW]ËÓ _rc ó8|d}|d}|d}|r|jd|«|rd|dnd}|r djd j|««nd}|r)d d jd
|j«D««znd}d j|||t |««S) zFormat source as div.r;r<r=rr>r?r@rAr
c3ó2K|]\}}|d|dŒy­wrCrrDs rrHz#fence_div_format.<locals>.<genexpr>¦rIrJz<div{}{}{}>{}</div>rKrPs rÚfence_div_formatrZšs ð€GØ!€HØ 7‰O€EáØq˜%á&.xj Ñ"°B€HÙ9@ˆm×" 3§8¡8¨GÓ#4Ô5Àb€GÙFKˆC#—(B°E·K±K³MÔ BÐQS€Eà × °'¸5Ä'È&Ã/Ó Rrcó,|jdj}|j«D]h\}}d}|rW|jd«r|||<Œ!dtfdt
fdfD],\} }
|| k(sŒ |dusŒ|
|
j
|«Œ%|||<d}n|rŒd|||<Œjy)zHighlight validator.Úfenced_code_blockFzdata-Úhl_linesÚlinenums)ÚtitleNT)Ú
preprocessorsÚ use_pygmentsrOÚ
startswithÚ RE_HL_LINESÚ RE_LINENUMSÚmatch) rRÚinputsrTr=rUrarFrGÚmatchedÚoptÚ validators rÚhighlight_validatorrj«ð×#Ð$7ÑE€Là ò
ˆˆ1؈٠Ø|‰|˜GÔaØØ$.´ Ð#<¸zÌ;Ð>WÐYhÐ"iò
˜“8Ø ’}¨)Ð*;¸y¿¹ÈqÓ?QÑ?]Ø%&˜ 
Ø"&˜Ùð 
ò ؈E!ŠHð
ð rcó>|j«D]
\}}|||<Œ y)zDefault validator.T)rO)rRrfrTr=rUrFrGs rÚdefault_validatorrlÂs)ð òˆˆ1؈ˆaŠðà rcóT|jdj«||||||«S)zValidator wrapper.r\)r`Úget_hl_settings)rRrfrTr=rUris rÚ
_validatorroÊs/ð×ÑÐ X˜v °rÓ :rc ó||||||fi|¤ŽS)zFormatter wrapper.r)ÚsrcrRrTrUrSÚ_fmtrVs rÚ
_formatterrsÑsñ X˜z¨7°BÑ A¸ Arcó&|duxs |dk(xs||k(S)zTest language.NÚ*r)rRÚ
test_languages rÚ_testrw×s#ð ˜ Ò U M°SÑ$8Ò U¸
Ñ<UÐUrcó:eZdZdZˆfdZdZdZdZdZˆxZ S)ÚSuperFencesCodeExtensionz!SuperFences code block extension.có`g|_ddggdgddgddgddgdœ|_t| |i|¤Žy )
r"Fz-Disable indented code blocks - Default: Falsez2Specify custom fences. Default: See documentation.r@zwSet class name for wrapper element. The default of CodeHilite or Highlight will be usedif nothing is set. - Default: ''z(Preserve tabs in fences - Default: Falsez,Relaxed fenced code headers - Default: False)Údisable_indented_code_blocksÚ
custom_fencesÚ css_classÚ
preserve_tabsÚrelaxed_headersN)Ú superfencesÚconfigÚsuperr')r&ÚargsrVÚ __class__s €rr'z!SuperFencesCodeExtension.__init__às]ø€ðˆÔà-2Ð4cÐ,dØ Ð"VÐððð $Ð%OÐPØ %Ð'UÐ 
ˆŒ ô ј) )rcó¤|tjt|¬«||dœ}|dk(r||jd<y|jj |«y)z@Extend SuperFences with the given name, language, and formatter.)rv©ÚnameÚtestÚ formatterrirurN)Ú functoolsÚpartialrwr€Úappend)r&r‡r‰riÚobjs rÚextend_super_fencesz,SuperFencesCodeExtension.extend_super_fencesòsQðÜ×%¤e¸
ˆð 3Š;Ø"%ˆD× Ñ ˜QÒ à × Ñ × # CÕ (rc
ó||j|«|j«}|jjddtdt j tt¬«dœ«|jdg«}|D}|jd«}|jd«}|jd t«}|jd
t«}|ŒT|ŒW|j|t j t||¬ «t j t|¬««Œž||_|j«t!«|_y) z7Add fenced block preprocessor to the Markdown instance.rr€rir†r|r‡ÚclassrMri)rSrr)ÚregisterExtensionÚ
getConfigsr€rLrwrrorjr-rWrlrsrUÚpatch_fenced_ruler r$) r&rUrr|Úcustomr‡rSÚ fence_formatris rÚextendMarkdownz'SuperFencesCodeExtension.extendMarkdownsð ×јTÔÓ"ˆð
×Ñ×ÑØ
àØ&×.¬zÔEXÔ
ô
ðŸ
 ?°BÓ7ˆ
Ø
ˆFØ—:‘:˜fÓ%ˆDØŸ GÓ,ˆJØ!Ÿ:™: hÔ0AÓBˆŸ
 ;Ô0AÓBˆIØÑ JÑ$:Ø×Ü×%¤j¸ZÈlÔ×%¤j¸IÔð
ðˆŒØ ×ÑÔ Ü“[ˆ
rcóð|j«}t|j«}||_||_|j
dddk(r|j |j
dd<|jjj|dd«t|jj«}||_||_|jjjj|dd«|d rgt|j«}||_||_|jjj|d
d «|jjd gi«|jjd
gd
ddii«y)a
Patch Python Markdown with our own fenced block extension.
We don't attempt to protect against a user loading the `fenced_code` extension with this.
Most likely they will have issues, but they shouldn't have loaded them together in the first place :).
rr‡r€r‰r\ér0éPr~Úfenced_raw_blockgÍÌÌÌÌ ?@zpymdownx._bypassnormzpymdownx.highlightÚ_enabledFN)r“ÚSuperFencesBlockPreprocessorrUrÚ extensionr€Ú highlightr`ÚregisterÚSuperFencesCodeBlockProcessorÚparserÚblockprocessorsÚSuperFencesRawBlockPreprocessorÚregisterExtensions)r&rÚfencedÚ
indented_codeÚ
raw_fenceds rr”z*SuperFencesCodeExtension.patch_fenced_rule%sAðÓä-¨d¯g©gÓ6ˆØˆŒ
ØˆÔØ × Ñ ˜AÑ ˜vÑ &¨-Ò 7Ø/5×/?Ñ/?ˆD× Ñ ˜QÑ   Ñ  ×Ñ×& vÐ/BÀBÔ5°d·g±g·n±nÓEˆ
Ø%ˆ
ÔØ"&ˆ
ÔØ ×&×
¸vÀrÔ  8¸¿¹ÓAˆJØ &ˆ Ø#'ˆ Ø G‰G× !× *¨:Ð7IÈ5Ô G‰G× &Ð(>Ð'?ÀÔ 
×"Ð$8Ð#9Ð<PÐS]Ð_dÐReÐ;fÕgrcó8|jj«yr7)r$r8r%s rÚresetzSuperFencesCodeExtension.resetFsð
×ÑÕ r)
rrrrr'r—r”Ú
__classcell__©r„s@rryryÝs"ø„Ù*ò$
"!òHhöB!rrycó¾eZdZdZdZˆfdZdZdZdZdZ dZ
d „Z d
Z d Z
d Zd
ZdZdZdZdZdZdZdZdZdZdZddZdZdZdZdZˆxZS)r
Preprocessor to find fenced code blocks.
Because this is done as a preprocessor, it might be too greedy.
We will stash the blocks code and restore if we mistakenly processed
text from an indented code block.
z<pre%s><code%s>%s</code></pre>có’t||«|jj|_d|_i|_d|_d|_y)r"FN) rr'rUÚ
tab_lengthÚtab_lenÚchecked_hl_settingsÚcodehilite_confÚchecked_quotesÚ quotes_logic)r&rUr„s €rr'z%SuperFencesBlockPreprocessor.__init__WsCø€ô Ñ˜ÔØ—w‘w׌ Ø#(ˆÔ ØÔØÔØÕrcó8|j|j«S)zNormalize whitespace.)Ú
expandtabsr°)r&Útexts rÚ normalize_wsz)SuperFencesBlockPreprocessor.normalize_wsasð˜tŸ|™|Ó,rcóddj|Dcgc]}||jdŒc}«Scc}w)zDedent the fenced block lines.ú
N)rNÚws_virtual_len)r&ÚlinesÚlines rÚ
rebuild_blockz*SuperFencesBlockPreprocessor.rebuild_blockfs/ðy‰yÀÖ˜$˜t×HùÒGs-có¾|jsFd|_|jjD]&}t|t«sŒd|_|j
S|j
S)z2Check if we are using the Quotes blockquote logic.T)rUÚregisteredExtensionsÚ
isinstancer r´)r&Úexts rÚis_pymdownx_quotes_logicz5SuperFencesBlockPreprocessor.is_pymdownx_quotes_logicks]ð×"Ø"&ˆ Ø—ww×
ܘc¤?Õ3Ø(,Ø× Ñ Ð ð 
ð× Ñ Ð rcó|js)d|_d}d|_|jjD]0}||_ |j «}|j
«|_nd|jjv|_ |jd}|r|n|d|_ |jjdd«|_
|jdd«|_|d|_|d |_|d
|_|d |_|d |_|jd
d«|_|jdd «|_|jdd«|_|jdd«|_|jdd«|_|jdd«|_|jdi«|_|jdd«|_|jdd«|_|jdd«|_|jdd«|_|jdd«|_|jdd«|_ yy#t$rYŒwxYw)z8Check for Highlight extension to get its configurations.TNÚ attr_listr}rextend_pygments_langÚ
guess_langÚpygments_styleraÚ noclassesr^Úlinenums_styleÚtableÚlinenums_classÚlinenums_specialrÚlanguage_prefixz language-Úcode_attr_on_preÚ
auto_titleÚauto_title_mapÚ
line_spansr@Ú line_anchorsÚanchor_linenumsÚpygments_lang_classÚstripnlÚ default_lang)!r±Ú highlighterrUÚ
highlight_extÚget_pymdownx_highlight_settingsÚget_pymdownx_highlighterÚAttributeErrorÚtreeprocessorsrÅrr}r-rrar^r×)r&rr}s rrnz,SuperFencesBlockPreprocessor.get_hl_settingsvs!ð×'Ø'+ˆ ˆ#ˆ Ø—w‘w×
Ø%(ÔØ ×BFØ'*×'CÑ'CÓ'Eð 
ð)¨D¯G©G×,BÑ,BÐBˆDŒNàŸ  KÑ0ˆIÙ*3™Y¸À Ñ9LˆDŒNà#'§;¡;§?¡?Ð3DÀeÓ#Lˆ Ø(.¯
©
Ð3IÈ4Ó(Pˆ $ 2ˆDŒOØ"(Ð)9Ñ":ˆ Ø & ~Ñ 6ˆ Ø# 0ˆDŒNØ" .ˆDŒMØ"(§*¡*Ð-=¸wÓ"Gˆ Ø"(§*¡*Ð-=¸zÓ"Jˆ Ø$*§J¡JÐ/AÀ2Ó$Fˆ !Ø#)§:¡:Ð.?ÀÓ#Mˆ Ø$*§J¡JÐ/AÀ5Ó$IˆDÔ $Ÿj™j¨°uÓ=ˆDŒOØ"(§*¡*Ð-=¸rÓ"Bˆ Ø$Ÿj™j¨°rÓ:ˆDŒOØ &§
¡
¨>¸2Ó >ˆ Ø#)§:¡:Ð.?ÀÓ#Gˆ Ø'-§z¡zÐ2GÈÓ'Oˆ !Ÿ:™: Ó6ˆDŒLØ &§
¡
¨>¸4Ó @ˆ ðM(øôÚðús¿%H8È8 IÉIcóÈd|_d|_d|_d|_d|_d|_g|_d|_d|_i|_ g|_
d|_ i|_ d|_
y)zReset the class variables.Nrr@)ÚwsÚws_lenr»ÚfenceÚlangÚ quote_levelr0Ú empty_linesÚ fence_endrTr;Úidr=r‰r%s rÚclearz"SuperFencesBlockPreprocessor.clear¡siðˆŒØˆŒ ØˆÔØˆŒ
؈Œ ØˆÔØˆŒ ØˆÔØˆŒØˆŒ ؈Œ ؈ŒØˆŒ
؈rcó||zj«dk(r4|xjdz
c_|jj||z«yt |«|j
k7r|dk7r|j
«y|jj|«'|jd«s |j||||«yd|_|jj||z«y#t$rt$r|j
«YywxYw)zEvaluate a normal fence.r@rN)r
rr)
Ústriprär0r*rerbÚprocess_nested_blockrÚ Exception)r&ÚcontentÚstartÚends rÚ
eval_fencez'SuperFencesBlockPreprocessor.eval_fence³ð
‰L× Ñ Ó ! RÒ × Ò  Ñ Ø I‰I× Ñ ˜R '™\Õ
W˜×
¸
à J‰J
^‰^×
! 
6¸w×?QÑ?QÐR]Ô?^ð
Ø×)¨"¨g°u¸ !ˆ Ø I‰I× Ñ ˜R '™\Õ *øô
ØÜò
Ø
ð
úsÂ&C!Ã!"DÄDcóÀ|j«}||jkDr|j«y|r ||jk7r|j«y|dk(r4|jj ||z«|xj
dz
c_yt
|«|jkr|j«y|j
r ||jkr|j«y|jj|« |j||||«yd|_|jj ||z«y#t$rt$r|j«YywxYw)z#Evaluate fence inside a blockquote.Nr@rr)
r0r*rer)r&r´s rÚ eval_quotedz(SuperFencesBlockPreprocessor.eval_quotedÊs#ð× à ˜× J‰JŒLØ á ˜K¨4×+;Ñ+;Ò J‰JŒLØ à bŠ=à I‰I× Ñ ˜R '™\Ô × Ò  Ñ Ü
Wt—{
J‰J
×
Ò
 ×0@Ñ0@Ò"@ð
J‰J
^‰^×
! 

Ø×)¨"¨g°u¸ !ˆ Ø I‰I× Ñ ˜R '™\Õ *øô
ØÜò
Ø
ð
úsÃ=D8Ä8"EÅEc ó||j|«z|_d}|jˆ||z
dz
|_|j|j |j
«|j |j|j|j|j|jr |jni¬«}|?|j|jdj|j
««dz|||«|j«y)ú)Process the contents of the nested block.Né)rqrRrUrTr;r<r=)r¸Úlastr‰Ú
line_countr¾r0rUrTr;r=Ú_storerN©r&r0s rz1SuperFencesBlockPreprocessor.process_nested_blockñð˜×*¨7ÓŒ ØˆØ >‰>Ð ! E™k¨A™oˆDŒOà—>×& t§y¡yÓŸØ—7‘7ØŸ ØŸ ØŸØ$(§N¢Nd—j’j¸ðˆDð Ð Ø K‰K˜×)¨$¯)©)°D·I±IÓ*>Ó?À$ÑÈeÐUXÔ 
rcójt|«}|dkrd}|S||jkDr|jdz}|S)a
Normalize highlight line number.
Clamp outrages numbers. Numbers out of range will be only one increment out range.
This prevents people from create massive buffers of line numbers that exceed real
number of code lines.
rr)Úintrö)r&Únumbers rÚnormalize_hl_linez.SuperFencesBlockPreprocessor.normalize_hl_linesAôV“ˆØ AŠ:؈Fðˆ
ðd—o
—_‘_ qÑ(ˆF؈
rc
ó†g}|r·|j«D}|jd«Dcgc]}|j|«Œ}}t|«dkDr:|d|dksŒJ|jt t |d|ddz«««Œxd|dcxkr|j ksŒ‘nŒ”|j|«Œ¦|Scc}w)zParse the lines to highlight.ú-rr)Úsplitrür*ÚextendÚlistÚrangerö)r&r]ÚentryÚ
line_ranges rÚparse_hl_linesz+SuperFencesBlockPreprocessor.parse_hl_liness¸ðˆÙ ØÓ
-ØAFÇÁÈSÓAQÖR¸A˜d×4°QÕR