U
    k&p[D  ã                   @   s$   d dl Z d dlZG dd„ deƒZdS )é    Nc                   @   sp   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S )ÚManpageGeneratorz=Fill in a manual page template from an OptionParser instance.c                 C   s   || _ || _|| _|| _d S ©N)ÚtemplateÚparserÚarg_synopsisÚcmd_synopsis)Úselfr   r   r   r   © r	   ú//usr/lib/python3/dist-packages/cliapp/genman.pyÚ__init__   s    zManpageGenerator.__init__c                    sv   dd„ ‰ dd„ }‡ fdd„|D ƒ‰‡fdd„|D ƒ}|j dd	„ d
 ˆD ](}|||jƒ\}}}|| |g | }qH|S )Nc                 S   s    t | dƒo| jo| jd  d¡S )NÚfrom_settingr   z--no-)ÚhasattrÚ
_long_optsÚ
startswith©Úor	   r	   r
   Úis_neg_option.   s
    
ÿþz4ManpageGenerator.sort_options.<locals>.is_neg_optionc                 S   sZ   g }g }g }| D ]>}t |dd ƒ}||kr4| |¡ q|rD| |¡ q| |¡ q|||fS )Nr   )ÚgetattrÚappend)ÚoptionsZsettingÚbeforeÚ	from_sameÚafterr   Úsr	   r	   r
   Úsplit3   s    z,ManpageGenerator.sort_options.<locals>.splitc                    s   g | ]}ˆ |ƒr|‘qS r	   r	   ©Ú.0r   )r   r	   r
   Ú
<listcomp>A   s      z1ManpageGenerator.sort_options.<locals>.<listcomp>c                    s   g | ]}|ˆ kr|‘qS r	   r	   r   )Úneg_optionsr	   r
   r   B   s      c                 S   s   | j | j d S )Nr   )r   Ú_short_optsr   r	   r	   r
   Ú<lambda>C   ó    z/ManpageGenerator.sort_options.<locals>.<lambda>)Úkey)Úsortr   )r   r   r   Zmain_optionsÚnegr   r   r   r	   )r   r   r
   Úsort_options    s    zManpageGenerator.sort_optionsc                 C   s   |   |j¡S r   )r%   Úoption_list)r   Z	containerr	   r	   r
   r&   K   s    zManpageGenerator.option_listc                 C   sH   d|   ¡ fd|  ¡ ff}| j}|D ] \}}d| }| ||| ¡}q"|S )NZSYNOPSISZOPTIONSz
.SH %s
)Úformat_synopsisÚformat_optionsr   Úreplace)r   ZsectionsÚtextZsectionÚcontentsÚpatternr	   r	   r
   Úformat_templateN   s    

ÿz ManpageGenerator.format_templatec                 C   s
  g }|dg7 }|d|   | jj¡ g7 }|  | j¡}| jjD ]}||  |¡7 }q:|  |¡D ]"}|  |¡D ]}|d| g7 }qfqX| jrÖ|dg7 }t| jƒD ]<}|dd|   | jj¡ d|   |¡g7 }||  	| j| ¡7 }q–n| j
rì||  	| j
¡7 }|dg7 }d d	d
„ |D ƒ¡S )Nz.nhz.B %sz
.RB [ %s ]z.PPz.brz.RI [ options ]z.hyÚ c                 s   s   | ]}d | V  qdS ©z%s
Nr	   ©r   Úliner	   r	   r
   Ú	<genexpr>o   s     z3ManpageGenerator.format_synopsis.<locals>.<genexpr>)Ú
esc_dashesr   Úprogr&   Úoption_groupsr%   Úformat_option_for_synopsisr   ÚsortedÚformat_argspecr   Újoin)r   ÚlinesZall_optionsÚgroupÚoptionÚspecÚcmdr	   r	   r
   r'   W   s,    

ý
z ManpageGenerator.format_synopsisc                 c   sn   |j r(d|  |j ¡ }d|  |j ¡ }nd}d}|j|j D ],}| d¡rP|}n|}d|  |¡|f V  q<d S )Nz\fI%sz	\fR=\fI%sr.   z--z%s%s)Úmetavarr3   r   r   r   )r   r<   Zshort_suffixZlong_suffixÚnameÚsuffixr	   r	   r
   r6   q   s    
z+ManpageGenerator.format_option_for_synopsisc                 C   sx   g }|   | jj¡D ]}||  |¡7 }q| jjD ]4}|d|j g7 }|   |j¡D ]}||  |¡7 }qNq.d dd„ |D ƒ¡S )Nz.SS "%s"r.   c                 s   s   | ]}d | V  qdS r/   r	   r0   r	   r	   r
   r2   Š   s     z2ManpageGenerator.format_options.<locals>.<genexpr>)r%   r   r&   Úformat_option_for_optionsr5   Útitler9   )r   r:   r<   r;   r	   r	   r
   r(      s    zManpageGenerator.format_optionsc                    sŠ   g }|dg7 }‡fdd„ˆ j D ƒ}ˆ jr@‡ ‡fdd„ˆ jD ƒ}n‡fdd„ˆ jD ƒ}|dd || ¡ g7 }|ˆ ˆ ˆ ¡ ¡ ¡g7 }|S )Nz.TPc                    s   g | ]}ˆ   |¡‘qS r	   ©r3   ©r   Úx©r   r	   r
   r      s     z>ManpageGenerator.format_option_for_options.<locals>.<listcomp>c                    s    g | ]}d ˆ  |¡ˆ jf ‘qS )z	%s =\fI%s)r3   r?   rE   ©r<   r   r	   r
   r   ‘   s   ÿc                    s   g | ]}d ˆ   |¡ ‘qS )z%srD   rE   rG   r	   r
   r   ”   s   ÿz.BR z ", " )r   r?   r   r9   Úesc_dotsÚexpand_defaultÚstrip)r   r<   r:   ZshortsZlongsr	   rH   r
   rB   Œ   s    
ÿ
ÿz*ManpageGenerator.format_option_for_optionsc                 C   s>   | j j |j¡}|tjks"|d kr(d}nt|ƒ}|j d|¡S )NZnonez%default)	r   ÚdefaultsÚgetÚdestÚoptparseZ
NO_DEFAULTÚstrÚhelpr)   )r   r<   Údefaultr	   r	   r
   rJ   š   s
    zManpageGenerator.expand_defaultc                 C   s   d  | d¡¡S )Nz\-ú-)r9   r   )r   Zoptnamer	   r	   r
   r3   ¢   s    zManpageGenerator.esc_dashesc                 C   s   |  d¡rd| S |S d S )NÚ.ú\)r   )r   r1   r	   r	   r
   rI   ¥   s    
zManpageGenerator.esc_dotsc                 C   s¬   t  d¡}t  d¡}dg}|r | |¡}|rT||  | d¡¡g7 }|| ¡ d … }n
|dg7 }| |¡}|r”||  | d¡¡g7 }|| ¡ d … }q|dg7 }qd |¡gS )Nz[^A-Z]+z[A-Z]+z.RIr   z""ú )ÚreÚcompileÚmatchr3   r;   Úendr9   )r   ZargspecZromanZitalicZwordsÚmr	   r	   r
   r8   «   s    




zManpageGenerator.format_argspecN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   r&   r-   r'   r6   r(   rB   rJ   r3   rI   r8   r	   r	   r	   r
   r      s   +	r   )rO   rW   Úobjectr   r	   r	   r	   r
   Ú<module>   s   