o
    i                  	   @   s4  d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZ e	rVddlmZ G dd deZeG dd dZdddee e!df ef fddZ"de
defddZ#de!de!fddZ$d#de!de!d e%de!fd!d"Z&dS )$zqShared shell completion infrastructure.

Provides data extraction, type analysis, and text processing utilities.
    N)Enum)Path)TYPE_CHECKINGAnyget_args
get_origin)ITERABLE_TYPES)is_union)ArgumentCollection)CycloptsError)RegisteredCommandgroups_from_app)frozenis_class_and_subclass)Appc                   @   s   e Zd ZdZdZdZdZdS )CompletionActionz'Shell-agnostic completion action types.nonefilesdirectoriesN)__name__
__module____qualname____doc__NONEFILESDIRECTORIES r   r   _/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cyclopts/completion/_base.pyr      s
    r   c                   @   s.   e Zd ZU dZded< ee ed< eed< dS )CompletionDataz#Completion data for a command path.r
   	argumentscommandshelp_formatN)r   r   r   r   __annotations__listr   strr   r   r   r   r       s
   
 r   appr   return.c                    s.   i ddt tdf f fdd    S )a:  Recursively extract completion data for app and all subcommands.

    Parameters
    ----------
    app : App
        The Cyclopts application to extract completion data from.

    Returns
    -------
    dict[tuple[str, ...], CompletionData]
        Mapping from command path tuples to their completion data.
    r   command_path.c              
      s  z t| \}}}|d }W n< tttfyL } z-tjdr" tj	d| d| dd j
jddd	}tt g |d
| < W Y d}~dS d}~ww t }|}
| |D ]}|jrm|jdd}	||	 q]W d   n1 sxw   Y  g }
t|D ]\}}|jr|D ]}|jjr||
vr|
| qq|j
jddd	}t||
|d
| < |
D ]}|jD ]}|dsÈ | |f  qqdS )z@Recursively extract completion data for command and subcommands.CYCLOPTS_COMPLETION_DEBUGz3Failed to extract completion data for command path z:    )
stacklevelr!   markdown)fallback)r   r    r!   NT)parse_docstring-)parse_commandsr#   r   
ValueError	TypeErrorosenvirongetwarningswarn	app_stackresolver   r
   _get_resolution_contextdefault_commandassemble_argument_collectionextendr   showr%   appendnames
startswith)r'   _execution_pathcommand_apper!   r   apps_for_paramssubappapp_argumentsr    groupregistered_commandsregistered_commandcmd_name_extractr%   completion_datar   r   rN   8   sP   






z)extract_completion_data.<locals>._extractN)r   )tupler$   )r%   r   rM   r   extract_completion_data)   s    'rQ   	type_hintc                 C   s   t | r!t| D ]}|tdurt|}|tjkr|  S qtjS t| }t|tt	r>t| }|r>t
|dkr>t|d S |pA| }|tu sKt|trNtjS tjS )zGet completion action from type hint.

    Parameters
    ----------
    type_hint : Any
        Type annotation.

    Returns
    -------
    CompletionAction
        Completion action for type.
    N   r   )r	   r   typeget_completion_actionr   r   r   r   rP   r   lenr   r   )rR   argactionoriginargstarget_typer   r   r   rU   c   s"   
rU   textc                 C   s$   t dd| } t dd|  } | S )zClean choice text without shell-specific escaping.

    Parameters
    ----------
    text : str
        Raw choice text.

    Returns
    -------
    str
        Cleaned text (not shell-escaped).
    [\x00-\x1f\x7f] \s+ )resubstrip)r\   r   r   r   clean_choice_text   s   rd   r,   P   format
max_lengthc                 C   sr   ddl m} ddlm} |j| |d}||} tdd| } tdd|  } t| |kr7| d	|d
  d } | S )a#  Strip markup and render to plain text for shell completions.

    Converts formatted text (markdown/RST/rich) to plain text suitable for
    shell completion descriptions. Removes control characters, normalizes
    whitespace, and truncates if needed.

    Parameters
    ----------
    text : str
        Text with markup.
    format : str
        Markup format: "markdown", "rst", "rich", or "plaintext".
    max_length : int
        Maximum length before truncation.

    Returns
    -------
    str
        Plain text (not shell-escaped).
    r   )extract_text)
InlineText)rf   r]   r^   r_   r`   NrS   u   …)	cyclopts._markuprh   cyclopts.help.inline_textri   from_formatra   rb   rc   rV   )r\   rf   rg   rh   ri   inliner   r   r   strip_markup   s   rn   )r,   re   )'r   r3   ra   r6   enumr   pathlibr   typingr   r   r   r   cyclopts._convertr   cyclopts.annotationsr	   cyclopts.argumentr
   cyclopts.exceptionsr   cyclopts.group_extractorsr   r   cyclopts.utilsr   r   cycloptsr   r   r   dictrP   r$   rQ   rU   rd   intrn   r   r   r   r   <module>   s,    ":& 