ó rgdSc@sÆdZddlZi dd6dd6dd6d d 6d d 6d d6dd6dd6dd6dd6Zd„Zd„Zd„ZejdƒZejdƒZdd„Z d„Z e dkrÂe ƒndS(s<Safely evaluate Python string literals without using eval().iÿÿÿÿNstastbs tfs tns trs tts tvt't"s\cCsft|ƒ|dkr)td|ƒ‚nyt|ddƒSWn!tk ratd|ƒ‚nXdS(Nis!invalid hex string escape ('\%s')i(tlent ValueErrortint(txR((ssphinx/pycode/pgen2/literals.pyt convert_hexs  cCsR|jddƒ\}}|jdƒs-t‚tj|ƒ}|dk rL|S|jdƒrntt|dƒƒS|jdƒrtt|dƒƒS|jdƒr²tt|d ƒƒS|jd ƒrd dl }y|j |dd !ƒSWqNt k rt d |dd !ƒ‚qNXn;ytt |d ƒƒSWn!t k rMt d |ƒ‚nXdS(Niis\R ituitUitNiÿÿÿÿsundefined character name %rs#invalid octal string escape ('\%s')(tgroupt startswithtAssertionErrortsimple_escapestgettNonetchrR tunichrt unicodedatatlookuptKeyErrorR R (tmtallttailtescR((ssphinx/pycode/pgen2/literals.pytescapes*    cCsd|jddƒ\}}|jdƒr:tt|dƒƒS|jdƒr\tt|dƒƒS|SdS(NiiRiRi(RRRR (RRR((ssphinx/pycode/pgen2/literals.pyt escaperaw5s s)\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3})sV\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3}|u[0-9a-fA-F]{0,4}|U[0-9a-fA-F]{0,8}|N\{.+?\})cCsmt}t}|r4t|tƒ r4|j|ƒ}n|jdƒsR|jdƒret}|d}n|jdƒsƒ|jdƒr–t}|d}n|jdƒsÊ|jdƒsÊtt |d ƒƒ‚|d}|d |d krõ|d }n|j |ƒs!tt |t |ƒ ƒƒ‚t |ƒd t |ƒksCt‚|t |ƒt |ƒ !}|j ||ƒS( NRRiRtRRRiii( t escape_reR t isinstancetunicodetdecodeRt uni_escape_reR!RtreprtendswithR tsub(tstencodingtregextrepltq((ssphinx/pycode/pgen2/literals.pyt evalStringBs$  4  ,"cCs_xXtdƒD]J}t|ƒ}t|ƒ}t|ƒ}||kr |G|G|G|GHq q WdS(Ni(trangeRR(R0(titcR+te((ssphinx/pycode/pgen2/literals.pyttestVs     t__main__( t__doc__treRR R R!tcompileR#R'RR0R5t__name__(((ssphinx/pycode/pgen2/literals.pyts(