U
    \Sh->                     @  s   d 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
 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 ddlmZ ddlmZ ddlmZ ddlmZ eeZ G dd deZ!G dd dZ"G dd deeZ#dS )z5Manual page writer, extended for Sphinx custom nodes.    )annotations)AnyIterablecast)nodes)Element)
Translator)Writer)addnodes)Builder)_admonitionlabels)logging)SphinxTranslator)format_date)NodeMatcherc                      s2   e Zd Zddd fddZddddZ  ZS )	ManualPageWriterr   None)builderreturnc                   s   t    || _d S N)super__init__r   )selfr   	__class__ I/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/writers/manpage.pyr      s    
zManualPageWriter.__init__r   c                 C  sL   t | j}|  | j| j| j}tt|| _| j| | j	 | _
d S r   )NestedInlineTransformdocumentapplyr   Zcreate_translatorr   ManualPageTranslatorvisitor	walkaboutastextoutput)r   Z	transformr#   r   r   r   	translate   s    
zManualPageWriter.translate)__name__
__module____qualname__r   r'   __classcell__r   r   r   r   r      s   r   c                   @  s0   e Zd ZdZdddddZdddd	d
ZdS )r   a  
    Flatten nested inline nodes:

    Before:
        <strong>foo=<emphasis>1</emphasis>
        &bar=<emphasis>2</emphasis></strong>
    After:
        <strong>foo=</strong><emphasis>var</emphasis>
        <strong>&bar=</strong><emphasis>2</emphasis>
    nodes.documentr   )r    r   c                 C  s
   || _ d S r   )r    )r   r    r   r   r   r   0   s    zNestedInlineTransform.__init__r   )kwargsr   c                   s   t tjtjtj t| j D ]}t fdd|D r"|j	
|}tt|D ]P}||  |r~|j	|d | qT|jdd|f|j}|j	|d | qTt|s"|j	| q"d S )Nc                 3  s   | ]} |V  qd S r   r   ).0subnodeZmatcherr   r   	<genexpr>6   s     z.NestedInlineTransform.apply.<locals>.<genexpr>    )r   r   literalZemphasisstronglistr    findallanyparentindexreversedremoveinsertr   
attributeslen)r   r-   nodeposr/   Znewnoder   r0   r   r!   3   s    
zNestedInlineTransform.applyN)r(   r)   r*   __doc__r   r!   r   r   r   r   r   %   s   
r   c                      s  e Zd ZU dZi Zded< dddd fdd	Zd
dddZdddddZdddddZ	dddddZ
dddddZdddddZdddddZdddddZdddddZdddd d!Zdddd"d#Zdddd$d%Zdddd&d'Zdddd(d)Zdddd*d+Zdddd,d-Zdddd.d/Zdddd0d1Zdddd2d3Zdddd4d5Zdddd6d7Zdddd8d9Zdddd:d;Zdddd<d=Zdddd>d?Zdddd@dAZ ddddBdCZ!ddddDdEZ"ddddFdGZ#ddddHdIZ$ddddJdKZ%ddddLdMZ&ddddNdOZ'ddddPdQZ(ddddRdSZ)ddd fdTdUZ*ddddVdWZ+ddd fdXdYZ,ddddZd[Z-dddd\d]Z.dddd^d_Z/dddd`daZ0ddddbdcZ1ddddddeZ2ddddfdgZ3ddddhdiZ4ddddjdkZ5ddddldmZ6ddddndoZ7ddddpdqZ8ddddrdsZ9ddddtduZ:ddddvdwZ;ddddxdyZ<ddddzd{Z=dddd|d}Z>dddd~dZ?dddddZ@dddddZAdddddZBdddddZCdddddZDdddddZEdddddZFdddddZGdddddZHdddddZIdddddZJdddddZKdddddZLdddddZMdddddZNddd fddZOddd fddZPddd fddZQddd fddZRdddddZSdddddZTdddddZUdddddZVdddddZWdddddZXdddddZYdddddZZ  Z[S )r"   z%
    Custom man page translator.
    zdict[str, Any]_docinfor,   r   r   )r    r   r   c                   s   t  || d| _d| _| jj| jd< | jj| jd< | jjrL| jj| jd< | jj	| jd< | jd 
 | jd< | jjr| jj| jd< n"t| jjptd	| jjd
| jd< | jj| jd< | jj| jd< | jj| jd< t D ]\}}| || jj|< qd S )Nr   titlesubtitleauthorZmanual_sectionZtitle_upperdatez	%b %d, %Y)language	copyrightversionZmanual_group)r   r   in_productionlistsection_levelsettingsrE   rC   rF   Zauthorssectionupperconfigtodayr   Z	today_fmtr   rI   rJ   rK   projectr   items	deunicodelabels)r   r    r   labeltranslationr   r   r   r   K   s&    zManualPageTranslator.__init__strr   c                 C  s    d}| j d r|d7 }|| j  S )NzW.TH "%(title_upper)s" "%(manual_section)s" "%(date)s" "%(version)s" "%(manual_group)s"
rF   z#.SH NAME
%(title)s \- %(subtitle)s
)rC   )r   tmplr   r   r   headerk   s    
zManualPageTranslator.headerr   )r@   r   c                 C  s   d S r   r   r   r@   r   r   r   visit_start_of_files   s    z(ManualPageTranslator.visit_start_of_filec                 C  s   d S r   r   r\   r   r   r   depart_start_of_filev   s    z)ManualPageTranslator.depart_start_of_filec                 C  s   |  | d S r   )Zvisit_definition_listr\   r   r   r   
visit_desc   s    zManualPageTranslator.visit_descc                 C  s   |  | d S r   )Zdepart_definition_listr\   r   r   r   depart_desc   s    z ManualPageTranslator.depart_descc                 C  s   |  | | | d S r   )Zvisit_definition_list_item
visit_termr\   r   r   r   visit_desc_signature   s    
z)ManualPageTranslator.visit_desc_signaturec                 C  s   |  | d S r   )Zdepart_termr\   r   r   r   depart_desc_signature   s    z*ManualPageTranslator.depart_desc_signaturec                 C  s   d S r   r   r\   r   r   r   visit_desc_signature_line   s    z.ManualPageTranslator.visit_desc_signature_linec                 C  s   | j d d S )N bodyappendr\   r   r   r   depart_desc_signature_line   s    z/ManualPageTranslator.depart_desc_signature_linec                 C  s   |  | d S r   )Zvisit_definitionr\   r   r   r   visit_desc_content   s    z'ManualPageTranslator.visit_desc_contentc                 C  s   |  | d S r   )Zdepart_definitionr\   r   r   r   depart_desc_content   s    z(ManualPageTranslator.depart_desc_contentc                 C  s   d S r   r   r\   r   r   r   visit_desc_inline   s    z&ManualPageTranslator.visit_desc_inlinec                 C  s   d S r   r   r\   r   r   r   depart_desc_inline   s    z'ManualPageTranslator.depart_desc_inlinec                 C  s   d S r   r   r\   r   r   r   visit_desc_name   s    z$ManualPageTranslator.visit_desc_namec                 C  s   d S r   r   r\   r   r   r   depart_desc_name   s    z%ManualPageTranslator.depart_desc_namec                 C  s   d S r   r   r\   r   r   r   visit_desc_addname   s    z'ManualPageTranslator.visit_desc_addnamec                 C  s   d S r   r   r\   r   r   r   depart_desc_addname   s    z(ManualPageTranslator.depart_desc_addnamec                 C  s   d S r   r   r\   r   r   r   visit_desc_type   s    z$ManualPageTranslator.visit_desc_typec                 C  s   d S r   r   r\   r   r   r   depart_desc_type   s    z%ManualPageTranslator.depart_desc_typec                 C  s   | j d d S )Nz -> rf   r\   r   r   r   visit_desc_returns   s    z'ManualPageTranslator.visit_desc_returnsc                 C  s   d S r   r   r\   r   r   r   depart_desc_returns   s    z(ManualPageTranslator.depart_desc_returnsc                 C  s   | j d d| _d S )N(r2   rg   rh   first_paramr\   r   r   r   visit_desc_parameterlist   s    z-ManualPageTranslator.visit_desc_parameterlistc                 C  s   | j d d S )N)rf   r\   r   r   r   depart_desc_parameterlist   s    z.ManualPageTranslator.depart_desc_parameterlistc                 C  s   | j d d| _d S )N[r2   rw   r\   r   r   r   visit_desc_type_parameter_list   s    z3ManualPageTranslator.visit_desc_type_parameter_listc                 C  s   | j d d S N]rf   r\   r   r   r   depart_desc_type_parameter_list   s    z4ManualPageTranslator.depart_desc_type_parameter_listc                 C  s   | j s| jd nd| _ d S )N, r   )rx   rg   rh   r\   r   r   r   visit_desc_parameter   s    z)ManualPageTranslator.visit_desc_parameterc                 C  s   d S r   r   r\   r   r   r   depart_desc_parameter   s    z*ManualPageTranslator.depart_desc_parameterc                 C  s   |  | d S r   )r   r\   r   r   r   visit_desc_type_parameter   s    z.ManualPageTranslator.visit_desc_type_parameterc                 C  s   |  | d S r   )r   r\   r   r   r   depart_desc_type_parameter   s    z/ManualPageTranslator.depart_desc_type_parameterc                 C  s   | j d d S )Nr|   rf   r\   r   r   r   visit_desc_optional   s    z(ManualPageTranslator.visit_desc_optionalc                 C  s   | j d d S r~   rf   r\   r   r   r   depart_desc_optional   s    z)ManualPageTranslator.depart_desc_optionalc                 C  s   d S r   r   r\   r   r   r   visit_desc_annotation   s    z*ManualPageTranslator.visit_desc_annotationc                 C  s   d S r   r   r\   r   r   r   depart_desc_annotation   s    z+ManualPageTranslator.depart_desc_annotationc                 C  s   |  | d S r   )Zvisit_paragraphr\   r   r   r   visit_versionmodified   s    z*ManualPageTranslator.visit_versionmodifiedc                 C  s   |  | d S r   )Zdepart_paragraphr\   r   r   r   depart_versionmodified   s    z+ManualPageTranslator.depart_versionmodifiedc                   s.   t |tjr| jd nt | d S N
)r8   r7   r   r5   rg   rh   r   ra   r\   r   r   r   ra      s    zManualPageTranslator.visit_termc                 C  s
   t jd S r   r   SkipNoder\   r   r   r   visit_comment   s    z"ManualPageTranslator.visit_commentc                   s   |    t | d S r   )
ensure_eolr   visit_footnoter\   r   r   r   r      s    z#ManualPageTranslator.visit_footnotec                 C  s`   |    t|dkrP| dtdfkrP| jd| |   d  tj	| jd d S )Nr2   Z	Footnotesz.SH r   .sp
)
r   r?   r%   r   rg   rh   rU   rP   r   r   r\   r   r   r   visit_rubric   s
     "z!ManualPageTranslator.visit_rubricc                 C  s   | j d d S r   rf   r\   r   r   r   depart_rubric  s    z"ManualPageTranslator.depart_rubricc                 C  s   |  |d d S )Nseealso)Zvisit_admonitionr\   r   r   r   visit_seealso  s    z"ManualPageTranslator.visit_seealsoc                 C  s   |  | d S r   )Zdepart_admonitionr\   r   r   r   depart_seealso	  s    z#ManualPageTranslator.depart_seealsoc                 C  s*  |    g }|  jd7  _| jd tttj |}|D ]}||d  q:tdd |D }d }|D ]}|d r|d 	|}| j| j
d d  | j| | | j| j
d d  | jd n |d k	r| jd	d
t|   ||  | jd qh| jd |  jd8  _tjd S )Nr2   z.sp
.nf
Z	tokennamec                 s  s   | ]}t |V  qd S r   )r?   )r.   namer   r   r   r1     s     z<ManualPageTranslator.visit_productionlist.<locals>.<genexpr>r5   r   z ::= z%s     re   r   z
.fi
)r   rL   rg   rh   r   r   r
   
productionmaxljustdefsrU   r?   r$   r   r   )r   r@   namesZproductionlistr   maxlenlastnamer   r   r   visit_productionlist  s.    
z)ManualPageTranslator.visit_productionlistc                 C  s   d S r   r   r\   r   r   r   visit_production%  s    z%ManualPageTranslator.visit_productionc                 C  s   d S r   r   r\   r   r   r   depart_production(  s    z&ManualPageTranslator.depart_productionc                 C  sD   d|j kr&| jtd|d  d  | jtdd  tjd S )NZaltz[image: %s]r   z[image])r>   rg   rh   r   r   r   r\   r   r   r   visit_image,  s    
z ManualPageTranslator.visit_imagec                 C  s   | j | jd d  | | | j | jd d  |dd}|dr| jjr| |kr|drv|dd  }| j 	d	| jd
 d || jd
 d dg t
jd S )N	referencer   r2   Zrefurir3   )mailto:zhttp:zhttps:zftp:r      z <r5   >)rg   rh   r   
visit_Textget
startswithrQ   Zman_show_urlsr%   extendr   r   )r   r@   urir   r   r   visit_reference3  s     


  z$ManualPageTranslator.visit_referencec                 C  s&   t |dd}| | t jd S )NrE   #)r   Textr   r   r   )r   r@   textr   r   r   visit_number_referenceF  s    
z+ManualPageTranslator.visit_number_referencec                 C  s   |    | jd d S )Nz.sp
.ce
)r   rg   rh   r\   r   r   r   visit_centeredK  s    z#ManualPageTranslator.visit_centeredc                 C  s   | j d d S )Nz
.ce 0
rf   r\   r   r   r   depart_centeredO  s    z$ManualPageTranslator.depart_centeredc                 C  s   d S r   r   r\   r   r   r   visit_compact_paragraphR  s    z,ManualPageTranslator.visit_compact_paragraphc                 C  s   d S r   r   r\   r   r   r   depart_compact_paragraphU  s    z-ManualPageTranslator.depart_compact_paragraphc                 C  s   d S r   r   r\   r   r   r   visit_download_referenceX  s    z-ManualPageTranslator.visit_download_referencec                 C  s   d S r   r   r\   r   r   r   depart_download_reference[  s    z.ManualPageTranslator.depart_download_referencec                 C  s
   t jd S r   r   r\   r   r   r   visit_toctree^  s    z"ManualPageTranslator.visit_toctreec                 C  s
   t jd S r   r   r\   r   r   r   visit_indexa  s    z ManualPageTranslator.visit_indexc                 C  s
   t jd S r   r   r\   r   r   r   visit_tabular_col_specd  s    z+ManualPageTranslator.visit_tabular_col_specc                 C  s   d S r   r   r\   r   r   r   visit_glossaryg  s    z#ManualPageTranslator.visit_glossaryc                 C  s   d S r   r   r\   r   r   r   depart_glossaryj  s    z$ManualPageTranslator.depart_glossaryc                 C  s~   t tj|d }t ttj |}|   t tj|d }t ttj |}| jddd |D d  | jd tj	d S )Nr   r   c                 s  s   | ]}|  V  qd S r   )r%   )r.   nr   r   r   r1   s  s     z2ManualPageTranslator.visit_acks.<locals>.<genexpr>.r   )
r   r   bullet_listr   Z	list_itemr   rg   rh   joinr   )r   r@   r   Z
list_itemsr   r   r   
visit_acksm  s     zManualPageTranslator.visit_acksc                 C  s   |  | d S r   )Zvisit_bullet_listr\   r   r   r   visit_hlistw  s    z ManualPageTranslator.visit_hlistc                 C  s   |  | d S r   )Zdepart_bullet_listr\   r   r   r   depart_hlistz  s    z!ManualPageTranslator.depart_hlistc                 C  s   d S r   r   r\   r   r   r   visit_hlistcol}  s    z#ManualPageTranslator.visit_hlistcolc                 C  s   d S r   r   r\   r   r   r   depart_hlistcol  s    z$ManualPageTranslator.depart_hlistcolc                 C  s
   |  |S r   )Zvisit_emphasisr\   r   r   r   visit_literal_emphasis  s    z+ManualPageTranslator.visit_literal_emphasisc                 C  s
   |  |S r   )Zdepart_emphasisr\   r   r   r   depart_literal_emphasis  s    z,ManualPageTranslator.depart_literal_emphasisc                 C  s
   |  |S r   Zvisit_strongr\   r   r   r   visit_literal_strong  s    z)ManualPageTranslator.visit_literal_strongc                 C  s
   |  |S r   Zdepart_strongr\   r   r   r   depart_literal_strong  s    z*ManualPageTranslator.depart_literal_strongc                 C  s   d S r   r   r\   r   r   r   visit_abbreviation  s    z'ManualPageTranslator.visit_abbreviationc                 C  s   d S r   r   r\   r   r   r   depart_abbreviation  s    z(ManualPageTranslator.depart_abbreviationc                 C  s
   |  |S r   r   r\   r   r   r   visit_manpage  s    z"ManualPageTranslator.visit_manpagec                 C  s
   |  |S r   r   r\   r   r   r   depart_manpage  s    z#ManualPageTranslator.depart_manpagec                   s8   t |jtjr(|jdr(| jd nt | d S )Nliteral_blockr   )	
isinstancer9   r   	containerr   rg   rh   r   visit_captionr\   r   r   r   r     s    z"ManualPageTranslator.visit_captionc                   s8   t |jtjr(|jdr(| jd nt | d S )Nr   r   )	r   r9   r   r   r   rg   rh   r   depart_captionr\   r   r   r   r     s    z#ManualPageTranslator.depart_captionc                   sx   t |jtjr| jd d S t |jtjrl| jdkr>tj	n.| jdkrl| jd| 
|    tj	t |S )Nz.IP "r   r2   z.SH %s
)r   r9   r
   r   rg   rh   r   rO   rM   r   rU   r%   rP   r   visit_titler\   r   r   r   r     s    

z ManualPageTranslator.visit_titlec                   s*   t |jtjr| jd d S t |S )Nz"
)r   r9   r
   r   rg   rh   r   depart_titler\   r   r   r   r     s    z!ManualPageTranslator.depart_titlec                 C  s.   d| dd kr$| j|  tjd S )NZmanpageformatr3   )r   splitrg   rh   r%   r   r   r\   r   r   r   	visit_raw  s    zManualPageTranslator.visit_rawc                 C  s
   t jd S r   r   r\   r   r   r   
visit_meta  s    zManualPageTranslator.visit_metac                 C  s   d S r   r   r\   r   r   r   visit_inline  s    z!ManualPageTranslator.visit_inlinec                 C  s   d S r   r   r\   r   r   r   depart_inline  s    z"ManualPageTranslator.depart_inlinec                 C  s   d S r   r   r\   r   r   r   
visit_math  s    zManualPageTranslator.visit_mathc                 C  s   d S r   r   r\   r   r   r   depart_math  s    z ManualPageTranslator.depart_mathc                 C  s   |  | d S r   )r   r\   r   r   r   visit_math_block  s    z%ManualPageTranslator.visit_math_blockc                 C  s   |  | d S r   )r   r\   r   r   r   depart_math_block  s    z&ManualPageTranslator.depart_math_block)\r(   r)   r*   rB   rC   __annotations__r   r[   r]   r^   r_   r`   rb   rc   rd   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r   r   r   r   r"   D   s   
 

r"   N)$rB   
__future__r   typingr   r   r   Zdocutilsr   Zdocutils.nodesr   Zdocutils.writers.manpager   ZBaseTranslatorr	   Zsphinxr
   Zsphinx.buildersr   Zsphinx.localer   r   Zsphinx.utilr   Zsphinx.util.docutilsr   Zsphinx.util.i18nr   Zsphinx.util.nodesr   	getLoggerr(   loggerr   r   r"   r   r   r   r   <module>   s"   
