U a#@sLddlZddlZddlZddlZejr@ddlZGdddejZ dZ e dZ e ejdddd ZGd d d e ZGd d d ejZedeeZeejejejejgefedddZGdddZz4ddlmZddlmZddlmZddlmZWnFe k rFddl!mZddl!mZddl!mZddl!mZYnXdS)Nc@seZdZedddZdS)HasHTMLreturncCsdSNselfrrTC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-4ehsag29\markupsafe\__init__.py__html__ szHasHTML.__html__N)__name__ __module__ __qualname__strr rrrr r srz2.0.1z(|<[^>]*>)).Markup)namercs4tt|tdtjtjddfdd }|S)Nr)rargskwargsrcs>tt|t||j}t|||j||f||Sr)_escape_argspeclist enumerateescapeitems __class__)rrrorigrr wrappedsz)_simple_escaping_wrapper..wrapped)getattrr functoolswrapstAny)rrrrr _simple_escaping_wrappers r!cseZdZdZdZd;ejejeeddfdd Z dd d d Z ej ed fdd fdd Z ej ed fdd ddZ eddfdd ZeZejddfdd Zed fdd Zejej ed fddfdd Zejje_deejdd$fd%d& Zejje_ed d'd(Zed d)d*Zeejdd+d,d-Zd.D]Zeee e<q[eej!d/d0fd1d2 Z"eej!d/d0fd3d4 Z#ejejdd5d6d7Z$edd8d9d:Z%Z&S)?raA 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, World!") Markup('Hello, World!') >>> Markup(42) Markup('42') >>> Markup.escape("Hello, World!") Markup('Hello <em>World</em>!') 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 'foo' ... >>> Markup(Foo()) Markup('foo') This is a subclass of :class:`str`. It has the same methods, but escapes their arguments and returns a ``Markup`` instance. >>> Markup("%s") % ("foo & bar",) Markup('foo & bar') >>> Markup("Hello ") + "" Markup('Hello <foo>') rNstrict)baseencodingerrorsrcs:t|dr|}|dkr(t||St||||SNr )hasattrr super__new__)clsr$r%r&rrr r*Es  zMarkup.__new__rcCs|Srrrrrr r PszMarkup.__html__r)otherrcs0t|tst|dr,|t||StSr') isinstancerr(rr)__add__rNotImplementedrr-r,rr r/SszMarkup.__add__cCs(t|tst|dr$|||StSr')r.rr(rr/r0r1rrr __radd__YszMarkup.__radd__)numrcs t|tr|t|StSr)r.intrr)__mul__r0)rr3r,rr r5_s zMarkup.__mul__)argrcs@t|tr"tfdd|D}n t|j}t|S)Nc3s|]}t|jVqdSr)_MarkupEscapeHelperr).0xrrr isz!Markup.__mod__..)r.tupler7rrr)__mod__)rr6r,rr r<gs  zMarkup.__mod__cs|jjdtdS)N())rr r)__repr__rr,rr r?oszMarkup.__repr__)seqrcs|tt|j|Sr)rr)joinmapr)rr@r,rr rArsz Markup.join)sepmaxsplitrcsfddt||DS)Ncsg|]}|qSrr,r8vrrr zsz Markup.split..)r)splitrrDrEr,rr rIwsz Markup.splitcsfddt||DS)Ncsg|]}|qSrr,rFrrr rHsz!Markup.rsplit..)r)rsplitrJr,rr rK~sz Markup.rsplitF)keependsrcsfddt|DS)Ncsg|]}|qSrr,rFrrr rHsz%Markup.splitlines..)r) splitlines)rrLr,rr rMszMarkup.splitlinescCsddlm}|t|S)uConvert escaped markup back into a text string. This replaces HTML entities with the characters they represent. >>> Markup("Main » About").unescape() 'Main » About' r)unescape)htmlrNr)rrNrrr rNs zMarkup.unescapecCs"dtd|}t|S)u:meth:`unescape` the markup, remove tags, and normalize whitespace to single spaces. >>> Markup("Main » About").striptags() 'Main » About'  r")rA _striptags_resubrIrrN)rstrippedrrr striptagsszMarkup.striptags)srcCst|}|j|k r||S|S)ztEscape a string. Calls :func:`escape` and ensures that for subclasses the correct type is returned. )rr)r+rUrvrrr rs z Markup.escape) __getitem__ capitalizetitlelowerupperreplaceljustrjustlstriprstripcenterstrip translate expandtabsswapcasezfill)rrr)rDrcs4t||\}}}|j}||||||fSr)r) partitionrrrrDlrUrr+r,rr rgszMarkup.partitioncs4t||\}}}|j}||||||fSr)r) rpartitionrrrhr,rr rkszMarkup.rpartition)rrrcOst|j}|||||Sr)EscapeFormatterrrvformat)rrr formatterrrr formats z Markup.format) format_specrcCs|r td|S)Nz,Unsupported format specification for Markup.) ValueError)rrprrr __html_format__szMarkup.__html_format__)r"Nr#)NrC)NrC)F)'r r r __doc__ __slots__rr Optionalrr*r Unionr/r2r4r5__rmul__r<r?IterablerAListrIrKboolrMrNrT classmethodrmethodr!localsTuplergrkrorr __classcell__rrr,r rsb# $       rcsJeZdZdZejejgefddfdd Zeje e dddZ Z S) rlrN)rrcs||_tdSr)rr)__init__)rrr,rr rszEscapeFormatter.__init__)valuerprcCsjt|dr||}nFt|drH|r>td|dt|d|}ntj||t|}t| |S)Nrrr zFormat 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(rrrqtyper string Formatter format_fieldrr)rrrprVrrr rs    zEscapeFormatter.format_field) r r r rtrCallabler rrrrrrrr,r rls"rl _ListOrDict)objiterablerrcCs2|D](\}}t|ts t|dr||||<q|S)z,Helper for various string-wrapped functions.r )r.rr()rrrkeyrrrr rs rc@seZdZdZdZejejejgefddddZ ejdddd Z e d d d Z e d d dZ ed ddZed ddZdS)r7z"Helper for :meth:`Markup.__mod__`.rrN)rrrcCs||_||_dSrr)rrrrrr rsz_MarkupEscapeHelper.__init__)itemrcCst|j||jSr)r7rr)rrrrr rWsz_MarkupEscapeHelper.__getitem__rcCst||jSr)rrrrrrr __str__ sz_MarkupEscapeHelper.__str__cCst|t|jSr)rrreprrrrrr r? sz_MarkupEscapeHelper.__repr__cCs t|jSr)r4rrrrr __int__sz_MarkupEscapeHelper.__int__cCs t|jSr)floatrrrrr __float__sz_MarkupEscapeHelper.__float__)r r r rsrtrr rrrrWrrr?r4rrrrrrr r7s"r7r) escape_silent)soft_str) soft_unicode)"rrertypingr TYPE_CHECKINGZtyping_extensionsteProtocolr __version__compilerQrrr!rrrlTypeVarrdictrrxr rr7Z _speedupsrrrr ImportErrorZ_nativerrrr s:  8