U
    G8]e                     @   sh   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 dZ
dZd	Zd
ZG dd deZdd ZdS )a  
    pygments.sphinxext
    ~~~~~~~~~~~~~~~~~~

    Sphinx extension to generate automatic documentation of lexers,
    formatters and filters.

    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)nodes)ViewList)	Directive)nested_parse_with_titlesz
.. module:: %s

%s
%s
zX
.. class:: %s

    :Short names: %s
    :Filenames:   %s
    :MIME types:  %s

    %s

zA
.. class:: %s

    :Short names: %s
    :Filenames: %s

    %s

z'
.. class:: %s

    :Name: %s

    %s

c                   @   sL   e Zd ZdZdZdZdZdZi Zdd Z	dd Z
d	d
 Zdd Zdd ZdS )PygmentsDoczn
    A directive to collect all lexers/formatters/filters and generate
    autoclass directives for them.
    F   r   c                 C   s   t  | _| jd dkr |  }nP| jd dkr8|  }n8| jd dkrP|  }n | jd dkrh|  }ntdt	 }t
|ddd	}t| j|| | jD ]}| jjjj| q|jS )
Nr   lexersZ
formattersfiltersZlexers_overviewz,invalid argument for "pygmentsdoc" directive
 )source)set	filenamesZ	argumentsdocument_lexersdocument_formattersdocument_filtersdocument_lexers_overview	Exceptionr   Zcompoundr   splitr   stateZdocumentZsettingsZrecord_dependenciesaddZchildren)selfoutZnodeZvlfn r   1lib/python3.8/site-packages/pygments/sphinxext.pyrunE   s     




zPygmentsDoc.runc              
      sb  ddl m} ddl}g }g dd }t| dd dD ]v\}}|j|d	 }|j|j }	||d	 |j
d
|ddddpdd
|d |d  d| d q8ddddg}	fdd|	D   fdd fdd}
|	|
  |	dddd  |	|
  D ]2}|	|d |d |d d!|d  d" q|	|
  d#|S )$zGenerate a tabular overview of all lexers.

        The columns are the lexer name, the extensions handled by this lexer
        (or "None"), the aliases and a link to the lexer class.r   LEXERSNc                 S   s   |rd|  d| dS | S )N`z <z>`_r   )nameurlr   r   r   format_linkc   s    z9PygmentsDoc.document_lexers_overview.<locals>.format_linkc                 S   s   | d d   S )Nr   )lowerxr   r   r   <lambda>h       z6PygmentsDoc.document_lexers_overview.<locals>.<lambda>keyr   , *\*_\None   .)r    
extensionsaliasesclassr    r2   r3   r4   c                    s"   g | ] t  fd dD qS )c                    s    g | ]}|  rt |  qS r   )len).0rowcolumnr   r   
<listcomp>t   s      zCPygmentsDoc.document_lexers_overview.<locals>.<listcomp>.<listcomp>)max)r6   )tabler8   r   r:   t   s   z8PygmentsDoc.document_lexers_overview.<locals>.<listcomp>c                     sF   g }t  | D ],\}}|r,||| q|d|  qd|S )zFormat a table row )zipappendljustjoin)columnsr   lc)column_lengthsr   r   	write_roww   s    z7PygmentsDoc.document_lexers_overview.<locals>.write_rowc                     s   dd  D } |  S )zWrite a table separator rowc                 S   s   g | ]}d | qS )=r   )r6   rD   r   r   r   r:      s     zQPygmentsDoc.document_lexers_overview.<locals>.write_seperator.<locals>.<listcomp>r   )sep)rE   rF   r   r   write_seperator   s    z=PygmentsDoc.document_lexers_overview.<locals>.write_seperatorNamezExtension(s)zShort name(s)zLexer classz	:class:`~r   r
   )pygments.lexers._mappingr   Zpygments.lexerssorteditemsr   Zfind_lexer_classr   Zalias_filenamesr?   r!   rA   replace)r   r   pygmentsr   r"   	classnamedataZ	lexer_clsr2   Zcolumn_namesrI   r7   r   )rE   r<   rF   r   r   X   s@    


z$PygmentsDoc.document_lexers_overviewc              
   C   sp  ddl m} dd l}dd l}dd l}g }i }i }t| dd dD ]\}}	|	d }
t|
d d |g}| j	|j
 t||}|jstd|  |j}t|tr|d}t|dd }|rP|||jjd	 d
 | }|jdd}|std| d| |	d rP|	d d }|d7 }|d| d7 }| D ]}|d| d7 }q8||
g |d|	d ppdd|	d ddddpdd|	d pd|f |
|krD|j}t|tr|d}|||
< qDt| dd dD ]v\}
}||
 d krtd|
f ||
  d  d}|t|
|d t| f  |D ]}	|t|	  qLqd!|S )"Nr   r   c                 S   s   | d S Nr   r   r$   r   r   r   r&      r'   z-PygmentsDoc.document_lexers.<locals>.<lambda>r(   z&Warning: %s does not have a docstring.utf8Z_exampleZtestsZexamplefileszutf-8)encodingzEmpty example file 'z' for lexer r0   z

    .. admonition:: Example
z
      .. code-block:: z

z
          r
   r*   r/      r+   r,   r-   r.      c                 S   s   | d S rR   r   r$   r   r   r   r&      r'   zMissing docstring for %sr1   -r   ) rK   r   rO   inspectpathlibrL   rM   
__import__r   r   __file__getattr__doc__print
isinstancebytesdecodePathZ
getabsfileparentZ	read_textr   
splitlines
setdefaultr?   rA   rN   striprstrip	MODULEDOCr5   LEXERDOC)r   r   rO   rX   rY   r   modulesZmoduledocstringsrP   rQ   modulemodcls	docstringZexample_filepZcontentZ
lexer_namelineZmoddocr   headingr   r   r   r      sr    



"

zPygmentsDoc.document_lexersc           
   
   C   s   ddl m} g }t| dd dD ]\}}|d }t|d d |g}| j|j t||}|j	}t
|trv|d}|j}	|t|	d|d pd	d|d
 ddpd	|f  q$d|S )Nr   )
FORMATTERSc                 S   s   | d S rR   r   r$   r   r   r   r&      r'   z1PygmentsDoc.document_formatters.<locals>.<lambda>r(   rS   r*   r0   r/   rU   r+   r,   r   )Zpygments.formattersrr   rL   rM   rZ   r   r   r[   r\   r]   r_   r`   ra   __name__r?   FMTERDOCrA   rN   )
r   rr   r   rP   rQ   rk   rl   rm   rn   rq   r   r   r   r      s     



zPygmentsDoc.document_formattersc                 C   sr   ddl m} g }| D ]N\}}| jtj|j j |j	}t
|trP|d}|t|j||f  qd|S )Nr   )FILTERSrS   r   )Zpygments.filtersru   rM   r   r   sysrj   
__module__r[   r]   r_   r`   ra   r?   	FILTERDOCrs   rA   )r   ru   r   r    rm   rn   r   r   r   r      s    

zPygmentsDoc.document_filtersN)rs   rw   __qualname__r]   Zhas_contentZrequired_argumentsZoptional_argumentsZfinal_argument_whitespaceZoption_specr   r   r   r   r   r   r   r   r   r   :   s   <;r   c                 C   s   |  dt d S )NZpygmentsdoc)Zadd_directiver   )Zappr   r   r   setup   s    rz   )r]   rv   Zdocutilsr   Zdocutils.statemachiner   Zdocutils.parsers.rstr   Zsphinx.util.nodesr   rh   ri   rt   rx   r   rz   r   r   r   r   <module>   s   

 5