
    5hE              	         d Z ddlmZ ddl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 dZ ej        d	e d
          Z ej        de de d          Ze                    dd          Z G d d          ZddZd ej        D             Zd Zd Z G d d          Zedk    rGdZdD ]DZ ede             ed                      eee                                e             CdS dS ) a6  distutils.fancy_getopt

Wrapper around the standard getopt module that provides the following
additional features:
  * short and long options are tied together
  * options have help strings, so fancy_getopt could potentially
    create a complete usage summary
  * options set attributes of a passed-in object
    )annotationsN)Sequence)Any   )DistutilsArgErrorDistutilsGetoptErrorz[a-zA-Z](?:[a-zA-Z0-9-]*)^$z^(z)=!(z)$-_c                  r    e Zd ZdZddZd Zd ZddZd Zd Z	d	 Z
d
 Zd Zd ZdddZd ZddZddZdS )FancyGetopta  Wrapper around the standard 'getopt()' module that provides some
    handy extra functionality:
      * short and long options are tied together
      * options have help strings, and help text can be assembled
        from them
      * options set attributes of a passed-in object
      * boolean options can have "negative aliases" -- eg. if
        --quiet is the "negative alias" of --verbose, then "--quiet"
        on the command line sets 'verbose' to false
    Nc                    || _         i | _        | j         r|                                  i | _        i | _        g | _        g | _        i | _        i | _        i | _	        g | _
        d S N)option_tableoption_index_build_indexaliasnegative_alias
short_opts	long_opts
short2long	attr_name	takes_argoption_orderselfr   s     Blib/python3.11/site-packages/setuptools/_distutils/fancy_getopt.py__init__zFancyGetopt.__init__1   s{     )  	  
 ! 
     c                l    | j                                          | j        D ]}|| j         |d         <   d S )Nr   )r   clearr   )r   options     r   r   zFancyGetopt._build_indexY   sG    !!!' 	2 	2F+1DfQi((	2 	2r    c                <    || _         |                                  d S r   )r   r   r   s     r   set_option_tablezFancyGetopt.set_option_table^   s"    (r    c                    || j         v rt          d| d          |||f}| j                            |           || j         |<   d S )Nz$option conflict: already an option '')r   r   r   append)r   long_optionshort_optionhelp_stringr#   s        r   
add_optionzFancyGetopt.add_optionb   sh    $+++&E{EEE   "<=F$$V,,,-3Dk***r    c                    || j         v S )zcReturn true if the option table for this parser has an
        option with long name 'long_option'.)r   r   r)   s     r   
has_optionzFancyGetopt.has_optionl   s     d///r    c                6    |                     t                    S )zTranslate long option name 'long_option' to the form it
        has as an attribute of some object: ie., translate hyphens
        to underscores.	translatelongopt_xlater.   s     r   get_attr_namezFancyGetopt.get_attr_nameq   s     $$]333r    c           
         t          |t                    sJ |                                D ]I\  }}|| j        vrt	          d| d| d| d          || j        vrt	          d| d| d| d          Jd S )Nzinvalid z 'z': option 'z' not defined': aliased option ')
isinstancedictitemsr   r   )r   aliaseswhatr   opts        r   _check_alias_dictzFancyGetopt._check_alias_dictw   s    '4(((((!--// 	 	JE3D---*MtMMuMMMMM   $+++*StSSuSSSSS   ,	 	r    c                @    |                      |d           || _        dS )z'Set the aliases for this option parser.r   N)r=   r   )r   r   s     r   set_aliaseszFancyGetopt.set_aliases   s#    ug...


r    c                @    |                      |d           || _        dS )zSet the negative aliases for this option parser.
        'negative_alias' should be a dictionary mapping option names to
        option names, both the key and value must already be defined
        in the option table.znegative aliasN)r=   r   )r   r   s     r   set_negative_aliasesz FancyGetopt.set_negative_aliases   s)    
 	~/?@@@,r    c                   g | _         g | _        | j                                         i | _        | j        D ]'}t          |          dk    r	|\  }}}d}n-t          |          dk    r|\  }}}}nt          d|          t          |t                    rt          |          dk     rt          d| d          |;t          |t                    rt          |          d	k    st          d
| d          || j        |<   | j                             |           |d         dk    r|r|dz   }|dd         }d| j        |<   nS| j                            |          }|-| j        |         rt          d| d| d          || j         d<   d| j        |<   | j                            |          }|2| j        |         | j        |         k    rt          d| d| d          t                               |          st          d| d          |                     |          | j        |<   |r*| j                            |           || j        |d         <   )dS )zPopulate the various data structures that keep tabs on the
        option table.  Called by 'getopt()' before it can do anything
        worthwhile.
           r      zinvalid option tuple:    zinvalid long option 'z"': must be a string of length >= 2Nr   zinvalid short option 'z"': must a single character or None=:Tzinvalid negative alias 'r6   z' takes a valueFzinvalid alias 'z%': inconsistent with aliased option 'z/' (one of them takes a value, the other doesn'tzinvalid long option name 'z)' (must be letters, numbers, hyphens only)r   r   r   r"   repeatr   len
ValueErrorr7   strr   r(   r   r   getr   
longopt_rematchr4   r   )r   r#   longshorthelprI   alias_tos          r   _grok_option_tablezFancyGetopt._grok_option_table   s   
 ' D	1 D	1F6{{a$*!eTV!!,2)eT66 !!D&!D!DEEE dC(( CIIMM*TDTTT   ]
5#(>(>]3u::QR??*VUVVV   !'DKN!!$'''Bx3 (!CKEAbDz'+t$$  .22488'~h/ 2It I I/7I I I  
 *.DN2&',t$ z~~d++H#>$'4>(+CCC.,$ , ,+3, , ,   ##D)) *> > > >  
 $(#5#5d#;#;DN4  1&&u---,0a)ID	1 D	1r    argsSequence[str] | Nonec                   |t           j        dd         }|t                      }d}nd}|                                  d                    | j                  }	 t          j        ||| j                  \  }}n&# t          j        $ r}t          |          d}~ww xY w|D ].\  }}t          |          dk    r |d         dk    r| j        |d                  }n-t          |          dk    r|dd         d	k    sJ |dd         }| j                            |          }	|	r|	}| j        |         s3|d
k    s
J d            | j                            |          }	|	r|	}d}nd}| j        |         }
|r.| j                            |
          t%          ||
d          dz   }t'          ||
|           | j                            ||f           0|r||fS |S )a  Parse command-line options in args. Store as attributes on object.

        If 'args' is None or not supplied, uses 'sys.argv[1:]'.  If
        'object' is None or not supplied, creates a new OptionDummy
        object, stores option values there, and returns a tuple (args,
        object).  If 'object' is supplied, it is modified in place and
        'getopt()' just returns 'args'; in both cases, the returned
        'args' is a modified copy of the passed-in 'args' list, which
        is left untouched.
        Nr   TF rE   r   r   z-- zboolean option can't have value)sysargvOptionDummyrT   joinr   getoptr   errorr   rJ   r   r   rM   r   r   r   rI   getattrsetattrr   r(   )r   rU   objectcreated_objectr   optsmsgr<   valr   attrs              r   r^   zFancyGetopt.getopt   s    <8ABB<D> ]]F!NN"N!!!XXdo..
	)tZHHJD$$| 	) 	) 	)#C(((	)  	1 	1HC3xx1}}Q3oc!f-3xx!||BQB47!""gJNN3''E >#& byyy"Cyyy+//44 CCCC>#&D  3t{t,,8fdA..2FD#&&&$$c3Z0000  	<Ks   A: :B	BBc                <    | j         t          d          | j         S )zReturns the list of (option, value) tuples processed by the
        previous run of 'getopt()'.  Raises RuntimeError if
        'getopt()' hasn't been called yet.
        Nz!'getopt()' hasn't been called yet)r   RuntimeError)r   s    r   get_option_orderzFancyGetopt.get_option_order  s%    
 $BCCC$$r    c                   d}| j         D ]A}|d         }|d         }t          |          }|d         dk    r|dz
  }||dz   }||k    r|}B|dz   dz   dz   }d}||z
  }	d	|z  }
|r|g}nd
g}| j         D ]}|dd         \  }}}t          ||	          }|d         dk    r
|dd         }|E|r&|                    d|d| d|d                     ni|                    d|d|            nL| d| d}|r&|                    d|d| d|d                     n|                    d|d|            |dd         D ]}|                    |
|z              |S )zGenerate help text (a list of strings, one per suggested line of
        output) from the option table for this FancyGetopt object.
        r   r   rF   rG   N   rE   N   rX   zOption summary:rC   z  --<z  z (-))r   rJ   	wrap_textr(   )r   headermax_optr#   rP   rQ   ell	opt_width
line_width
text_width
big_indentlinesrR   text	opt_namess                  r   generate_helpzFancyGetopt.generate_help'  s$    ' 		 		F!9D1IEd))CBx3Ag AgW}}aK!Oa'	0 
)+
9_
 	(HEE&'E' 	/ 	/F &rr
D%T:..DBx3AbDz } ;LL!D!Dw!D!D!D!D47!D!DEEEELL!9!9w!9!9!9!9::::
  $00000	 @LL!I	!IG!I!I!I!IQ!I!IJJJJLL!>	!>G!>!>!>!>???ABBx / /Z#-..../r    c                    |t           j        }|                     |          D ]}|                    |dz              d S )N
)rZ   stdoutr{   write)r   rq   filelines       r   
print_helpzFancyGetopt.print_helpu  sN    <:D&&v.. 	$ 	$DJJtd{####	$ 	$r    r   )NNrU   rV   )__name__
__module____qualname____doc__r   r   r%   r,   r/   r4   r=   r?   rA   rT   r^   rj   r{   r    r    r   r   r   %   s       	 	& & & &P2 2 2
  4 4 4 40 0 0
4 4 4
 
 
  
- - -N1 N1 N1`; ; ; ; ;z% % %L L L L\$ $ $ $ $ $r    r   rU   rV   c                v    t          |           }|                    |           |                    ||          S r   )r   rA   r^   )optionsnegative_optrb   rU   parsers        r   fancy_getoptr   |  s7    !!F
---==v&&&r    c                .    i | ]}t          |          d S )rX   )ord).0_wschars     r   
<dictcomp>r     s     ???'CLL#???r    c                   | g S t          |           |k    r| gS |                                 } |                     t                    } t	          j        d|           }d |D             }g }|rg }d}|r\t          |d                   }||z   |k    r$|                    |d                    |d= ||z   }n|r|d         d         dk    r|d= n|\|rQ|dk    r6|                    |d         d|                    |d         |d         |d<   |d         d         dk    r|d= |                    d                    |                     ||S )zwrap_text(text : string, width : int) -> [string]

    Split 'text' into multiple lines of no more than 'width' characters
    each, and return the list of strings that results.
    Nz( +|-+)c                    g | ]}||S r   r   )r   chs     r   
<listcomp>zwrap_text.<locals>.<listcomp>  s    (((RR(b(((r    r   rF   rX   rY   )rJ   
expandtabsr2   WS_TRANSresplitr(   r]   )ry   widthchunksrx   cur_linecur_lenrs   s          r   rp   rp     s    |	
4yyEv??D>>(##DXj$''F((6(((FE
  ( 
	fQi..C}%%q	***1I!C-  %Q3 6 6   
	  	 !||q	!E' 2333"1Ieff-q	
 ay|s""1I 	RWWX&&'''A   (D Lr    c                6    |                      t                    S )zXConvert a long option name to a valid Python identifier by
    changing "-" to "_".
    r1   )r<   s    r   translate_longoptr     s     =='''r    c                      e Zd ZdZg fddZdS )r\   z_Dummy class just used as a place to hold command-line option
    values as instance attributes.r   Sequence[Any]c                2    |D ]}t          | |d           dS )zkCreate a new OptionDummy instance.  The attributes listed in
        'options' will be initialized to None.N)ra   )r   r   r<   s      r   r   zOptionDummy.__init__  s2      	% 	%CD#t$$$$	% 	%r    N)r   r   )r   r   r   r   r   r   r    r   r\   r\     s<        & & 13 % % % % % % %r    r\   __main__zTra-la-la, supercalifragilisticexpialidocious.
How *do* you spell that odd word, anyways?
(Someone ask Mary -- she'll know [or she'll
say, "How should I know?"].))
         (   zwidth: r}   r   )!r   
__future__r   r^   r   stringrZ   collections.abcr   typingr   errorsr   r   longopt_patcompilerN   neg_alias_rerL   	maketransr3   r   r   
whitespacer   rp   r   r\   r   ry   wprintr]   r   r    r   <module>r      s
    # " " " " "  				  



 $ $ $ $ $ $       ; ; ; ; ; ; ; ; +RZ+[+++,,
 rz?{?????@@ c3''T$ T$ T$ T$ T$ T$ T$ T$n
' ' ' ' @?V->???3 3 3l( ( (% % % % % % % % z D   mmmdii		$**++,,,  r    