ó ˙gdSc@s#dZddlZddlZddlZejd*kr°efZd„ZeZdZ ddl m Z m Z m Z d„ZejƒZd „Zdd lmZddlZndd lmZeefZeZeZd Z dd l m Z e Z dZd„Z d„ZddlZejƒZddlmZddlZd„ZyddlmZ Wn!e!k r€ddl"mZ nXejd+kre#Z#ddlm$Z$ydd lmZWn!e!k rÝddlmZnXddl%Z%e%j&j'Z'[%ddl Z e j(Z(nrddlm)Z)m*Z*m+Z+d„Z#d„Z$d„Zddl,m-Z-e-d„Z'[-ddlm.Z.dd„Z(ejd,kr§e/Z0e1Z1e2Z2nxe3Z0d „Z2d!„Z1d"„Z4ej5e4ƒd#d$„Z6d#d%„Z7d&ej8fd'„ƒYZ8d(ej9fd)„ƒYZ9dS(-sŇ sphinx.util.pycompat ~~~~~~~~~~~~~~~~~~~~ Stuff for Python version compatibility. :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. i˙˙˙˙NiicCs |jdƒS(Nsutf-8(tencode(ts((ssphinx/util/pycompat.pytbst(tStringIOtBytesIOt TextIOWrappercCs|jddƒjdƒS(Ntasciitbackslashreplace(Rtdecode(R((ssphinx/util/pycompat.pyt terminal_safesc Csťddlm}m}ddlm}|dƒ}||ƒ}|j|ƒd}y|j|dƒ}WnG|k r°}|jd\} } t|j || | |j fƒ‚nXt |ƒS(Ni˙˙˙˙(tRefactoringTooltget_fixers_from_package(t ParseErrors lib2to3.fixesisconf.pyi( tlib2to3.refactorR R tlib2to3.pgen2.parseR t_read_python_sourcetrefactor_stringtcontextt SyntaxErrortmsgtvaluetunicode( tfilepathR R R tfixerstrefactoring_tooltsourcettreeterrtlinenotoffset((ssphinx/util/pycompat.pytconvert_with_2to3%s  %(t zip_longest(t ClassTypetu(RcCstj|pdƒd|ƒS(NRi(tcodecstlookup(tstreamtencoding((ssphinx/util/pycompat.pyRAscCs|jddƒS(NRR(R(R((ssphinx/util/pycompat.pyR Ds(t izip_longestcBséddlm}e|dƒ}z|jƒ}Wd|jƒXejd d d dfkrz|jed ƒed ƒƒ}n|j |ƒ}ye ||d ƒ}Wn;e k rÜe rÖe |ƒ}e ||d ƒ}q݂nX||UdS(Ni˙˙˙˙(t fs_encodingtrbUiiiiis s texec(ii(ii(ii( tsphinx.util.osutilR(topentreadtclosetsyst version_infotreplaceRRtcompileRR(Rt_globalsR(tfRt filepath_enctcode((ssphinx/util/pycompat.pyt execfile_Os  !  (tescapeii(tproduct(tiziptrepeattchaincCs |jƒS(N(tnext(titerator((ssphinx/util/pycompat.pyR=‹scos†tt|ƒ|jddƒ}gg}x;|D]3}g|D] }|D]}||g^qFq<}q/Wx|D]}t|ƒVqmWdS(NR;i(tmapttupletget(targstkwargstpoolstresulttpooltxtytprod((ssphinx/util/pycompat.pyR9s   1 cos›|jdƒ}|gt|ƒdjd„}t|ƒ}g|D]}t||ƒ|ƒ^qB}y xt|ŒD] }|VqsWWntk r–nXdS(Nt fillvalueicss |ƒVdS(N((tcounter((ssphinx/util/pycompat.pytsentinel›s(RAtlentpopR;R<R:t IndexError(RBtkwdsRJRLtfillerstittitersttup((ssphinx/util/pycompat.pyR ˜s  (  (tcurdirc Cs˛ddlm}m}m}m}m}|s=tdƒ‚n||ƒj|ƒ}||ƒj|ƒ}t|||gƒƒ} |gt|ƒ| || } | s¨|S|| ŒS(s#Return a relative version of a pathi˙˙˙˙(tseptabspatht commonprefixtjointpardirsno path specified( tos.pathRVRWRXRYRZt ValueErrortsplitRM( tpathtstartRVRWRXRYRZt start_listt path_listtitrel_list((ssphinx/util/pycompat.pytrelpathŚs((t MethodTypetrcs||jddƒ‰|jddƒ}tj||||Ž}ˆdk rx|j|_‡fd†}t||ƒ|_n|S(NtnewlinettRcs/|jddƒjdˆƒ}|j|ƒdS(Nu u (R1t_write(tselfttext(Rg(ssphinx/util/pycompat.pytwriteŔs(RNtNoneR1R#R,RlRiRe(tfilenametmodeRBtkwR4Rl((Rgssphinx/util/pycompat.pyR,şs  icCsx|D]}|stSqWtS(N(tFalsetTrue(tgenRb((ssphinx/util/pycompat.pytallÔs cCsx|D]}|rtSqWtS(N(RrRq(RsRb((ssphinx/util/pycompat.pytanyÚs cCs/tj|ƒ}|dkrdSttttfS(Nt utf_8_sig(t encodingstnormalize_encodingRmRR t StreamReadert StreamWriter(R&t norm_encoding((ssphinx/util/pycompat.pytmy_search_functionâs tstrictcCs'tjtj||ƒdt|ƒfS(Ni(R#tBOM_UTF8t utf_8_encodeRM(tinputterrors((ssphinx/util/pycompat.pyRěscCsUd}|d tjkr,|d}d}ntj||tƒ\}}|||fS(Nii(R#R~t utf_8_decodeRr(R€Rtprefixtoutputtconsumed((ssphinx/util/pycompat.pyR đs   RzcBseZd„Zdd„ZRS(cCs2tjj|ƒy |`Wntk r-nXdS(N(R#RztresetRtAttributeError(Rj((ssphinx/util/pycompat.pyR†ůs   R}cCstj|_t||ƒS(N(R#RR(RjR€R((ssphinx/util/pycompat.pyRs (t__name__t __module__R†R(((ssphinx/util/pycompat.pyRzřs RycBseZd„Zdd„ZRS(cCs2tjj|ƒy |`Wntk r-nXdS(N(R#RyR†R R‡(Rj((ssphinx/util/pycompat.pyR†s   R}cCst|ƒdkr+tjj|ƒrtdSnI|d tjkrttj|_tj|d|ƒ\}}||dfStj|_tj||ƒS(Niui(ui(RMR#R~t startswithR‚R (RjR€RR„R…((ssphinx/util/pycompat.pyR s  (RˆR‰R†R (((ssphinx/util/pycompat.pyRys (ii(ii(ii(:t__doc__R/R#RwR0ttypet class_typesRtbytesR"tioRRRR tgetdefaultencodingt sys_encodingRt itertoolsR tbuiltinsttypesR!tstrRmtlocaletgetpreferredencodingR't __builtin__R7thtmlR8t htmlescapet ImportErrortcgiR=R9tosR^RdR,R:R;R<R[RURet BaseExceptiontbase_exceptionRuRtt ExceptionR|tregisterRR RzRy(((ssphinx/util/pycompat.pyt s†