U
    aÊ¹jžE  ã                   @   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rþdZdD ]*Zede ƒ ed eeeƒ¡ƒ eƒ  qÒ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
é    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   úa/var/www/html/bwave/python/venv/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_optionÚshort_optionÚ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 )z’Translate 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)r4   r   )r   r   r   r   r   Úset_aliases€   s    zFancyGetopt.set_aliasesc                 C   s   |   |d¡ || _dS )zÚSet 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)r4   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	ƒr‚t|ƒdk r’t
d|› d�ƒ‚|dksÀt|t	ƒr°t|ƒd	ksÀt
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�r–t
d|› d|› d�ƒ‚t |¡�s²t
d|› d�ƒ‚|  |¡| j|< |r"| j |¡ || j|d < q"dS )z�Populate 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=   Ú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sÜt‚|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ú r9   r   r	   z--Ú zboolean option can't have value)ÚsysÚargvÚOptionDummyrH   Újoinr   Úgetoptr   Úerrorr   r>   r   r/   r   rA   r   r   r   r=   ÚgetattrÚsetattrr   r!   )r   ÚargsÚobjectÚcreated_objectr   ÚoptsÚmsgr3   Úvalr   Úattrr   r   r   rO   Þ   sF     
zFancyGetopt.getoptc                 C   s   | j dkrtdƒ‚n| j S dS )z«Returns 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 )zŒGenerate help text (a list of strings, one per suggested line of
        output) from the option table for this FancyGetopt object.
        r   r   r:   r;   Né   r9   éN   rI   zOption summary:r7   z  --%-*s  %sz
  --%-*s  z (-ú)z  --%-*s)r   r>   Ú	wrap_textr!   )r   ÚheaderÚmax_optr   rD   rE   ÚellÚ	opt_widthÚ
line_widthÚ
text_widthÚ
big_indentÚlinesrF   ÚtextÚ	opt_namesr   r   r   Úgenerate_help%  sD    



zFancyGetopt.generate_helpc                 C   s0   |d krt j}|  |¡D ]}| |d ¡ qd S )NÚ
)rK   Ústdoutrj   Ú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+   r4   r5   r6   rH   rO   r[   rj   rp   r   r   r   r   r   "   s   
(

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

Nr   c                 C   s   t | ƒ}| |¡ | ||¡S r   )r   r6   rO   )ÚoptionsÚnegative_optrT   rS   Úparserr   r   r   Úfancy_getoptz  s    
rx   c                 C   s   i | ]}t |ƒd “qS )rI   )Úord)Ú.0Z_wscharr   r   r   Ú
<dictcomp>€  s      r{   c                 C   s  | dkrg S t | ƒ|kr| gS |  ¡ } |  t¡} t d| ¡}dd„ |D ƒ}g }|�rg }d}|r´t |d ƒ}|| |kr–| |d ¡ |d= || }q\|r´|d d dkr´|d= q´q\|�r|dkrì| |d d|… ¡ |d |d… |d< |d d dk�r|d= | d |¡¡ qN|S )	z¶wrap_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   )rz   Úchr   r   r   Ú
<listcomp>‘  s      zwrap_text.<locals>.<listcomp>r   r:   rI   rJ   )r>   Ú
expandtabsr)   ÚWS_TRANSÚreÚsplitr!   rN   )rh   ÚwidthÚchunksrg   Úcur_lineÚcur_lenrb   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(   )r3   r   r   r   Útranslate_longopt¹  s    r†   c                   @   s&   e Zd ZdZg fee dœdd„ZdS )rM   z_Dummy class just used as a place to hold command-line option
    values as instance attributes.)ru   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)rR   )r   ru   r3   r   r   r   r   Ä  s    zOptionDummy.__init__N)rq   rr   rs   rt   r   r   r   r   r   r   r   rM   À  s   rM   Ú__main__z¢Tra-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: %drk   )rt   rO   r€   ÚstringrK   Útypingr   r   Úerrorsr   r   Úlongopt_patÚcompilerB   Úneg_alias_rer@   Ú	maketransr*   r   rx   Ú
whitespacer   r_   r†   rM   rq   rh   ÚwÚprintrN   r   r   r   r   Ú<module>   s0   
  Z6