a
    4ñ»j,  ã                   @   sD   d Z ddlmZ ddlZddlmZmZ ddlZG dd„ de	ƒZ
dS )zF
Provides utility function for generating Sphinx-based documentation.
é    )Úabsolute_importN)Úcompute_words_maxsizeÚtextc                   @   sd   e Zd ZdZg d¢ZdZdZddd„Zedd	d
„ƒZ	dd„ Z
dd„ Zddd„Zddd„Zdd„ ZdS )ÚDocumentWriterzb
    Provides a simple "ReStructured Text Writer" to generate
    Sphinx-based documentation.
    )ú=r   ú-ú~zutf-8z**Contents:**NTc                 C   s   || _ || _|| _d S ©N)ÚstreamÚfilenameÚshould_close)Úselfr
   r   r   © r   úBE:\soccer\ml_env\Lib\site-packages\behave/formatter/sphinx_util.pyÚ__init__   s    zDocumentWriter.__init__c                 C   s"   |p| j }t |d|¡}| ||ƒS )NÚwb)Údefault_encodingÚcodecsÚopen)Úclsr   Úencodingr
   r   r   r   r      s    
zDocumentWriter.openc                 G   s   | j j|Ž S r	   )r
   Úwrite)r   Úargsr   r   r   r   #   s    zDocumentWriter.writec                 C   s    | j r| jr| j  ¡  d | _ d S r	   )r
   r   Úclose)r   r   r   r   r   &   s    
zDocumentWriter.closer   c                 C   s  | j s
J ‚|sJ dƒ‚d|  kr0t| jƒk s6n J ‚|t| jƒkrRt| jƒd }t|ƒ}| j| }|dkrx|dk rxd}|| }|r¬t|ttfƒrœd |¡}| j  d| ¡ |rÀ| j  d| ¡ |dkrØ| j  d| ¡ | j  d| ¡ | j  d| ¡ | j  d	¡ d S )
NzHeading should not be emptyr   é   éF   z, z.. index:: %s

z	.. _%s:

z%s
Ú
)r
   ÚlenÚheading_stylesÚ
isinstanceÚlistÚtupleÚjoinr   )r   ÚheadingÚlevelZindex_idÚlabelZheading_sizeZheading_styleÚ	separatorr   r   r   Úwrite_heading+   s*    
 

zDocumentWriter.write_headingé   c                 C   st   |d u r| j }d}|r&| j d| ¡ | j d¡ | j d||f ¡ |D ]}| j d||f ¡ qJ| j d¡ d S )Nz    z%s

z.. toctree::
z%s:maxdepth: %d

z%s%s
r   )Údefault_toctree_titler
   r   )r   ÚentriesÚtitleZmaxdepthZline_prefixÚentryr   r   r   Úwrite_toctreeB   s    zDocumentWriter.write_toctreec                    s  | j s
J ‚g }g }g }t|jƒD ]\\‰ }‡ fdd„|jD ƒ}| |¡ t|ƒ}| |¡ | d| ¡ | dt|ƒ d ¡ q d |¡d }d |¡d }	| j  d¡ | j  |¡ | j  |	t	|jƒ ¡ | j  |¡ |jD ]}
| j  |	t	|
ƒ ¡ qÚ| j  |¡ | j  d¡ dS )	a8  
        Write a ReST simple table.

        EXAMPLE:
        ========================================= ===== ===== ===== =====
        Step Definition                           Given When  Then  Step
        ========================================= ===== ===== ===== =====
        Given a file named "{filename}" contains
        Then the file "{filename}" should ...
        ========================================= ===== ===== ===== =====

        :param table:   Table to render (as `behave.model.Table`)

        .. todo::
            Column alignments
        c                    s   g | ]}t  |ˆ  ¡‘qS r   )ÚsixÚ	text_type)Ú.0Úrow©Z	col_indexr   r   Ú
<listcomp>f   ó    z.DocumentWriter.write_table.<locals>.<listcomp>r   z%-Úsú r   N)
r
   Ú	enumerateZheadingsÚrowsÚappendr   Ú_textr"   r   r!   )r   ÚtableZ	cols_sizeZseparator_partsZrow_schema_partsr#   ÚcolumnZcolumn_sizer&   Z
row_schemar1   r   r2   r   Úwrite_tableN   s*    



zDocumentWriter.write_table)NT)N)r   NN)Nr(   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r)   r   Úclassmethodr   r   r   r'   r-   r=   r   r   r   r   r      s   


r   )rA   Ú
__future__r   r   Zbehave.textutilr   r   r:   r.   Úobjectr   r   r   r   r   Ú<module>   s
   