
    lKj              	       T   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mZ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	rddlmZ  G d de      Ze G d d             Zdddee e!df   ef   fdZ"de
defdZ#de!de!fdZ$dde!de!de!fdZ%d de!de!de&de!fdZ'y)!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_annotatedis_union)ArgumentCollection)CycloptsError)RegisteredCommandgroups_from_app)frozenis_class_and_subclass)Appc                       e Zd ZdZdZdZdZy)CompletionActionz'Shell-agnostic completion action types.nonefilesdirectoriesN)__name__
__module____qualname____doc__NONEFILESDIRECTORIES     j/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/cyclopts/completion/_base.pyr   r      s    1DEKr    r   c                   6    e Zd ZU dZded<   ee   ed<   eed<   y)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    r#   appr   return.c                 N     i ddt         t        df   f f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.
    command_path.c                    	 j                  t        |             \  }}}|d   }ddlm} t               }j                  |      5   ||d      D ]  \  }}|j!                  |        	 ddd       g }	t#        |d      D ]F  \  }
}|
j$                  s|D ]/  }|j&                  j$                  s||	vs|	j)                  |       1 H |j                  j                  dd	      }t        ||	|
      | <   |	D ]1  }|j*                  D ]   }|j-                  d      r | |fz          " 3 y# t        t        t        f$ r}}t
        j                  j                  d      r t        j                  d| d| d       j                  j                  dd	      }t        t               g |
      | <   Y d}~yd}~ww xY w# 1 sw Y   [xY w)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&   Nr   )%_iter_resolution_argument_collectionsT)parse_docstring)resolve_lazy-)parse_commandsr(   r   
ValueError	TypeErrorosenvirongetwarningswarn	app_stackresolver#   r   cyclopts.corer5   extendr   showr*   appendnames
startswith)r-   _execution_pathcommand_apper&   r5   r$   app_argumentsr%   groupregistered_commandsregistered_commandcmd_name_extractr*   completion_datas                 r!   rR   z)extract_completion_data.<locals>._extract7   s   	#&#5#5d<6H#I A~q(,K 	H&(	]]>*$I.jn$o =  / %p + *9+TX*Y&E&zz*=&)--227IQY7Y (:; +> +Z "++33MJ3W(6U]kv(w%"*.44**3/\XK78 5 #+9 z95 	zz~~9:MMOP\O__abcaderst--//
/SK,:,.-OL) 	 +*s$   #D1 $G1GA3F==GG)r   )tupler)   )r*   rR   rS   s   `@@r!   extract_completion_datarU   (   s-     >@O$9uS#X $9L Jr    	type_hintc                    t        |       rt        t        |       d         S t        |       rPt        |       D ]2  }|t	        d      ust        |      }|t
        j                  k7  s0|c S  t
        j                  S t        |       }t        |t        t                    r)t        |       }|rt        |      dk\  rt        |d         S |xs | }|t        u st        |t              rt
        j                  S t
        j                  S )zGet completion action from type hint.

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

    Returns
    -------
    CompletionAction
        Completion action for type.
    r   N   )r
   get_completion_actionr   r   typer   r   r   r   rT   r	   lenr   r   )rV   argactionoriginargstarget_types         r!   rY   rY   a   s     I$Xi%8%;<<	I&C$t*$.s3-222!M	 '
  $$$	"F VU>%:;	"CIN(a11%IKd3KF%%%   r    textc                 ~    t        j                  dd|       } t        j                  dd|       j                         } | 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)ra   s    r!   clean_choice_textrj      s7     66$b$/D66&#t$**,DKr    namecharsc                 b    | j                  dd      }|D ]  }|j                  |d|       } |S )a  Escape glob/pattern characters for shell case patterns.

    Both bash and zsh case patterns treat glob characters as special even inside
    quotes. This function escapes them with backslashes for literal matching.

    Parameters
    ----------
    name : str
        String to escape.
    chars : str
        Characters to escape. Default covers basic glob chars.
        For zsh, also pass "()|" for extended patterns.

    Returns
    -------
    str
        Escaped string safe for shell case patterns.
    \z\\)replace)rk   rl   resultchars       r!   escape_for_shell_patternrr      s9    ( \\$'F4&k2 Mr    format
max_lengthc                     ddl m} ddlm} |j	                  | |      } ||      } t        j                  dd|       } t        j                  dd|       j                         } t        |       |kD  r| d	|d
z
   dz   } | 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)rs   rc   rd   re   rf   NrX   u   …)	cyclopts._markuprv   cyclopts.help.inline_textrw   from_formatrg   rh   ri   r[   )ra   rs   rt   rv   rw   inlines         r!   strip_markupr|      s~    * .4##D#8FD66$b$/D66&#t$**,D
4y:$j1n%-Kr    )z*?[])r3   P   )(r   r<   rg   r?   enumr   pathlibr   typingr   r   r   r   cyclopts.annotationsr	   r
   r   cyclopts.argumentr   cyclopts.exceptionsr   cyclopts.group_extractorsr   r   cyclopts.utilsr   r   cycloptsr   r   r#   dictrT   r)   rU   rY   rj   rr   intr|   r   r    r!   <module>r      s   
 
 	    ; ; G G 0 - H 8 t     6 64c3h0O+P 6r&!S &!-= &!RC C $3 s  4!s !C !# !s !r    