o V`"@sPddlZddlZddlZddlZejr ddlZGdddejZ dZ e dZ de dejdfd d ZGd d d e ZGd ddejZedeeZdedejejdejejgefdefddZGdddZzddlmZddlmZddlmZddlmZWdSe yddl!mZddl!mZddl!mZddl!mZYdSw)Nc@seZdZdefddZdS)HasHTMLreturncCsdSNselfrr5/usr/lib/python3/dist-packages/markupsafe/__init__.py__html__ zHasHTML.__html__N)__name__ __module__ __qualname__strr rrrrr srz2.0.1z(|<[^>]*>)namer).Markupc s:tt|tdddtjdtjddffdd }|S)NrrargskwargsrcsDtt|t||j}t|||j||g|Ri|Sr)_escape_argspeclist enumerateescapeitems __class__)rrrorigrrwrappedsz)_simple_escaping_wrapper..wrapped)getattrr functoolswrapstAny)rrrrr_simple_escaping_wrappers $r!c s>eZdZdZdZ d>dejdejeded dffd d Z d?d d Z dej edfd dffdd Z dej edfd dfddZ ded dffdd ZeZdejd dffdd Zd effdd Zdejej edfd dffdd Zejje_ d@d ejed!ed ejdffd"d# Zejje_ d@d ejed!ed ejdffd$d% Zejje_dAd'ed ejdffd(d) Zejje_d efd*d+Zd efd,d-Zed.ejd dfd/d0Zd1D] Zeee e<q[d ed ej!d2ffd3d4 Z"d ed ej!d2ffd5d6 Z#d7ejd8ejd dfd9d:Z$d;ed dfd>> 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>') rNstrictbaseencodingerrorsrcs:t|dr |}|durt||St||||SNr )hasattrr super__new__)clsr$r%r&rrrr*Es zMarkup.__new__cCs|Srrrrrrr Pr zMarkup.__html__otherrcs0t|ts t|dr|t||StSr') isinstancerr(rr)__add__rNotImplementedrr-r,rrr/SszMarkup.__add__cCs(t|ts t|dr|||StSr')r.rr(rr/r0r1rrr__radd__YszMarkup.__radd__numcs t|tr|t|StSr)r.intrr)__mul__r0)rr3r,rrr5_s zMarkup.__mul__argcs@t|trtfdd|D}nt|j}t|S)Nc3s|] }t|jVqdSr)_MarkupEscapeHelperr).0xrrr isz!Markup.__mod__..)r.tupler7rrr)__mod__)rr6r,rrr<gs  zMarkup.__mod__cs|jjdtdS)N())rr r)__repr__rr,rrr?ozMarkup.__repr__seqcs|tt|j|Sr)rr)joinmapr)rrAr,rrrBrr@z Markup.joinsepmaxsplitcfddt||DS)Ncg|]}|qSrr,r8vrrr zz Markup.split..)r)splitrrErFr,rrrMwz Markup.splitcrG)NcrHrr,rIrrrrKrLz!Markup.rsplit..)r)rsplitrNr,rrrP~rOz Markup.rsplitFkeependscsfddt|DS)NcrHrr,rIrrrrKrLz%Markup.splitlines..)r) splitlines)rrQr,rrrRr@zMarkup.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)htmlrSr)rrSrrrrSs  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")rB _striptags_resubrMrrS)rstrippedrrr striptagss zMarkup.striptagsscCst|}|j|ur ||S|S)ztEscape a string. Calls :func:`escape` and ensures that for subclasses the correct type is returned. )rr)r+rZrvrrrrs z Markup.escape) __getitem__ capitalizetitlelowerupperreplaceljustrjustlstriprstripcenterstrip translate expandtabsswapcasezfill)rrrc4t||\}}}|j}||||||fSr)r) partitionrrrrElrZrr+r,rrrmzMarkup.partitioncrlr)r) rpartitionrrrnr,rrrrrqzMarkup.rpartitionrrcOst|j}|||||Sr)EscapeFormatterrrvformat)rrr formatterrrrformats z Markup.format format_speccCs|rtd|S)Nz,Unsupported format specification for Markup.) ValueError)rrwrrr__html_format__szMarkup.__html_format__)r"Nr#)rr)NrD)F)'r r r __doc__ __slots__rr Optionalrr*r Unionr/r2r4r5__rmul__r<r?IterablerBListrMrPboolrRrSrY classmethodrmethodr!localsTuplermrrrvry __classcell__rrr,rrsj# &       rcsPeZdZdZdejejgefddffdd Zdejde de fd d Z Z S) rsrrrNcs||_tdSr)rr)__init__)rrr,rrrszEscapeFormatter.__init__valuerwcCsjt|dr ||}n#t|dr$|rtd|dt|d|}n tj||t|}t| |S)Nryr 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(ryrxtyper string Formatter format_fieldrr)rrrwr[rrrrs    zEscapeFormatter.format_field) r r r r{rCallabler rrrrrrrr,rrss$ rs _ListOrDictobjiterablercCs2|D]\}}t|tst|dr||||<q|S)z,Helper for various string-wrapped functions.r )r.rr()rrrkeyrrrrrs  rc@seZdZdZdZdejdejejgefddfddZ d ejddfd d Z de fd d Z de fddZ defddZdefddZdS)r7z"Helper for :meth:`Markup.__mod__`.rrrrrNcCs||_||_dSrr)rrrrrrrs z_MarkupEscapeHelper.__init__itemcCst|j||jSr)r7rr)rrrrrr\sz_MarkupEscapeHelper.__getitem__cCst||jSr)rrrrrrr__str__ sz_MarkupEscapeHelper.__str__cCst|t|jSr)rrreprrrrrrr? sz_MarkupEscapeHelper.__repr__cC t|jSr)r4rrrrr__int__ z_MarkupEscapeHelper.__int__cCrr)floatrrrrr __float__rz_MarkupEscapeHelper.__float__)r r r rzr{rr rrrr\rrr?r4rrrrrrrr7s&r7r) escape_silent)soft_str) soft_unicode)"rrertypingr TYPE_CHECKINGtyping_extensionsteProtocolr __version__compilerVrrr!rrrsTypeVarrdictrrr rr7 _speedupsrrrr ImportError_nativerrrrsF  8