o
    ]i"                  	   @   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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   \/var/www/html/stock_analysis/be/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}
g }tjd|tjtjB dD ]}|d}|sq}t||}t||}t|	|}t|
|}|p|p|p|}|std| d|| d }|rd}|d}|d g}nQ|rd}|d}|ddu rg n|d g}n6|rd}|d}g }n*d}|d}t|d }|du r	g nt	d|}|dv rtd| d| }d|v r6|	dd\}}|d t| }|||||f q}i }|D ]A\}}}}|dvrQqD|pUd\}||i }d|v rddnd}|||< |dkr|dv }|d||krtd| dqDi }|D ]\}}}}|dkr||d d s|\}|| }|d}|r|d!rd"}|dd# }nd }tjd$|tjd}|r|dd%nd} t||g|d|||| d&}!d"||< n_|dkr|dd s|d }t |g|d|d|dd d'}!d"|d< n7|dkr&|pd(\}t!|g| ||d)}!n!|dkr5t"|g| |d*}!n|p9d^}}"||d sEJ 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!(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   raiser   metaz\s+)r   keywordtyper   rtypeyieldytype)r   r   )r   r   	type_namedescription>   r   r   is_generatorz$Error parsing meta information for "F?Tz.*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   retr@   
desc_chunk
meta_chunkpartslong_desc_chunkparam_patternraise_patternreturn_patternmeta_patternstreamchunkparam_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   






$


	










r^   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rd|	 d	||jd
 }|| |jrd| d	||jd }|| q8t
|tr|jrd|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
    rU   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ra   r   r   
<listcomp>       z1compose.<locals>.process_desc.<locals>.<listcomp> c                    rc   r   r   rd   rg   r   r   rh      ri   )r
   EXPANDEDCLEAN
splitlinesjoin)rU   rb   firstrW   ra   r`   r   r   process_desc   s   
"zcompose.<locals>.process_descr   r#   z@type :Tz@param F)r   r   )r   r   @z@raise z@raise:rj   r   )TOptionalstrboolr2   r=   r4   r7   r6   r   
isinstancer   r    r(   r'   r!   r   r"   r   rn   r&   )
r_   r`   ra   rq   rF   r   r    r   arg_keytype_keyr   rp   r   compose   sX   "









r{   )__doc__r+   r-   typingrt   commonr   r   r   r   r   r   r	   r
   rv   ru   r   r^   COMPACTr{   r   r   r   r   <module>   s&    ( *