U C^0+@sdZdZddlZddlZddlZddlZddlmZmZm Z ddlm Z m Z ddl m Z mZddl mZmZmZGdd d e ZGd d d e ZGd d d e ZGddde ZGdddejZdZdddZdS)z Transforms for PEP processing. - `Headers`: Used to transform a PEP's initial RFC-2822 header. It remains a field list, but some entries get processed. - `Contents`: Auto-inserts a table of contents. - `PEPZero`: Special processing for PEP 0. ZreStructuredTextN)nodesutils languages)ApplicationError DataError) TransformTransformError)parts referencesmiscc@sDeZdZdZdZdZdZedej dfeddffZ dd Z d S) Headersz< Process fields in a PEP's initial RFC-2822 header. ihzpep-%04dz3http://hg.python.org/peps/file/default/pep-%04d.txtz\$RCSfile: (.+),v \$$z\1z\$[a-zA-Z]+: (.+) \$$c Cst|jstd|jd}t|tjr4d|dkr}t|}|!tj|||jj"j#|j$|d|!|q|dd|dd<n| dkrt%&||j'|r|} tjd | |dg|dd<nd| dkr|}|jj"j#|j$d }tjd ||dg|dd<n"| d!krt| rt%&||j'qdS)"NzDocument tree is empty.rrfc2822classeszADocument does not begin with an RFC-2822 header; it is not a PEP.pepz?"PEP" header must contain an integer; "%s" is an invalid value.)Z base_nodez(none))Zrefidz3Document does not contain an RFC-2822 "PEP" header.titlez No title!z4PEP header field body contains multiple elements: %s)levelz=PEP header field body may only contain a single paragraph: %sz last-modifiedz%d-%b-%Ysourcerefuriauthorzdiscussions-to)Zreplacesz replaced-byrequires z,?\s+z content-type version)(lendocumentr isinstancerZ field_listastextlowerint pep_cvs_url ValueErrorreporterwarningset_idZ problematicZ add_backref paragraphpendingPEPZeroinsert note_pendingpformattimestrftime localtimeosstat reference replace_self mask_emailZTextresplitappendsettings pep_base_urlpep_urlrZclean_rcs_keywordsrcs_keyword_substitutions)selfheaderrfieldvalueZcvs_urlmsgmsgidZprbZprbidr+namebodydateparanodeZnewbodyspaceZrefpeppepnoZpep_typeurirM>/tmp/pip-install-6_kvzl1k/docutils/docutils/transforms/peps.pyapply)s              (          z Headers.applyN) __name__ __module__ __qualname____doc__default_priorityr=r%r8compile IGNORECASEr>rOrMrMrMrNr s r c@seZdZdZdZddZdS)Contentsz~ Insert an empty table of contents topic and a transform placeholder into the document after the RFC 2822 header. i|cCst|jjj|jj}|jd}td|}tj d|dgd}t |}|j |sb|d ||j |ttj}||7}|jd||j|dS)Ncontentsr)rnamesr)rZ get_languager r;Z language_coder'labelsrrtopicZfully_normalize_nameZhas_namer:Znote_implicit_targetr+r rWr-r.)r?languagerErr[r+rMrMrNrOs       zContents.applyNrPrQrRrSrTrOrMrMrMrNrWsrWc@s$eZdZdZdZddZddZdS) TargetNotesz Locate the "References" section, insert a placeholder for an external target footnote insertion transform at the end, and schedule the transform to run immediately. icCs |j}t|d}d}}|dkrtt||tjrt||d}d|kr^||}qtn d|krj|}|d8}q|st}|tdd7}| ||r| ||n | |t t j}| ||j|dtj tjd|jid}| ||j|ddS) Nrrr copyrightrZ Referencescallback)details)r rr!rsectionr"r#r9rr)r-r:r+r r^r.r ZCallBackcleanup_callback)r?dociZrefsectr_Z title_wordsr+rMrMrNrOs4       zTargetNotes.applycCs"t|jdkr|jj|jdS)z Remove an empty "References" section. Called after the `references.TargetNotes` transform is complete. rN)rparentremove)r?r+rMrMrNrcszTargetNotes.cleanup_callbackN)rPrQrRrSrTrOrcrMrMrMrNr^sr^c@seZdZdZdZddZdS)r,z' Special processing for PEP 0. icCs*t|j}|j||jj|jdSN)PEPZeroSpecialr walkZ startnoderfrg)r?ZvisitorrMrMrNrOs  z PEPZero.applyNr]rMrMrMrNr,sr,c@sNeZdZdZejZddZddZddZdd Z d d Z d d Z ddZ dS)riz Perform the special processing needed by PEP 0: - Mask email addresses. - Link PEP numbers in the second column of 4-column tables to the PEPs themselves. cCsdSrhrMr?rIrMrMrN unknown_visitszPEPZeroSpecial.unknown_visitcCs|t|dSrh)r6r7rkrMrMrNvisit_referenceszPEPZeroSpecial.visit_referencecCsd|dkrtjdS)Nr r)rZSkipNoderkrMrMrNvisit_field_lists zPEPZeroSpecial.visit_field_listcCs|ddk|_d|_dS)Ncolsr) pep_tableentryrkrMrMrN visit_tgroupszPEPZeroSpecial.visit_tgroupcCs0|jd7_|jr,|jdkr,|dddS)Nrrrnum)rrrqr:rkrMrMrN visit_colspecszPEPZeroSpecial.visit_colspeccCs d|_dS)Nr)rrrkrMrMrN visit_rowszPEPZeroSpecial.visit_rowcCs|jd7_|jr|jdkrt|dkr|dd|d}t|tjrt|dkr|}z4t|}|j j j |j |}tj |||d|d<Wntk rYnXdS)Nrrrrtrr)rrrqrr:r!rr*r"r$r r;r<r=r5r&)r?rIptextrrefrMrMrN visit_entryszPEPZeroSpecial.visit_entryN) rPrQrRrSr r=rlrmrnrsrurvrzrMrMrMrNris ri)zpeps@python.orgzpython-list@python.orgzpython-dev@python.orgcCs|dr|ddr|dddtkr6|d}n |dd}tjd|d d }|dkrb|S|dd |7<|g|dd<|Sn|SdS) a Mask the email address in `ref` and return a replacement node. `ref` is returned unchanged if it contains no email address. For email addresses such as "user@host", mask the address as "user at host" (text) to thwart simple email address harvesters (except for those listed in `non_masked_addresses`). If a PEP number (`pepno`) is given, return a reference including a default email subject. rzmailto:rNr@z at rhtml)formatz?subject=PEP%%20%s)hasattr startswithnon_masked_addressesr"replacerraw)ryrK replacementZreplacement_textrMrMrNr7s  r7)N)rSZ __docformat__sysr3r8r0ZdocutilsrrrrrZdocutils.transformsrrr r r r rWr^r,ZSparseNodeVisitorrirr7rMrMrMrNs  o23