509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \xE  ã               @   sä   d Z ddlZddlZddlZddlZddlT dZejde ƒZejdeef ƒZ	e
j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x2dD ]*Zede ƒ edjeeeƒƒƒ eƒ  q²W 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)Ú*z[a-zA-Z](?:[a-zA-Z0-9-]*)z^%s$z^(%s)=!(%s)$ú-Ú_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| jƒ  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   ú./usr/lib64/python3.6/distutils/fancy_getopt.pyÚ__init__)   s    	zFancyGetopt.__init__c             C   s,   | j jƒ  x| jD ]}|| j |d < qW d S )Nr   )r   Úclearr   )r   Úoptionr   r   r   r   Q   s    
zFancyGetopt._build_indexc             C   s   || _ | jƒ  d S )N)r   r   )r   r   r   r   r   Úset_option_tableV   s    zFancyGetopt.set_option_tablec             C   s<   || j krtd| ƒ‚n |||f}| jj|ƒ || j |< d S )Nz'option conflict: already an option '%s')r   ÚDistutilsGetoptErrorr   Úappend)r   Úlong_optionZshort_optionZhelp_stringr   r   r   r   Ú
add_optionZ   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_optionc   s    zFancyGetopt.has_optionc             C   s
   |j 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_xlate)r   r   r   r   r   Úget_attr_nameh   s    zFancyGetopt.get_attr_namec             C   sR   xL|j ƒ D ]@\}}|| jkr.td|||f ƒ‚|| jkr
td|||f ƒ‚q
W d S )Nz(invalid %s '%s': option '%s' not definedz0invalid %s '%s': aliased option '%s' not defined)Úitemsr   r   )r   ÚaliasesZwhatr	   Úoptr   r   r   Ú_check_alias_dictn   s    

zFancyGetopt._check_alias_dictc             C   s   | j |dƒ || _dS )z'Set the aliases for this option parser.r	   N)r#   r	   )r   r	   r   r   r   Úset_aliasesx   s    zFancyGetopt.set_aliasesc             C   s   | j |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)r#   r
   )r   r
   r   r   r   Úset_negative_aliases}   s    z FancyGetopt.set_negative_aliasesc             C   sÖ  g | _ g | _| jjƒ  i | _�x²| jD �]¦}t|ƒdkrH|\}}}d}n(t|ƒdkrb|\}}}}ntd|f ƒ‚t|t	ƒ sˆt|ƒdk r”t
d| ƒ‚|dkp°t|t	ƒo°t|ƒdks¾t
d	| ƒ‚|| j|< | j j|ƒ |d d
k�r|rî|d }|dd… }d| j|< nF| jj|ƒ}|dk	�rB| j| �r8t
d||f ƒ‚|| j d< d| j|< | jj|ƒ}|dk	�rˆ| j| | j| k�rˆt
d||f ƒ‚tj|ƒ�s t
d| ƒ‚| j|ƒ| j|< |r&| jj|ƒ || j|d < q&W 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: %ré   z9invalid long option '%s': must be a string of length >= 2Né   z:invalid short option '%s': must a single character or Noneú=ú:z>invalid negative alias '%s': aliased option '%s' takes a valuezginvalid alias '%s': inconsistent with aliased option '%s' (one of them takes a value, the other doesn'tzEinvalid long option name '%s' (must be letters, numbers, hyphens onlyéÿÿÿÿr,   r,   )r   r   r   r   Úrepeatr   ÚlenÚ
ValueErrorÚ
isinstanceÚ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   sr  |dkrt jdd… }|dkr*tƒ }d}nd}| jƒ  dj| jƒ}ytj||| jƒ\}}W n, tjk
r† } zt	|ƒ‚W Y dd}~X nX xÒ|D ]Ê\}}t
|ƒdkr¾|d dkr¾| j|d  }n|dd… }| jj|ƒ}	|	rÞ|	}| j| �s
| jj|ƒ}	|	�r|	}d}nd}| j| }
|�r<| jj|
ƒdk	�r<t||
dƒd }t||
|ƒ | jj||fƒ qŽW |�rj||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ú r(   r   r   )ÚsysÚargvÚOptionDummyr8   Újoinr   Úgetoptr   ÚerrorZDistutilsArgErrorr.   r   r	   r2   r   r
   r   r-   ÚgetattrÚsetattrr   r   )r   ÚargsÚobjectZcreated_objectr   ZoptsÚmsgr"   Úvalr	   Úattrr   r   r   r>   Ò   sB    
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   sx  d}xV| j D ]L}|d }|d }t|ƒ}|d dkr<|d }|dk	rL|d }||kr|}qW |d d d }d}|| }	d| }
|rŒ|g}nd	g}xà| j D ]Ö}|dd
… \}}}t||	ƒ}|d dkrÒ|dd… }|dk�r|� rü|jd|||d f ƒ n|jd||f ƒ n:d||f }|�r<|jd|||d f ƒ n|jd| ƒ x$|dd… D ]}|j|
| ƒ �qXW qšW |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*   Né   r(   éN   r9   zOption summary:r&   z  --%-*s  %sz
  --%-*s  z%s (-%s)z  --%-*sr,   r,   r,   )r   r.   Ú	wrap_textr   )r   ÚheaderZmax_optr   r5   r6   ÚlZ	opt_widthZ
line_widthZ
text_widthZ
big_indentÚlinesr7   ÚtextZ	opt_namesr   r   r   Úgenerate_help  sF    

zFancyGetopt.generate_helpc             C   s4   |d krt j}x | j|ƒD ]}|j|d ƒ qW d S )NÚ
)r:   ÚstdoutrP   Úwrite)r   rL   ÚfileÚliner   r   r   Ú
print_helph  s    zFancyGetopt.print_help)N)NN)NN)N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r#   r$   r%   r8   r>   rH   rP   rV   r   r   r   r   r      s   

(
	
M
=

Or   c             C   s   t | ƒ}|j|ƒ |j||ƒS )N)r   r%   r>   )ÚoptionsZnegative_optrC   rB   Úparserr   r   r   Úfancy_getopto  s    
r]   c             C   s   i | ]}d t |ƒ“qS )r9   )Úord)Ú.0Z_wscharr   r   r   ú
<dictcomp>u  s    r`   c             C   s"  | dkrg S t | ƒ|kr| gS | jƒ } | jtƒ} tjd| ƒ}dd„ |D ƒ}g }xÎ|�rg }d}xZ|r¸t |d ƒ}|| |krš|j|d ƒ |d= || }q`|r´|d	 d dkr´|d
= P q`W |�r
|dkrò|j|d d|… ƒ |d |d… |d< |d d dk�r
|d= |jdj|ƒƒ qPW |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   )r_   Zchr   r   r   ú
<listcomp>…  s    zwrap_text.<locals>.<listcomp>r   r)   r9   Ú r,   r,   )r.   Ú
expandtabsr   ÚWS_TRANSÚreÚsplitr   r=   )rO   ÚwidthZchunksrN   Zcur_lineZcur_lenrM   r   r   r   rK   w  s:    

rK   c             C   s
   | j tƒS )zXConvert a long option name to a valid Python identifier by
    changing "-" to "_".
    )r   r   )r"   r   r   r   Útranslate_longopt­  s    rh   c               @   s   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.c             C   s   x|D ]}t | |dƒ qW dS )zkCreate a new OptionDummy instance.  The attributes listed in
        'options' will be initialized to None.N)rA   )r   r[   r"   r   r   r   r   ¸  s    
zOptionDummy.__init__N)rW   rX   rY   rZ   r   r   r   r   r   r<   ´  s   r<   Ú__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: %drQ   )rj   rk   rl   rm   )rZ   r:   Ústringre   r>   Zdistutils.errorsZlongopt_patÚcompiler3   Zneg_alias_rer1   Ú	maketransr   r   r]   Z
whitespacerd   rK   rh   r<   rW   rO   ÚwÚprintr=   r   r   r   r   Ú<module>	   s*     T6
