
    Fe                       d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZ erdd
lmZmZ ddlmZ  G d de      Z G d de      Z G d de	j4                        Z G d de      ZddZy)ztransforms for code-blocks.    )annotationsN)TYPE_CHECKINGAny
NamedTuple)nodes)PythonConsoleLexerguess_lexer)addnodes)doctest)SphinxTransform)NodeTextElement)Sphinxc                  ,    e Zd ZU ded<   ded<   ded<   y)HighlightSettingstrlanguageboolforceintlineno_thresholdN)__name__
__module____qualname____annotations__     H/usr/lib/python3/dist-packages/sphinx/transforms/post_transforms/code.pyr   r      s    MKr   r   c                      e Zd ZdZdZddZy)HighlightLanguageTransformz
    Apply highlight_language to all literal_block nodes.

    This refers both :confval:`highlight_language` setting and
    :rst:dir:`highlight` directive.  After processing, this transform
    removes ``highlightlang`` node from doctree.
    i  c                2   t        | j                  | j                  j                        }| j                  j	                  |       t        | j                  j                  t        j                              D ]  }|j                  j                  |        y N)HighlightLanguageVisitordocumentconfighighlight_language	walkaboutlistfindallr
   highlightlangparentremove)selfkwargsvisitornodes       r   applyz HighlightLanguageTransform.apply%   sm    *4==+/;;+I+IK(..x/E/EFG 	%DKKt$	%r   Nr.   r   returnNone)r   r   r   __doc__default_priorityr1   r   r   r   r    r       s     %r   r    c                  `     e Zd Zd
 fdZddZddZddZddZddZddZ	ddZ
dd	Z xZS )r#   c                r    t        |dt        j                        | _        g | _        t
        |   |       y )NF)r   sysmaxsizedefault_settingsettingssuper__init__)r-   r$   default_language	__class__s      r   r>   z!HighlightLanguageVisitor.__init__/   s-    /0@%U02"r   c                     y r"   r   r-   r0   s     r   unknown_visitz&HighlightLanguageVisitor.unknown_visit4       r   c                     y r"   r   rB   s     r   unknown_departurez*HighlightLanguageVisitor.unknown_departure7   rD   r   c                N    | j                   j                  | j                         y r"   r<   appendr;   rB   s     r   visit_documentz'HighlightLanguageVisitor.visit_document:       T112r   c                8    | j                   j                          y r"   r<   poprB   s     r   depart_documentz(HighlightLanguageVisitor.depart_document=       r   c                N    | j                   j                  | j                         y r"   rH   rB   s     r   visit_start_of_filez,HighlightLanguageVisitor.visit_start_of_file@   rK   r   c                8    | j                   j                          y r"   rM   rB   s     r   depart_start_of_filez-HighlightLanguageVisitor.depart_start_of_fileC   rP   r   c                J    t        |d   |d   |d         | j                  d<   y )Nlangr   linenothreshold)r   r<   rB   s     r   visit_highlightlangz,HighlightLanguageVisitor.visit_highlightlangF   s,    ,T&\-1']-12C-DFbr   c                    | j                   d   }d|vr|j                  |d<   |j                  |d<   d|vr5|j                         j	                  d      }||j
                  dz
  k\  |d<   y y )NrX   r   r   linenos
   )r<   r   r   astextcountr   )r-   r0   settingliness       r   visit_literal_blockz,HighlightLanguageVisitor.visit_literal_blockK   sq    --#T!&//D#MMDMD KKM''-E$(@(@1(DDDO !r   )r$   znodes.documentr?   r   r3   r4   )r0   r   r3   r4   )r0   zaddnodes.highlightlangr3   r4   )r0   nodes.literal_blockr3   r4   )r   r   r   r>   rC   rF   rJ   rO   rR   rT   rY   rb   __classcell__)r@   s   @r   r#   r#   .   s2    #
33F
Fr   r#   c                  P    e Zd ZdZej
                  dz   ZddZddZed	d       Z	y)
TrimDoctestFlagsTransformz
    Trim doctest flags like ``# doctest: +FLAG`` from python code-blocks.

    see :confval:`trim_doctest_flags` for more information.
    r]   c                $   | j                   j                  t        j                        D ]%  }| j	                  |      s| j                  |       ' | j                   j                  t        j                        D ]  }| j                  |        y r"   )r$   r)   r   literal_blockis_pyconsolestrip_doctest_flagsdoctest_block)r-   r.   lbnodedbnodes       r   r1   zTrimDoctestFlagsTransform.apply]   sv    mm++E,?,?@ 	1F  (((0	1 mm++E,?,?@ 	-F$$V,	-r   c                *   |j                  d| j                  j                        sy |j                  }t        j
                  j                  d|      }t        j                  j                  d|      }||_        t        j                  |      g|d d  y )N
trim_flags )
getr%   trim_doctest_flags	rawsourcer   blankline_resubdoctestopt_rer   Text)r-   r0   sources      r   rj   z-TrimDoctestFlagsTransform.strip_doctest_flagse   sr    xxdkk&D&DE%%))"f5&&**2v6::f%&Qr   c                   | j                   | j                         k7  ry| j                  d      }|dv ry|dv r| j                   j                  d      S |dk(  r&	 t	        | j                         }t        |t              S y# t        $ r Y yw xY w)NFr   >   pyconpycon3T>   pypy3pythondefaultpython3z>>>guess)rs   r^   rq   
startswithr	   
isinstancer   	Exception)r0   r   lexers      r   ri   z&TrimDoctestFlagsTransform.is_pyconsoleo   s    >>T[[]*88J'**FF>>,,U33 #DNN3!%);<<   s   $B   	BBNr2   )r0   r   r3   r4   )r0   rc   r3   r   )
r   r   r   r5   r    r6   r1   rj   staticmethodri   r   r   r   rf   rf   U   s8    
 2BBQF-'  r   rf   c                b    | j                  t               | j                  t               ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_post_transformr    rf   )apps    r   setupr      s5    5645 "# r   )r   r   r3   zdict[str, Any])r5   
__future__r   r9   typingr   r   r   docutilsr   pygments.lexersr   r	   sphinxr
   
sphinx.extr   sphinx.transformsr   docutils.nodesr   r   sphinx.applicationr   r   r    NodeVisitorr#   rf   r   r   r   r   <module>r      sk    ! " 
 1 1  ;   -0)z % %&$Fu00 $FN+ +\r   