B
    d<                 @   s   d Z ddlmZ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 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.    )AnyDictIterablecast)nodes)ElementTextElement)
Translator)Writer)addnodes)Builder)_admonitionlabels)logging)SphinxTranslator)format_date)NodeMatcherc                   s2   e Zd Zedd fddZddddZ  ZS )ManualPageWriterN)builderreturnc                s   t    || _d S )N)super__init__r   )selfr   )	__class__ c/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/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 )N)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   r$   __classcell__r   r   )r   r   r      s   r   c               @   s2   e Zd ZdZejddddZe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>
    N)r   r   c             C   s
   || _ d S )N)r   )r   r   r   r   r   r   .   s    zNestedInlineTransform.__init__)kwargsr   c                s   t tjtjtj xt| j D ]}t fdd|D r$|j	
|}x`tt|D ]P}||  |r|j	|d | qX|jdd|f|j}|j	|d | qXW t|s$|j	| q$W d S )Nc             3   s   | ]} |V  qd S )Nr   ).0subnode)matcherr   r   	<genexpr>4   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   )r,   r   r   1   s    
zNestedInlineTransform.apply)	r%   r&   r'   __doc__r   r   r   r   r   r   r   r   r   r   #   s   
r   c                   sX  e Zd ZU dZi Zeeef ed< e	j
edd fddZeddd	Zedd
ddZedd
ddZedd
ddZedd
ddZedd
ddZedd
ddZedd
ddZedd
ddZedd
ddZedd
ddZedd
dd Zedd
d!d"Zedd
d#d$Zedd
d%d&Zedd
d'd(Zedd
d)d*Zedd
d+d,Zedd
d-d.Z edd
d/d0Z!edd
d1d2Z"edd
d3d4Z#edd
d5d6Z$edd
d7d8Z%edd
d9d:Z&edd
d;d<Z'edd
d=d>Z(edd
d?d@Z)edd
dAdBZ*edd
dCdDZ+edd
dEdFZ,edd
 fdGdHZ-edd
dIdJZ.edd
 fdKdLZ/edd
dMdNZ0edd
dOdPZ1edd
dQdRZ2edd
dSdTZ3edd
dUdVZ4edd
dWdXZ5edd
dYdZZ6edd
d[d\Z7edd
d]d^Z8edd
d_d`Z9edd
dadbZ:edd
dcddZ;edd
dedfZ<edd
dgdhZ=edd
didjZ>edd
dkdlZ?edd
dmdnZ@edd
dodpZAedd
dqdrZBedd
dsdtZCedd
dudvZDedd
dwdxZEedd
dydzZFedd
d{d|ZGedd
d}d~ZHedd
ddZIedd
ddZJedd
ddZKedd
ddZLedd
ddZMedd
ddZNedd
ddZOedd
ddZPedd
ddZQedd
 fddZRedd
 fddZSedd
 fddZTedd
 fddZUedd
ddZVedd
ddZWedd
ddZXedd
ddZYedd
ddZZedd
ddZ[edd
ddZ\edd
ddZ]  Z^S )r   z%
    Custom man page translator.
    _docinfoN)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< x&t D ]\}}| || jj|< qW d S )Nr   titlesubtitleauthorZmanual_sectionZtitle_upperdatez	%b %d, %Y)language	copyrightversionZmanual_group)r   r   in_productionlistsection_levelsettingsrA   r?   rB   Zauthorssectionupperconfigtodayr   Z	today_fmtr   rE   rF   rG   projectr   items	deunicodelabels)r   r   r   labeltranslation)r   r   r   r   I   s$    zManualPageTranslator.__init__)r   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"
rB   z#.SH NAME
%(title)s \- %(subtitle)s
)r?   )r   tmplr   r   r   headeri   s    
zManualPageTranslator.header)r<   r   c             C   s   d S )Nr   )r   r<   r   r   r   visit_start_of_fileq   s    z(ManualPageTranslator.visit_start_of_filec             C   s   d S )Nr   )r   r<   r   r   r   depart_start_of_filet   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 )bodyappend)r   r<   r   r   r   depart_desc_signature_line   s    z/ManualPageTranslator.depart_desc_signature_linec             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 )Nr   )r   r<   r   r   r   visit_desc_inline   s    z&ManualPageTranslator.visit_desc_inlinec             C   s   d S )Nr   )r   r<   r   r   r   depart_desc_inline   s    z'ManualPageTranslator.depart_desc_inlinec             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   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 -> )r`   ra   )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   | j d d| _d S )N(r.   )r`   ra   first_param)r   r<   r   r   r   visit_desc_parameterlist   s    z-ManualPageTranslator.visit_desc_parameterlistc             C   s   | j d d S )N))r`   ra   )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   )rp   r`   ra   )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[)r`   ra   )r   r<   r   r   r   visit_desc_optional   s    z(ManualPageTranslator.visit_desc_optionalc             C   s   | j d d S )N])r`   ra   )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_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                s.   t |tjr| jd nt | d S )N
)r4   r3   r   r1   r`   ra   r   r[   )r   r<   )r   r   r   r[      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                s   |    t | d S )N)
ensure_eolr   visit_footnote)r   r<   )r   r   r   r      s    z#ManualPageTranslator.visit_footnotec             C   sb   |    t|dkrR| dtdfkrR| jd| |   d  tj	n| jd d S )Nr.   Z	Footnotesz.SH r~   z.sp
)
r   r;   r"   r   r`   ra   rQ   rL   r   r   )r   r<   r   r   r   visit_rubric   s
     "z!ManualPageTranslator.visit_rubricc             C   s   | j d d S )Nr~   )r`   ra   )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   s2  |    g }|  jd7  _| jd tttj |}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 qnW | jd |  jd8  _tjd S )Nr.   z.sp
.nf
Z	tokennamec             s   s   | ]}t |V  qd S )N)r;   )r*   namer   r   r   r-     s    z<ManualPageTranslator.visit_productionlist.<locals>.<genexpr>r1   r   z ::= z%s     r_   r~   z
.fi
)r   rH   r`   ra   r   r   r   
productionmaxljustdefsrQ   r;   r!   r   r   )r   r<   namesZproductionlistr   maxlen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_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:   r`   ra   r   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sj|dsj|dsj|d	r| jjr| |kr|dr|d
d  }| j 	d| jd d || jd d dg t
jd S )N	referencer   r.   Zrefurir/   zmailto:zhttp:zhttps:zftp:   z <r1   >)r`   ra   r   
visit_Textget
startswithrM   Zman_show_urlsr"   extendr   r   )r   r<   urir   r   r   visit_reference%  s    

z$ManualPageTranslator.visit_referencec             C   s&   t |dd}| | t jd S )NrA   #)r   Textr   r   r   )r   r<   textr   r   r   visit_number_reference9  s    
z+ManualPageTranslator.visit_number_referencec             C   s   |    | jd d S )Nz.sp
.ce
)r   r`   ra   )r   r<   r   r   r   visit_centered>  s    z#ManualPageTranslator.visit_centeredc             C   s   | j d d S )Nz
.ce 0
)r`   ra   )r   r<   r   r   r   depart_centeredB  s    z$ManualPageTranslator.depart_centeredc             C   s   d S )Nr   )r   r<   r   r   r   visit_compact_paragraphE  s    z,ManualPageTranslator.visit_compact_paragraphc             C   s   d S )Nr   )r   r<   r   r   r   depart_compact_paragraphH  s    z-ManualPageTranslator.depart_compact_paragraphc             C   s   d S )Nr   )r   r<   r   r   r   visit_download_referenceK  s    z-ManualPageTranslator.visit_download_referencec             C   s   d S )Nr   )r   r<   r   r   r   depart_download_referenceN  s    z.ManualPageTranslator.depart_download_referencec             C   s
   t jd S )N)r   r   )r   r<   r   r   r   visit_toctreeQ  s    z"ManualPageTranslator.visit_toctreec             C   s
   t jd S )N)r   r   )r   r<   r   r   r   visit_indexT  s    z ManualPageTranslator.visit_indexc             C   s
   t jd S )N)r   r   )r   r<   r   r   r   visit_tabular_col_specW  s    z+ManualPageTranslator.visit_tabular_col_specc             C   s   d S )Nr   )r   r<   r   r   r   visit_glossaryZ  s    z#ManualPageTranslator.visit_glossaryc             C   s   d S )Nr   )r   r<   r   r   r   depart_glossary]  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   z, c             s   s   | ]}|  V  qd S )N)r"   )r*   nr   r   r   r-   f  s    z2ManualPageTranslator.visit_acks.<locals>.<genexpr>.r~   )
r   r   bullet_listr   Z	list_itemr   r`   ra   joinr   )r   r<   r   Z
list_itemsr   r   r   
visit_acks`  s     zManualPageTranslator.visit_acksc             C   s   |  | d S )N)Zvisit_bullet_list)r   r<   r   r   r   visit_hlistj  s    z ManualPageTranslator.visit_hlistc             C   s   |  | d S )N)Zdepart_bullet_list)r   r<   r   r   r   depart_hlistm  s    z!ManualPageTranslator.depart_hlistc             C   s   d S )Nr   )r   r<   r   r   r   visit_hlistcolp  s    z#ManualPageTranslator.visit_hlistcolc             C   s   d S )Nr   )r   r<   r   r   r   depart_hlistcols  s    z$ManualPageTranslator.depart_hlistcolc             C   s
   |  |S )N)Zvisit_emphasis)r   r<   r   r   r   visit_literal_emphasisv  s    z+ManualPageTranslator.visit_literal_emphasisc             C   s
   |  |S )N)Zdepart_emphasis)r   r<   r   r   r   depart_literal_emphasisy  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                s8   t |jtjr(|jdr(| jd nt | d S )Nliteral_blockz.sp
)	
isinstancer5   r   	containerr   r`   ra   r   visit_caption)r   r<   )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   r5   r   r   r   r`   ra   r   depart_caption)r   r<   )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   r.   z.SH %s
)r   r5   r   r   r`   ra   r   rK   rI   r   rQ   r"   rL   r   visit_title)r   r<   )r   r   r   r     s    

z ManualPageTranslator.visit_titlec                s*   t |jtjr| jd d S t |S )Nz"
)r   r5   r   r   r`   ra   r   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   splitr`   ra   r"   r   r   )r   r<   r   r   r   	visit_raw  s    zManualPageTranslator.visit_rawc             C   s
   t jd S )N)r   r   )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_block)_r%   r&   r'   r>   r?   r   strr   __annotations__r   r   r   r   rV   r   rW   rX   rY   rZ   r\   r]   r^   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   rq   rs   rt   ru   rw   ry   rz   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   r   )r   r   r   B   s   
 

r   N)$r>   typingr   r   r   r   Zdocutilsr   Zdocutils.nodesr   r   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    
