o
    ì6WjÂ$  ã                	   @   sš   d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZmZ dedeje fdd„Zd	eje defd
d„Zejdfdedededefdd„ZdS )z^Epyoc-style docstring parsing.

.. seealso:: http://epydoc.sourceforge.net/manual-fields.html
é    Né   )Ú	DocstringÚDocstringMetaÚDocstringParamÚDocstringRaisesÚDocstringReturnsÚDocstringStyleÚ
ParseErrorÚRenderingStyleÚstringÚreturnc                 C   s   |   ¡ } t| ƒdkr| S d S )Nr   )ÚstripÚlen)r   © r   úf/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/docstring_parser/epydoc.pyÚ
_clean_str   s   r   Útextc           %   	   C   sä  t tjd�}| s
|S t | ¡} tjd| tjd�}|r+| d| ¡ … }| | ¡ d… }n| }d}| 	dd¡}|d p:d|_
t|ƒdkr[|d pGd}| d¡|_| d	¡|_| ¡ pYd|_t d
¡}t d¡}t d¡}	t d¡}
t d¡}g }tjd|tjtjB d�D ]Þ}| d¡}|sŒq‚t ||¡}t ||¡}t |	|¡}t |
|¡}t ||¡}|p³|p³|p³|p³|}|s¾td|› d�ƒ‚|| ¡ d… }|rØd}| d¡}| d¡ ¡ g}ne|rêd}| d¡}| d¡ ¡ g}nS|�rd}| d¡}| d¡du rýg n| d¡ ¡ g}n7|�rd}| d¡}g }n*d}| d¡}t| d¡ ¡ ƒ}|du �r*g nt 	d|¡}|dv �r=td|› d�ƒ‚| ¡ }d|v �rW| 	dd¡\}}|d t |¡ }| ||||f¡ q‚i }|D ]A\}}}}|dv�rr�qe|�pvd\}| |i ¡}d|v �r…dnd}|||< |dk�r¥|dv }| d |¡|k�r¥td!|› d�ƒ‚�qei }|D ]Ä\}}}}|d"v �r	| |d d#¡�s	|\}|| }| d¡} | �rÝ|  d$¡�rÝd%}!| dd&… } nd#}!tjd'|tjd�}|�ró| d¡ d(¡nd}"t||g| d¡|| |!|"d)�}#d%||< n_|dk�r1| dd#¡�s1|d }t |g| d¡| d¡| d d#¡d*�}#d%|d< n7|dk�rG|�p:d+\} t!|g| || d,�}#n!|dk�rVt"|g| |d-�}#n|�pZd^}}$| |d#¡�sfJ ‚�q«|j# |#¡ �q«|S ).zZParse the epydoc-style docstring into its components.

    :returns: parsed docstring
    )Ústylez^@)ÚflagsNÚ Ú
r   r   z

z-(param|keyword|type)(\s+[_A-z][_A-z0-9]*\??):z((ivar|cvar|var)(\s+[_A-z][_A-z0-9]*\??):z!(raise)(\s+[_A-z][_A-z0-9]*\??)?:z(return|rtype|yield|ytype):z.([_A-z][_A-z0-9]+)((\s+[_A-z][_A-z0-9]*\??)*):z(^@.*?)(?=^@|\Z)z%Error parsing meta information near "z".Úparamé   Ú	attributeÚraiser   Úmetaz\s+)
r   ÚivarÚcvarÚvarÚkeywordÚtyper   ÚrtypeÚyieldÚytype)r   r   r   )r   r    Ú	type_nameÚdescription>   r"   r#   Úis_generatorz$Error parsing meta information for ")r   r   Fú?Téÿÿÿÿz.*defaults to (.+)Ú.)Úargsr%   Úarg_namer$   Úis_optionalÚdefault)r*   r%   r$   r&   )N)r*   r%   r$   )r*   r%   )$r   r   ÚEPYDOCÚinspectÚcleandocÚreÚsearchÚMÚstartÚsplitÚshort_descriptionr   Ú
startswithÚblank_after_short_descriptionÚendswithÚblank_after_long_descriptionr   Úlong_descriptionÚcompileÚfinditerÚSÚgroupr	   Úendr   ÚappendÚ
setdefaultÚgetÚmatchÚDOTALLÚrstripr   r   r   r   r   )%r   ÚretrD   Ú
desc_chunkÚ
meta_chunkÚpartsÚlong_desc_chunkÚparam_patternÚattribute_patternÚraise_patternÚreturn_patternÚmeta_patternÚstreamÚchunkÚparam_matchÚattribute_matchÚraise_matchÚreturn_matchÚ
meta_matchÚbaseÚkeyr*   ÚtokenÚdescÚ
first_lineÚrestÚparamsr+   ÚinfoÚinfo_keyr&   Úis_doner$   r,   r-   Ú	meta_itemÚ_r   r   r   Úparse   s  
ÿ


ÿ
ÿ
ÿþýû


$



ÿ



ÿ€
ú

ü

ý
þrd   z    Ú	docstringÚrendering_styleÚindentc           
         sÎ  dt jt dtdtf‡ ‡fdd„}g }| jr| | j¡ | jr$| d¡ | jr-| | j¡ | jr5| d¡ | j	D ]©}t
|tƒrt|jra|jrK|j› d�n|j}d|j› d	�}|||d
ƒ7 }| |¡ d|j› d	�||jdƒ }| |¡ q8t
|tƒr«|jr~dnd\}}	|jr–d|	› d	�||jd
ƒ }| |¡ |jrªd|› d	�||jdƒ }| |¡ q8t
|tƒrÊ|jrºd|j› d	�nd}|||jdƒ7 }| |¡ q8dd |j¡› d	�}|||jdƒ7 }| |¡ q8d |¡S )a  Render a parsed docstring into docstring text.

    :param docstring: parsed docstring representation
    :param rendering_style: the style to render docstrings
    :param indent: the characters used as indentation in the docstring string
    :returns: docstring text
    r[   Úis_typer   c                    s€   | sdS ˆt jksˆt jkr)|s)|  ¡ ^}}d dˆ  | g‡ fdd„|D ƒ ¡S |  ¡ ^}}d d| g‡ fdd„|D ƒ ¡S )Nr   r   c                    ó   g | ]}ˆ | ‘qS r   r   ©Ú.0Úline©rg   r   r   Ú
<listcomp>é   ó    z1compose.<locals>.process_desc.<locals>.<listcomp>ú c                    ri   r   r   rj   rm   r   r   rn   í   ro   )r
   ÚEXPANDEDÚCLEANÚ
splitlinesÚjoin)r[   rh   Úfirstr]   ©rg   rf   r   r   Úprocess_descà   s   
ÿ"zcompose.<locals>.process_descr   r'   z@type ú:Tz@param F)r"   r#   )r   r!   ú@z@raise z@raise:rp   r   )ÚTÚOptionalÚstrÚboolr6   rA   r8   r;   r:   r   Ú
isinstancer   r$   r,   r+   r%   r   r&   r   rt   r*   )
re   rf   rg   rw   rJ   r   r$   r   Úarg_keyÚtype_keyr   rv   r   ÚcomposeÓ   sX   "



ÿý
ÿ
ÿý

€

r�   )Ú__doc__r/   r1   Útypingrz   Úcommonr   r   r   r   r   r   r	   r
   r|   r{   r   rd   ÚCOMPACTr�   r   r   r   r   Ú<module>   s&    ( 9ýÿþýü