B ´¬D)ü°vãO@s~dZddlZddlZddlmZmZddlmZddlm Z ddl m Z ddl m Z ddlmZdd lmZmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlm Z m!Z!ddl"m#Z#ddl$m%Z%m&Z&ddl'Z'dZ(dZ)dZ*ddl+m,Z,dd„e,j-j.d<e,j-j.d<e,j-j.d<e,j-j.d<ej/Z0e#j1Z2dd„Z3dd „Z4e3e_/e4e#_1igfd!d"„Z5igfd#d$„Z6igfd%d&„Z7Gd'd(„d(e ƒZ8Gd)d*„d*e ƒZ9Gd+d,„d,e:ƒZ;Gd-d.„d.e;e%ƒZGd3d4„d4e:ƒZ?Gd5d6„d6e>e%ƒZ@Gd7d8„d8e>e&ƒZAGd9d:„d:e?e&ƒZBGd;d<„d„d>e&ƒZDGd?d@„d@e ƒZEe FdAejG¡ZHe FdBejG¡ZIe FdC¡ZJGdDdE„dEe ƒZKdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€dd‚dƒd„d…d†d‡dˆd‰dŠd‹dŒddŽddd‘d’d“d”gOZLGd•d–„d–eƒZMe Fd—¡ZNd˜d™„ZOe Fdš¡ZPd›dœ„ZQddž„ZRdS)Ÿz¦ pyspecific.py ~~~~~~~~~~~~~ Sphinx extension with Python doc-specific markup. :copyright: 2008-2014 by Georg Brandl. :license: Python license. éN)ÚgetenvÚpath)Úasctime)Úpformat)Ú StringOutput)Ú Directive)Ú new_document)ÚnodesÚutils)Úaddnodes)ÚBuilder)Ú translators)Ústatus_iterator)Úsplit_explicit_title)ÚHTMLTranslator)Ú TextWriterÚTextTranslator)ÚLaTeXTranslator)Ú PyModulelevelÚ PyClassmemberz5https://bugs.python.org/issue?@action=redirect&bpo=%sz+https://github.com/python/cpython/issues/%sz-https://github.com/python/cpython/tree/3.7/%s)ÚBodycCsdS)N©)ÚxrrúD/opt/alt/python37/lib64/python3.7/Doc/tools/extensions/pyspecific.pyÚ/órZ loweralphaZ upperalphaZ lowerromanZ upperromancCsH|jjj|jj}|jj}d|kr*d|j_zt||ƒWd||j_XdS)NÚ keepdoctestF)ÚbuilderÚenvÚmetadataZcurrent_docnameÚ highlighterÚtrim_doctest_flagsÚorig_visit_literal_block)ÚselfÚnodeÚmetaÚold_trim_doctest_flagsrrrÚnew_visit_literal_block7sr'cCsJ|jjj|jd}|jj}d|kr,d|j_zt||ƒWd||j_XdS)NéÿÿÿÿrF)rrrZ curfilestackr r!Úorig_depart_literal_block)r#r$r%r&rrrÚnew_depart_literal_blockBsr*c Cs~t |¡}dt|ƒkr"dkrXnn2|jjd|›d|d}| |||¡} | g|gfSd|}tj||t|d} | ggfS)Ni¸i€z The BPO ID z/ seems too high -- use :gh:`...` for GitHub IDs)Úlinezbpo-)Úrefuri) r ÚunescapeÚintÚreporterÚerrorÚ problematicr Ú referenceÚ ISSUE_URI) ÚtypÚrawtextÚtextÚlinenoÚinlinerÚoptionsÚcontentÚissueÚmsgÚprbÚrefnoderrrÚ issue_roleSs  r?c Csnt |¡}t|ƒdkrH|jjd|›d|d}| |||¡} | g|gfSd|}tj||t|d} | ggfS)Niª~zThe GitHub ID z. seems too low -- use :issue:`...` for BPO IDs)r+zgh-)r,) r r-r.r/r0r1r r2Ú GH_ISSUE_URI) r4r5r6r7r8r9r:r;r<r=r>rrrÚ gh_issue_rolebs   rAc Cs@t|ƒ\}}} t |¡}t | ¡} tj||t| d} | ggfS)N)r,)rr r-r r2Ú SOURCE_URI) r4r5r6r7r8r9r:Zhas_tÚtitleÚtargetr>rrrÚ source_rolers   rEc@s(eZdZdZdZdZdZdZdd„ZdS)ÚImplementationDetailTrézCPython implementation detail:cCs.tjdgd}td |j¡}|j}t ||¡}|jrh|j  |jd|j ¡\}}|  tj d ||žŽ¡|j  ||j|¡|jrt|dtj ƒrtj|djdd}|dj|_|dj|_||dj7}|d tj dd|dd¡|d d|¡|d d t d ¡¡n| dt  dd|¡¡|gS) Nz impl-detail)ÚclassesÚsphinxrÚT)Ú translatableFrGú )rJrJ)r Úcompoundr ÚgettextÚ label_textr:ÚstrongÚ argumentsÚstateÚ inline_textr7ÚappendÚ paragraphÚ nested_parseÚcontent_offsetÚchildrenÚ isinstanceÚinlineÚ rawsourceÚsourcer+Ú replace_selfÚinsertZText)r#ÚpnodeÚlabelr:Zadd_textÚnÚmrrrÚrun†s&    zImplementationDetail.runN) Ú__name__Ú __module__Ú __qualname__Ú has_contentÚrequired_argumentsÚoptional_argumentsÚfinal_argument_whitespacerOrcrrrrrF|s rFc@s$eZdZdZdZdZdZdd„ZdS)Ú AvailabilityFrGrTcCsnd}tj||jddgd}|j ||j¡\}}| ||¡|j |jd|j¡\}}| ||¡|gS)Nz$:ref:`Availability `: rÚ availability)rH)r rUrQrRrSr7Úextend)r#Zavailability_refr_rarbrrrrc¦s zAvailability.runN)rdrerfrgrhrirjrcrrrrrkŸs rkcs$eZdZ‡fdd„Zdd„Z‡ZS)ÚPyDecoratorMixincs*tt|ƒ ||¡}| dt dd¡¡|S)Nrú@)ÚsuperrnÚhandle_signaturer^r Ú desc_addname)r#ÚsigÚsignodeÚret)Ú __class__rrrq´sz!PyDecoratorMixin.handle_signaturecCsdS)NFr)r#rrrÚ needs_arglist¹szPyDecoratorMixin.needs_arglist)rdrerfrqrwÚ __classcell__rr)rvrrn³s rnc@seZdZdd„ZdS)ÚPyDecoratorFunctioncCsd|_t |¡S)Nz py:function)Únamerrc)r#rrrrc¾szPyDecoratorFunction.runN)rdrerfrcrrrrry½sryc@seZdZdd„ZdS)ÚPyDecoratorMethodcCsd|_t |¡S)Nz py:method)rzrrc)r#rrrrcÅszPyDecoratorMethod.runN)rdrerfrcrrrrr{Äsr{cseZdZ‡fdd„Z‡ZS)ÚPyCoroutineMixincs*tt|ƒ ||¡}| dt dd¡¡|S)Nrz coroutine )rpr|rqr^r Údesc_annotation)r#rsrtru)rvrrrqËsz!PyCoroutineMixin.handle_signature)rdrerfrqrxrr)rvrr|Êsr|cseZdZ‡fdd„Z‡ZS)ÚPyAwaitableMixincs*tt|ƒ ||¡}| dt dd¡¡|S)Nrz awaitable )rpr~rqr^r r})r#rsrtru)rvrrrqÒsz!PyAwaitableMixin.handle_signature)rdrerfrqrxrr)rvrr~Ñsr~c@seZdZdd„ZdS)ÚPyCoroutineFunctioncCsd|_t |¡S)Nz py:function)rzrrc)r#rrrrcÙszPyCoroutineFunction.runN)rdrerfrcrrrrrØsrc@seZdZdd„ZdS)ÚPyCoroutineMethodcCsd|_t |¡S)Nz py:method)rzrrc)r#rrrrcßszPyCoroutineMethod.runN)rdrerfrcrrrrr€Þsr€c@seZdZdd„ZdS)ÚPyAwaitableFunctioncCsd|_t |¡S)Nz py:function)rzrrc)r#rrrrcåszPyAwaitableFunction.runN)rdrerfrcrrrrräsrc@seZdZdd„ZdS)ÚPyAwaitableMethodcCsd|_t |¡S)Nz py:method)rzrrc)r#rrrrcëszPyAwaitableMethod.runN)rdrerfrcrrrrr‚êsr‚cs$eZdZ‡fdd„Zdd„Z‡ZS)ÚPyAbstractMethodcs*tt|ƒ ||¡}| dt dd¡¡|S)Nrzabstractmethod )rprƒrqr^r r})r#rsrtru)rvrrrqòs z!PyAbstractMethod.handle_signaturecCsd|_t |¡S)Nz py:method)rzrrc)r#rrrrcøszPyAbstractMethod.run)rdrerfrqrcrxrr)rvrrƒðs rƒc@s0eZdZdZdZdZdZiZdZdZ dd„Z dS) ÚDeprecatedRemovedTérGzKDeprecated since version {deprecated}, will be removed in version {removed}zCDeprecated since version {deprecated}, removed in version {removed}c Cs.t ¡}|jj|_d|d<|jd|jdf}||d<|jjjj}tdd„|jj   d¡Dƒƒ}td d„|jd  d¡Dƒƒ}||krŒ|j }n|j }t d  |¡}|j|jd|jdd }t|jƒd kr|j |jd |jd¡\}} tj|jd df|žddiŽ} | | ¡ng} |jr2|j |j|j|¡t|ƒrÔt|dtjƒr°|djr°tj|djdd} |dj| _|dj| _| |dj7} |d tjdd| dd¡|d  dtjdd|dgd¡n.tjddtjdd|dgddd} | | ¡|jjjj}| !d|d||j¡|g| S)Nzdeprecated-removedÚtyperrGÚversioncss|]}t|ƒVqdS)N)r.)Ú.0Úerrrú sz(DeprecatedRemoved.run..Ú.css|]}t|ƒVqdS)N)r.)rˆr‰rrrrŠsrI)Ú deprecatedZremovedér…rJrKFT)rKz%s: Úversionmodified)rHz%s.rŒ)"r rŽrRÚdocumentrQÚsettingsrÚtupleZconfigr‡ÚsplitÚ_deprecated_labelÚ_removed_labelr rNÚformatÚlenrSr7r rUrTr:rVrWrYr[rZr\r+rXr]r^Znote_versionchange) r#r$r‡rZcurrent_versionZremoved_versionr`r6ZinodesZmessagesZparar:rrrrc sL         zDeprecatedRemoved.runN) rdrerfrgrhrirjÚ option_specr“r”rcrrrrr„ÿsr„z(?:[Ii]ssue #|bpo-)([0-9]+)z(?:gh-issue-|gh-)([0-9]+)z(?im)^what's new in (.*?)\??$c@s(eZdZdZdZdZdZiZdd„ZdS)ÚMiscNewsFrGrc Csü|jd}|jj |j|jjd¡}tdƒ}|sBt t  |¡¡}t  ||¡}|j j j j |¡y&tj|dd}| ¡}WdQRXWn&tk r¬d}t ||¡}|gSXt d|¡}t d|¡}t d |¡}d d g| ¡d d…} |j | |¡gS) NrrGZPY_MISC_NEWS_DIRzutf-8)ÚencodingzThe NEWS file is not available.z :issue:`\1`z:gh:`\1`z\1z.. default-role:: objrJr)rQZ state_machineZ input_linesr\r7Z input_offsetrrÚdirnameÚabspathÚjoinrRrrZrecord_dependenciesÚaddÚioÚopenÚreadÚ Exceptionr rPÚissue_reÚsubÚ gh_issue_reÚ whatsnew_reÚ splitlinesZ insert_input) r#Zfnamer\Z source_dirZfpathÚfpr:r6r$ÚlinesrrrrcDs*      z MiscNews.runN) rdrerfrgrhrirjr—rcrrrrr˜=s r˜ÚassertZ assignmentÚasynczatom-identifiersz atom-literalszattribute-accesszattribute-referencesZ augassignÚawaitZbinaryZbitwisezbltin-code-objectszbltin-ellipsis-objectzbltin-null-objectzbltin-type-objectsZbooleansÚbreakzcallable-typesZcallsÚclassZ comparisonsrMzcontext-managersÚcontinueZ conversionsZ customizationZdebuggerÚdelÚdictzdynamic-featuresÚelseÚ exceptionsZ execmodelZ exprlistsZfloatingÚforZ formatstringsZfunctionÚglobalz id-classesZ identifiersÚifZ imaginaryÚimportÚinZintegersÚlambdaZlistsZnamingÚnonlocalZnumbersz numeric-typesZobjectszoperator-summaryÚpassZpowerÚraiseÚreturnzsequence-typesZshiftingZslicingsZ specialattrsZ specialnameszstring-methodsZstringsZ subscriptionsÚtruthÚtryÚtypesZtypesfunctionsZ typesmappingZ typesmethodsZ typesmodulesZtypesseqztypesseq-mutableZunaryÚwhileÚwithÚyieldc@s>eZdZdZeZdd„Zdd„Zd dd„Zd d „Z d d „Z dS)ÚPydocTopicsBuilderz pydoc-topicscCsi|_i|_dS)N)ÚtopicsZ secnumbers)r#rrrÚinitxszPydocTopicsBuilder.initcCsdS)Nzall pydoc topicsr)r#rrrÚget_outdated_docs|sz$PydocTopicsBuilder.get_outdated_docsNcCsdS)NrJr)r#Údocnamer4rrrÚget_target_urisz!PydocTopicsBuilder.get_target_uric Gs®t|ƒ}x ttdttƒdD]Š}||jjddkrD| d|¡q|jjdd|\}}}|j ||¡}tdƒ}|  |j |¡t dd} |  || ¡|j |j|<qWdS) Nzbuilding topics... )ÚlengthZstdÚlabelszlabel %r not in documentationz
zutf-8)r™)rrÚpydoc_topic_labelsr–rZ domaindataÚwarnZget_and_resolve_doctreerrTZidsrÚwriteÚoutputrÄ) r#ZignoredÚwriterr`rÇZlabelidZsectnameZdoctreerZ destinationrrrrÍ‚s  zPydocTopicsBuilder.writecCsltt |jd¡dƒ}zH| d d¡¡| dtƒ d¡¡| dt|jƒd d¡¡Wd|  ¡XdS)Nz topics.pyÚwbz# -*- coding: utf-8 -*- zutf-8z # Autogenerated by Sphinx on %s z topics = Ú ) rŸrrœZoutdirrÍÚencoderrrÄÚclose)r#ÚfrrrÚfinish’s "zPydocTopicsBuilder.finish)N) rdrerfrzrZdefault_translator_classrÅrÆrÈrÍrÕrrrrrÃss rÃz(\w+(?:\+\d)?)(?:\s*\((.*)\))?cCsbt |¡}|dkrt‚| ¡\}}|t ||¡7}|dk rZt ¡}||7}|t ||¡7}| ¡S)z-Transform an opcode signature into RST nodes.N) Ú opcode_sig_reÚmatchÚ ValueErrorÚgroupsr Ú desc_nameZdesc_parameterlistZdesc_parameterÚstrip)rrsrtrbÚopnameZarglistZ paramlistrrrÚparse_opcode_signature¡s  rÝz([a-z()!]+)\s*(.*)cCsft |¡}|dkrt‚| ¡\}}| dd¡ dd¡}|t ||¡7}|rb|t d|d|¡7}|S)z1Transform a pdb command signature into RST nodes.Nú(rJú)rL)Ú pdbcmd_sig_rer×rØrÙÚreplacer rÚrr)rrsrtrbrzÚargsÚfullnamerrrÚparse_pdb_command»s  räcCs| dt¡| dt¡| dt¡| dt¡| dt¡| dt¡| t ¡| t j ¡|  dddt ¡|  d d d t¡|  d d d ¡| ddt¡| ddt¡| ddt¡| ddt¡| ddt¡| ddt¡| ddt¡| dt¡dddœS)Nr;Zghr\z impl-detailrlzdeprecated-removedZopcodez %s (opcode)Z pdbcommandZpdbcmdz%s (pdb command)Z 2to3fixerz%s (2to3 fixer)ÚpyZ decoratorZdecoratormethodZcoroutinefunctionZcoroutinemethodZawaitablefunctionZawaitablemethodÚabstractmethodZmiscnewsz1.0T)r‡Zparallel_read_safe)Zadd_roler?rArEZ add_directiverFrkr„Z add_builderrÃÚ suspiciousZCheckSuspiciousMarkupBuilderZadd_object_typerÝräZadd_directive_to_domainryr{rr€rr‚rƒr˜)ZapprrrÚsetupÈs(         rè)SÚ__doc__ÚreržÚosrrZtimerZpprintrZ docutils.iorZdocutils.parsers.rstrZdocutils.utilsrZdocutilsr r rIr Zsphinx.buildersr Z sphinx.localer Z sphinx.utilrZsphinx.util.nodesrZsphinx.writers.htmlrZsphinx.writers.textrrZsphinx.writers.latexrZsphinx.domains.pythonrrrçr3r@rBZdocutils.parsers.rst.statesrÚenumZ convertersZvisit_literal_blockr"Zdepart_literal_blockr)r'r*r?rArErFrkÚobjectrnryr{r|r~rr€rr‚rƒr„ÚcompileÚIr¢r¤r¥r˜rËrÃrÖrÝràrärèrrrrÚ sŽ             4   # 9 $         +