o
    ì6Wjm   ã                	   @   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mZmZmZmZmZmZ deje ded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ReST-style docstring parsing.é    Né   )ÚDEPRECATION_KEYWORDSÚPARAM_KEYWORDSÚRAISES_KEYWORDSÚRETURNS_KEYWORDSÚYIELDS_KEYWORDSÚ	DocstringÚDocstringDeprecatedÚDocstringMetaÚDocstringParamÚDocstringRaisesÚDocstringReturnsÚDocstringStyleÚ
ParseErrorÚRenderingStyleÚargsÚdescÚreturnc                 C   s®  | d }|t v rZt| ƒdkr$| \}}}| d¡r!d}|d d… }nd}nt| ƒdkr3| \}}d }d }ntd|› d	�ƒ‚tjd
|tjd�}|rN| d¡ d¡nd }t	| |||||d�S |t
tB v r†t| ƒdkrk| d }nt| ƒdkrtd }ntd|› d	�ƒ‚t| |||tv d�S |tv rªtjd|tjd�}t| |rœ| d¡nd |r¦| d¡d�S |d�S |tv rÑt| ƒdkr¹| d }nt| ƒdkrÂd }ntd|› d	�ƒ‚t| ||d�S t| |d�S )Nr   é   ú?TéÿÿÿÿFé   z$Expected one or two arguments for a z	 keyword.z.*defaults to (.+)©Úflagsr   Ú.)r   ÚdescriptionÚarg_nameÚ	type_nameÚis_optionalÚdefaultz#Expected one or no arguments for a )r   r   r   Úis_generatorz7^(?P<version>v?((?:\d+)(?:\.[0-9a-z\.]+))) (?P<desc>.+)Úversionr   )r   r!   r   )r   r   r   )r   r   )r   ÚlenÚendswithr   ÚreÚmatchÚDOTALLÚgroupÚrstripr   r   r   r   r   ÚsearchÚIr	   r   r   r
   )r   r   Úkeyr   r   r   r%   r   © r,   úd/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/docstring_parser/rest.pyÚ_build_meta   s€   


ÿú	

ÿüýýý

ÿÿr.   Útextc                 C   sz  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|_i }i }tjd
|tjtjB d�D ]�}| d¡}	|	suqkz|	 d¡ 	dd¡\}
}W n ty— } z	td|	› d�ƒ|‚d}~ww |
 	¡ }| ¡ }d|v rµ| 	dd¡\}}|d t |¡ }t|ƒdkrÈ|d dkrÈ|||d < qkt|ƒdv rã|d dkrã||t|ƒdkrÞdn|d < qk|j t||ƒ¡ qk|jD ]%}t|tƒ�r|j�p| |j¡|_qðt|t ƒ�r|j�p| |j!¡|_qðt"dd„ |jD ƒƒ�s;|�r;| #¡ D ]\}}|j t g |dd|d�¡ �q(|S )zXParse the ReST-style docstring into its components.

    :returns: parsed docstring
    )Ústylez^:r   NÚ Ú
r   r   z

z(^:.*?)(?=^:|\Z)ú:z%Error parsing meta information near "z".r   Útype)r   r   Úrtypec                 s   s   � | ]}t |tƒV  qd S )N)Ú
isinstancer   )Ú.0Úmr,   r,   r-   Ú	<genexpr>£   s   € zparse.<locals>.<genexpr>F)r   r   r   r    Úreturn_name)$r   r   ÚRESTÚinspectÚcleandocr$   r)   ÚMÚstartÚsplitÚshort_descriptionr"   Ú
startswithÚblank_after_short_descriptionr#   Úblank_after_long_descriptionÚstripÚlong_descriptionÚfinditerÚSr'   ÚlstripÚ
ValueErrorr   ÚmetaÚappendr.   r6   r   r   Úgetr   r   r:   ÚanyÚitems)r/   Úretr%   Ú
desc_chunkÚ
meta_chunkÚpartsÚlong_desc_chunkÚtypesÚrtypesÚchunkÚ
args_chunkÚexr   r   Ú
first_lineÚrestrK   r:   r   r,   r,   r-   Úparsef   s~   

ÿ

ÿþ€ÿ
€ûÿ
r\   z    Ú	docstringÚrendering_styleÚindentc           	   	      sN  dt jt dtf‡ ‡fdd„}g }| jr| | j¡ | jr"| d¡ | jr+| | j¡ | jr3| d¡ | jD ]ë}t	|t
ƒr™|jrR|jrJd|j› d�nd|j› d�}nd}ˆtjkrƒd|j› d	�}|||jƒ7 }| |¡ |d
d… r‚| d|j› d	|d
d… › �¡ q6d|› |j› d	�}|||jƒ7 }| |¡ q6t	|tƒrê|jr§d|j› �nd}|jr®dnd}ˆtjkrÕ|jrÊd	|› d	�}|||jƒ7 }| |¡ |rÔ| d|› �¡ q6d	|› |› d	�}|||jƒ7 }| |¡ q6t	|tƒ�r|jrúd|j› d�nd}d|› d	�||jƒ }| |¡ q6d	d |j¡› d	�||jƒ }| |¡ q6d |¡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   r   c                    s„   | sdS ˆt jkr |  ¡ ^}}d d| g‡ fdd„|D ƒ ¡S ˆt jkr>|  ¡ ^}}d dˆ  | g‡ fdd„|D ƒ ¡S d|  S )Nr1   r2   ú c                    ó   g | ]}ˆ | ‘qS r,   r,   ©r7   Úline©r_   r,   r-   Ú
<listcomp>Å   ó    z1compose.<locals>.process_desc.<locals>.<listcomp>c                    ra   r,   r,   rb   rd   r,   r-   re   Ê   rf   )r   ÚCLEANÚ
splitlinesÚjoinÚEXPANDED)r   Úfirstr[   ©r_   r^   r,   r-   Úprocess_desc¿   s   
"
ÿzcompose.<locals>.process_descr1   r`   z? z:param r3   Nr   z:type z:paramÚyieldsÚreturnsz:rtype:z:raisesr2   )ÚTÚOptionalÚstrrA   rL   rC   rF   rD   rK   r6   r   r   r   r   rj   r   r   r   r    r   ri   r   )	r]   r^   r_   rm   rS   rK   Ú	type_textr/   r+   r,   rl   r-   Úcompose²   sb   



ÿý

 €


€
rt   )Ú__doc__r<   r$   Útypingrp   Úcommonr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   ÚListrr   r.   rq   r\   ÚCOMPACTrt   r,   r,   r,   r-   Ú<module>   s$    @MNýÿþýü