o $a5 @sRdZddlZddlZddlZddlmZddlmZmZm Z m Z m Z m Z m Z mZddlmZddlmZmZddlZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd l m!Z!m"Z"ddl#m$Z$ddl%m&Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,e)-e.Z/dZ0GdddeZ1dede2de2de e2fddZ3dede4fddZ5dededdfdd Z6ded!ed"e e2d#eddf d$d%Z7ded!ed&e2ddfd'd(Z8Gd)d*d*e&Z9ded!ed+ed,ede ef d-d.Z:dede2de e2fd/d0Z;dede2de4fd1d2ZdS)7z sphinx.ext.viewcode ~~~~~~~~~~~~~~~~~~~ Add links to module code in Python object descriptions. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N)path)AnyDict GeneratorIterableOptionalSetTuplecast)nodes)ElementNode)addnodes)Sphinx)Builder)StandaloneHTMLBuilder)RemovedInSphinx50Warning)BuildEnvironment)___)ModuleAnalyzer)SphinxPostTransform)get_full_modnameloggingstatus_iterator) make_refnode_modulesc@seZdZdZdS)viewcode_anchorzNode for viewcode anchors. This node will be processed in the resolving phase. For viewcode supported builders, they will be all converted to the anchors. For not supported builders, they will be removed. N)__name__ __module__ __qualname____doc__r"r"5/usr/lib/python3/dist-packages/sphinx/ext/viewcode.pyr'srappmodname attributereturnc Cstzt||WStytd||YdSty9}ztttd||WYd}~dSd}~ww)NzDidn't find %s in %sz0viewcode can't import %s, failed with error "%s")rAttributeErrorloggerverbose Exception traceback format_excrstrip)r$r%r&er"r"r#_get_full_modname0s  r0buildercCs8|jdkrdS|jdkrdS|jdr|jjsdSdS)NhtmlF singlehtmlepubT)formatname startswithconfigviewcode_enable_epub)r1r"r"r#is_supported_builderBs  r:doctreec s$jjtds i_dtdtdtdtdtf fdd }t|tj D]i}| d d kr0q&t }|D]Y}t |tj s>q5| d }| d}|}jjr_d ||} | s]t||} | }|sbq5| d}|||j|spq5||vruq5||tt|d d} |t| |jd7}q5q&dS)N_viewcode_modulesr%fullnamedocnamerefnamer'c sj|d}|dur dSd|}|dur9z t|}|Wnty1dj|<YdSw|j}|j}n|\}}|dusG|d|krR||i|f}|j|<|\} }} } ||vrb|| |<dSdS)NFviewcode-find-sourcerT) r<getemit_firstresultr for_module find_tagsr+codetags) r%r=r>r?entry code_tagsanalyzerrErFrusedr$envr"r#has_tagRs.        zdoctree_read..has_tagdomainpymoduleviewcode-follow-imported./) reftargetrefidrefdoc)r1rLhasattrr<strboollisttraverserdescrAset isinstancedesc_signaturer8 viewcode_follow_imported_membersrBr0r>add posixpathjoinOUTPUT_DIRNAMEreplacer) r$r;rMobjnodenamessignoder%r=r? new_modnamepagenamer"rKr# doctree_readMsB $      rkrLdocnamesotherc Cst|dsdSt|dsi|_|jD].\}}||jvr#||j|<q|j|rB|j|d}|dD] \}}||vrA|||<q5qdS)Nr<)rWr<items) r$rLrlrmr%rGrJr=r>r"r"r#env_merge_infos     rpr>c Csvt|di}t|D],\}}|durq |\}}}} t|D] } || |kr,|| qt|dkr8||q dS)Nr<Fr)getattrrZropoplen) r$rLr>modulesr%rGrErFrJr?r=r"r"r# env_purge_docs       ruc@s:eZdZdZdZdeddfddZd dd Zd d d ZdS) ViewcodeAnchorTransformz;Convert or remove viewcode_anchor nodes depends on builder.dkwargsr'NcKs$t|jjr |dS|dSN)r:r$r1convert_viewcode_anchorsremove_viewcode_anchors)selfrxr"r"r#runs   zViewcodeAnchorTransform.runcCsV|jtD]"}tjdtddgd}t|jj|d|d|d|}| |qdS)Nz[source]z viewcode-link)classesrVrTrU) documentr[rr inlinerrr$r1 replace_self)r|nodeanchorrefnoder"r"r#rzs z0ViewcodeAnchorTransform.convert_viewcode_anchorscCs&t|jtD]}|j|qdSry)rZrr[rparentremove)r|rr"r"r#r{sz/ViewcodeAnchorTransform.remove_viewcode_anchors)r'N) rrr r!default_priorityrr}rzr{r"r"r"r#rvs  rvrcontnodecCs:|ddkrtdtt|j|d|d|d|SdS)NreftypeviewcodezTviewcode extension is no longer use pending_xref node. Please update your extension.rVrTrU)warningswarnrrr1)r$rLrrr"r"r#missing_references rcCs>|d|}|r dSz t|\}}|WStyYdSw)z"Get module filename for *modname*.r@N)rBrget_module_sourcer+)r$r% source_infofilenamesourcer"r"r#get_module_filenames  rcCszt||}|dur dStt|j}|dd|j}t|jd|}zt |t |kr0WdSWdSt y<YdSw)z*Check generation of module page is needed.NTrRrSz _modules/F) rr rr1re out_suffixrrcoutdirgetmtimeIOError)r$r%module_filenamer1basename page_filenamer"r"r#should_generate_module_pages   rc cs6|jj}t|ds dSt|jsdS|jj}|jj}t|j}tt |j t ddt |j|j ddD]\}}|s=q6t||sCq6|\}}} } tt|dd} |jjdvr^|jj} nd } |j|| d d } | }|d d \}}|d |g|d d<t |d}| D]2\}}||\}}}|| |d| d|}d||tdf||||<|t||d7<qg}|}d|vr|ddd }||vr||| tt|dd|dd|vs||| ttdtdd|||td|d|d}| |dfVq6|sdSdg}dg}t |D]T}||dr8||d|dn$|||dsU||d||drD||d|d|ttdtt|dd|fq!|dt |dtdtd d|d!}ttd|dfVdS)"Nr<zhighlighting module code... bluecSs|dS)Nrr")xr"r"r#szcollect_pages..rRrS)python3defaultnonepythonF)linenosrz
#zM
%sz[docs]z
)linktitleindexz Module codez

Source code for %s

 )parentsrbodyz page.htmlr~z
    z
z
  • %s
  • zOverview: module codez0

    All modules for which code is available

    )rr)r1rLrWr: highlighterget_relative_urir]r<rsortedrorrs verbosityrrbrcrdrer8highlight_languagehighlight_block splitlinessplitrminrsplitappendreverser7rr)r$rLruritomodnamesr%rGrErFrJr?rjlexer highlightedlinesbeforeaftermaxindexr6r>typestartendbacklinkrrcontextr2stackr"r"r# collect_pagess                  rcCs|ddd|ddd|ddd|dt|dt|dt|d t|d t|d |d |t t j d ddS)Nviewcode_importFr9r`Tz doctree-readzenv-merge-infoz env-purge-doczhtml-collect-pageszmissing-referencer@rQr)version env_versionparallel_read_safe) add_config_valueconnectrkrprurr add_eventadd_post_transformrvsphinx__display_version__)r$r"r"r#setupXs        r)?r!rbr,rosrtypingrrrrrrr r docutilsr docutils.nodesr r rrsphinx.applicationrsphinx.buildersrsphinx.builders.htmlrsphinx.deprecationrsphinx.environmentr sphinx.localerr sphinx.pycoder!sphinx.transforms.post_transformsr sphinx.utilrrrsphinx.util.nodesr getLoggerrr)rdrrXr0rYr:rkrprurvrrrrrr"r"r"r#sP  (             @    .d