ó p®øQc@sżdZdZddlZddlZddlZddlZddlmZmZdZ ej de ƒZ ej de e fƒZ ej dd ƒZd fd „ƒYZd „Zej ejd eejƒƒZd„Zd„Zdfd„ƒYZdS(s6distutils.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 s$Id$i’’’’N(tDistutilsGetoptErrortDistutilsArgErrors[a-zA-Z](?:[a-zA-Z0-9-]*)s^%s$s ^(%s)=!(%s)$t-t_t FancyGetoptcBs¤eZdZdd„Zd„Zd„Zddd„Zd„Zd„Z d„Z d„Z d „Z d „Z ddd „Zd „Zdd „Zddd„ZRS(sÕ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 cCst||_i|_|jr(|jƒni|_i|_g|_g|_i|_i|_i|_ g|_ dS(N( t option_tablet option_indext _build_indextaliastnegative_aliast short_optst long_optst short2longt attr_namet takes_argt option_order(tselfR((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyt__init__-s           cCs6|jjƒx"|jD]}||j|d= 2is:invalid short option '%s': must a single character or Nonei’’’’t=t:s>invalid negative alias '%s': aliased option '%s' takes a valuesginvalid alias '%s': inconsistent with aliased option '%s' (one of them takes a value, the other doesn'tsinvalid long option name '%s' s'(must be letters, numbers, hyphens onlyN(R R R RtrepeatRtlent ValueErrorRtstrRtNoneRRR tgetRt longopt_retmatchRR (RRtlongtshortthelpR+talias_to((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyt_grok_option_table’sd     "  !         c Cs|dkrtjd}n|dkr:tƒ}d}nd}|jƒtj|jƒ}y"tj|||j ƒ\}}Wntj k rŸ}t |‚nXx\|D]T\}}t |ƒdkré|ddkré|j |d}n2t |ƒdkr |d dkst‚|d}|jj|ƒ} | r<| }n|j|s‘|dksatdƒ‚|jj|ƒ} | rˆ| }d}q‘d}n|j|} |rÕ|jj| ƒdk rÕt|| dƒd}nt|| |ƒ|jj||fƒq§W|r||fS|SdS( sParse 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. iiiRs--tsboolean option can't have valueN(R/tsystargvt OptionDummyR7RtjoinR tgetoptR terrorRR,R R!RR0RR R R+tgetattrtsetattrRR( Rtargstobjecttcreated_objectR toptstmsgR%tvalRtattr((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyR=źsF     " "(       cCs&|jdkrtd‚n|jSdS(s«Returns the list of (option, value) tuples processed by the previous run of 'getopt()'. Raises RuntimeError if 'getopt()' hasn't been called yet. s!'getopt()' hasn't been called yetN(RR/t RuntimeError(R((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pytget_option_order*s cCsįd}x||jD]q}|d}|d}t|ƒ}|ddkrS|d}n|dk rl|d}n||kr|}qqW|ddd}d}||} d|} |rĆ|g} n d g} x|jD]}|d \}}} t| | ƒ} |ddkr|dd!}n|dkrk| rQ| jd ||| dfƒq³| jd ||fƒnHd ||f}| r¢| jd ||| dfƒn| jd|ƒx#| dD]}| j| |ƒq¾WqÖW| S(sŒGenerate help text (a list of strings, one per suggested line of output) from the option table for this FancyGetopt object. iii’’’’R)iiiNt sOption summary:is --%-*s %ss --%-*s s%s (-%s)s --%-*sN(RR,R/t wrap_textR(Rtheadertmax_optRR3R4tlt opt_widtht line_widtht text_widtht big_indenttlinesR5ttextt opt_names((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyt generate_help5sF             ! cCsG|dkrtj}nx(|j|ƒD]}|j|dƒq(WdS(Ns (R/R9tstdoutRVtwrite(RRLtfiletline((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyt print_help‰s  N(t__name__t __module__t__doc__R/RRRRRRR&R'R(R7R=RIRVR[(((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyR!s  ,      X@ TcCs)t|ƒ}|j|ƒ|j||ƒS(N(RR(R=(toptionst negative_optRBRAtparser((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyt fancy_getopt’s  RJcCs~|dkrgSt|ƒ|kr)|gStj|ƒ}tj|tƒ}tjd|ƒ}td|ƒ}g}x|ryg}d}xt|rüt|dƒ}|||krŌ|j |dƒ|d=||}q‰|rų|dddkrų|d=nPq‰W|r]|dkr<|j |dd|!ƒ|d||d [string] Split 'text' into multiple lines of no more than 'width' characters each, and return the list of strings that results. s( +|-+)ii’’’’RJR8N( R/R,Rt expandtabsRtWS_TRANStretsplittfilterRR<(RTtwidthtchunksRStcur_linetcur_lenRN((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyRKšs:       cCstj|tƒS(sXConvert a long option name to a valid Python identifier by changing "-" to "_". (RRR(R%((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyttranslate_longoptÕsR;cBseZdZgd„ZRS(s_Dummy class just used as a place to hold command-line option values as instance attributes.cCs%x|D]}t||dƒqWdS(skCreate a new OptionDummy instance. The attributes listed in 'options' will be initialized to None.N(R@R/(RR_R%((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyRąs (R\R]R^R(((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyR;Üs(R^t __revision__R9RReR=tdistutils.errorsRRt longopt_pattcompileR1t neg_alias_ret maketransRRRbt whitespaceR,RdRKRlR;(((sI/usr/jas/src/cmd/cpython/dist/sys/lib/python2.7/distutils/fancy_getopt.pyt s"    ’r " ;