o
    iF5                     @   sx   d Z ddlZddlmZmZmZ ddlmZmZ er*ddl	m
Z
mZ ddlmZmZ dedefd	d
ZG dd dZdS )zHTML documentation formatter.    N)TYPE_CHECKINGAnyOptional)escape_htmlextract_text)ConsoleConsoleOptions)	HelpEntry	HelpPaneltype_objreturnc                 C   s   | du rdS t | dr| j }nt | drt| d}nt| }|dddd}|dr;|dd	 }d
| dS |d
rB|S |drS|dd	 }d| dS |drZ|S |dre|dd S |S )zFormat a type object into a readable string.

    Parameters
    ----------
    type_obj : Any
        Type object to format.

    Returns
    -------
    str
        Formatted type name.
    N plain__rich_console__z<class 'z'>ztyping.Optional[   z	Optional[]ztyping.Union[   zUnion[ztyping.   )hasattrr   rstripr   strreplace
startswith)r   type_str
inner_typeinner_types r   c/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cyclopts/help/formatters/html.py_format_type_name   s*   






r   c                
   @   s   e Zd ZdZ				d$dedededB dee dB fd	d
Zd%ddZ	defddZ
ded ded ddddfddZded ded ddfddZded ded ddfddZded ded deddfdd Zded ded d!eddfd"d#ZdS )&HtmlFormattera  HTML documentation formatter.

    Parameters
    ----------
    heading_level : int
        Starting heading level for panels (default: 2).
        E.g., 2 produces "<h2>Commands</h2>", 3 produces "<h3>Commands</h3>".
    include_hidden : bool
        Include hidden commands/parameters in documentation (default: False).
    app_name : str
        The root application name for generating anchor IDs.
    command_chain : list[str]
        The current command chain for generating anchor IDs.
       FNheading_levelinclude_hiddenapp_namecommand_chainc                 C   s*   || _ || _|| _|pg | _t | _d S )N)r"   r#   r$   r%   ioStringIO_output)selfr"   r#   r$   r%   r   r   r   __init__N   s
   
zHtmlFormatter.__init__r   c                 C   s   t  | _dS )z!Reset the internal output buffer.N)r&   r'   r(   r)   r   r   r   reset[   s   zHtmlFormatter.resetc                 C   s
   | j  S )zGet the accumulated HTML output.

        Returns
        -------
        str
            The HTML documentation string.
        )r(   getvaluer+   r   r   r   
get_output_   s   
zHtmlFormatter.get_outputconsoler   optionsr   panelr
   c              	   C   s   |j sdS | jd |jr(tt|j|}| jd| j d| d| j d |jr?tt|j|}|r?| jd| d |jd	krL| 	|j | n|jd
krX| 
|j | | jd dS )a_  Format and render a help panel as HTML.

        Parameters
        ----------
        console : Optional[Console]
            Console for rendering (used for extracting plain text).
        options : Optional[ConsoleOptions]
            Console rendering options (unused for HTML).
        panel : HelpPanel
            Help panel to render.
        Nz<section class="help-panel">
z<hz class="panel-title">z</hz>
z<div class="panel-description"></div>
command	parameterz</section>
)entriesr(   writetitler   r   r"   descriptionformat_format_command_panel_format_parameter_panel)r)   r/   r0   r1   
title_text	desc_textr   r   r   __call__i   s   $

zHtmlFormatter.__call__r5   r	   c                 C   sb  |sdS | j d |D ]}g }|jr||j |jr"||j | jrw|rw|d }| jrF| j|g }| j dd|dd   }n
| j d|  }d| dt	| d}t
|dkrvd	d
d |dd D }	| d	|	 }n|rd	dd |D nd}t	t|j|}
| j d| d |
r| j d|
  | j d q| j d dS )zFormat command entries as HTML.

        Parameters
        ----------
        entries : list[HelpEntry]
            Command entries to format.
        console : Optional[Console]
            Console for text extraction.
        Nz<ul class="commands-list">
r   -   z
<a href="#z"><code>z</code></a>, c                 s        | ]}d t | dV  qdS <code></code>Nr   .0nr   r   r   	<genexpr>       z6HtmlFormatter._format_command_panel.<locals>.<genexpr>c                 s   rB   rC   rF   rG   r   r   r   rJ      rK   r   <li><strong>	</strong>: </li>
</ul>
)r(   r6   namesextendshortsr$   r%   joinlowerr   lenr   r8   )r)   r5   r/   entryrQ   primary_name
full_chain	anchor_id	name_htmlaliases	desc_htmlr   r   r   r:      s6   

$z#HtmlFormatter._format_command_panelc                 C   s  |sdS | j d |D ]V}g }|jr||j |jr#||j |jdur.t|j|nd}d}|rstdd |D }tdd |D }|oI|}|r_|dv r_dd	 |D d
d	 |D  }n|rs|dv rsdd	 |D dd	 |D  }|r|rt|dkrdt	|d  dt	|d  d}	nd
dd |D }	nd}	| j d|	 d t|j|}
|
r| j dt	|
  g }|jr|d |jrd
dd |jD }|d| d |dur5|r*|dv rtdd |D |r|d nd}|d t	| d! n2|dv rtd"d |D d#}|d t	| d! n|d t	| d! n|d t	| d! |jrMd
d$d |jD }|d%| d |r]| j d&d
| d | j d' q| j d( dS ))zFormat parameter entries as HTML.

        Parameters
        ----------
        entries : list[HelpEntry]
            Parameter entries to format.
        console : Optional[Console]
            Console for text extraction.
        Nz<ul class="parameters-list">
Fc                 s   s&    | ]}| d  o| dV  qdS --no-z--Nr   rG   r   r   r   rJ      s   $ z8HtmlFormatter._format_parameter_panel.<locals>.<genexpr>c                 s   s    | ]}| d V  qdS r_   Nr`   rG   r   r   r   rJ      s    )Trueenabledc                 S      g | ]	}| d r|qS r_   r`   rG   r   r   r   
<listcomp>       z9HtmlFormatter._format_parameter_panel.<locals>.<listcomp>c                 S      g | ]	}| d s|qS re   r`   rG   r   r   r   rf      
    
)Falsedisabledc                 S   rh   re   r`   rG   r   r   r   rf      rg   c                 S   rd   re   r`   rG   r   r   r   rf      ri   r!   rD   r   z</code>, <code>r@   rE   rA   c                 s   rB   rC   rF   rG   r   r   r   rJ      rK   r   rL   rM   rN   z=<span class="metadata-item metadata-required">Required</span>c                 s   s$    | ]}d t t| dV  qdS rC   )r   r   )rH   cr   r   r   rJ     s   " zZ<span class="metadata-item metadata-choices"><span class="metadata-label">choices:</span> z</span>c                 s   s(    | ]}| d s| dr|V  qdS r^   r`   rG   r   r   r   rJ     s   & z--flagz`<span class="metadata-item metadata-default"><span class="metadata-label">default:</span> <code>z</code></span>c                 s   s    | ]
}| d r|V  qdS ra   r`   rG   r   r   r   rJ   &  s    z	--no-flagc                 s   rB   rC   rF   )rH   er   r   r   rJ   5  rK   zR<span class="metadata-item metadata-env"><span class="metadata-label">env:</span> z!<span class="parameter-metadata">rO   rP   )r(   r6   rQ   rR   rS   defaultr   anyrV   r   rT   r8   requiredappendchoicesnextenv_var)r)   r5   r/   rW   rQ   default_stris_bool_flaghas_positivehas_negativer[   descmetadata_itemschoices_strpositive_flagnegative_flagenv_htmlr   r   r   r;      s   


$





z%HtmlFormatter._format_parameter_panelusagec                 C   sN   |r#t t||}|r%| jd | jd| d | jd dS dS dS )a.  Render the usage line as HTML.

        Parameters
        ----------
        console : Optional[Console]
            Console for text extraction.
        options : Optional[ConsoleOptions]
            Console rendering options (unused).
        usage : Any
            The usage line content.
        z<div class="usage-block">
z<pre class="usage">z</pre>
r2   Nr   r   r(   r6   )r)   r/   r0   r   
usage_textr   r   r   render_usageB  s   zHtmlFormatter.render_usager8   c                 C   s6   |rt t||}|r| jd| d dS dS dS )a6  Render the description as HTML.

        Parameters
        ----------
        console : Optional[Console]
            Console for text extraction.
        options : Optional[ConsoleOptions]
            Console rendering options (unused).
        description : Any
            The description content.
        z<div class="description">r2   Nr   )r)   r/   r0   r8   r=   r   r   r   render_descriptionZ  s   z HtmlFormatter.render_description)r!   FNN)r   N)__name__
__module____qualname____doc__intboolr   listr*   r,   r.   r   r>   r:   r;   r   r   r   r   r   r   r   r    >   s\    




*7x
r    )r   r&   typingr   r   r   cyclopts._markupr   r   rich.consoler   r   cyclopts.helpr	   r
   r   r   r    r   r   r   r   <module>   s    0