o ?OgxE@sdZddlZddlZddlZddlZddlTdZedeZedeefZ e ddZ Gd d d Z d d Zd dejDZddZddZGdddZedkrndZdD]ZedeedeeeeqXdSdS)a6distutils.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@seZdZdZdddZddZddZd d d Zd d Zd dZ ddZ ddZ ddZ ddZ d ddZddZdddZd ddZdS)! FancyGetoptaWrapper 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 NcCsN||_i|_|jr |i|_i|_g|_g|_i|_i|_i|_ g|_ dSN) option_table option_index _build_indexaliasnegative_alias short_opts long_opts short2long attr_name takes_arg option_orderselfrr=/opt/alt/python310/lib64/python3.10/distutils/fancy_getopt.py__init__)s  zFancyGetopt.__init__cCs(|j|jD] }||j|d<qdS)Nr)rclearr)roptionrrrr Qs  zFancyGetopt._build_indexcCs||_|dSr)rr rrrrset_option_tableVs zFancyGetopt.set_option_tablecCs:||jvr td||||f}|j|||j|<dS)Nz'option conflict: already an option '%s')rDistutilsGetoptErrorrappend)r long_optionZ short_optionZ help_stringrrrr add_optionZs   zFancyGetopt.add_optioncCs ||jvS)zcReturn true if the option table for this parser has an option with long name 'long_option'.)rrrrrr has_optioncs zFancyGetopt.has_optioncCs |tS)zTranslate long option name 'long_option' to the form it has as an attribute of some object: ie., translate hyphens to underscores. translate longopt_xlaterrrr get_attr_nameh zFancyGetopt.get_attr_namecCsN|D] \}}||jvrtd|||f||jvr$td|||fqdS)Nz(invalid %s '%s': option '%s' not definedz0invalid %s '%s': aliased option '%s' not defined)itemsrr)raliasesZwhatr optrrr_check_alias_dictns  zFancyGetopt._check_alias_dictcC||d||_dS)z'Set the aliases for this option parser.r N)r(r )rr rrr set_aliasesxs  zFancyGetopt.set_aliasescCr))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.znegative aliasN)r(r )rr rrrset_negative_aliases}s  z FancyGetopt.set_negative_aliasescCsg|_g|_|ji|_|jD]}t|dkr!|\}}}d}nt|dkr.|\}}}}ntd|ft|t r@t|dkrFt d||dus[t|t rUt|dks[t d |||j|<|j ||d d kr~|rr|d }|dd }d|j |<n!|j |}|dur|j |rt d ||f||jd <d|j |<|j|}|dur|j ||j |krt d||ft|st d||||j|<|r|j |||j|d<qdS)zPopulate the various data structures that keep tabs on the option table. Called by 'getopt()' before it can do anything worthwhile. rzinvalid option tuple: %rz9invalid long option '%s': must be a string of length >= 2Nz: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 rrrepeatrlen ValueError isinstancestrrrrr getr longopt_rematchr#r)rrlongshorthelpr3Zalias_torrr_grok_option_tablest                   zFancyGetopt._grok_option_tablec CsV|dur tjdd}|durt}d}nd}|d|j}z t|||j\}}Wntjy>}zt |d}~ww|D]a\}}t |dkrY|ddkrY|j |d}n|dd}|j |} | ri| }|j|s}|j |} | r{| }d}nd}|j|} |r|j | durt|| dd}t|| ||j||fqA|r||fS|S) aParse 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.rr)sysargv OptionDummyr>joinr getoptr errorZDistutilsArgErrorr4rr r8rr rr3getattrsetattrrr) rargsobjectZcreated_objectr Zoptsmsgr'valr attrrrrrDsF         zFancyGetopt.getoptcCs|jdur td|jS)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)rrrrget_option_orders zFancyGetopt.get_option_ordercCsdd}|jD]&}|d}|d}t|}|ddkr|d}|dur%|d}||kr+|}q|ddd}d}||} d |} |rD|g} nd g} |jD]e}|dd \}}} t| | } |ddkrf|dd}|dur| ry| d ||| dfn&| d ||fnd||f}| r| d ||| dfn| d|| ddD] }| | |qqJ| S)zGenerate help text (a list of strings, one per suggested line of output) from the option table for this FancyGetopt object. rr/r0r1Nr.Nr?zOption summary:r,z --%-*s %sz --%-*s z%s (-%s)z --%-*s)rr4 wrap_textr)rheaderZmax_optrr;r<lZ opt_widthZ line_widthZ text_widthZ big_indentlinesr=textZ opt_namesrrr generate_helpsL        zFancyGetopt.generate_helpcCs0|durtj}||D] }||dq dS)N )r@stdoutrVwrite)rrRfilelinerrr print_helphs zFancyGetopt.print_helpr)NN)__name__ __module__ __qualname____doc__rr rrrr#r(r*r+r>rDrNrVr\rrrrrs  (    M= OrcCst|}|||||Sr)rr+rD)optionsZ negative_optrIrHparserrrr fancy_getoptos  rccCsi|]}t|dqS)r?)ord).0Z_wscharrrr usrfcCs|durgSt||kr|gS|}|t}td|}dd|D}g}|rg}d}|rZt|d}|||krJ||d|d=||}n|rW|dddkrW|d=n|s/|r|dkru||dd||d|d|d<|dddkr|d=|d||s)|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( +|-+)cSsg|]}|r|qSrr)reZchrrr szwrap_text..rr0r?)r4 expandtabsr!WS_TRANSresplitrrC)rUwidthZchunksrTZcur_lineZcur_lenrSrrrrQws>       "rQcCs |tS)zXConvert a long option name to a valid Python identifier by changing "-" to "_". r )r'rrrtranslate_longoptr$rnc@seZdZdZgfddZdS)rBz_Dummy class just used as a place to hold command-line option values as instance attributes.cCs|D]}t||dqdS)zkCreate a new OptionDummy instance. The attributes listed in 'options' will be initialized to None.N)rG)rrar'rrrrszOptionDummy.__init__N)r]r^r_r`rrrrrrBsrB__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: %drW)r`r@stringrkrDZdistutils.errorsZ longopt_patcompiler9Z neg_alias_rer7 maketransr"rrcZ whitespacerjrQrnrBr]rUwprintrCrrrrs0  T6