B
    öÀ„\žA  ã               @   sž   d Z ddlmZ ddlmZmZmZ ddlZ	ddl	m
Z
 ddlmZ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eƒZG dd„ deƒZdS )zä
    sphinx.writers.manpage
    ~~~~~~~~~~~~~~~~~~~~~~

    Manual page writer, extended for Sphinx custom nodes.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    )Únodes)Ú	MACRO_DEFÚWriterÚ
TranslatorN)Úaddnodes)ÚadmonitionlabelsÚ_)Úlogging)Úformat_datec               @   s   e Zd Zdd„ Zdd„ ZdS )ÚManualPageWriterc             C   s   t  | ¡ || _d S )N)r   Ú__init__Úbuilder)Úselfr   © r   ú5lib/python3.7/site-packages/sphinx/writers/manpage.pyr   "   s    
zManualPageWriter.__init__c             C   sD   t | jƒ}| ¡  | j | j| j¡}|| _| j |¡ | ¡ | _d S )N)	ÚNestedInlineTransformÚdocumentÚapplyr   Zcreate_translatorÚvisitorÚ	walkaboutÚastextÚoutput)r   Z	transformr   r   r   r   Ú	translate'   s    
zManualPageWriter.translateN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   !   s   r   c               @   s    e Zd ZdZdd„ Z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>
    c             C   s
   || _ d S )N)r   )r   r   r   r   r   r   <   s    zNestedInlineTransform.__init__c                s¨   dd„ ‰ xš| j  ˆ ¡D ]Š}t‡ fdd„|D ƒƒr|j |¡}xbt|dd … ƒD ]N}| |¡ ˆ |ƒrx|j |d |¡ qN|jd|f|j	Ž}|j |d |¡ qNW qW d S )Nc             S   s   t | tjtjtjfƒS )N)Ú
isinstancer   ÚliteralZemphasisÚstrong)Únoder   r   r   Ú	is_inlineB   s    z.NestedInlineTransform.apply.<locals>.is_inlinec             3   s   | ]}ˆ |ƒV  qd S )Nr   )Ú.0Úsubnode)r    r   r   ú	<genexpr>G   s    z.NestedInlineTransform.apply.<locals>.<genexpr>é   Ú )
r   ÚtraverseÚanyÚparentÚindexÚreversedÚremoveÚinsertÚ	__class__Ú
attributes)r   r   Úposr"   Znewnoder   )r    r   r   @   s    
zNestedInlineTransform.applyN)r   r   r   Ú__doc__r   r   r   r   r   r   r   1   s   
r   c               @   s  e Zd Z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d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d$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\d]„ Z1d^d_„ Z2d`da„ Z3dbdc„ Z4ddde„ Z5dfdg„ Z6dhdi„ Z7djdk„ Z8dldm„ Z9dndo„ Z:dpdq„ Z;drds„ Z<dtdu„ Z=dvdw„ Z>dxdy„ Z?dzd{„ Z@d|d}„ ZAd~d„ ZBd€d„ ZCd‚dƒ„ ZDd„d…„ ZEd†d‡„ ZFdˆd‰„ ZGdŠd‹„ ZHdŒd„ ZIdŽd„ ZJdd‘„ ZKd’d“„ ZLd”d•„ ZMd–d—„ ZNd˜d™„ ZOdšd›„ ZPdœd„ ZQdždŸ„ ZRd d¡„ ZSd¢S )£ÚManualPageTranslatorz
    Custom translator.
    c             O   s0  t j| f|ž|Ž || _d| _d| _| jjj| jd< | jjj	| jd< | jjj
r^| jjj
| jd< | jjj| jd< | jd  ¡ | jd< |jjrš|jj| jd< n"t|jjpªtd	ƒ|jjd
| jd< |jj| jd< |jj| jd< |jj| jd< tjjjdk r| j t¡ x(t ¡ D ]\}}|  |¡| jj |< qW d S )Nr   éÿÿÿÿÚtitleÚsubtitleZauthorZmanual_sectionZtitle_upperZdatez	%b %d, %Y)ÚlanguageÚ	copyrightÚversionZmanual_group)r   é   )!ÚBaseTranslatorr   r   Úin_productionlistÚsection_levelr   Zsettingsr3   Ú_docinfor4   ZauthorsÚsectionÚupperÚconfigZtodayr
   Z	today_fmtr   r5   r6   r7   ZprojectÚsphinxÚutilÚdocutilsZ__version_info__ÚbodyÚappendr   r   ÚitemsÚ	deunicodeÚlabels)r   r   ÚargsÚkwdsZlabelZtranslationr   r   r   r   W   s*    
zManualPageTranslator.__init__c             C   s   d}|| j  S )Nzz.TH "%(title_upper)s" "%(manual_section)s" "%(date)s" "%(version)s" "%(manual_group)s"
.SH NAME
%(title)s \- %(subtitle)s
)r<   )r   Ztmplr   r   r   Úheader}   s    zManualPageTranslator.headerc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_start_of_file…   s    z(ManualPageTranslator.visit_start_of_filec             C   s   d S )Nr   )r   r   r   r   r   Údepart_start_of_file‰   s    z)ManualPageTranslator.depart_start_of_filec             C   s   |   |¡ d S )N)Zvisit_definition_list)r   r   r   r   r   Ú
visit_desc   s    zManualPageTranslator.visit_descc             C   s   |   |¡ d S )N)Zdepart_definition_list)r   r   r   r   r   Údepart_desc‘   s    z ManualPageTranslator.depart_descc             C   s   |   |¡ |  |¡ d S )N)Zvisit_definition_list_itemÚ
visit_term)r   r   r   r   r   Úvisit_desc_signature•   s    
z)ManualPageTranslator.visit_desc_signaturec             C   s   |   |¡ d S )N)Zdepart_term)r   r   r   r   r   Údepart_desc_signatureš   s    z*ManualPageTranslator.depart_desc_signaturec             C   s   d S )Nr   )r   r   r   r   r   Úvisit_desc_signature_linež   s    z.ManualPageTranslator.visit_desc_signature_linec             C   s   | j  d¡ d S )Nú )rC   rD   )r   r   r   r   r   Údepart_desc_signature_line¢   s    z/ManualPageTranslator.depart_desc_signature_linec             C   s   d S )Nr   )r   r   r   r   r   Úvisit_desc_addname¦   s    z'ManualPageTranslator.visit_desc_addnamec             C   s   d S )Nr   )r   r   r   r   r   Údepart_desc_addnameª   s    z(ManualPageTranslator.depart_desc_addnamec             C   s   d S )Nr   )r   r   r   r   r   Úvisit_desc_type®   s    z$ManualPageTranslator.visit_desc_typec             C   s   d S )Nr   )r   r   r   r   r   Údepart_desc_type²   s    z%ManualPageTranslator.depart_desc_typec             C   s   | j  d¡ d S )Nz -> )rC   rD   )r   r   r   r   r   Úvisit_desc_returns¶   s    z'ManualPageTranslator.visit_desc_returnsc             C   s   d S )Nr   )r   r   r   r   r   Údepart_desc_returnsº   s    z(ManualPageTranslator.depart_desc_returnsc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_desc_name¾   s    z$ManualPageTranslator.visit_desc_namec             C   s   d S )Nr   )r   r   r   r   r   Údepart_desc_nameÂ   s    z%ManualPageTranslator.depart_desc_namec             C   s   | j  d¡ d| _d S )Nú(r$   )rC   rD   Úfirst_param)r   r   r   r   r   Úvisit_desc_parameterlistÆ   s    z-ManualPageTranslator.visit_desc_parameterlistc             C   s   | j  d¡ d S )Nú))rC   rD   )r   r   r   r   r   Údepart_desc_parameterlistË   s    z.ManualPageTranslator.depart_desc_parameterlistc             C   s   | j s| j d¡ nd| _ d S )Nz, r   )r^   rC   rD   )r   r   r   r   r   Úvisit_desc_parameterÏ   s    z)ManualPageTranslator.visit_desc_parameterc             C   s   d S )Nr   )r   r   r   r   r   Údepart_desc_parameterÖ   s    z*ManualPageTranslator.depart_desc_parameterc             C   s   | j  d¡ d S )Nú[)rC   rD   )r   r   r   r   r   Úvisit_desc_optionalÚ   s    z(ManualPageTranslator.visit_desc_optionalc             C   s   | j  d¡ d S )Nú])rC   rD   )r   r   r   r   r   Údepart_desc_optionalÞ   s    z)ManualPageTranslator.depart_desc_optionalc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_desc_annotationâ   s    z*ManualPageTranslator.visit_desc_annotationc             C   s   d S )Nr   )r   r   r   r   r   Údepart_desc_annotationæ   s    z+ManualPageTranslator.depart_desc_annotationc             C   s   |   |¡ d S )N)Zvisit_definition)r   r   r   r   r   Úvisit_desc_contentê   s    z'ManualPageTranslator.visit_desc_contentc             C   s   |   |¡ d S )N)Zdepart_definition)r   r   r   r   r   Údepart_desc_contentî   s    z(ManualPageTranslator.depart_desc_contentc             C   s   |   |¡ d S )N)Zvisit_paragraph)r   r   r   r   r   Úvisit_versionmodifiedò   s    z*ManualPageTranslator.visit_versionmodifiedc             C   s   |   |¡ d S )N)Zdepart_paragraph)r   r   r   r   r   Údepart_versionmodifiedö   s    z+ManualPageTranslator.depart_versionmodifiedc             C   s*   |  tj¡r| j d¡ nt | |¡ d S )NÚ
)r&   r   r   rC   rD   r9   rO   )r   r   r   r   r   rO   û   s    zManualPageTranslator.visit_termc             C   s
   t j‚d S )N)r   ÚSkipNode)r   r   r   r   r   Úvisit_comment  s    z"ManualPageTranslator.visit_commentc             C   s   |   ¡  t | |¡ d S )N)Ú
ensure_eolr9   Úvisit_footnote)r   r   r   r   r   rr     s    z#ManualPageTranslator.visit_footnotec             C   sj   |   ¡  t|jƒdkrZ|jd  ¡ }|dtdƒfkrf| j d|  |¡ ¡  d ¡ t	j
‚n| j d¡ d S )Nr$   r   Z	Footnotesz.SH rn   z.sp
)rq   ÚlenÚchildrenr   r   rC   rD   rF   r>   r   ro   )r   r   Zrubtitler   r   r   Úvisit_rubric  s    z!ManualPageTranslator.visit_rubricc             C   s   d S )Nr   )r   r   r   r   r   Údepart_rubric  s    z"ManualPageTranslator.depart_rubricc             C   s   |   |d¡ d S )NÚseealso)Zvisit_admonition)r   r   r   r   r   Úvisit_seealso  s    z"ManualPageTranslator.visit_seealsoc             C   s   |   |¡ d S )N)Zdepart_admonition)r   r   r   r   r   Údepart_seealso"  s    z#ManualPageTranslator.depart_seealsoc             C   s"  |   ¡  g }|  jd7  _| j d¡ x|D ]}| |d ¡ q,W tdd„ |D ƒƒ}d }x¤|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¡ q^W | j d¡ |  jd8  _t
j‚d S )Nr$   z.sp
.nf
Z	tokennamec             s   s   | ]}t |ƒV  qd S )N)rs   )r!   Únamer   r   r   r#   .  s    z<ManualPageTranslator.visit_productionlist.<locals>.<genexpr>r   r   z ::= z%s     rS   rn   z
.fi
)rq   r:   rC   rD   ÚmaxÚljustÚdefsrF   rs   r   r   ro   )r   r   ÚnamesZ
productionÚmaxlenZlastnamer   r   r   Úvisit_productionlist&  s,    


z)ManualPageTranslator.visit_productionlistc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_production?  s    z%ManualPageTranslator.visit_productionc             C   s   d S )Nr   )r   r   r   r   r   Údepart_productionC  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]rn   z[image])r.   rC   rD   r   r   ro   )r   r   r   r   r   Úvisit_imageH  s    
z ManualPageTranslator.visit_imagec             C   sÊ   | j  | jd d ¡ |  |¡ | j  | jd d ¡ | dd¡}| d¡sj| d¡sj| d¡sj| d	¡rÀ| jjjrÀ| 	¡ |krÀ| d¡r–|d
d … }| j  
d| jd d || jd d dg¡ tj‚d S )NZ	referencer   r$   Zrefurir%   zmailto:zhttp:zhttps:zftp:é   z <r   ú>)rC   rD   r}   Ú
visit_TextÚgetÚ
startswithr   r?   Zman_show_urlsr   Úextendr   ro   )r   r   Zurir   r   r   Úvisit_referenceP  s    


z$ManualPageTranslator.visit_referencec             C   s&   t  | dd¡¡}|  |¡ t j‚d S )Nr3   ú#)r   ZTextr‡   r†   ro   )r   r   Útextr   r   r   Úvisit_number_referencef  s    
z+ManualPageTranslator.visit_number_referencec             C   s   |   ¡  | j d¡ d S )Nz.sp
.ce
)rq   rC   rD   )r   r   r   r   r   Úvisit_centeredl  s    z#ManualPageTranslator.visit_centeredc             C   s   | j  d¡ d S )Nz
.ce 0
)rC   rD   )r   r   r   r   r   Údepart_centeredq  s    z$ManualPageTranslator.depart_centeredc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_compact_paragraphu  s    z,ManualPageTranslator.visit_compact_paragraphc             C   s   d S )Nr   )r   r   r   r   r   Údepart_compact_paragraphy  s    z-ManualPageTranslator.depart_compact_paragraphc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_download_reference}  s    z-ManualPageTranslator.visit_download_referencec             C   s   d S )Nr   )r   r   r   r   r   Údepart_download_reference  s    z.ManualPageTranslator.depart_download_referencec             C   s
   t j‚d S )N)r   ro   )r   r   r   r   r   Úvisit_toctree…  s    z"ManualPageTranslator.visit_toctreec             C   s
   t j‚d S )N)r   ro   )r   r   r   r   r   Úvisit_index‰  s    z ManualPageTranslator.visit_indexc             C   s
   t j‚d S )N)r   ro   )r   r   r   r   r   Úvisit_tabular_col_spec  s    z+ManualPageTranslator.visit_tabular_col_specc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_glossary‘  s    z#ManualPageTranslator.visit_glossaryc             C   s   d S )Nr   )r   r   r   r   r   Údepart_glossary•  s    z$ManualPageTranslator.depart_glossaryc             C   sF   |   ¡  | j d dd„ |jd jD ƒ¡d ¡ | j d¡ tj‚d S )Nz, c             s   s   | ]}|  ¡ V  qd S )N)r   )r!   Únr   r   r   r#   œ  s   z2ManualPageTranslator.visit_acks.<locals>.<genexpr>r   Ú.rn   )rq   rC   rD   Újoinrt   r   ro   )r   r   r   r   r   Ú
visit_acks™  s
    zManualPageTranslator.visit_acksc             C   s   |   |¡ d S )N)Zvisit_bullet_list)r   r   r   r   r   Úvisit_hlist¡  s    z ManualPageTranslator.visit_hlistc             C   s   |   |¡ d S )N)Zdepart_bullet_list)r   r   r   r   r   Údepart_hlist¥  s    z!ManualPageTranslator.depart_hlistc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_hlistcol©  s    z#ManualPageTranslator.visit_hlistcolc             C   s   d S )Nr   )r   r   r   r   r   Údepart_hlistcol­  s    z$ManualPageTranslator.depart_hlistcolc             C   s
   |   |¡S )N)Zvisit_emphasis)r   r   r   r   r   Úvisit_literal_emphasis±  s    z+ManualPageTranslator.visit_literal_emphasisc             C   s
   |   |¡S )N)Zdepart_emphasis)r   r   r   r   r   Údepart_literal_emphasisµ  s    z,ManualPageTranslator.depart_literal_emphasisc             C   s
   |   |¡S )N)Úvisit_strong)r   r   r   r   r   Úvisit_literal_strong¹  s    z)ManualPageTranslator.visit_literal_strongc             C   s
   |   |¡S )N)Údepart_strong)r   r   r   r   r   Údepart_literal_strong½  s    z*ManualPageTranslator.depart_literal_strongc             C   s   d S )Nr   )r   r   r   r   r   Úvisit_abbreviationÁ  s    z'ManualPageTranslator.visit_abbreviationc             C   s   d S )Nr   )r   r   r   r   r   Údepart_abbreviationÅ  s    z(ManualPageTranslator.depart_abbreviationc             C   s
   |   |¡S )N)r£   )r   r   r   r   r   Úvisit_manpageÉ  s    z"ManualPageTranslator.visit_manpagec             C   s
   |   |¡S )N)r¥   )r   r   r   r   r   Údepart_manpageÍ  s    z#ManualPageTranslator.depart_manpagec             C   s8   t |jtjƒr(|j d¡r(| j d¡ nt | |¡ d S )NÚliteral_blockz.sp
)	r   r(   r   Ú	containerr‡   rC   rD   r9   Úvisit_caption)r   r   r   r   r   r­   Ò  s    z"ManualPageTranslator.visit_captionc             C   s8   t |jtjƒr(|j d¡r(| j d¡ nt | |¡ d S )Nr«   rn   )	r   r(   r   r¬   r‡   rC   rD   r9   Údepart_caption)r   r   r   r   r   r®   Ù  s    z#ManualPageTranslator.depart_captionc             C   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   r$   z.SH %s
)r   r(   r   rw   rC   rD   r   r=   r;   ro   rF   r   r>   r9   Úvisit_title)r   r   r   r   r   r¯   á  s    

z ManualPageTranslator.visit_titlec             C   s*   t |jtjƒr| j d¡ d S t | |¡S )Nz"
)r   r(   r   rw   rC   rD   r9   Údepart_title)r   r   r   r   r   r°   ð  s    z!ManualPageTranslator.depart_titlec             C   s.   d|  dd¡ ¡ kr$| j | ¡ ¡ tj‚d S )NZmanpageÚformatr%   )r‡   ÚsplitrC   rD   r   r   ro   )r   r   r   r   r   Ú	visit_raw÷  s    zManualPageTranslator.visit_rawc             C   s
   t j‚d S )N)r   ro   )r   r   r   r   r   Ú
visit_metaý  s    zManualPageTranslator.visit_metac             C   s   d S )Nr   )r   r   r   r   r   Úvisit_inline  s    z!ManualPageTranslator.visit_inlinec             C   s   d S )Nr   )r   r   r   r   r   Údepart_inline  s    z"ManualPageTranslator.depart_inlinec             C   s   d S )Nr   )r   r   r   r   r   Ú
visit_math	  s    zManualPageTranslator.visit_mathc             C   s   d S )Nr   )r   r   r   r   r   Údepart_math  s    z ManualPageTranslator.depart_mathc             C   s   |   |¡ d S )N)rŽ   )r   r   r   r   r   Úvisit_math_block  s    z%ManualPageTranslator.visit_math_blockc             C   s   |   |¡ d S )N)r   )r   r   r   r   r   Údepart_math_block  s    z&ManualPageTranslator.depart_math_blockc             C   s   t d|jj ƒ‚d S )NzUnknown node: )ÚNotImplementedErrorr-   r   )r   r   r   r   r   Úunknown_visit  s    z"ManualPageTranslator.unknown_visitN)Tr   r   r   r0   r   rJ   rK   rL   rM   rN   rP   rQ   rR   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r_   ra   rb   rc   re   rg   rh   ri   rj   rk   rl   rm   rO   rp   rr   ru   rv   rx   ry   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   r1   R   s¢   &r1   )r0   rB   r   Zdocutils.writers.manpager   r   r   r9   Zsphinx.util.docutilsr@   r   Zsphinx.localer   r   Zsphinx.utilr	   Zsphinx.util.i18nr
   Z	getLoggerr   Zloggerr   Úobjectr   r1   r   r   r   r   Ú<module>
   s   
!