
    Fe                       d dl mZ d dlZd dlm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mZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$m%Z% erd dl&m'Z' d dl(m)Z)  ejT                  e+      Z, G d dejZ                        Z- G d dej\                        Z. G d de      Z/ G d de      Z0ddZ1y)    )annotationsN)path)TYPE_CHECKINGAnycast)nodes)Nodemake_id)
directives)imagestables)Meta)set_classes)optional_int)
MathDomain)__)logging)SphinxDirective)set_source_info)SEPos_pathrelpath)Sphinx)
OptionSpecc                  $     e Zd ZdZd fdZ xZS )FigureziThe figure directive which applies `:name:` option to the figure node
    instead of the image node.
    c                   | j                   j                  dd       }t        |          }t	        |      dk(  st        |d   t        j                        r|S t	        |      dk(  sJ t        t        j                  |d         }|r || j                   d<   | j                  |       |j                  <t	        |      dk(  r.t        t        j                  |d         }|j                  |_        |gS )Nname   r      )optionspopsuperrunlen
isinstancer   system_messager   figureadd_namelinecaption)selfr   resultfigure_noder+   	__class__s        ;/usr/lib/python3/dist-packages/sphinx/directives/patches.pyr$   z
Figure.run#   s    ||-v;!z&)U5I5IJM6{a5<<3#'DLL MM+& #K(8A(=5==+a.9G&||K}    return
list[Node]__name__
__module____qualname____doc__r$   __classcell__r/   s   @r0   r   r      s     r1   r   c                  $     e Zd ZdZd fdZ xZS )CSVTablezThe csv-table directive which searches a CSV file from Sphinx project's source
    directory when an absolute path is given via :file: option.
    c                   d| j                   v r8| j                   d   j                  t        t        j                  f      r| j
                  j                  j                  j                  }| j                   d   }t        j                  |      r7t        j                  t        d      |j                  | j                  f       nt        j                   |j"                  t%        | j                   d   dd              }t        j&                  |j)                  |j                              }t+        ||      | j                   d<   t,        | ]         S )Nfilez":file:" option for csv-table directive now recognizes an absolute path as a relative path from source directory. Please update your document.locationr    )r!   
startswithr   ossepstatedocumentsettingsenvr   existsloggerwarningr   docnamelinenojoinsrcdirr   dirnamedoc2pathr   r#   r$   )r,   rH   filenameabspathdocdirr/   s        r0   r$   zCSVTable.run=   s    T\\!dll6&:&E&EsBFFm&T**%%..22C||F+H{{8$r #A  B *-dkk(B  D
 ))CJJV8LQR8P0QRcll3;;&?@'.w'?V$w{}r1   r2   r5   r;   s   @r0   r=   r=   8   s     r1   r=   c                  v    e Zd ZU dZdZej                  ej                  ej                  e	dZ
ded<   dZd	dZy)
CodezqParse and mark up content of a code block.

    This is compatible with docutils' :rst:dir:`code` directive.
    r    )classforcer   number-linesr   option_specTc                h   | j                          t        | j                         dj                  | j                        }t        j                  ||| j                  j                  dg       d| j                  v i       }| j                  |       t        | |       | j                  r| j                  d   |d<   n=| j                  j                  j                  d| j                  j                        |d<   d| j                  v r)d	|d
<   | j                  d   r| j                  d   |d   d<   |gS )N
classesrX   )r]   rX   highlight_argsr   languagehighlight_languagerY   Tlinenosr^   linenostart)assert_has_contentr   r!   rN   contentr   literal_blockgetr)   r   	argumentsrH   	temp_dataconfigr`   )r,   codenodes      r0   r$   zCode.run\   s   !DLL!yy&""4+/<<+;+;Ir+J)0DLL)@246 	dd#>>#~~a0D
  $xx11556J6:kk6T6T VD T\\)"DO ||N+8<^8T%&}5vr1   Nr2   )r6   r7   r8   r9   optional_argumentsr   class_optionflag	unchangedr   rZ   __annotations__has_contentr$    r1   r0   rV   rV   N   sE     (($$$	K  Kr1   rV   c                      e Zd ZU dZdZdZdZej                  ej                  ej                  ej                  dZded<   d
dZddZy	)MathDirectiveTr   r    )labelr   rW   nowrapr   rZ   c           
        dj                  | j                        }| j                  r$| j                  d   r| j                  d   dz   |z   }| j                  j	                  d| j                  j	                  d            }t        j                  ||| j                  j	                  dg       | j                  j                  d |d| j                  v       }| j                  |       | j                  |       |g}| j                  |       |S )	Nr\   r   z

ru   r   rW   rv   )r]   rL   numberru   rv   )rN   rd   rg   r!   rf   r   
math_blockrH   rL   r)   r   
add_target)r,   latexru   rk   rets        r0   r$   zMathDirective.run   s    		$,,'>>dnnQ/NN1%.6E  $,,*:*:6*BCu(,(8(8"(E(,(8(8'+&+'/4<<'?A 	dT"&
r1   c                   t        t        j                  |d         }|d   dk(  s| j                  j                  r>|d   s9| j
                  j                  d      }d| j
                  j                  |fz  |d<   |d   sy t        t        | j
                  j                  d            }|j                  | j
                  j                  |d   |       |j                  |d         |d<   t        d	|d   z        }t        j                  dd|g
      }| j                  j                  j!                  |       |j#                  d|       y )Nr   ru    zsphinx.ext.math#equationsz%s:%dmathr@   rx   zequation-%s)ids)r   r   ry   ri   math_number_allrH   new_serialnorL   r   
get_domainnote_equationget_equation_number_forr
   targetrE   rF   note_explicit_targetinsert)r,   r|   rk   seqdomainnode_idr   s          r0   rz   zMathDirective.add_target   s   E$$c!f- =B4;;#>#>tG}((''(CDC#txx'7'7&==DM G} j$(("5"5f"=>TXX--tG}tL77WFX -$w-78b"7)4

008

1fr1   Nr2   )r|   r4   r3   None)r6   r7   r8   rq   required_argumentsrl   final_argument_whitespacer   ro   rm   rn   rZ   rp   r$   rz   rr   r1   r0   rt   rt   |   sS    K $%%$$((//	K $r1   rt   c                   t        j                  dt               t        j                  dt               t        j                  dt               t        j                  dt
               t        j                  dt               ddddS )	Nr(   metaz	csv-tablerj   r   builtinT)versionparallel_read_safeparallel_write_safe)r   register_directiver   r   r=   rV   rt   )apps    r0   setupr      sg    !!(F3!!&$/!!+x8!!&$/!!&-8 "# r1   )r   r   r3   zdict[str, Any])2
__future__r   rC   r   typingr   r   r   docutilsr   docutils.nodesr	   r
   docutils.parsers.rstr   docutils.parsers.rst.directivesr   r   $docutils.parsers.rst.directives.miscr   docutils.parsers.rst.rolesr   sphinx.directivesr   sphinx.domains.mathr   sphinx.localer   sphinx.utilr   sphinx.util.docutilsr   sphinx.util.nodesr   sphinx.util.osutilr   r   r   sphinx.applicationr   sphinx.util.typingr   	getLoggerr6   rJ   r   r=   rV   rt   r   rr   r1   r0   <module>r      s    " 	  + +  ( + : 5 2 * *   0 - 4 4)- 
		8	$V]] 4v ,+? +\3O 3lr1   