U
    X7hE                     @   s  d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	m
Z
 dZede dZed	e d
e dZeddZG dd dZdd Zdd ejD Zdd Zdd ZG dd dZedkrdZdD ]*Zede  edeee e  qd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
    N)AnySequence   )DistutilsArgErrorDistutilsGetoptErrorz[a-zA-Z](?:[a-zA-Z0-9-]*)^$z^(z)=!(z)$-_c                   @   s   e Zd ZdZdddZdd Zdd Zd d	d
Zdd Zdd Z	dd Z
dd Zdd Zdd Zd!ddZdd Zd"ddZd#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                 C   sN   || _ 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    r   \/var/www/formularioweb/env/lib/python3.8/site-packages/setuptools/_distutils/fancy_getopt.py__init__.   s    	zFancyGetopt.__init__c                 C   s(   | j   | jD ]}|| j |d < qd S )Nr   )r   clearr   )r   optionr   r   r   r   V   s    

zFancyGetopt._build_indexc                 C   s   || _ |   d S r   )r   r   r   r   r   r   set_option_table[   s    zFancyGetopt.set_option_tablec                 C   s@   || j krtd| dn |||f}| j| || j |< d S )Nz$option conflict: already an option '')r   r   r   append)r   long_optionZshort_optionZhelp_stringr   r   r   r   
add_option_   s    


zFancyGetopt.add_optionc                 C   s
   || j kS )zcReturn true if the option table for this parser has an
        option with long name 'long_option'.)r   r   r"   r   r   r   
has_optioni   s    zFancyGetopt.has_optionc                 C   s
   | 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$   r   r   r   get_attr_namen   s    zFancyGetopt.get_attr_namec              	   C   sp   t |tst| D ]T\}}|| jkrDtd| d| d| d|| jkrtd| d| d| dqd S )Nzinvalid z 'z': option 'z' not defined': aliased option ')
isinstancedictAssertionErroritemsr   r   )r   aliaseswhatr   optr   r   r   _check_alias_dictt   s    

zFancyGetopt._check_alias_dictc                 C   s   |  |d || _dS )z'Set the aliases for this option parser.r   N)r2   r   )r   r   r   r   r   set_aliases   s    zFancyGetopt.set_aliasesc                 C   s   |  |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)r2   r   )r   r   r   r   r   set_negative_aliases   s    z FancyGetopt.set_negative_aliasesc                 C   s  g | _ g | _| j  i | _| jD ]}t|dkrD|\}}}d}n(t|dkr^|\}}}}ntd|t|t	rt|dk rt
d| d|dkst|t	rt|d	kst
d
| d|| j|< | j | |d dkr|r|d }|dd }d| j|< nL| j|}|dk	rJ| j| r@t
d| d| d|| j d< d| j|< | j|}|dk	r| j| | j| krt
d| d| dt|st
d| d| || j|< |r"| j| || j|d < q"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 'r*   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
ValueErrorr+   strr   r!   r   r   getr   
longopt_rematchr)   r   )r   r   longshorthelpr;   Zalias_tor   r   r   _grok_option_table   s`    










zFancyGetopt._grok_option_tablec              
   C   s  |dkrt jdd }|dkr*t }d}nd}|   d| j}zt||| j\}}W n, tjk
r } zt	|W 5 d}~X Y nX |D ]\}}t
|dkr|d dkr| j|d  }n,t
|dkr|dd d	kst|dd }| j|}	|	r|	}| j| s:|d
kstd| j|}	|	r6|	}d}nd}| j| }
|rl| j|
dk	rlt||
dd }t||
| | j||f q|r||fS |S d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 r7   r   r	   z-- zboolean option can't have value)sysargvOptionDummyrE   joinr   getoptr   errorr   r<   r   r-   r   r?   r   r   r   r;   getattrsetattrr   r!   )r   argsobjectZcreated_objectr   optsmsgr1   valr   attrr   r   r   rL      sF     
zFancyGetopt.getoptc                 C   s   | j dkrtdn| j S d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   r   r   r   get_option_order  s    

zFancyGetopt.get_option_orderc                 C   sn  d}| j D ]L}|d }|d }t|}|d dkr:|d }|dk	rJ|d }||kr
|}q
|d d d }d}|| }	d	| }
|r|g}nd
g}| j D ]}|dd \}}}t||	}|d dkr|dd }|dkr|r|d|||d f  n|d||f  n>| d| d}|r8|d|||d f  n|d|  |dd D ]}||
|  qRq|S )zGenerate help text (a list of strings, one per suggested line of
        output) from the option table for this FancyGetopt object.
        r   r   r8   r9   N   r7   N   rF   zOption summary:r5   z  --%-*s  %sz
  --%-*s  z (-)z  --%-*s)r   r<   	wrap_textr!   )r   headerZmax_optr   rB   rC   ellZ	opt_widthZ
line_widthZ
text_widthZ
big_indentlinesrD   textZ	opt_namesr   r   r   generate_help%  sD    



zFancyGetopt.generate_helpc                 C   s0   |d krt j}| |D ]}||d  qd S )N
)rH   stdoutr`   write)r   r\   fileliner   r   r   
print_helps  s    zFancyGetopt.print_help)N)NN)NN)N)NN)__name__
__module____qualname____doc__r   r   r   r#   r%   r)   r2   r3   r4   rE   rL   rW   r`   rf   r   r   r   r   r   "   s   
(

Q
=

Nr   c                 C   s   t | }|| |||S r   )r   r4   rL   )optionsnegative_optrQ   rP   parserr   r   r   fancy_getoptz  s    
rn   c                 C   s   i | ]}t |d qS )rF   )ord).0Z_wscharr   r   r   
<dictcomp>  s      rq   c                 C   s  | dkrg S t | |kr| gS |  } | t} td| }dd |D }g }|rg }d}|rt |d }|| |kr||d  |d= || }q\|r|d d dkr|d= qq\|r|dkr||d d|  |d |d |d< |d d dkr|d= |d| qN|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                 S   s   g | ]}|r|qS r   r   )rp   chr   r   r   
<listcomp>  s      zwrap_text.<locals>.<listcomp>r   r8   rF   rG   )r<   
expandtabsr'   WS_TRANSresplitr!   rK   )r_   widthchunksr^   Zcur_lineZcur_lenr]   r   r   r   r[     s:    

r[   c                 C   s
   |  tS )zXConvert a long option name to a valid Python identifier by
    changing "-" to "_".
    r&   )r1   r   r   r   translate_longopt  s    rz   c                   @   s&   e Zd ZdZg fee dddZdS )rJ   z_Dummy class just used as a place to hold command-line option
    values as instance attributes.)rk   c                 C   s   |D ]}t | |d qdS )zkCreate a new OptionDummy instance.  The attributes listed in
        'options' will be initialized to None.N)rO   )r   rk   r1   r   r   r   r     s    zOptionDummy.__init__N)rg   rh   ri   rj   r   r   r   r   r   r   r   rJ     s   rJ   __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: %dra   )rj   rL   rv   stringrH   typingr   r   errorsr   r   Zlongopt_patcompiler@   Zneg_alias_rer>   	maketransr(   r   rn   
whitespaceru   r[   rz   rJ   rg   r_   wprintrK   r   r   r   r   <module>   s0   
  Z6