
    Ǆg3                    D   d dl mZ d dlmZ d dlZd dlZ	 ddlm	Z	 ej                  rd dlZ G d dej                        Z G d dej                        Zdd
ZddZddZ G d d	e      Z G d dej.                        Z G d d      ZddZy# e
$ r	 ddlm	Z	 Y w xY w)    )annotationsN   )_escape_innerc                      e Zd ZddZy)_HasHTMLc                    y N selfs    [/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/markupsafe/__init__.py__html__z_HasHTML.__html__           Nreturnstr)__name__
__module____qualname__r   r
   r   r   r   r      s    %r   r   c                      e Zd ZddZy)	_TPEscapec                    y r	   r
   )r   ss     r   __call__z_TPEscape.__call__   r   r   Nr   t.Anyr   Markup)r   r   r   r   r
   r   r   r   r      s    2r   r   r   c                   t        |       t        u rt        t        |             S t	        | d      rt        | j                               S t        t        t        |                   S )a  Replace the characters ``&``, ``<``, ``>``, ``'``, and ``"`` in
    the string with HTML-safe sequences. Use this if you need to display
    text that might contain such characters in HTML.

    If the object has an ``__html__`` method, it is called and the
    return value is assumed to already be safe for HTML.

    :param s: An object to be converted to a string and escaped.
    :return: A :class:`Markup` string with the escaped text.
    r   )typer   r   r   hasattrr   r   s    r   escaper#      sN     Aw#~mA&''q*ajjl##-A'((r   c               0    | 
t               S t        |       S )a  Like :func:`escape` but treats ``None`` as the empty string.
    Useful with optional values, as otherwise you get the string
    ``'None'`` when the value is ``None``.

    >>> escape(None)
    Markup('None')
    >>> escape_silent(None)
    Markup('')
    )r   r#   r"   s    r   escape_silentr%   0   s     	yx!9r   c               <    t        | t              st        |       S | S )a  Convert an object to a string if it isn't already. This preserves
    a :class:`Markup` string rather than converting it back to a basic
    string, so it will still be marked as safe and won't be escaped
    again.

    >>> value = escape("<User 1>")
    >>> value
    Markup('&lt;User 1&gt;')
    >>> escape(str(value))
    Markup('&amp;lt;User 1&amp;gt;')
    >>> escape(soft_str(value))
    Markup('&lt;User 1&gt;')
    )
isinstancer   r"   s    r   soft_strr(   @   s     a1vHr   c                  2    e Zd ZdZdZ	 d*	 	 	 	 	 	 	 d+ fdZd,dZd- fdZd-dZd. fdZ	d. fdZ
d/ fd	Zd0 fd
Zd1 fdZ	 d2	 	 	 	 	 d3 fdZ	 d2	 	 	 	 	 d3 fdZ	 d4	 	 	 d5 fdZd0dZd0dZed6d       Zd7 fdZd, fdZd, fdZd, fdZd, fdZd8d9 fdZd:d; fdZd:d; fdZd<d= fdZd<d= fdZd:d; fdZd<d= fdZ 	 	 	 	 d> fdZ!d?d@ fdZ"d, fd Z#dA fd!Z$d, fd"Z%dB fd#Z&dC fd$Z'dD fd%Z(dD fd&Z)dEd'Z*	 	 	 	 dFd(Z+dGd)Z, xZ-S )Hr   a  A string that is ready to be safely inserted into an HTML or XML
    document, either because it was escaped or because it was marked
    safe.

    Passing an object to the constructor converts it to text and wraps
    it to mark it safe without escaping. To escape the text, use the
    :meth:`escape` class method instead.

    >>> Markup("Hello, <em>World</em>!")
    Markup('Hello, <em>World</em>!')
    >>> Markup(42)
    Markup('42')
    >>> Markup.escape("Hello, <em>World</em>!")
    Markup('Hello &lt;em&gt;World&lt;/em&gt;!')

    This implements the ``__html__()`` interface that some frameworks
    use. Passing an object that implements ``__html__()`` will wrap the
    output of that method, marking it safe.

    >>> class Foo:
    ...     def __html__(self):
    ...         return '<a href="/foo">foo</a>'
    ...
    >>> Markup(Foo())
    Markup('<a href="/foo">foo</a>')

    This is a subclass of :class:`str`. It has the same methods, but
    escapes their arguments and returns a ``Markup`` instance.

    >>> Markup("<em>%s</em>") % ("foo & bar",)
    Markup('<em>foo &amp; bar</em>')
    >>> Markup("<em>Hello</em> ") + "<foo>"
    Markup('<em>Hello</em> &lt;foo&gt;')
    r
   c                    t        |d      r|j                         }|t        |   | |      S t        |   | |||      S Nr   )r!   r   super__new__)clsobjectencodingerrors	__class__s       r   r-   zMarkup.__new__z   sG     6:&__&F7?3//wsFHf==r   c                   | S r	   r
   r   s    r   r   zMarkup.__html__   s    r   c                   t        |t              st        |d      r-| j                  t        |   | j                  |                  S t        S r+   )r'   r   r!   r2   r,   __add__r#   NotImplementedr   valuer2   s     r   r5   zMarkup.__add__   s=    eS!WUJ%?>>%'/$++e2D"EFFr   c                   t        |t              st        |d      r | j                  |      j	                  |       S t
        S r+   )r'   r   r!   r#   r5   r6   )r   r8   s     r   __radd__zMarkup.__radd__   s5    eS!WUJ%?;;u%--d33r   c               @    | j                  t        | 	  |            S r	   r2   r,   __mul__r7   s     r   r=   zMarkup.__mul__       ~~egoe455r   c               @    | j                  t        | 	  |            S r	   r<   r7   s     r   __rmul__zMarkup.__rmul__   r>   r   c               2    t        |t              rt         fd|D              }nSt        t        |      d      r't        |t              st        | j                        }nt        | j                        f} j                  t         %  |            S )Nc              3  J   K   | ]  }t        |j                          y wr	   )_MarkupEscapeHelperr#   ).0xr   s     r   	<genexpr>z!Markup.__mod__.<locals>.<genexpr>   s     M!-a=Ms    #__getitem__)
r'   tupler!   r    r   rC   r#   r2   r,   __mod__r7   s   ` r   rI   zMarkup.__mod__   sq    eU#MuMMET%[-0E39O't{{;E )<>E~~egoe455r   c               T    | j                   j                   dt        |           dS )N())r2   r   r,   __repr__r   r2   s    r   rM   zMarkup.__repr__   s*    ..))*!EG,<,>+?qAAr   c               h    | j                  t        | 	  t        | j                  |                  S r	   )r2   r,   joinmapr#   )r   iterabler2   s     r   rP   zMarkup.join   s&    ~~egl3t{{H+EFGGr   c               h    t         |   ||      D cg c]  }| j                  |       c}S c c}w r	   )r,   splitr2   r   sepmaxsplitvr2   s       r   rT   zMarkup.split   s-     ,17=h+GHaq!HHH   /c               h    t         |   ||      D cg c]  }| j                  |       c}S c c}w r	   )r,   rsplitr2   rU   s       r   r[   zMarkup.rsplit   s-     ,17>#x+HIaq!IIIrY   c               f    t         |   |      D cg c]  }| j                  |       c}S c c}w r	   )r,   
splitlinesr2   )r   keependsrX   r2   s      r   r]   zMarkup.splitlines   s,     ,17+=h+GHaq!HHHs   .c               0    ddl m}  |t        |             S )u   Convert escaped markup back into a text string. This replaces
        HTML entities with the characters they represent.

        >>> Markup("Main &raquo; <em>About</em>").unescape()
        'Main » <em>About</em>'
        r   )unescape)htmlr`   r   )r   r`   s     r   r`   zMarkup.unescape   s     	"D	""r   c                  t        |       }|j                  d      x}dk7  r>|j                  d|      x}dk(  rn&|d|  ||dz   d  }|j                  d      x}dk7  r>|j                  d      x}dk7  r>|j                  d|      x}dk(  rn&|d|  ||dz   d  }|j                  d      x}dk7  r>d	j                  |j                               }| j	                  |      j                         S )
u   :meth:`unescape` the markup, remove tags, and normalize
        whitespace to single spaces.

        >>> Markup("Main &raquo;	<em>About</em>").striptags()
        'Main » About'
        z<!--z-->N   <>r    )r   findrP   rT   r2   r`   )r   r8   startends       r   	striptagszMarkup.striptags   s    D	 

6**ur1zz%//B6Ve}oeC!GHo%67E 

6**ur1 

3'uB.zz#u--"4Ve}oeC!GHo%67E	 

3'uB. '~~e$--//r   c               H    t        |      }|j                  | ur | |      S |S )ztEscape a string. Calls :func:`escape` and ensures that for
        subclasses the correct type is returned.
        )r#   r2   )r.   r   rvs      r   r#   zMarkup.escape   s'    
 AY<<s"r7N	r   c               @    | j                  t        | 	  |            S r	   )r2   r,   rG   )r   keyr2   s     r   rG   zMarkup.__getitem__   s    ~~eg1#677r   c               >    | j                  t        | 	               S r	   )r2   r,   
capitalizerN   s    r   rq   zMarkup.capitalize   s    ~~eg0233r   c               >    | j                  t        | 	               S r	   )r2   r,   titlerN   s    r   rs   zMarkup.title       ~~egmo..r   c               >    | j                  t        | 	               S r	   )r2   r,   lowerrN   s    r   rv   zMarkup.lower   rt   r   c               >    | j                  t        | 	               S r	   )r2   r,   upperrN   s    r   rx   zMarkup.upper   rt   r   c               b    | j                  t        | 	  || j                  |      |            S r	   )r2   r,   replacer#   )r   oldnewcountr2   s       r   rz   zMarkup.replace  s(    ~~egoc4;;s3CUKLLr   c               `    | j                  t        | 	  || j                  |                  S r	   )r2   r,   ljustr#   r   widthfillcharr2   s      r   r   zMarkup.ljust  &    ~~egmE4;;x3HIJJr   c               `    | j                  t        | 	  || j                  |                  S r	   )r2   r,   rjustr#   r   s      r   r   zMarkup.rjust  r   r   c               @    | j                  t        | 	  |            S r	   )r2   r,   lstripr   charsr2   s     r   r   zMarkup.lstrip
      ~~egnU344r   c               @    | j                  t        | 	  |            S r	   )r2   r,   rstripr   s     r   r   zMarkup.rstrip  r   r   c               `    | j                  t        | 	  || j                  |                  S r	   )r2   r,   centerr#   r   s      r   r   zMarkup.center  s&    ~~egnUDKK4IJKKr   c               @    | j                  t        | 	  |            S r	   )r2   r,   stripr   s     r   r   zMarkup.strip      ~~egmE233r   c               @    | j                  t        | 	  |            S r	   )r2   r,   	translate)r   tabler2   s     r   r   zMarkup.translate  s    
 ~~eg/677r   c               @    | j                  t        | 	  |            S r	   )r2   r,   
expandtabs)r   tabsizer2   s     r   r   zMarkup.expandtabs  s    ~~eg09::r   c               >    | j                  t        | 	               S r	   )r2   r,   swapcaserN   s    r   r   zMarkup.swapcase       ~~eg.011r   c               @    | j                  t        | 	  |            S r	   )r2   r,   zfill)r   r   r2   s     r   r   zMarkup.zfill#  r   r   c               >    | j                  t        | 	               S r	   )r2   r,   casefoldrN   s    r   r   zMarkup.casefold&  r   r   c               @    | j                  t        | 	  |            S r	   )r2   r,   removeprefix)r   prefixr2   s     r   r   zMarkup.removeprefix)      ~~eg26:;;r   c                @    | j                  t        | 	  |            S r	   )r2   r,   removesuffix)r   suffixr2   s     r   r   zMarkup.removesuffix,  r   r   c               p    t         |   |      \  }}}| j                  } ||       ||       ||      fS r	   )r,   	partitionr2   r   rV   leftrightr.   r2   s        r   r   zMarkup.partition/  s;     7,S1c5nn4y#c(CJ..r   c               p    t         |   |      \  }}}| j                  } ||       ||       ||      fS r	   )r,   
rpartitionr2   r   s        r   r   zMarkup.rpartition4  s;     7-c2c5nn4y#c(CJ..r   c                p    t        | j                        }| j                  |j                  | ||            S r	   EscapeFormatterr#   r2   vformat)r   argskwargs	formatters       r   formatzMarkup.format9  s.    #DKK0	~~i//dFCDDr   c               p    t        | j                        }| j                  |j                  | d|            S )Nr
   r   )r   mappingr   s      r   
format_mapzMarkup.format_map=  s0    
 $DKK0	~~i//b'BCCr   c                    |rt        d      | S )Nz,Unsupported format specification for Markup.)
ValueError)r   format_specs     r   __html_format__zMarkup.__html_format__E  s    KLLr   ) Nstrict)r/   r   r0   
str | Noner1   r   r   te.Self)r   r   )r8   zstr | _HasHTMLr   r   )r8   t.SupportsIndexr   r   )r8   r   r   r   r   )rR   zcabc.Iterable[str | _HasHTML]r   r   )Nrc   )rV   r   rW   r   r   list[te.Self])F)r^   boolr   r   )r   r   r   r   )ro   zt.SupportsIndex | slicer   r   )rc   )r{   r   r|   r   r}   r   r   r   )rg   )r   r   r   r   r   r   r	   )r   r   r   r   )r   z#cabc.Mapping[int, str | int | None]r   r   )   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rV   r   r   z tuple[te.Self, te.Self, te.Self])r   r   r   r   r   r   )r   zcabc.Mapping[str, t.Any]r   r   )r   r   r   r   ).r   r   r   __doc__	__slots__r-   r   r5   r:   r=   r@   rI   rM   rP   rT   r[   r]   r`   rk   classmethodr#   rG   rq   rs   rv   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r2   s   @r   r   r   T   s   !F I MU	>	>+5	>FI	>		>666BH FHI I3BI	I FHJ J3BJ	J #(II	I
	#0> 	 	84///MKK55L4828 
	8;242<</
/
ED)D 
	Dr   c                  0     e Zd ZdZd fdZd fdZ xZS )r   )r#   c                0    || _         t        | 	          y r	   )r#   r,   __init__)r   r#   r2   s     r   r   zEscapeFormatter.__init__O  s    !'r   c                   t        |d      r|j                  |      }nSt        |d      r.|rt        d| dt        |       d      |j	                         }nt
        |   |t        |            }t        | j                  |            S )Nr   r   zFormat specifier z given, but z{ does not define __html_format__. A class that defines __html__ must define __html_format__ to work with format specifiers.)	r!   r   r   r    r   r,   format_fieldr   r#   )r   r8   r   rm   r2   s       r   r   zEscapeFormatter.format_fieldS  s    5+,&&{3BUJ' '}Le NG G 
 !B %eS-=>B4;;r?##r   )r#   r   r   None)r8   r   r   r   r   r   )r   r   r   r   r   r   r   r   s   @r   r   r   L  s    I$ $r   r   c                  D    e Zd ZdZdZd
dZddZddZddZddZ	ddZ
y	)rC   z"Helper for :meth:`Markup.__mod__`.objr#   c                     || _         || _        y r	   r   )r   r   r#   s      r   r   z_MarkupEscapeHelper.__init__j  s    !'r   c               T    | j                  | j                  |   | j                        S r	   )r2   r   r#   )r   ro   s     r   rG   z_MarkupEscapeHelper.__getitem__n  s    ~~dhhsmT[[99r   c               J    t        | j                  | j                              S r	   )r   r#   r   r   s    r   __str__z_MarkupEscapeHelper.__str__q  s    4;;txx())r   c               \    t        | j                  t        | j                                    S r	   )r   r#   reprr   r   s    r   rM   z_MarkupEscapeHelper.__repr__t  s    4;;tDHH~.//r   c               ,    t        | j                        S r	   )intr   r   s    r   __int__z_MarkupEscapeHelper.__int__w  s    488}r   c               ,    t        | j                        S r	   )floatr   r   s    r   	__float__z_MarkupEscapeHelper.__float__z  s    TXXr   N)r   r   r#   r   r   r   )ro   r   r   r   r   )r   r   )r   r   )r   r   r   r   r   r   rG   r   rM   r   r   r
   r   r   rC   rC   e  s(    ,!I(:*0r   rC   c                    | dk(  r6dd l }dd l}|j                  dd       |j                  j	                  d      S t        |       )N__version__r   zThe '__version__' attribute is deprecated and will be removed in MarkupSafe 3.1. Use feature detection, or `importlib.metadata.version("markupsafe")`, instead.   )
stacklevel
markupsafe)importlib.metadatawarningswarnmetadataversionAttributeError)name	importlibr   s      r   __getattr__r   ~  sP    }!D 	 	 	
 !!)),77

r   r   )r   zt.Any | Noner   r   )r   r   r   r   )r   r   r   r   )
__future__r   collections.abcabccabcstringtypingt	_speedupsr   ImportError_nativeTYPE_CHECKINGtyping_extensionsteProtocolr   r   r#   r%   r(   r   r   	Formatterr   rC   r   r
   r   r   <module>r      s    "   '( ??"&qzz &3

 3)0 (uS up$f&& $2 2k  '&'s   B BB