o ƒ_¶axEã@sädZddlZddlZddlZddlZddlTdZe de¡Ze deef¡Z e   dd¡Z Gd d „d ƒZ d d „Zd d„ejDƒZdd„Zdd„ZGdd„dƒZedkrndZdD]Zedeƒed eeeƒ¡ƒeƒqXdSdS)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@sŠeZdZdZddd„Zdd„Zdd„Zd d d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z d dd„Zdd„Zddd„Zd dd„ZdS)!Ú 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 NcCsN||_i|_|jr | ¡i|_i|_g|_g|_i|_i|_i|_ g|_ dS©N) Ú option_tableÚ option_indexÚ _build_indexÚaliasÚnegative_aliasÚ short_optsÚ long_optsÚ short2longÚ attr_nameÚ takes_argÚ option_order©Úselfr©rúD/usr/lib/python3/dist-packages/setuptools/_distutils/fancy_getopt.pyÚ__init__)s  zFancyGetopt.__init__cCs(|j ¡|jD] }||j|d<qdS)Nr)rÚclearr)rÚoptionrrrr Qs  ÿzFancyGetopt._build_indexcCs||_| ¡dSr)rr rrrrÚset_option_tableVs zFancyGetopt.set_option_tablecCs:||jvr td|ƒ‚|||f}|j |¡||j|<dS)Nz'option conflict: already an option '%s')rÚDistutilsGetoptErrorrÚappend)rÚ long_optionÚ short_optionÚ 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'.)r©rrrrrÚ has_optioncs zFancyGetopt.has_optioncCs | 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 rrrÚ get_attr_namehó zFancyGetopt.get_attr_namecCs\t|tƒsJ‚| ¡D] \}}||jvrtd|||fƒ‚||jvr+td|||fƒ‚q dS)Nz(invalid %s '%s': option '%s' not definedz0invalid %s '%s': aliased option '%s' not defined)Ú isinstanceÚdictÚitemsrr)rÚaliasesÚwhatr Ú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.)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.znegative aliasN)r-r )rr rrrÚset_negative_aliases}s  z FancyGetopt.set_negative_aliasescCsÀg|_g|_|j ¡i|_|jD]Ì}t|ƒdkr!|\}}}d}nt|ƒdkr.|\}}}}ntd|fƒ‚t|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 |r•t d ||fƒ‚||jd <d|j |<|j |¡}|dur»|j ||j |kr»t d||fƒ‚t |¡sÆt 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. érézinvalid 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 rrÚrepeatrÚlenÚ ValueErrorr'Ústrrrrr Úgetr Ú longopt_reÚmatchr%r)rrÚlongÚshortÚhelpr8Úalias_torrrÚ_grok_option_table…st     ÿÿ ÿ        þÿ   ýÿ ÿÿ €¿zFancyGetopt._grok_option_tablec Cs†|dur tjdd…}|durtƒ}d}nd}| ¡d |j¡}z t |||j¡\}}Wntjy>}zt |ƒ‚d}~ww|D]y\}}t |ƒdkrY|ddkrY|j |d}nt |ƒdkrg|dd…d ksiJ‚|dd…}|j   |¡} | ry| }|j|s•|d ks†Jd ƒ‚|j  |¡} | r“| }d}nd}|j|} |r¬|j  | ¡dur¬t|| dƒd}t|| |ƒ|j ||f¡qA|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. Nr4TFú r3rrz--Úzboolean option can't have value)ÚsysÚargvÚ OptionDummyrCÚjoinr Úgetoptr ÚerrorÚDistutilsArgErrorr9rr r<rr rr8ÚgetattrÚsetattrrr) rÚargsÚobjectÚcreated_objectr ÚoptsÚmsgr,Úvalr ÚattrrrrrJÒsJ  €ÿ        zFancyGetopt.getoptcCs|jdur tdƒ‚|jS)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)rrrrÚget_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 ||| df¡n&|  d ||f¡nd||f}| r˜|  d ||| df¡n|  d|¡| dd…D] }|  | |¡q¥qJ| S)zŒGenerate help text (a list of strings, one per suggested line of output) from the option table for this FancyGetopt object. rr4r5r6Nér3éNrDzOption summary:r1z --%-*s %sz --%-*s z%s (-%s)z --%-*s)rr9Ú wrap_textr)rÚheaderÚmax_optrr?r@ÚlÚ opt_widthÚ line_widthÚ text_widthÚ big_indentÚlinesrAÚtextÚ opt_namesrrrÚ generate_helpsL  €      ÿÿzFancyGetopt.generate_helpcCs0|durtj}| |¡D] }| |d¡q dS)NÚ )rFÚstdoutreÚwrite)rr[ÚfileÚlinerrrÚ print_helphs ÿzFancyGetopt.print_helpr)NN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr rrr!r%r-r/r0rCrJrWrerkrrrrrs  (    M= OrcCst|ƒ}| |¡| ||¡Sr)rr0rJ)ÚoptionsÚ negative_optrPrOÚparserrrrÚ fancy_getoptos  rscCsi|]}t|ƒd“qS)rD)Úord)Ú.0Ú_wscharrrrÚ usrwcCs|durgSt|ƒ|kr|gS| ¡}| t¡}t d|¡}dd„|Dƒ}g}|rŠg}d}|rZt|dƒ}|||krJ| |d¡|d=||}n|rW|dddkrW|d=n|s/|r€|dkru| |dd|…¡|d|d…|d<|dddkr€|d=| d |¡¡|s)|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( +|-+)cSsg|]}|r|‘qSrr)ruÚchrrrÚ …szwrap_text..rr5rDrE)r9Ú expandtabsr#ÚWS_TRANSÚreÚsplitrrI)rcÚwidthÚchunksrbÚcur_lineÚcur_lenr]rrrrZws>      ö à"rZcCs | t¡S)zXConvert a long option name to a valid Python identifier by changing "-" to "_". r")r,rrrÚtranslate_longopt­r&r‚c@seZdZdZgfdd„ZdS)rHz_Dummy class just used as a place to hold command-line option values as instance attributes.cCs|D]}t||dƒqdS)zkCreate a new OptionDummy instance. The attributes listed in 'options' will be initialized to None.N)rN)rrpr,rrrr¸sÿzOptionDummy.__init__N)rlrmrnrorrrrrrH´srHÚ__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: %drf)rorFÚstringr|rJÚdistutils.errorsÚ longopt_patÚcompiler=Ú neg_alias_rer;Ú maketransr$rrsÚ whitespacer{rZr‚rHrlrcÚwÚprintrIrrrrÚs0  T6  ö