
    k7i>%                     n    S r SSKJrJr  \(       a  SSKJr  SSKJr  SSKJ	r	  SSKJ
r
Jr   " S S5      rg	)
z,Base utilities for documentation generation.    )TYPE_CHECKINGAny)App)	HelpPanel)CommandSpec)
format_docformat_usagec                      \ rS rSrSr\SSSS\\   S-  S\\\\4   4S jj5       r	\S\\   S-  S	\S
\S\\   4S j5       r
\S	\SSSSS\S\4
S j5       r\SSS\S\\   4S j5       r\SSS\S\S-  4S j5       r\SSS\S-  4S j5       r\SS\S\\   S\S\4S jj5       r\ SS\\\S4      S\S\\\\\S4      4   4S jj5       r\SSSS\4S jj5       rSrg) BaseDocGenerator   z>Base class for documentation generators with shared utilities.Nappr   command_chainreturnc                     U(       d  U R                   S   nUnUnO.U(       a  US   OU R                   S   nSR                  U5      nUnX#U4$ )a  Get app name, full command path, and title.

Parameters
----------
app : App
    The cyclopts App instance.
command_chain : Optional[List[str]]
    Chain of parent commands leading to this app.

Returns
-------
Tuple[str, str, str]
    (app_name, full_command, title)
r    )namejoin)r   r   app_namefull_commandtitles        L/home/james-whalen/.local/lib/python3.13/site-packages/cyclopts/docs/base.pyget_app_infoBaseDocGenerator.get_app_info   sR      xx{H#LE+8}Q'chhqkH88M2L Eu,,    command_namer   c                      U (       a  X/-   $ X!/$ )a
  Build command chain for a subcommand.

Parameters
----------
command_chain : Optional[List[str]]
    Current command chain.
command_name : str
    Name of the subcommand.
app_name : str
    Name of the root app.

Returns
-------
List[str]
    Updated command chain.
 )r   r   r   s      r   build_command_chain$BaseDocGenerator.build_command_chain+   s    $  >11++r   subapp
parent_appinclude_hiddenc                     XR                   ;   d  XR                  ;   a  g[        U[        U5      5      (       d  gU(       d  UR                  (       d  gg)a@  Check if a command should be skipped.

Parameters
----------
command_name : str
    Name of the command.
subapp : App
    The subcommand App instance.
parent_app : App
    The parent App instance.
include_hidden : bool
    Whether to include hidden commands.

Returns
-------
bool
    True if command should be skipped.
TF)_help_flags_version_flags
isinstancetypeshow)r   r    r!   r"   s       r   should_skip_command$BaseDocGenerator.should_skip_commandB   sB    ( 111\E^E^5^&$z"233fkkr   panelr   c                     U(       a  U R                   $ U R                    Vs/ s H9  nUR                  (       a#  [        S UR                   5       5      (       a  M7  UPM;     sn$ s  snf )zFilter help panel entries based on visibility settings.

Parameters
----------
panel : HelpPanel
    The help panel to filter.
include_hidden : bool
    Whether to include hidden entries.

Returns
-------
List[Any]
    Filtered panel entries.
c              3      #    U  H9  oR                  S 5      =(       d    UR                  S5      =(       d    US:H  v   M;     g7f)--help	--version-hN)
startswith.0ns     r   	<genexpr>7BaseDocGenerator.filter_help_entries.<locals>.<genexpr>w   s7     #vnuijLL$:$dall;>W$d[\`d[d$dnus   AA)entriesnamesall)r+   r"   es      r   filter_help_entries$BaseDocGenerator.filter_help_entriesa   sW      ==  ]]
"GG#vnonunu#v v "
 	
 
s   6A%A%help_formatc                     [        X5      nU$ )zExtract app description.

Parameters
----------
app : App
    The App instance.
help_format : str
    Help format type.

Returns
-------
Optional[Any]
    The extracted description object, or None.
)r   )r   r=   descriptions      r   extract_description$BaseDocGenerator.extract_descriptionz   s      !2r   c                 v    U R                   b  U R                   (       a  U R                   $ S$ [        U / 5      nU$ )zExtract usage string.

Parameters
----------
app : App
    The App instance.

Returns
-------
Optional[Any]
    The extracted usage object, or None.
N)usager	   )r   rC   s     r   extract_usageBaseDocGenerator.extract_usage   s4     99  #		3993t3S"%r   
usage_textprefixc                    U (       d  gSU ;   a   U R                  SS5      R                  5       n U(       a  SR                  U5      OSnU R                  SS5      n[	        U5      S:  a$  U(       a  U SU SUS    3nUR                  5       $ U(       a  U SU 3nUR                  5       $ U SU  3nUR                  5       $ )a  Format usage line with proper command path.

Parameters
----------
usage_text : str
    Raw usage text.
command_chain : List[str]
    Command chain for the app.
prefix : str
    Prefix for the usage line (e.g., "$").

Returns
-------
str
    Formatted usage line.
 zUsage:r   N   )replacestripr   splitlen)rF   r   rG   r   parts
usage_lines         r   format_usage_line"BaseDocGenerator.format_usage_line   s    $ z!#++Hb9??AJ2?sxx.R  q)u:>m"81\N!E!H:>J !! "81\N3J !! #81ZL1J!!r   help_panels_with_groupsc                    / / / / S.nU  GHA  u  p4U(       d  U(       a  UR                   (       d  M'  UR                  S:X  a  U(       d  UR                   Vs/ s H9  nUR                  (       a#  [	        S UR                   5       5      (       a  M7  UPM;     nnU(       aG  [        U5      " UUR                  UR                  UR                  S9nUS   R                  X745        M  M  US   R                  X445        M  UR                  S:X  d  GM  UR                  nUS:X  a  US   R                  X445        GM2  U(       a  US	;  a  US
   R                  X445        GMW  / n	/ n
UR                   HO  nUR                  =(       a    UR                  SL nU(       a  U	R                  U5        M>  U
R                  U5        MQ     U	(       a;  [        U5      " U	SUR                  UR                  S9nUS   R                  X745        U
(       d  GM  [        U5      " U
SUR                  UR                  S9nUS   R                  X745        GMD     U$ s  snf )aU  Categorize help panels by type.

Parameters
----------
help_panels_with_groups : List[Tuple[Any, HelpPanel]]
    List of (group, panel) tuples.
include_hidden : bool
    Whether to include hidden panels.

Returns
-------
Dict[str, List[Tuple[Any, HelpPanel]]]
    Categorized panels with keys: 'commands', 'arguments', 'options', 'grouped'.
)commands	argumentsoptionsgroupedcommandc              3   *   #    U  H	  oS ;   v   M     g7f))r.   r/   r0   Nr   r2   s     r   r5   5BaseDocGenerator.categorize_panels.<locals>.<genexpr>   s     /d\cWX5R0R\cs   )r7   r   r?   formatrU   	parameter	ArgumentsrV   )
ParametersOptionsrX   Nr`   rW   )r(   r\   r7   r8   r9   r'   r   r?   appendrequireddefault)rS   r"   resultgroupr+   r:   filtered_entries
panel_copyr   argsoptsentryis_positionals                r   categorize_panels"BaseDocGenerator.categorize_panels   s
   $ !rbRP3LE!eEJJ||y(% "'(!.A !C/d\]\c\c/d,d !. % (
 (%)%[$4"'++(-(9(9#(<<	&
 z*1152EF ( :&--un=,K';'..~>u,EE9%,,e^<DD!&(-(P5==D;P( KK. KK. "/ %)%[$(IZIZchcoco&
 {+22E3FGt%)%[$(	uGXGXafamam&
 y)00%1DEa 4d Y(s   6IIc              #   |  #    U R                   (       d  gU R                   R                  5        H  u  p#X R                  ;   d  X R                  ;   a  M%  [	        U[
        5      (       a  UR                  U 5      OUn[	        U[        U 5      5      (       d  Mi  U(       d  UR                  (       d  M  X$4v   M     g7f)aO  Iterate through app commands, yielding valid resolved subapps.

Automatically resolves CommandSpec instances to App instances.

Parameters
----------
app : App
    The App instance.
include_hidden : bool
    Whether to include hidden commands.

Yields
------
Tuple[str, App]
    (command_name, resolved_subapp) for each valid command.
N)		_commandsitemsr$   r%   r&   r   resolver'   r(   )r   r"   r   app_or_specr    s        r   iterate_commands!BaseDocGenerator.iterate_commands  s     $ }}!$!4!4!6D&$2D2D*D 2<K1U1U[((-[fFfd3i00!&++, "7s   B:B<r   )N)$)F)__name__
__module____qualname____firstlineno____doc__staticmethodliststrtupler   r   boolr)   r   r;   r@   rD   rQ   dictrl   rs   __static_attributes__r   r   r   r   r      s   H-% -S	D0@ -ERUWZ\_R_L` - -4 ,49t+; ,3 ,Z] ,bfgjbk , ,, # u % ae jn  < 
; 
 
c 
 
0  S S4Z  $ 5 S4Z  & !"c !"$s) !"S !"[^ !" !"F W\E!%eC,<&=!>EPTE	c4c;./00	1E EN !e !T ! !r   r   N)rz   typingr   r   cyclopts.corer   cyclopts.helpr   cyclopts.command_specr   r   r	   r   r   r   r   <module>r      s&    2 %!' - 2b br   