o $a6 @sUdZddlZddlmZmZmZmZmZmZddl m Z m Z ddl m Z mZmZmZddlmZddlmZddlmZdd lmZmZdd lmZerYdd lmZdd lmZej e j!e j"ej#ej ej$ej#ej#ej e j"d Z%GdddeZ&Gddde&Z'GdddeZ(GdddeZ)e*dZ+GdddeZ,Gddde,Z-e*dZ.e*dZ/GdddeZ0e*dej1Z2Gd d!d!eZ3e&ej4d"e'd#d$e(e)e,e-e0e0e3d% Z5ee6efe7d&<d'd(d)ee6effd*d+Z8dS),z sphinx.roles ~~~~~~~~~~~~ Handlers for additional ReST roles. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N) TYPE_CHECKINGAnyDictListTupleType)nodesutils)ElementNode TextElementsystem_message)addnodes)_)ws_re) ReferenceRole SphinxRole) RoleFunction)Sphinx)BuildEnvironment) commanddfnkbd mailheadermakevarmanpagemimetype newsgroupprogramregexpcsBeZdZUdZejZeee d<e j Z ee e d<   d!dededeedee ded df fd d Zd ed ed eeeffddZd eeeeeffddZd eeeeeffddZd eeeeeffddZdddeded ed ed eeeff ddZde jdddeded eeeeeff dd ZZS)"XRefRoleaA A generic cross-referencing role. To create a callable that can be used as a role function, create an instance of this class. The general features of this role are: * Automatic creation of a reference and a content node. * Optional separation of title and target with `title `. * The implementation is a class rather than a function to make customization easier. Customization can be done in two ways: * Supplying constructor parameters: * `fix_parens` to normalize parentheses (strip from target, and add to title if configured) * `lowercase` to lowercase the target * `nodeclass` and `innernodeclass` select the node classes for the reference and the content node * Subclassing and overwriting `process_link()` and/or `result_nodes()`. nodeclassinnernodeclassFN fix_parens lowercase warn_danglingreturncs<||_||_||_|dur||_|dur||_tdSN)r#r$r%r!r"super__init__)selfr#r$r!r"r% __class__./usr/lib/python3/dist-packages/sphinx/roles.pyr)GszXRefRole.__init__titletargetcCsJ|js|dr|dd}|jjr|d7}|dr!|dd}||fS)Nz())has_explicit_titleendswithconfigadd_function_parentheses)r*r/r0r-r-r.update_title_and_targetTs    z XRefRole.update_title_and_targetcCsnd|jvrd|j|_|_d|jg|_n|jdd\|_|_d|jd|j|jfg|_|jr3|S|S)N:xrefz%s-%s)name refdomainreftypeclassessplitdisabledcreate_non_xref_nodecreate_xref_noder*r-r-r.runas z XRefRole.runcCs\t|jdd}|jrd|_||d\}}|j|j||jd}|j |j j |j |ddS)Nr:Fr8r>is_ref) r unescapetextr#r2r6r"rawtextr> result_nodesinlinerdocumentenv)r*rIr0noder-r-r.rAns zXRefRole.create_non_xref_nodecCs|j}|j}|jr |}|jr|||\}}|jj|j|j |j |j d}|j |j fi|}||||j||j ||\}}||d<||j|j ||jd7}|j|jj|j|ddS)N)refdocr<r= refexplicitrefwarn reftargetrETrF)r0r/r$lowerr#r6rNdocnamer<r=r2r%r!rJset_source_info process_linkr"r>rKrLrM)r*r0r/optionsrefnoder-r-r.rBws( zXRefRole.create_xref_noderNrrYr2cCs|td|fS)zCalled after parsing title and target text, and creating the reference node (given in *refnode*). This method can alter the reference node and must return a new (or the same) ``(title, target)`` tuple.  )rsub)r*rNrYr2r/r0r-r-r.rWszXRefRole.process_linkrMrOrGcCs |ggfS)a(Called before returning the finished nodes. *node* is the reference node if one was created (*is_ref* is then true), else the content node. This method can add other nodes and must return a ``(nodes, messages)`` tuple (the usual return value of a role function). r-)r*rMrNrOrGr-r-r.rKs zXRefRole.result_nodes)FFNNF)__name__ __module__ __qualname____doc__r pending_xrefr!rr __annotations__rliteralr"r boolr)strrr6rr r rDrArBrWrMrK __classcell__r-r-r+r.r ,s@         r cs>eZdZdddededededeeeff fdd ZZS) AnyXRefRolerNrrYr2r/r0r&cs&t|||||}|j|j|Sr')r(rW attributesupdate ref_context)r*rNrYr2r/r0resultr+r-r.rWszAnyXRefRole.process_link) r\r]r^r rcrdrrWrer-r-r+r.rfs rfc@8eZdZdeeeeeffddZdefddZ dS)PEPr&c Cs d|jd}dtd|j|ddfg}tj|d}tjdd|gd}|jj |z,| }tj ddd|d gd }|j rI|t |j|j7}n d |j}|t ||7}Wn&ty}|jjjd |j|jd }|j|j|j|} | g|gfYSw|||ggfS)Nindex-%sindexsinglez$Python Enhancement Proposals; PEP %sr8entriesidsFpepinternalrefurir>zPEP zinvalid PEP number %sline)rN new_serialnorr0rrnrrLrMnote_explicit_target build_uri referencer2strongr/ ValueErrorreportererrorlineno problematicrJ r* target_idrqrnr0rwr}r/msgprbr-r-r.rDs.   zPEP.runcCsV|jjjj}|jdd}t|dkr!|dt|d|dfS|dt|dS)N#r:z pep-%04d#%srzpep-%04d)rLrMsettings pep_base_urlr0r?lenintr*base_urlretr-r-r.r|s  z PEP.build_uriN r\r]r^rrr r rDrdr|r-r-r-r.rlsrlc@rk)RFCr&c Csd|jd}dd|j|ddfg}tj|d}tjdd|gd}|jj|z,| }tj ddd|d gd }|j rG|t |j |j 7}n d |j }|t ||7}Wn&ty{|jjjd |j|jd }|j|j|j|} | g|gfYSw|||ggfS)Nrmrnroz RFC; RFC %sr8rprrFrfcruzRFC zinvalid RFC number %srx)rNrzr0rrnrrLrMr{r|r}r2r~r/rrrrrrJrr-r-r.rDs*   zRFC.runcCsb|jjjj}|jdd}t|dkr%||jjt|dd|dS||jjt|dS)Nrr:rr) rLrMr rfc_base_urlr0r?rrfc_urlrrr-r-r.r|s  $z RFC.build_uriNrr-r-r-r.rsr(?rz&&&r8 acceleratorrEr:) rinlinerJr;amp_rer?rITextpopreplace)r*rOspansspanletterrr-r-r.rDs  z GUILabel.runN) r\r]r^recompilerrrr r rDr-r-r-r.rs "rcs6eZdZdZdeeeeefffdd ZZ S) MenuSelectionu‣r&cs|jd|j|_tS)Nz-->)rIrBULLET_CHARACTERr(rDrCr+r-r.rD s zMenuSelection.run) r\r]r^rrrr r rDrer-r-r+r.rs*rz {([^}]+)}z (\\*{|\\*})c@sJeZdZedZdeeeee ffddZ de deefddZ dS) EmphasizedLiteralz(\\\\|\\{|\\}|{|})r&cCs>||j}tj|jdg|R|j|jgd}|ggfS)Nr8)roler>)parserIrrbrJr;rT)r*childrenrOr-r-r.rDs  zEmphasizedLiteral.runrIcCsxg}dg}|j|D]}|dkr|dd7<q |dkr>t|dkr3|ddkr3|dd7<q |d|dq |dkrt|d krx|d dkrxt|dd krx|d rg|t|d |d |t|d|ddg}q |dd|g}q |d kr|dd7<q |d kr|dd7<q |d|7<q d|rd|}|t|||S)Nr8z\\\{rr1}r:rz\{z\}) parens_rer?rappendrremphasisjoin)r*rIrjstackpartr-r-r.rs6  (   zEmphasizedLiteral.parseN) r\r]r^rrrrrr r rDrdrr-r-r-r.rs r \((.*)\)$c@s8eZdZedejZdeee ee ffddZ dS) Abbreviationrr&cCsd|j}|j|j}|r!|jd|}|d|d<n|j}tj |j |fi|ggfS)Nr: explanation) rXcopyabbr_researchrIstartstripgroupr abbreviationrJ)r*rXmatchedrIr-r-r.rDLs zAbbreviation.runN) r\r]r^rrSrrrr r rDr-r-r-r.rIs"r)r!T)r%) downloadanyrtrguilabel menuselectionfilesampabbrspecific_docrolesapprr&cCstddlm}tD]\}}|||}|||d|gi}|||q tD] \}}|||q)ddddS)Nr)rolesr>builtinT)versionparallel_read_safeparallel_write_safe)docutils.parsers.rstrgeneric_docrolesitems GenericRole CustomRoleregister_local_roler)rrrolenamer!genericrfuncr-r-r.setuphs  r)9r_rtypingrrrrrrdocutilsrr docutils.nodesr r r r sphinxr sphinx.localer sphinx.utilrsphinx.util.docutilsrrsphinx.util.typingrsphinx.applicationrsphinx.environmentrliteral_strongrrbliteral_emphasisrrr rfrlrr_amp_rerr _litvar_rerrr_abbr_rerdownload_referencerrdrarr-r-r-r.s^       y # "  2