o
    
i                     @   s6   d dl mZmZmZmZ ddlmZ G dd dZdS )    )IterableListOptionalSequence   )Literalc                
   @   s  e Zd ZdZd+defddZedefddZd	efd
dZ		d,de
e
e  dee deeed   defddZd,dededee defddZd+de
e dedefddZdededefddZd-ded edefd!d"Zdedefd#d$Zdedefd%d&Zdefd'd(Zd)d* ZdS ).MarkdownRendererz*Simple helper for generating raw Markdown.Fno_emojic                 C   s   g | _ || _dS )z[Initialize the renderer.

        no_emoji (bool): Don't show emoji in titles etc.
        N)datar	   )selfr	    r   C/home/ubuntu/.local/lib/python3.10/site-packages/wasabi/markdown.py__init__	   s   
zMarkdownRenderer.__init__returnc                 C   s   d | jS )z%RETURNS (str): The Markdown document.z

)joinr
   )r   r   r   r   text   s   zMarkdownRenderer.textcontentc                 C   s   | j | dS )zdAdd a string to the Markdown document.

        content (str): Add content to the document.
        N)r
   append)r   r   r   r   r   add   s   zMarkdownRenderer.addNr
   headeraligns)rclc                    s    du rdgt |  t  t |krd t |}t|dd dd|}dd fdd	tt |D }d
dd	 |D }d|||S )a  Create a Markdown table.

        data (Iterable[Iterable[str]]): The body, one iterable per row,
            containig an interable of column contents.
        header (Sequence[str]): The column names.
        aligns (Optional[Sequence[Literal["r", "c", "l"]]]): Optional alignment-mode for each column. Values should
            either be 'l' (left), 'r' (right), or 'c' (center). Optional.
        RETURNS (str): The rendered table.
        Nr   z&Invalid aligns: {} (header length: {})c                 S   s   | dkrdS | dkrdS dS )Nr   z:---:r   z---:z---r   )ar   r   r   <lambda>1   s    z(MarkdownRenderer.table.<locals>.<lambda>| {} | | c                 3   s    | ]	} | V  qd S Nr   ).0ir   get_dividerr   r   	<genexpr>4   s    z)MarkdownRenderer.table.<locals>.<genexpr>
c                 s   s     | ]}d  d|V  qdS )r   r   N)formatr   )r   rowr   r   r   r#   6   s    z{}
{}
{})lenr%   
ValueErrorr   range)r   r
   r   r   errheaddividerbodyr   r!   r   table   s    zMarkdownRenderer.tablelevelr   emojic                 C   s*   |r
| j s
d|nd}dd| ||S )a  Create a Markdown heading.

        level (int): The heading level, e.g. 3 for ###
        text (str): The heading text.
        emoji (Optional[str]): Optional emoji to show before heading text, if enabled.
        RETURNS (str): The rendered title.
        z{}  z{} {}{}#)r	   r%   )r   r/   r   r0   prefixr   r   r   title9   s   zMarkdownRenderer.titleitemsnumberedc                 C   sL   g }t |D ]\}}|r|d|d | q|d| qd|S )zCreate a non-nested list.

        items (Iterable[str]): The list items.
        numbered (bool): Whether to use a numbered list.
        RETURNS (str): The rendered list.
        z{}. {}r   z- {}r$   )	enumerater   r%   r   )r   r5   r6   r   r    itemr   r   r   listD   s   
zMarkdownRenderer.listurlc                 C   s   d ||S )zCreate a Markdown link.

        text (str): The link text.
        url (str): The link URL.
        RETURNS (str): The rendered link.
        z[{}]({})r%   )r   r   r:   r   r   r   linkS      zMarkdownRenderer.linkr1   langc                 C   s   d ||S )zCreate a Markdown code block.

        text (str): The code text.
        lang (str): Optional code language.
        RETURNS (str): The rendered code block.
        z```{}
{}
```r;   )r   r   r>   r   r   r   
code_block\   r=   zMarkdownRenderer.code_blockc                 C      |  |dS )zCreate Markdown inline code.

        text (str): The inline code text.
        RETURNS (str): The rendered code text.
        `_wrapr   r   r   r   r   codee      zMarkdownRenderer.codec                 C   r@   )zzCreate bold text.

        text (str): The text to format in boldface.
        RETURNS (str): The formatted text.
        z**rB   rD   r   r   r   boldm   rF   zMarkdownRenderer.boldc                 C   r@   )zsCreate italic text.

        text (str): The text to italicize.
        RETURNS (str): The formatted text.
        _rB   rD   r   r   r   italicu   rF   zMarkdownRenderer.italicc                 C   s   d |||S )Nz{}{}{}r;   )r   r   markerr   r   r   rC   }   s   zMarkdownRenderer._wrap)Fr   )r1   )__name__
__module____qualname____doc__boolr   propertystrr   r   r   r   r   r   r.   intr4   r9   r<   r?   rE   rG   rI   rC   r   r   r   r   r      s0    

 		r   N)typingr   r   r   r   compatr   r   r   r   r   r   <module>   s    