
    "Zj                     D    d dl mZmZmZmZ ddlmZ  G d d          ZdS )    )IterableListOptionalSequence   )Literalc            
       P   e Zd ZdZddefdZedefd            ZdefdZ		 d d
e
e
e                  dee         deeed                           defdZd dededee         defdZdde
e         dedefdZdededefdZd!dededefdZdedefdZdedefdZdefdZd Zd	S )"MarkdownRendererz*Simple helper for generating raw Markdown.Fno_emojic                 "    g | _         || _        dS )z[Initialize the renderer.

        no_emoji (bool): Don't show emoji in titles etc.
        N)datar   )selfr   s     [/Users/jameslopez/projects/MentorCore/.venv/lib/python3.11/site-packages/wasabi/markdown.py__init__zMarkdownRenderer.__init__	   s    
 	     returnc                 6    d                     | j                  S )z%RETURNS (str): The Markdown document.z

)joinr   )r   s    r   textzMarkdownRenderer.text   s     {{49%%%r   contentc                 :    | j                             |           dS )zdAdd a string to the Markdown document.

        content (str): Add content to the document.
        N)r   append)r   r   s     r   addzMarkdownRenderer.add   s     
 		!!!!!r   Nr   headeraligns)rclc           
      4   dgt          |          z  t                    t          |          k    r2d                    t          |                    }t          |          d d                    d                    |                    }d                    d                    fdt	          t          |                    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                 &    | dk    rdn	| dk    rdndS )Nr   z:---:r   z---:z--- )as    r   <lambda>z(MarkdownRenderer.table.<locals>.<lambda>1   s    188188QV r   | {} | | c              3   :   K   | ]} |                   V  d S Nr!   ).0ir   get_dividers     r   	<genexpr>z)MarkdownRenderer.table.<locals>.<genexpr>4   s1      JJ!{{6!9--JJJJJJr   
c              3   f   K   | ],}d                      d                    |                    V  -dS )r$   r%   N)formatr   )r(   rows     r   r+   z)MarkdownRenderer.table.<locals>.<genexpr>6   s8      JJcC99JJJJJJr   z{}
{}
{})lenr.   
ValueErrorr   range)	r   r   r   r   errheaddividerbodyr*   s	      `    @r   tablezMarkdownRenderer.table   s    >US[[(Fv;;#f++%%:AA&#f++VVCS//!VVuzz&1122//JJJJJJJuS[[7I7IJJJJJ
 
 yyJJTJJJJJ""4$777r   levelr   emojic                 v    |r| j         sd                    |          nd}d                    d|z  ||          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   r8   r   r9   prefixs        r   titlezMarkdownRenderer.title9   sB     ).KdmKe$$$eVT:::r   itemsnumberedc                    g }t          |          D ]\\  }}|r-|                    d                    |dz   |                     4|                    d                    |                     ]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   r?   r@   r   r)   items         r   listzMarkdownRenderer.listD   s      '' 	4 	4GAt 4xq1ud;;<<<<v}}T223333yy!!!r   urlc                 .    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   rE   s      r   linkzMarkdownRenderer.linkS   s       s+++r   r;   langc                 .    d                     ||          S )zCreate a Markdown code block.

        text (str): The code text.
        lang (str): Optional code language.
        RETURNS (str): The rendered code block.
        z```{}
{}
```rG   )r   r   rI   s      r   
code_blockzMarkdownRenderer.code_block\   s      &&tT222r   c                 .    |                      |d          S )zCreate Markdown inline code.

        text (str): The inline code text.
        RETURNS (str): The rendered code text.
        `_wrapr   r   s     r   codezMarkdownRenderer.codee        zz$$$$r   c                 .    |                      |d          S )zzCreate bold text.

        text (str): The text to format in boldface.
        RETURNS (str): The formatted text.
        z**rN   rP   s     r   boldzMarkdownRenderer.boldm   s     zz$%%%r   c                 .    |                      |d          S )zsCreate italic text.

        text (str): The text to italicize.
        RETURNS (str): The formatted text.
        _rN   rP   s     r   italiczMarkdownRenderer.italicu   rR   r   c                 0    d                     |||          S )Nz{}{}{}rG   )r   r   markers      r   rO   zMarkdownRenderer._wrap}   s    vtV444r   )Fr'   )r;   )__name__
__module____qualname____doc__boolr   propertystrr   r   r   r   r   r   r7   intr>   rD   rH   rK   rQ   rT   rW   rO   r!   r   r   r
   r
      s       44! ! ! ! ! ! &c & & & X&"3 " " " " >B	8 8x}%8 8 '-"89:	8
 
8 8 8 88	; 	;3 	;c 	;(3- 	;3 	; 	; 	; 	;" "(3- "4 "C " " " ", ,3 ,3 , , , ,3 3s 3# 3s 3 3 3 3% % % % % %& & & & & &%3 % % % %5 5 5 5 5r   r
   N)typingr   r   r   r   compatr   r
   r!   r   r   <module>rd      sw    5 5 5 5 5 5 5 5 5 5 5 5      x5 x5 x5 x5 x5 x5 x5 x5 x5 x5r   