
    ͆h+              	         S r SSKJr  SSKJr  SSKJr  SSKJs  J	r  SSK
Jr  SSKrSSKrSSKrSSKrSSKJrJr  SSKJr  SS	KJr  SSKrSS
KJrJrJr  \R8                  " S5      r\R8                  " S5      r\R8                  " S5      r\R8                  " S5      r \RB                  RE                  S5      (       a  Sr#O\RB                  S:X  a  Sr#OSr#S\RH                  :*  r%S\RH                  :*  r&S(S jr'S)S jr(S)S jr)S)S jr*S*S jr+S+S jr,S,S jr-S-S jr.S.S jr/S/S jr0S0S  jr1 " S! S"\" S"/ S#Q5      5      r2 " S$ S%\5      r3S1S2S& jjr4S1S3S' jjr5g)4zW
General utilities.

MIT license.

Copyright (c) 2017 Isaac Muse <isaacmuse@gmail.com>
    )annotations)Markdown)InlineProcessorN)
namedtuple)pathname2urlurl2pathname)urlparsewraps)SequenceCallableAnyz
^[A-Za-z]$z^[A-Za-z]:(?:\\.*)?$z!(http|ftp)s?|data|mailto|tel|newsz^///[A-Za-z]:(?:/.*)?$winwindowsdarwinosxlinux)   	   )r      c                t    Ub  Ub  [        [        X5      U5      $ Ub  [        X5      $ Ub  [        X5      $ U $ )z1Clamp the value to the given minimum and maximum.)maxmin)valuemnmxs      E/opt/services/DDDS/venv/lib/python3.13/site-packages/pymdownx/util.pyclampr   '   sA     
~".3u>2&&	5~	5~    c                     [         S:H  $ )zIs Windows.r   	_PLATFORM r   r   is_winr$   4   s     	!!r   c                     [         S:H  $ )z	Is Linux.r   r!   r#   r   r   is_linuxr&   :   s     r   c                     [         S:H  $ )z	Is macOS.r   r!   r#   r   r   is_macr(   @   s     r   c                    [        U 5      $ )zPath to URL.)r   )paths    r   url2pathr+   F   s     r   c                    [        U 5      n[        5       (       a-  [        R                  U5      (       a  UR	                  SSS5      n[
        (       a  UR	                  SS5      nU$ )zURL to path.z///    /)r   r$   RE_WIN_DEFAULT_PROTOCOLmatchreplacePY314)urlr*   s     r   path2urlr5   L   sR     Dxx+11$77||E2q)u||E3'Kr   c                    [        U 5      $ )zGet the Unicode code points.)list)ss    r   get_code_pointsr9   X   s     7Nr   c                    [        U 5      $ )zGet Unicode ord.)ord)cs    r   get_ordr=   ^   s     q6Mr   c                    [        U 5      $ )zGet the Unicode char.)chr)r   s    r   get_charr@   d   s     u:r   c                    [         R                   " U R                  5      nU H  nX2;  d  M
  UR                  U5        M     X l        g)z
Add chars to the escape list.

Don't just append as it modifies the global list permanently.
Make a copy and extend **that** copy so that only this Markdown
instance gets modified.
N)copyESCAPED_CHARSappend)mdechrsescapedecs       r   escape_charsrI   j   s<     ii(()GNN2  r   c                   SnSn[        [        R                  " U 5      5      u  p4pVpx[        R	                  U5      (       a  SnGO*US:X  a  US:X  a
  US:X  a  SnGOUS:X  a6  [
        R	                  U5      (       a  SXE-   R                  SS5      -   nSnSnOUS:X  a/  UR                  S5      (       a  XE-   R                  SS5      nSnSnOUS:X  a  SnO[        R	                  U5      (       a(  SR                  X5R                  SS5      5      nSnSnSnOXUS:X  a+  US:w  a%  U R                  S5      (       a  SU-   U-   nSnSnSnO'US:w  a	  US:w  a  SnOUR                  S	5      (       a  SnX4XVXxX4$ )
aw  
Parse the URL.

Try to determine if the following is a file path or
(as we will call anything else) a URL.

We return it slightly modified and combine the path parts.

We also assume if we see something like c:/ it is a Windows path.
We don't bother checking if this **is** a Windows system, but
'nix users really shouldn't be creating weird names like c: for their folder.
FTr-   filer/   \z/{}:{}z//)r/   rL   )
r	   htmlunescapeRE_URLr1   RE_WIN_DRIVE_PATHr2   
startswithRE_WIN_DRIVE_LETTERformat)	r4   is_urlis_absoluteschemenetlocr*   paramsqueryfragments	            r   	parse_urlr[   z   sy    FK4<T]]3=O4P1FD%||F	2&B,42:	6	066v>>fm,,T377	6	f//55&&tS1	6			"	"6	*	*v||D#'>?	2&B,3>>$+?+?f}t#	2&B,		%	%D%6OOr   c                  4   ^  \ rS rSrSrSSU 4S jjjrSrU =r$ )
PatSeqItem   zPattern sequence item item.c                &   > [         TU ]  XX#U5      $ )zCreate object.)super__new__)clspatternbuildertagsfull_recursion	__class__s        r   ra   PatSeqItem.__new__   s     wsWNKKr   r#   )F)
rc   zre.Pattern[str]rd   strre   ri   rf   boolreturnr]   )__name__
__module____qualname____firstlineno____doc__ra   __static_attributes____classcell__)rg   s   @r   r]   r]      s    %L Lr   r]   )rc   rd   re   rf   c                      \ rS rSrSr/ rSS jrSS jrSS jr            SS jr	            SS jr
      SS jrS	rg
)PatternSequenceProcessor   zMProcessor for handling complex nested patterns such as strong and em matches.c                z    [         R                  " U5      nUR                  S5      nU R                  XeSX45        U$ )zReturn single tag.   N)etreeElementgroupparse_sub_patterns)selfmtagrf   idxel1texts          r   build_single%PatternSequenceProcessor.build_single   s4    mmC wwqz4E
r   c                p   UR                  S5      u  pV[        R                  " U5      n[        R                  " U5      nUR                  S5      n	U R	                  XSX45        UR                  U5        [        UR                  5       5      S:X  a$  UR                  S5      n	U R	                  XXU5        U$ )zReturn double tag.,rw   Nr   )splitrx   ry   rz   r{   rD   lengroups
r|   r}   re   rf   r   tag1tag2r   el2r   s
             r   build_double%PatternSequenceProcessor.build_double   s     ZZ_
mmD!mmD!wwqz4E

3qxxz?a771:D##DsCH
r   c                6   UR                  S5      u  pV[        R                  " U5      n[        R                  " U5      nUR                  S5      n	U R	                  XSX45        UR                  S5      n	UR                  U5        U R	                  XSX45        U$ )zFReturn double tags (variant 2): `<strong>text <em>text</em></strong>`.r   rw   Nr   )r   rx   ry   rz   r{   rD   r   s
             r   build_double2&PatternSequenceProcessor.build_double2   s}     ZZ_
mmD!mmD!wwqz4Ewwqz

34E
r   c                   SnSn[        U5      nXx:  Ga  U R                  R                  X5      (       a  Sn	[        U R                  5       H  u  pU(       d  X::  a  M  UR
                  R                  X5      nU(       d  M7  XUR                  S5       nU(       a  Ub  Xl        OXl        U R                  XR                  UR                  UR                  U
5      nUR                  U5        UnUR                  S5      =pgSn	M     U	(       d  US-  nOUS-  nXx:  a  GM  XS nU(       a  Ub  Xl        gXl        gg)aD  
Parses sub patterns.

`data` (`str`):
    text to evaluate.

`parent` (`etree.Element`):
    Parent to attach text and sub elements to.

`last` (`etree.Element`):
    Last appended child to parent. Can also be None if parent has no children.

`idx` (`int`):
    Current pattern index that was used to evaluate the parent.

r   FNTr.   )r   compiled_rer1   	enumeratePATTERNSrc   starttailr   build_elementrd   re   rf   rD   end)r|   dataparentlastrf   r   offsetposlengthmatchedindexitemr}   r   els                  r   r{   +PatternSequenceProcessor.parse_sub_patterns   s(   2 Tl%%d00#,T]]#;KE)el **45Aq
  $1771:6#/,0	.2!//<<DL_L_afgb)!'(uuQx/"&+ $<, 1HC qA lF G} 	"	 r   c                    US:X  a  U R                  XXE5      $ US:X  a  U R                  XXE5      $ U R                  XXE5      $ )zElement builder.double2double)r   r   r   )r|   r}   rd   re   rf   r   s         r   r   &PatternSequenceProcessor.build_element,  sM     i%%a~EE $$QnDD$$QnDDr   c                `   SnSnSn[        U R                  5       H  u  pgUR                  R                  X!R	                  S5      5      nU(       d  M8  UR	                  S5      nUR                  S5      nU R                  XR                  UR                  UR                  U5      n  O   X4U4$ )zParse patterns.Nr   )
r   r   rc   r1   r   r   r   rd   re   rf   )	r|   r}   r   r   r   r   r   r   m1s	            r   handleMatch$PatternSequenceProcessor.handleMatch=  s     $T]]3KE##D''!*5BrffQi''LL$))TEXEXZ_` 4 #~r   r#   N)
r}   re.Match[str]r~   ri   rf   rj   r   intrk   etree.Element)
r}   r   re   ri   rf   rj   r   r   rk   r   )r   ri   r   r   r   zNone | etree.Elementrf   rj   r   r   rk   None)r}   r   rd   ri   re   ri   rf   rj   r   r   rk   r   )r}   r   r   ri   rk   z3tuple[etree.Element | None, int | None, int | None])rl   rm   rn   ro   rp   r   r   r   r   r{   r   r   rq   r#   r   r   rt   rt      s    WHE#E# E# #	E#
 E# E# 
E#NEE E 	E
 E E 
E"  
=	r   rt   c                   ^ ^ SU U4S jjnU$ )z
Raise a `DeprecationWarning` when wrapped function/method is called.

Usage:

    @deprecated("This method will be removed in version X; use Y instead.")
    def some_method()"
        pass
c                :   >^  [        T 5      SU UU4S jj5       nU$ )Nc                 h   > [         R                  " STR                   ST 3[        TS9  T" U 0 UD6$ )N'z' is deprecated. category
stacklevel)warningswarnrl   DeprecationWarning)argskwargsfuncmessager   s     r   _deprecated_func6deprecated.<locals>._wrapper.<locals>._deprecated_func^  s<    MMDMM?"3G9=+%
 (((r   )r   r   r   r   rk   r   r
   )r   r   r   r   s   ` r   _wrapperdeprecated.<locals>._wrapper]  s&    	t	) 	) 
	)  r   )r   Callable[..., Any]rk   r   r#   )r   r   r   s   `` r   
deprecatedr   R  s    	  	  Or   c                8    [         R                  " U [        US9  g)zWarn deprecated.r   N)r   r   r   )r   r   s     r   warn_deprecatedr   j  s     MM#r   )r   floatr   r   r   r   rk   r   )rk   rj   )r*   ri   rk   ri   )r4   ri   rk   ri   )r8   ri   rk   z	list[str])r<   ri   rk   r   )r   r   rk   ri   )rE   r   rF   zSequence[str]rk   r   )r4   ri   rk   z/tuple[str, str, str, str, str, str, bool, bool])rw   )r   ri   r   r   rk   r   )r   ri   r   r   rk   r   )6rp   
__future__r   markdownr   markdown.inlinepatternsr   xml.etree.ElementTreerx   ElementTreecollectionsr   sysrB   rerM   urllib.requestr   r   urllib.parser	   	functoolsr   r   typingr   r   r   compilerR   rP   rO   r0   platformrQ   r"   version_infoPY39r3   r   r$   r&   r(   r+   r5   r9   r=   r@   rI   r[   r]   rt   r   r   r#   r   r   <module>r      s2   #  3 % % " 
  	  5 !   * *jj/ JJ67 	7	8**%>? <<5!!I\\XII!!!3###
" 	 8PvLL*Z[ LQ Qh0r   