o $a~@sdZddlZddlmZmZmZmZddlmZddl m Z m Z ddl m Z mZddlmZddlmZdd lmZdd lmZGd d d eZGd ddeZGdddejZGdddeZdedeeeffddZdS)z sphinx.transforms.post_transforms.code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ transforms for code-blocks. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N)AnyDictList NamedTuple)nodes)Node TextElement)PythonConsoleLexer guess_lexer)addnodes)Sphinx)doctest)SphinxTransformc@s&eZdZUeed<eed<eed<dS)HighlightSettinglanguageforcelineno_thresholdN)__name__ __module__ __qualname__str__annotations__boolintrrH/usr/lib/python3/dist-packages/sphinx/transforms/post_transforms/code.pyrs  rc@s&eZdZdZdZdeddfddZdS)HighlightLanguageTransformz Apply highlight_language to all literal_block nodes. This refers both :confval:`highlight_language` setting and :rst:dir:`highlightlang` directive. After processing, this transform removes ``highlightlang`` node from doctree. ikwargsreturnNcKsDt|j|jj}|j|t|jtjD]}|j |qdSN) HighlightLanguageVisitordocumentconfighighlight_language walkaboutlisttraverser highlightlangparentremove)selfrvisitornoderrrapply(s z HighlightLanguageTransform.apply)rrr__doc__default_priorityrr-rrrrrsrcseZdZdejdeddffdd Zdeddfdd Zdeddfd d Z deddfd d Z deddfddZ deddfddZ deddfddZ dejddfddZdejddfddZZS)r r!default_languagerNcs&t|dtj|_g|_t|dS)NF)rsysmaxsizedefault_settingsettingssuper__init__)r*r!r0 __class__rrr62sz!HighlightLanguageVisitor.__init__r,cCdSrrr*r,rrr unknown_visit7z&HighlightLanguageVisitor.unknown_visitcCr9rrr:rrrunknown_departure:r<z*HighlightLanguageVisitor.unknown_departurecC|j|jdSrr4appendr3r:rrrvisit_document=z'HighlightLanguageVisitor.visit_documentcC|jdSrr4popr:rrrdepart_document@z(HighlightLanguageVisitor.depart_documentcCr>rr?r:rrrvisit_start_of_fileCrBz,HighlightLanguageVisitor.visit_start_of_filecCrCrrDr:rrrdepart_start_of_fileFrGz-HighlightLanguageVisitor.depart_start_of_filecCs"t|d|d|d|jd<dS)Nlangrlinenothreshold)rr4r:rrrvisit_highlightlangIsz,HighlightLanguageVisitor.visit_highlightlangcCsV|jd}d|vr|j|d<|j|d<d|vr)|d}||jdk|d<dSdS)NrLrrlinenos )r4rrastextcountr)r*r,settinglinesrrrvisit_literal_blockNs   z,HighlightLanguageVisitor.visit_literal_block)rrrrr!rr6rr;r=rArFrHrIr r'rM literal_blockrU __classcell__rrr7rr 1sr c@sVeZdZdZejdZdeddfddZdeddfd d Z e de j de fd d ZdS) TrimDoctestFlagsTransformz Trim doctest flags like ``# doctest: +FLAG`` from python code-blocks. see :confval:`trim_doctest_flags` for more information. rPrrNcKsJ|jtjD] }||r||q|jtjD]}||qdSr)r!r&rrV is_pyconsolestrip_doctest_flags doctest_block)r*rlbnodedbnoderrrr-`s   zTrimDoctestFlagsTransform.applyr,cCsT|d|jjs dS|j}tjd|}tjd|}||_t |g|dd<dS)N trim_flags) getr"trim_doctest_flags rawsourcer blankline_resub doctestopt_rerText)r*r,sourcerrrrZhsz-TrimDoctestFlagsTransform.strip_doctest_flagscCst|j|kr dS|d}|dvrdS|dvr|jdS|dkr8z t|j}t|tWSty7YdSwdS)NFr)pyconpycon3T)pypy3pythonpython3defaultz>>>guess)rbrQr` startswithr isinstancer Exception)r,rlexerrrrrYrs      z&TrimDoctestFlagsTransform.is_pyconsole)rrrr.rr/rr-rrZ staticmethodrrVrrYrrrrrXXs  rXapprcCs |t|tddddS)NbuiltinT)versionparallel_read_safeparallel_write_safe)add_post_transformrrX)rurrrsetups  r{)r.r1typingrrrrdocutilsrdocutils.nodesrrpygments.lexersr r sphinxr sphinx.applicationr sphinx.extr sphinx.transformsrrr NodeVisitorr rXrr{rrrrs      '.