a DOgxE@sdZddlZddlZddlZddlZddlTdZedeZedeefZ e ddZ Gd d d Z d d Zd dejDZddZddZGdddZedkrdZdD]*ZedeedeeeeqdS)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!ddZddZd"ddZd#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/python39/lib64/python3.9/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_tableVszFancyGetopt.set_option_tablecCs<||jvrtd|n |||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_optioncszFancyGetopt.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_namehszFancyGetopt.get_attr_namecCsN|D]@\}}||jvr,td|||f||jvrtd|||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_dictcCs||d||_dS)z'Set the aliases for this option parser.r N)r'r )rr rrr set_aliasesxs zFancyGetopt.set_aliasescCs||d||_dS)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|dkrD|\}}}d}n(t|dkr^|\}}}}ntd|ft|t rt|dkrt d||dust|t rt|dkst d |||j|<|j ||d d kr|r|d }|dd }d|j |<nF|j |}|dur:|j |r0t d ||f||jd <d|j |<|j|}|dur|j ||j |krt d||ft|st d||||j|<|r"|j |||j|d<q"dS)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)rrlongshorthelpr1Zalias_torrr_grok_option_tablesr                     zFancyGetopt._grok_option_tablec Csp|durtjdd}|dur*t}d}nd}|d|j}zt|||j\}}Wn.tjy}zt |WYd}~n d}~00|D]\}}t |dkr|ddkr|j |d}n |dd}|j |} | r| }|j|s |j |} | r| }d}nd}|j|} |r<|j | durstdoutrTwrite)rrPfilelinerrr print_helphszFancyGetopt.print_help)N)NN)NN)N)NN)__name__ __module__ __qualname____doc__rr rrrr#r'r(r)r<rBrLrTrZrrrrrs (  M = OrcCst|}|||||Sr)rr)rB)optionsZ negative_optrGrFparserrrr fancy_getoptos racCsi|]}t|dqS)r=)ord).0Z_wscharrrr urdcCs|dur gSt||kr|gS|}|t}td|}dd|D}g}|rg}d}|rt|d}|||kr||d|d=||}q\|r|dddkr|d=qq\|r|dkr||dd||d|d|d<|dddkr|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( +|-+)cSsg|] }|r|qSrr)rcZchrrr rezwrap_text..rr.r=)r2 expandtabsr!WS_TRANSresplitrrA)rSwidthZchunksrRZcur_lineZcur_lenrQrrrrOws:      rOcCs |tS)zXConvert a long option name to a valid Python identifier by changing "-" to "_". r )r&rrrtranslate_longoptsrmc@seZdZdZgfddZdS)r@z_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)rE)rr_r&rrrrszOptionDummy.__init__N)r[r\r]r^rrrrrr@sr@__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: %drU)r^r>stringrjrBZdistutils.errorsZ longopt_patcompiler7Z neg_alias_rer5 maketransr"rraZ whitespacerirOrmr@r[rSwprintrArrrrs*  T6