getopt-declare 1.13 → 1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Declare.rdoc +184 -130
- data/HISTORY.txt +6 -0
- data/Rakefile +68 -0
- data/lib/Getopt/Declare.rb +86 -56
- metadata +7 -7
- data/getoptdeclare.gemspec +0 -22
data/Declare.rdoc
CHANGED
@@ -5,14 +5,24 @@
|
|
5
5
|
#
|
6
6
|
# = VERSION
|
7
7
|
#
|
8
|
-
# This document describes version 1.
|
9
|
-
#
|
10
|
-
#
|
8
|
+
# This document describes version 1.20 of Getopt::Declare,
|
9
|
+
# Released Jan 15, 2007 for Ruby.
|
10
|
+
#
|
11
|
+
# Original Perl's Getopt-Declare v1.09, Released May 21, 1999.
|
11
12
|
#
|
12
13
|
# = SYNOPSIS
|
13
14
|
#
|
14
15
|
# require "Getopt/Declare"
|
15
|
-
# args = Getopt::Declare.new(
|
16
|
+
# args = Getopt::Declare.new(<<'EOF')
|
17
|
+
#
|
18
|
+
# -q, --quiet quiet
|
19
|
+
# -f, --files <files:if>... input files
|
20
|
+
#
|
21
|
+
# EOF
|
22
|
+
#
|
23
|
+
# p args['-q']
|
24
|
+
# p args['-f']
|
25
|
+
# p args.unused
|
16
26
|
#
|
17
27
|
#
|
18
28
|
# = DESCRIPTION
|
@@ -81,8 +91,8 @@
|
|
81
91
|
# * Optional conditional execution of embedded actions (i.e. only on
|
82
92
|
# successful parsing of the entire command-line)
|
83
93
|
#
|
84
|
-
# * Strict or non-strict parsing (unrecognized command-line elements may
|
85
|
-
# trigger an error or may simply be left in +ARGV+
|
94
|
+
# * Strict or non-strict parsing (unrecognized command-line elements may
|
95
|
+
# either trigger an error or may simply be left in +ARGV+
|
86
96
|
#
|
87
97
|
# * Declarative specification of various inter-parameter relationships (for
|
88
98
|
# example, two parameters may be declared mutually exclusive and this
|
@@ -97,6 +107,8 @@
|
|
97
107
|
# * The ability to parse files (especially configuration files) instead of
|
98
108
|
# the command-line.
|
99
109
|
#
|
110
|
+
# * GNU style parameter definition allowed (-q, --quiet) in a single line.
|
111
|
+
#
|
100
112
|
# == Terminology
|
101
113
|
#
|
102
114
|
# The terminology of command-line processing is often confusing, with various
|
@@ -136,8 +148,8 @@
|
|
136
148
|
#
|
137
149
|
# * <b>"parameter definition"</b>
|
138
150
|
#
|
139
|
-
# A specification of one actual syntax variant matched by a parameter.
|
140
|
-
# consists of a leading _parameter_ _flag_ or _parameter_ _variable_,
|
151
|
+
# A specification of one actual syntax variant matched by a parameter.
|
152
|
+
# Always consists of a leading _parameter_ _flag_ or _parameter_ _variable_,
|
141
153
|
# optionally followed by one or more _parameter_ _components_ (that is,
|
142
154
|
# other parameter variables or _punctuators_. In the above example,
|
143
155
|
# <tt>--window <height> x <width></tt> is a parameter definition.
|
@@ -145,18 +157,18 @@
|
|
145
157
|
#
|
146
158
|
# * <b>"parameter flag" (or just "flag")</b>
|
147
159
|
#
|
148
|
-
# A sequence of non-space characters which introduces a parameter.
|
149
|
-
# a parameter flag begins with "-" or "--", but
|
150
|
-
# almost any sequence of characters to be used as
|
151
|
-
# <tt>--window</tt> is the parameter flag.
|
160
|
+
# A sequence of non-space characters which introduces a parameter.
|
161
|
+
# Traditionally a parameter flag begins with "-" or "--", but
|
162
|
+
# Getopt::Declare allows almost any sequence of characters to be used as
|
163
|
+
# a flag. In the above example, <tt>--window</tt> is the parameter flag.
|
152
164
|
#
|
153
165
|
#
|
154
166
|
# * <b>"parameter variable"</b>
|
155
167
|
#
|
156
168
|
# A place-holder (within a parameter specification) for a value that
|
157
169
|
# will appear in any argument matching that parameter. In the above example,
|
158
|
-
# <tt>-height</tt>, <tt>-width</tt>, <tt>-h</tt>, <tt>-w</tt>, <tt>-x</tt>,
|
159
|
-
# all parameter variables.
|
170
|
+
# <tt>-height</tt>, <tt>-width</tt>, <tt>-h</tt>, <tt>-w</tt>, <tt>-x</tt>,
|
171
|
+
# and <tt>-y</tt> are all parameter variables.
|
160
172
|
#
|
161
173
|
#
|
162
174
|
# * <b>"parameter punctuator" (or just "punctuator")</b>
|
@@ -204,8 +216,9 @@
|
|
204
216
|
# The parameter definition consists of a leading flag or parameter
|
205
217
|
# variable, followed by any number of parameter variables or
|
206
218
|
# punctuators, optionally separated by spaces. The parameter definition
|
207
|
-
# is terminated by one or more tabs
|
208
|
-
#
|
219
|
+
# is terminated by one or more tabs or, alternatively, 3 or more spaces
|
220
|
+
# (at least one trailing tab or 3 trailing spaces _must_ appear for the
|
221
|
+
# line to be considered a parameter definition).
|
209
222
|
#
|
210
223
|
# For example, all of the following are valid Getopt::Declare parameter
|
211
224
|
# definitions:
|
@@ -248,9 +261,9 @@
|
|
248
261
|
# --lines1-10
|
249
262
|
# --lines 1-10
|
250
263
|
#
|
251
|
-
# Note that the optional nature of spaces in parameter specification implies
|
252
|
-
# flags and punctuators cannot contain the character '<' (which is taken
|
253
|
-
# delimiter for a parameter variable) nor the character '[' (which
|
264
|
+
# Note that the optional nature of spaces in parameter specification implies
|
265
|
+
# that flags and punctuators cannot contain the character '<' (which is taken
|
266
|
+
# as the delimiter for a parameter variable) nor the character '[' (which
|
254
267
|
# introduces an optional parameter component - see
|
255
268
|
# "Optional parameter components".
|
256
269
|
#
|
@@ -344,8 +357,8 @@
|
|
344
357
|
# -list [<page>...]
|
345
358
|
#
|
346
359
|
# Two or more parameter components may be made jointly optional, by specifying
|
347
|
-
# them in the same pair of brackets. Optional components may also be nested.
|
348
|
-
# example:
|
360
|
+
# them in the same pair of brackets. Optional components may also be nested.
|
361
|
+
# For example:
|
349
362
|
#
|
350
363
|
# -range <from> [.. [<to>] ]
|
351
364
|
#
|
@@ -364,6 +377,18 @@
|
|
364
377
|
# Note that the actual flags for these three parameters are <tt>-num</tt>,
|
365
378
|
# <tt>-lexic</tt> and <tt>-b</tt>, respectively.
|
366
379
|
#
|
380
|
+
# == GNU-style parameters
|
381
|
+
#
|
382
|
+
# As of v1.20 of Getopt-Declare, it is also possible to write
|
383
|
+
# parameter descriptions following GNU's conventions.
|
384
|
+
# You can write, for example:
|
385
|
+
#
|
386
|
+
# -f, --file <file:if> Filename to read
|
387
|
+
#
|
388
|
+
# This allows both <tt>-f <file></tt> and <tt>--file <file></tt> to be
|
389
|
+
# valid options.
|
390
|
+
# When retrieving the value, use the short form <tt>args['-f']</tt>.
|
391
|
+
#
|
367
392
|
# == Parameter descriptions
|
368
393
|
#
|
369
394
|
# Providing a textual description for each parameter (or parameter
|
@@ -423,7 +448,7 @@
|
|
423
448
|
# same name. For example:
|
424
449
|
#
|
425
450
|
# +range <from>..<to> Set range
|
426
|
-
# { setrange(
|
451
|
+
# { setrange(from, to) }
|
427
452
|
#
|
428
453
|
# -list <page:i>... Specify pages to list
|
429
454
|
# { page.each { |i|
|
@@ -461,7 +486,7 @@
|
|
461
486
|
# verbose = 2
|
462
487
|
# else
|
463
488
|
# verbose = 1
|
464
|
-
#
|
489
|
+
# end
|
465
490
|
# }
|
466
491
|
#
|
467
492
|
# * <tt>\_FOUND_</tt> Hash
|
@@ -485,8 +510,8 @@
|
|
485
510
|
#
|
486
511
|
# For reasons that will be explained in "Rejection and termination",
|
487
512
|
# a given parameter is not marked as found until _after_ its
|
488
|
-
# associated actions are executed. That is, <tt>_FOUND_[\_PARAM_]</tt> will
|
489
|
-
# (usually) be true during a parameter action.
|
513
|
+
# associated actions are executed. That is, <tt>_FOUND_[\_PARAM_]</tt> will
|
514
|
+
# not (usually) be true during a parameter action.
|
490
515
|
#
|
491
516
|
#
|
492
517
|
# Note that, although numerous other internal variables on which the
|
@@ -543,8 +568,9 @@
|
|
543
568
|
#
|
544
569
|
# -v Verbose mode
|
545
570
|
#
|
546
|
-
# means that the arguments "-q" and "-Q" will both match the <tt>-q</tt>
|
547
|
-
# that only "-v" (and _not_ "-V") will match the <tt>-v</tt>
|
571
|
+
# means that the arguments "-q" and "-Q" will both match the <tt>-q</tt>
|
572
|
+
# parameter, but that only "-v" (and _not_ "-V") will match the <tt>-v</tt>
|
573
|
+
# parameter.
|
548
574
|
#
|
549
575
|
# If a <tt>[nocase]</tt> directive appears anywhere _outside_ a parameter
|
550
576
|
# description, then the entire specification is declared case-insensitive
|
@@ -630,16 +656,18 @@
|
|
630
656
|
#
|
631
657
|
# which restricts a parameter variable to matching positive, non-zero
|
632
658
|
# numbers (that is, floating point numbers strictly greater than zero).
|
659
|
+
# Scientific notation can also be used.
|
633
660
|
#
|
634
661
|
# * :0+i
|
635
662
|
#
|
636
|
-
# which restricts a parameter variable to matching non-negative integers
|
637
|
-
# is: 0, 1, 2, 3, etc.)
|
663
|
+
# which restricts a parameter variable to matching non-negative integers
|
664
|
+
# (that is: 0, 1, 2, 3, etc.)
|
638
665
|
#
|
639
666
|
# * :0+n
|
640
667
|
#
|
641
|
-
# which restricts a parameter variable to matching non-negative numbers
|
642
|
-
# is, floating point numbers greater than or equal to zero).
|
668
|
+
# which restricts a parameter variable to matching non-negative numbers
|
669
|
+
# (that is, floating point numbers greater than or equal to zero).
|
670
|
+
# Scientific notation can also be used.
|
643
671
|
#
|
644
672
|
# * :s
|
645
673
|
#
|
@@ -664,9 +692,10 @@
|
|
664
692
|
#
|
665
693
|
# * :of
|
666
694
|
#
|
667
|
-
# which is used to match output file names. It is exactly like type ':if'
|
668
|
-
# that it requires that the string is either "-" (indicating
|
669
|
-
# or the name of a file that is either writable or
|
695
|
+
# which is used to match output file names. It is exactly like type ':if'
|
696
|
+
# except that it requires that the string is either "-" (indicating
|
697
|
+
# standard output) or the name of a file that is either writable or
|
698
|
+
# non-existent.
|
670
699
|
#
|
671
700
|
# * :s
|
672
701
|
#
|
@@ -697,14 +726,14 @@
|
|
697
726
|
#
|
698
727
|
# * %T
|
699
728
|
#
|
700
|
-
# If the sequence <tt>%T</tt> appears in a pattern, it is translated to a
|
701
|
-
# lookahead containing the parameter variable's trailing context.
|
729
|
+
# If the sequence <tt>%T</tt> appears in a pattern, it is translated to a
|
730
|
+
# negative lookahead containing the parameter variable's trailing context.
|
702
731
|
# Hence the parameter definition:
|
703
732
|
#
|
704
733
|
# -find <what:/(%T.)+/> ;
|
705
734
|
#
|
706
|
-
# ensures that the command line argument "-find abcd;" causes
|
707
|
-
# to match "abcd", _not_ "abcd;".
|
735
|
+
# ensures that the command line argument "-find abcd;" causes
|
736
|
+
# <tt><-what></tt> to match "abcd", _not_ "abcd;".
|
708
737
|
#
|
709
738
|
#
|
710
739
|
# * %D
|
@@ -793,10 +822,10 @@
|
|
793
822
|
# match if it's Wednesday (like its parent type ":num").
|
794
823
|
#
|
795
824
|
# * the new type ":nbr" matches any string of digits (like its parent type
|
796
|
-
# ":a num"), but then rejects the match if the global <tt>$no_nbr</tt>
|
797
|
-
# is true. Otherwise it next prints out "a num!" (like its
|
798
|
-
# ":a num"), and finally rejects the match if it's
|
799
|
-
# grandparent type ":num").
|
825
|
+
# ":a num"), but then rejects the match if the global <tt>$no_nbr</tt>
|
826
|
+
# variable is true. Otherwise it next prints out "a num!" (like its
|
827
|
+
# parent type ":a num"), and finally rejects the match if it's
|
828
|
+
# Wednesday (like its grandparent type ":num").
|
800
829
|
#
|
801
830
|
#
|
802
831
|
# When a type action is executed (as part of a particular parameter
|
@@ -804,11 +833,12 @@
|
|
804
833
|
#
|
805
834
|
# * <tt>\_VAL_</tt> String/Fixnum/Float
|
806
835
|
#
|
807
|
-
# which contains the value matched by the type's pattern. It is this
|
808
|
-
# is ultimately assigned to the local Ruby variable which is
|
809
|
-
# parameter actions. Hence if the type action changes the
|
810
|
-
# that changed value becomes the "real" value
|
811
|
-
# variable (see the Roman numeral example
|
836
|
+
# which contains the value matched by the type's pattern. It is this
|
837
|
+
# value which is ultimately assigned to the local Ruby variable which is
|
838
|
+
# available to parameter actions. Hence if the type action changes the
|
839
|
+
# value of <tt>\_VAL_</tt>, that changed value becomes the "real" value
|
840
|
+
# of the corresponding parameter variable (see the Roman numeral example
|
841
|
+
# below).
|
812
842
|
# Note that <tt>\_VAL_</tt> is a variable of different type based on
|
813
843
|
# parameter specified. For [pvtype:...] it is always a String variable.
|
814
844
|
#
|
@@ -909,8 +939,8 @@
|
|
909
939
|
# Sometimes it is desirable to provide two or more alternate flags for
|
910
940
|
# the same behaviour (typically, a short form and a long form). To
|
911
941
|
# reduce the burden of specifying such pairs, the special directive
|
912
|
-
# <tt>[ditto]</tt> is provided. If the description of a parameter _begins_
|
913
|
-
# a <tt>[ditto]</tt> directive, that directive is replaced with the
|
942
|
+
# <tt>[ditto]</tt> is provided. If the description of a parameter _begins_
|
943
|
+
# with a <tt>[ditto]</tt> directive, that directive is replaced with the
|
914
944
|
# description for the immediately preceding parameter (including any
|
915
945
|
# other directives). For example:
|
916
946
|
#
|
@@ -930,7 +960,8 @@
|
|
930
960
|
# { $verbose = 1; }
|
931
961
|
# --verbose [ditto]
|
932
962
|
#
|
933
|
-
# would result in the <tt>--verbose</tt> option setting
|
963
|
+
# would result in the <tt>--verbose</tt> option setting
|
964
|
+
# <tt>$verbose</tt> just like the
|
934
965
|
# <tt>-v</tt> option. On the other hand, the specification:
|
935
966
|
#
|
936
967
|
# -v Verbose mode
|
@@ -950,11 +981,11 @@
|
|
950
981
|
# the command-line arguments they modify.
|
951
982
|
#
|
952
983
|
# To support this, Getopt::Declare provides a local operator (+defer+) which
|
953
|
-
# delays the execution of a particular action until the command-line
|
954
|
-
# is finished. The +defer+ operator takes a single block, the
|
955
|
-
# is deferred until the command-line is fully and
|
956
|
-
# command-line processing _fails_ for some reason
|
957
|
-
# deferred blocks are never executed.
|
984
|
+
# delays the execution of a particular action until the command-line
|
985
|
+
# processing is finished. The +defer+ operator takes a single block, the
|
986
|
+
# execution of which is deferred until the command-line is fully and
|
987
|
+
# successfully parsed. If command-line processing _fails_ for some reason
|
988
|
+
# (see "DIAGNOSTICS"), the deferred blocks are never executed.
|
958
989
|
#
|
959
990
|
# For example:
|
960
991
|
#
|
@@ -1016,8 +1047,8 @@
|
|
1016
1047
|
# controlling "+".
|
1017
1048
|
#
|
1018
1049
|
# In some circumstances a clustered sequence of flags on the command-line
|
1019
|
-
# might also match a single (multicharacter) parameter flag.
|
1020
|
-
# the specifications:
|
1050
|
+
# might also match a single (multicharacter) parameter flag.
|
1051
|
+
# For example, given the specifications:
|
1021
1052
|
#
|
1022
1053
|
# -a Blood type is A
|
1023
1054
|
# -b Blood type is B
|
@@ -1035,7 +1066,8 @@
|
|
1035
1066
|
# but (as the above example illustrates) may not always do so. If the
|
1036
1067
|
# idea of unconstrained flag clustering is too libertarian for a particular
|
1037
1068
|
# application, the feature may be restricted (or removed completely),
|
1038
|
-
# by including a <tt>[cluster:...]</tt> directive anywhere in the
|
1069
|
+
# by including a <tt>[cluster:...]</tt> directive anywhere in the
|
1070
|
+
# specification string.
|
1039
1071
|
#
|
1040
1072
|
# The options are:
|
1041
1073
|
#
|
@@ -1047,7 +1079,8 @@
|
|
1047
1079
|
# * <tt>[cluster: flags]</tt>
|
1048
1080
|
#
|
1049
1081
|
# This version of the directive restricts clustering to parameters which are
|
1050
|
-
# "pure" flags (that is, those which have no parameter variables or
|
1082
|
+
# "pure" flags (that is, those which have no parameter variables or
|
1083
|
+
# punctuators).
|
1051
1084
|
#
|
1052
1085
|
# * <tt>[cluster: singles]</tt>
|
1053
1086
|
#
|
@@ -1072,15 +1105,17 @@
|
|
1072
1105
|
# [cluster:singles]
|
1073
1106
|
# EOSPEC
|
1074
1107
|
#
|
1075
|
-
# In the above example, only the <tt>-a</tt> and <tt>-b</tt> parameters may
|
1108
|
+
# In the above example, only the <tt>-a</tt> and <tt>-b</tt> parameters may
|
1109
|
+
# be clustered.
|
1076
1110
|
# The <tt>-bu</tt> parameter is excluded because it consists of more than one
|
1077
|
-
# letter, whilst the <tt>-c</tt> and <tt>-d</tt> parameters are excluded
|
1078
|
-
# take (or may take, in <tt>-d</tt>'s case) a variable. The
|
1079
|
-
# is excluded because it may take a trailing
|
1111
|
+
# letter, whilst the <tt>-c</tt> and <tt>-d</tt> parameters are excluded
|
1112
|
+
# because they take (or may take, in <tt>-d</tt>'s case) a variable. The
|
1113
|
+
# <tt>-e[xec]</tt> parameter is excluded because it may take a trailing
|
1114
|
+
# punctuator (<tt>[xec]</tt>).
|
1080
1115
|
#
|
1081
1116
|
# By comparison, if the directive had been <tt>[cluster: flags]</tt>, then
|
1082
|
-
# <tt>-bu</tt> _could_ be clustered, though <tt>-c</tt>, <tt>-d</tt> and
|
1083
|
-
# still be excluded since they are not "pure flags").
|
1117
|
+
# <tt>-bu</tt> _could_ be clustered, though <tt>-c</tt>, <tt>-d</tt> and
|
1118
|
+
# <tt>-e[xec]</tt> would still be excluded since they are not "pure flags").
|
1084
1119
|
#
|
1085
1120
|
#
|
1086
1121
|
# == Strict and non-strict command-line parsing
|
@@ -1185,8 +1220,8 @@
|
|
1185
1220
|
#
|
1186
1221
|
# However, it is sometimes useful to allow a particular parameter to match
|
1187
1222
|
# more than once. Any parameter whose description includes the directive
|
1188
|
-
# <tt>[repeatable]</tt> is _never_ excluded as a potential argument match,
|
1189
|
-
# how many times it has matched previously:
|
1223
|
+
# <tt>[repeatable]</tt> is _never_ excluded as a potential argument match,
|
1224
|
+
# no matter how many times it has matched previously:
|
1190
1225
|
#
|
1191
1226
|
# -nice Increase nice value (linearly if repeated)
|
1192
1227
|
# [repeatable]
|
@@ -1196,9 +1231,9 @@
|
|
1196
1231
|
# of the command-line
|
1197
1232
|
# { warn = !warn }
|
1198
1233
|
#
|
1199
|
-
# As a more general mechanism is a <tt>[repeatable]</tt> directive
|
1200
|
-
# specification anywhere other than a flag's description,
|
1201
|
-
# are marked repeatable:
|
1234
|
+
# As a more general mechanism is a <tt>[repeatable]</tt> directive
|
1235
|
+
# appears in a specification anywhere other than a flag's description,
|
1236
|
+
# then _all_ parameters are marked repeatable:
|
1202
1237
|
#
|
1203
1238
|
# [repeatable]
|
1204
1239
|
#
|
@@ -1259,9 +1294,10 @@
|
|
1259
1294
|
# * <tt>[excludes: <flag list>]</tt>
|
1260
1295
|
#
|
1261
1296
|
# The <tt>[excludes:...]</tt> directive provides a "pairwise" version of
|
1262
|
-
# mutual exclusion, specifying that the current parameter is mutually
|
1263
|
-
# with all the other parameters lists, but those other
|
1264
|
-
# mutually exclusive with each other. That is,
|
1297
|
+
# mutual exclusion, specifying that the current parameter is mutually
|
1298
|
+
# exclusive with all the other parameters lists, but those other
|
1299
|
+
# parameters are not mutually exclusive with each other. That is,
|
1300
|
+
# whereas the specification:
|
1265
1301
|
#
|
1266
1302
|
# -left Justify to left margin
|
1267
1303
|
# -right Justify to right margin
|
@@ -1269,8 +1305,8 @@
|
|
1269
1305
|
#
|
1270
1306
|
# [mutex: -left -right -centre]
|
1271
1307
|
#
|
1272
|
-
# means that only one of these three justification alternatives can ever
|
1273
|
-
# at once, the specification:
|
1308
|
+
# means that only one of these three justification alternatives can ever
|
1309
|
+
# be used at once, the specification:
|
1274
1310
|
#
|
1275
1311
|
# -left Justify to left margin
|
1276
1312
|
# -right Justify to right margin
|
@@ -1278,7 +1314,8 @@
|
|
1278
1314
|
#
|
1279
1315
|
# means that <tt>-left</tt> and <tt>-right</tt> can still be used together
|
1280
1316
|
# (probably to indicate "left _and_ right" justification), but that
|
1281
|
-
# neither can be used with <tt>-centre</tt>. Note that
|
1317
|
+
# neither can be used with <tt>-centre</tt>. Note that
|
1318
|
+
# the <tt>[excludes:...]</tt>
|
1282
1319
|
# directive also differs from the <tt>[mutex:...]</tt> in that it is always
|
1283
1320
|
# connected with a paricular parameter, _implicitly_
|
1284
1321
|
# using the flag of that parameter as the target of exclusion.
|
@@ -1290,7 +1327,8 @@
|
|
1290
1327
|
# must also appear in order for a particular flag to be permitted in the
|
1291
1328
|
# command-line. The condition is a boolean expression, in which the
|
1292
1329
|
# terms are the flags or various parameters, and the operations are
|
1293
|
-
# <tt>&&</tt>, <tt>||</tt>, <tt>!</tt>, and bracketting. For example,
|
1330
|
+
# <tt>&&</tt>, <tt>||</tt>, <tt>!</tt>, and bracketting. For example,
|
1331
|
+
# the specifications:
|
1294
1332
|
#
|
1295
1333
|
# -num Use numeric sort order
|
1296
1334
|
# -lex Use "dictionary" sort order
|
@@ -1301,31 +1339,36 @@
|
|
1301
1339
|
# -rev Reverse sort order
|
1302
1340
|
# [requires: -num || -lex || !(-len && -field)]
|
1303
1341
|
#
|
1304
|
-
# means that the <tt>-rev</tt> flag is allowed only if either the
|
1305
|
-
# <tt>-lex</tt> parameter has been used, or if it
|
1306
|
-
# _both_ the <tt>-len</tt> _and_ the <tt>-field</tt>
|
1342
|
+
# means that the <tt>-rev</tt> flag is allowed only if either the
|
1343
|
+
# <tt>-num</tt> or the <tt>-lex</tt> parameter has been used, or if it
|
1344
|
+
# is not true that _both_ the <tt>-len</tt> _and_ the <tt>-field</tt>
|
1345
|
+
# parameters have been used.
|
1307
1346
|
#
|
1308
|
-
# Note that the operators <tt>&&</tt>, <tt>||</tt> and <tt>!</tt> retain
|
1309
|
-
# Ruby precedences.
|
1347
|
+
# Note that the operators <tt>&&</tt>, <tt>||</tt> and <tt>!</tt> retain
|
1348
|
+
# their normal Ruby precedences.
|
1310
1349
|
#
|
1311
1350
|
#
|
1312
1351
|
# == Parsing from other sources
|
1313
1352
|
#
|
1314
1353
|
# Getopt::Declare normally parses the contents of +ARGV+, but can
|
1315
1354
|
# be made to parse specified files or other sources instead.
|
1316
|
-
# To accommodate this, Getopt::Declare::new() takes an optional second
|
1317
|
-
#
|
1355
|
+
# To accommodate this, Getopt::Declare::new() takes an optional second
|
1356
|
+
# parameter, which specifies a file to be parsed.
|
1357
|
+
# This second parameter can also be passed directly onto
|
1358
|
+
# Getopt::Declare::parse()
|
1318
1359
|
# The parameter may be either:
|
1319
1360
|
#
|
1320
1361
|
# * An +IO+ object
|
1321
1362
|
#
|
1322
1363
|
# in which case Getopt::Declare::new() reads the corresponding handle until
|
1323
|
-
# end-of-file, and parses the resulting text (even if it is an
|
1364
|
+
# end-of-file, and parses the resulting text (even if it is an
|
1365
|
+
# empty string).
|
1324
1366
|
#
|
1325
1367
|
# * An ARRAY containing the single string ['-CONFIG']
|
1326
1368
|
#
|
1327
1369
|
# in which case Getopt::Declare::new() looks for the files
|
1328
|
-
# <tt>ENV['HOME']/.#{progname}rc</tt> and
|
1370
|
+
# <tt>ENV['HOME']/.#{progname}rc</tt> and
|
1371
|
+
# <tt>ENV['PWD']/.#{progname}rc</tt>,
|
1329
1372
|
# concatenates their contents, and parses that.
|
1330
1373
|
#
|
1331
1374
|
# If neither file is found (or if both are inaccessible)
|
@@ -1339,7 +1382,8 @@
|
|
1339
1382
|
# See "The Getopt::Declare::code() method" and
|
1340
1383
|
# "The Getopt::Declare::parse() method".
|
1341
1384
|
#
|
1342
|
-
# * An ARRAY containing the single string ['-SKIP'] or the single
|
1385
|
+
# * An ARRAY containing the single string ['-SKIP'] or the single
|
1386
|
+
# value [nil] or nothing []
|
1343
1387
|
#
|
1344
1388
|
# in which case Getopt::Declare::new() immediately returns zero.
|
1345
1389
|
# This alternative is useful when using a +File+:
|
@@ -1348,8 +1392,8 @@
|
|
1348
1392
|
# File.new(filename) || ['-SKIP'])
|
1349
1393
|
#
|
1350
1394
|
# because it makes explicit what happens if File::new() fails. Of course,
|
1351
|
-
# if the <tt>['-SKIP']</tt> alternative were omitted, Getopt::Declare::new
|
1352
|
-
# still return immediately, having found +nil+ as its second argument.
|
1395
|
+
# if the <tt>['-SKIP']</tt> alternative were omitted, Getopt::Declare::new
|
1396
|
+
# would still return immediately, having found +nil+ as its second argument.
|
1353
1397
|
#
|
1354
1398
|
# * An ARRAY containing the word "-ARGV" followed by another ARRAY
|
1355
1399
|
#
|
@@ -1362,7 +1406,8 @@
|
|
1362
1406
|
# * Any other ARRAY
|
1363
1407
|
#
|
1364
1408
|
# in which case Getopt::Declare::new() treats the array elements as a
|
1365
|
-
# list of filenames, concatenates the contents of those files, and
|
1409
|
+
# list of filenames, concatenates the contents of those files, and
|
1410
|
+
# parses that.
|
1366
1411
|
#
|
1367
1412
|
# If the list does not denote any accessible file(s)
|
1368
1413
|
# Getopt::Declare::new() immediately returns zero. If matching files
|
@@ -1385,8 +1430,8 @@
|
|
1385
1430
|
# * Parameter data
|
1386
1431
|
#
|
1387
1432
|
# For each successfully matched parameter, the Getopt::Declare object
|
1388
|
-
# will contain a hash element. The key of that element will be the
|
1389
|
-
# or parameter variable name of the parameter.
|
1433
|
+
# will contain a hash element. The key of that element will be the
|
1434
|
+
# leading flag or parameter variable name of the parameter.
|
1390
1435
|
#
|
1391
1436
|
# The value of the element will be another hash which contains
|
1392
1437
|
# the names and values of each distinct parameter variable and/or
|
@@ -1396,8 +1441,9 @@
|
|
1396
1441
|
# Float, String). List parameter variables generate Arrays.
|
1397
1442
|
#
|
1398
1443
|
# As a special case, if a parameter consists of a single component
|
1399
|
-
# (either a single flag or a single parameter variable), then the value
|
1400
|
-
# corresponding hash key is not another hash, but the actual
|
1444
|
+
# (either a single flag or a single parameter variable), then the value
|
1445
|
+
# for the corresponding hash key is not another hash, but the actual
|
1446
|
+
# value matched.
|
1401
1447
|
#
|
1402
1448
|
# The following example illustrates the various possibilities:
|
1403
1449
|
#
|
@@ -1425,9 +1471,9 @@
|
|
1425
1471
|
#
|
1426
1472
|
# The values which are assigned to the various hash elements are copied from
|
1427
1473
|
# the corresponding blocked-scoped variables which are available within
|
1428
|
-
# actions. In particular, if the value of any of those block-scoped
|
1429
|
-
# is changed within an action, that changed value is saved in
|
1430
|
-
# example, given the specification:
|
1474
|
+
# actions. In particular, if the value of any of those block-scoped
|
1475
|
+
# variables is changed within an action, that changed value is saved in
|
1476
|
+
# the hash. For example, given the specification:
|
1431
1477
|
#
|
1432
1478
|
# args = Getopt::Declare.new( %q{
|
1433
1479
|
#
|
@@ -1455,12 +1501,14 @@
|
|
1455
1501
|
#
|
1456
1502
|
# * The Getopt::Declare::usage() method
|
1457
1503
|
#
|
1458
|
-
# Once a Getopt::Declare object is created, its <tt>usage()</tt> method
|
1459
|
-
# to explicitly print out usage information corresponding
|
1460
|
-
# with which it was built. See "Usage information"
|
1461
|
-
#
|
1462
|
-
#
|
1463
|
-
# <tt>
|
1504
|
+
# Once a Getopt::Declare object is created, its <tt>usage()</tt> method
|
1505
|
+
# may be called to explicitly print out usage information corresponding
|
1506
|
+
# to the specification with which it was built. See "Usage information"
|
1507
|
+
# for more details.
|
1508
|
+
# If the <tt>usage()</tt> method is called with an argument, that argument
|
1509
|
+
# is passed to <tt>exit</tt> after the usage information is printed
|
1510
|
+
# (the no-argument version of <tt>usage()</tt> simply returns at that
|
1511
|
+
# point).
|
1464
1512
|
#
|
1465
1513
|
#
|
1466
1514
|
# * The Getopt::Declare::version() method
|
@@ -1471,8 +1519,8 @@
|
|
1471
1519
|
# Note that this implies that _all_ Getopt::Declare objects in a
|
1472
1520
|
# single program will print out identical version information.
|
1473
1521
|
#
|
1474
|
-
# Like the <tt>usage()</tt> method, if <tt>version</tt> is passed an
|
1475
|
-
# will exit with that value after printing.
|
1522
|
+
# Like the <tt>usage()</tt> method, if <tt>version</tt> is passed an
|
1523
|
+
# argument, it will exit with that value after printing.
|
1476
1524
|
#
|
1477
1525
|
#
|
1478
1526
|
# * The Getopt::Declare::parse() method
|
@@ -1539,7 +1587,6 @@
|
|
1539
1587
|
# specification, by extracting it from between the first "=for
|
1540
1588
|
# Getopt::Declare" and the next "=cut" appearing on +$stdin+:
|
1541
1589
|
#
|
1542
|
-
# =begin
|
1543
1590
|
# Just type in something, like:
|
1544
1591
|
#
|
1545
1592
|
# =for Getopt::Declare
|
@@ -1547,8 +1594,6 @@
|
|
1547
1594
|
# -a Append mode
|
1548
1595
|
# =cut
|
1549
1596
|
#
|
1550
|
-
# =end
|
1551
|
-
#
|
1552
1597
|
# $/ = '=cut'
|
1553
1598
|
# if t = $stdin.readline
|
1554
1599
|
# t.sub!( /^=for\s+Getopt::Declare\s*\n(.*?)\n=cut/esm ) {
|
@@ -1599,11 +1644,13 @@
|
|
1599
1644
|
#
|
1600
1645
|
# * All actions and comments are deleted,
|
1601
1646
|
#
|
1602
|
-
# * any <tt>[ditto]</tt> directive is converted to an appropriate set of
|
1647
|
+
# * any <tt>[ditto]</tt> directive is converted to an appropriate set of
|
1648
|
+
# "ditto" marks,
|
1603
1649
|
#
|
1604
1650
|
# * any text in matching square brackets (including any directive) is deleted,
|
1605
1651
|
#
|
1606
|
-
# * any parameter variable type specifier (":i", ":n", ":/pat/", etc.) is
|
1652
|
+
# * any parameter variable type specifier (":i", ":n", ":/pat/", etc.) is
|
1653
|
+
# deleted.
|
1607
1654
|
#
|
1608
1655
|
# Otherwise, the usage information displayed retains all the formatting
|
1609
1656
|
# present in the original specification.
|
@@ -1615,10 +1662,10 @@
|
|
1615
1662
|
# indicating how to determine the current version of the program (see
|
1616
1663
|
# "Version parameters").
|
1617
1664
|
#
|
1618
|
-
# The usage information is printed to <tt>$stdout</tt> and (since
|
1619
|
-
# tends to encourage longer and better-documented parameter
|
1620
|
-
# the IO::Pager> package is available, an IO::Pager> object is
|
1621
|
-
# page out the entire usage documentation.
|
1665
|
+
# The usage information is printed to <tt>$stdout</tt> and (since
|
1666
|
+
# Getopt::Declare tends to encourage longer and better-documented parameter
|
1667
|
+
# lists) if the IO::Pager> package is available, an IO::Pager> object is
|
1668
|
+
# used to page out the entire usage documentation.
|
1622
1669
|
#
|
1623
1670
|
# == Usage "decoration"
|
1624
1671
|
#
|
@@ -1643,8 +1690,8 @@
|
|
1643
1690
|
#
|
1644
1691
|
# The following specification demonstrates various forms of usage
|
1645
1692
|
# decoration. In fact, there are only four actual parameters (<tt>-in</tt>,
|
1646
|
-
# <tt>-r</tt>, <tt>-p</tt>, and <tt>-out</tt>) specified. Note in particular
|
1647
|
-
# are perfectly acceptible in decorator lines.
|
1693
|
+
# <tt>-r</tt>, <tt>-p</tt>, and <tt>-out</tt>) specified. Note in particular
|
1694
|
+
# that _leading_ tabs are perfectly acceptible in decorator lines.
|
1648
1695
|
#
|
1649
1696
|
# args = Getopt::Declare.new(<<-'EOPARAM');
|
1650
1697
|
#
|
@@ -1735,7 +1782,8 @@
|
|
1735
1782
|
# specification (that is, it wasn't in the form: <_name_> or
|
1736
1783
|
# <_name_:_type_>).
|
1737
1784
|
#
|
1738
|
-
# * "Error: bad type in Getopt::Declare parameter variable specification
|
1785
|
+
# * "Error: bad type in Getopt::Declare parameter variable specification
|
1786
|
+
# near %s"
|
1739
1787
|
#
|
1740
1788
|
# An unknown type specifier was used in a parameter variable type suffix.
|
1741
1789
|
#
|
@@ -1745,9 +1793,10 @@
|
|
1745
1793
|
#
|
1746
1794
|
# * "Error: unattached action in Getopt::Declare specification:\n %s"
|
1747
1795
|
#
|
1748
|
-
# An action was found for which there was no preceding parameter
|
1749
|
-
#
|
1750
|
-
#
|
1796
|
+
# An action was found for which there was no preceding parameter
|
1797
|
+
# specification.
|
1798
|
+
# This usually occurs because the trailing tab was omitted from the
|
1799
|
+
# preceding parameter specification.
|
1751
1800
|
#
|
1752
1801
|
# * "Error: incomplete action in Getopt::Declare specification:\n %s"
|
1753
1802
|
#
|
@@ -1758,7 +1807,8 @@
|
|
1758
1807
|
# The condition specified as part of the indicated <tt>[requires:...]</tt>
|
1759
1808
|
# directive was not a well-formed boolean expression. Common problems
|
1760
1809
|
# include: omitting a <tt>&&</tt>/<tt>||</tt> operator between two flags,
|
1761
|
-
# mismatched brackets, or using <tt>and</tt>/<tt>or</tt> instead of
|
1810
|
+
# mismatched brackets, or using <tt>and</tt>/<tt>or</tt> instead of
|
1811
|
+
# <tt>&&</tt>/<tt>||</tt>.
|
1762
1812
|
#
|
1763
1813
|
# * "Error: in generated command-line parser code:\n %s"
|
1764
1814
|
#
|
@@ -1821,7 +1871,7 @@
|
|
1821
1871
|
#
|
1822
1872
|
# Gonzalo Garramuno (GGarramuno@aol.com) Ruby Port, Minor Bug Fixes,
|
1823
1873
|
# Inline docs, and :d stdtype.
|
1824
|
-
|
1874
|
+
#
|
1825
1875
|
# = BUGS AND ANNOYANCES
|
1826
1876
|
#
|
1827
1877
|
# There are undoubtedly serious bugs lurking somewhere in this code.
|
@@ -1835,7 +1885,7 @@
|
|
1835
1885
|
# = COPYRIGHT
|
1836
1886
|
#
|
1837
1887
|
# Ruby Port:
|
1838
|
-
# Copyright (c) 2004, Gonzalo Garramuno. All Rights Reserved.
|
1888
|
+
# Copyright (c) 2004-2007, Gonzalo Garramuno. All Rights Reserved.
|
1839
1889
|
# This package is free software. It may be used, redistributed
|
1840
1890
|
# and/or modified under the terms of the Perl Artistic License
|
1841
1891
|
# (see http://www.perl.com/perl/misc/Artistic.html)
|
@@ -1848,14 +1898,18 @@
|
|
1848
1898
|
#
|
1849
1899
|
# This Getopt::Declare module relies on a custom version of DelimScanner.rb,
|
1850
1900
|
# which is roughly a port of Perl's Text::Balanced.
|
1851
|
-
# The main change added to that library was to add returning :suffix to
|
1852
|
-
# functions. DelimScanner.rb is:
|
1901
|
+
# The main change added to that library was to add returning :suffix to
|
1902
|
+
# several functions. DelimScanner.rb is:
|
1853
1903
|
#
|
1854
1904
|
# Copyright (c) 2002, 2003 The FaerieMUD Consortium. Most rights reserved.
|
1855
1905
|
#
|
1856
|
-
# This work is licensed under the Creative Commons Attribution License.
|
1857
|
-
# a copy of this license, visit
|
1858
|
-
#
|
1859
|
-
#
|
1860
|
-
|
1906
|
+
# This work is licensed under the Creative Commons Attribution License.
|
1907
|
+
# To view a copy of this license, visit
|
1908
|
+
# http://creativecommons.org/licenses/by/1.0 or
|
1909
|
+
# send a letter to
|
1910
|
+
#
|
1911
|
+
# Creative Commons
|
1912
|
+
# 559 Nathan Abbott Way,
|
1913
|
+
# Stanford, California 94305, USA.
|
1914
|
+
#
|
1861
1915
|
|
data/HISTORY.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
1.20 - Added support for using 3 spaces in addition to tabs for
|
2
|
+
parameter descriptions.
|
3
|
+
Added support for GNU -p, --param descriptions, for easier
|
4
|
+
GNU parameter support.
|
5
|
+
Fixed help description bug with [ditto] of single parameter flags.
|
6
|
+
|
1
7
|
1.13 - Fixed bug that would always match parameters in a case insensitive
|
2
8
|
way, as if [nocase] had been used. This should speed the parser a
|
3
9
|
tiny bit.
|
data/Rakefile
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
|
6
|
+
rdoc_files = ["Declare.rdoc", 'HISTORY.txt']
|
7
|
+
|
8
|
+
#
|
9
|
+
# TASK: Gem specification and creation ('gem')
|
10
|
+
#
|
11
|
+
spec = Gem::Specification.new do |spec|
|
12
|
+
spec.name = "getopt-declare"
|
13
|
+
spec.version = '1.20'
|
14
|
+
spec.author = "Gonzalo Garramuno"
|
15
|
+
spec.email = 'ggarra@advancedsl.com.ar, GGarramuno@aol.com'
|
16
|
+
spec.homepage = 'http://www.rubyforge.org/projects/getoptdeclare/'
|
17
|
+
spec.summary = 'Getopt-Declare is a command-line argument parser.'
|
18
|
+
spec.require_path = "lib"
|
19
|
+
spec.autorequire = "Getopt/Declare"
|
20
|
+
spec.files = ["lib/Getopt/Declare.rb", "lib/Getopt/DelimScanner.rb",
|
21
|
+
"Rakefile"]
|
22
|
+
spec.description = <<-"EOF"
|
23
|
+
Comprehensive and easy to use command-line parser library using
|
24
|
+
regular expressions. Port of Damian Conway\'s Perl Getopt-Declare.
|
25
|
+
EOF
|
26
|
+
# to fix emacs coloring bug
|
27
|
+
spec.extra_rdoc_files = rdoc_files
|
28
|
+
spec.has_rdoc = true
|
29
|
+
spec.test_files = Dir.glob('samples/*.rb')
|
30
|
+
spec.rubyforge_project = 'getoptdeclare'
|
31
|
+
spec.required_ruby_version = '>= 1.6.8'
|
32
|
+
end
|
33
|
+
|
34
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
35
|
+
pkg.need_tar = true
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
#
|
40
|
+
# TASK: Run rdoc to document code ('rdoc')
|
41
|
+
#
|
42
|
+
html_dir = 'doc/html'
|
43
|
+
library = 'Getopt/Declare'
|
44
|
+
Rake::RDocTask.new('rdoc') do |t|
|
45
|
+
t.rdoc_files.include(rdoc_files, 'lib/**/*.rb')
|
46
|
+
t.main = 'doc/index.html' # Main web page
|
47
|
+
t.title = "#{library} API documentation"
|
48
|
+
t.rdoc_dir = html_dir
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
#
|
53
|
+
# TASK: Upload docs to rubyforge ('upload-docs')
|
54
|
+
#
|
55
|
+
desc 'Upload documentation to RubyForge.'
|
56
|
+
task 'upload-docs' => ['rdoc'] do
|
57
|
+
rubyforge_user = 'gga'
|
58
|
+
rubyforge_project = spec.rubyforge_project
|
59
|
+
rubyforge_path = "/var/www/gforge-projects/#{rubyforge_project}/"
|
60
|
+
|
61
|
+
sh "scp -r #{html_dir}/* #{rubyforge_user}@rubyforge.org:#{rubyforge_path}"
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
#
|
66
|
+
# Main task
|
67
|
+
#
|
68
|
+
task :default => ['gem', 'upload-docs']
|
data/lib/Getopt/Declare.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
#
|
2
2
|
# Getopt::Declare - Declaratively Expressed Command-Line Arguments via Regular Expressions
|
3
3
|
#
|
4
|
-
# Ruby port of Perl's Getopt::Declare, version 1.
|
4
|
+
# Ruby port of Perl's Getopt::Declare, version 1.20,
|
5
5
|
# released May 21, 1999.
|
6
6
|
#
|
7
|
-
# $Release Version: 1.
|
8
|
-
# $Date:
|
7
|
+
# $Release Version: 1.20 $
|
8
|
+
# $Date: 2007/01/15 10:53:09 $
|
9
9
|
# by Gonzalo Garramu�o
|
10
10
|
#
|
11
11
|
# For detailed instructions, see Declare.rdoc file
|
@@ -26,6 +26,7 @@
|
|
26
26
|
|
27
27
|
require "Getopt/DelimScanner"
|
28
28
|
|
29
|
+
|
29
30
|
# Verifies that code is valid Ruby code. returns false if not
|
30
31
|
def valid_syntax?(code, fname = 'parser_code')
|
31
32
|
eval("BEGIN {return true}\n#{code}", nil, fname, 0)
|
@@ -69,10 +70,14 @@ module Getopt
|
|
69
70
|
# Main Class
|
70
71
|
class Declare
|
71
72
|
|
72
|
-
VERSION = '1.
|
73
|
+
VERSION = '1.20'
|
73
74
|
|
74
75
|
# For debugging, use [debug] and it will output the ruby code as .CODE.rb
|
75
|
-
@@debug =
|
76
|
+
@@debug = false
|
77
|
+
|
78
|
+
# Main separator used to distinguish arguments in Getopt/Declare spec.
|
79
|
+
# By default, one or more tabs or 3 spaces or more.
|
80
|
+
@@separator = '(?:\t+| {3})'
|
76
81
|
|
77
82
|
# Class used to handle the beginning of options
|
78
83
|
class StartOpt
|
@@ -108,7 +113,7 @@ module Getopt
|
|
108
113
|
class EndOpt < StartOpt
|
109
114
|
# Returns regex used matching end of options
|
110
115
|
def matcher(g)
|
111
|
-
'())?'
|
116
|
+
'())?'
|
112
117
|
end
|
113
118
|
end # EndOpt
|
114
119
|
|
@@ -123,7 +128,7 @@ module Getopt
|
|
123
128
|
@@stdtype = {
|
124
129
|
':i' => { 'pattern' => '(?:(?:%T[+-]?)%D+)' },
|
125
130
|
':n' => { 'pattern' => '(?:(?:%T[+-]?)(?:%D+(?:%T\.%D*)?' +
|
126
|
-
'(?:%T[eE]
|
131
|
+
'(?:%T[eE](?:[+-])?%D+)?|%T\.%D+(?:%T[eE](?:[+-])?%D+)?))',
|
127
132
|
},
|
128
133
|
':s' => { 'pattern' => '(?:%T(?:\S|\0))+' },
|
129
134
|
':qs' => { 'pattern' => %q#"(?:\\"|[^"])*"|'(?:\\'|[^"])*|(?:%T(?:\S|\0))+#
|
@@ -275,7 +280,7 @@ module Getopt
|
|
275
280
|
end
|
276
281
|
|
277
282
|
c = conversion
|
278
|
-
c = "\n _VAL_ = _VAL_#{c}" if
|
283
|
+
c = "\n _VAL_ = _VAL_#{c}" if c
|
279
284
|
|
280
285
|
code = <<-EOS
|
281
286
|
_VAR_ = %q|<#{@name}>|
|
@@ -309,7 +314,7 @@ EOS
|
|
309
314
|
return '.to_f'
|
310
315
|
end
|
311
316
|
}
|
312
|
-
return
|
317
|
+
return nil
|
313
318
|
end
|
314
319
|
|
315
320
|
# Return string with code to cache argument in Getopt::Declare's cache
|
@@ -365,7 +370,7 @@ EOS
|
|
365
370
|
|
366
371
|
# Handle conversion to proper type
|
367
372
|
c = conversion
|
368
|
-
if
|
373
|
+
if c
|
369
374
|
code << " #{@name}.map! { |i| i#{c} }\n"
|
370
375
|
end
|
371
376
|
|
@@ -503,16 +508,8 @@ EOS
|
|
503
508
|
end
|
504
509
|
end
|
505
510
|
|
506
|
-
attr_accessor :flag
|
507
|
-
attr_accessor :
|
508
|
-
attr_accessor :actions
|
509
|
-
attr_accessor :ditto
|
510
|
-
attr_accessor :required
|
511
|
-
attr_accessor :requires
|
512
|
-
attr_accessor :id
|
513
|
-
attr_accessor :repeatable
|
514
|
-
attr_accessor :desc
|
515
|
-
|
511
|
+
attr_accessor :flag, :args, :actions, :ditto, :nocase
|
512
|
+
attr_accessor :required, :requires, :id, :repeatable, :desc
|
516
513
|
|
517
514
|
|
518
515
|
# Constructor
|
@@ -530,6 +527,7 @@ EOS
|
|
530
527
|
@id = @@nextid
|
531
528
|
@desc = spec.dup
|
532
529
|
@items = 0
|
530
|
+
@nocase = false
|
533
531
|
|
534
532
|
@desc.sub!(/\A\s*(.*?)\s*\Z/,'\1')
|
535
533
|
|
@@ -570,14 +568,14 @@ EOS
|
|
570
568
|
|
571
569
|
# PUNCTUATION
|
572
570
|
elsif spec.sub!( /\A(\s*)((\\.|[^\] \t\n\[<])+)/, "" )
|
573
|
-
ows, punct =
|
571
|
+
ows, punct = $1, $2
|
574
572
|
punct.gsub!( /\\(?!\\)(.)/, '\1' )
|
575
573
|
|
576
574
|
if first == 1
|
577
575
|
@flag = punct
|
578
576
|
@@flags.push( punct )
|
579
577
|
else
|
580
|
-
@args.push( Punctuator.new(punct
|
578
|
+
@args.push( Punctuator.new(punct, !(ows.size > 0)) )
|
581
579
|
@items += 1
|
582
580
|
end
|
583
581
|
|
@@ -587,7 +585,6 @@ EOS
|
|
587
585
|
ensure
|
588
586
|
first = 0
|
589
587
|
end
|
590
|
-
|
591
588
|
end # while
|
592
589
|
|
593
590
|
|
@@ -608,7 +605,7 @@ EOS
|
|
608
605
|
flag = @flag
|
609
606
|
clump = owner.clump
|
610
607
|
i = 0
|
611
|
-
|
608
|
+
nocasei = ((Getopt::Declare::nocase || @nocase) ? 'i' : '')
|
612
609
|
|
613
610
|
code << " catch(:paramout) do\n"
|
614
611
|
code += (!@repeatable) ? " while !_FOUND_['" + name() + "']" :
|
@@ -634,7 +631,7 @@ EOS
|
|
634
631
|
|
635
632
|
code << '
|
636
633
|
_args && _pos = gindex( _args, /\G(?:\s|\0)*' +
|
637
|
-
Regexp::quote(flag) + boundary + '/' +
|
634
|
+
Regexp::quote(flag) + boundary + '/' + nocasei + ", _pos) or throw(:paramout)
|
638
635
|
unless @_errormsg
|
639
636
|
@_errormsg = %q|incorrect specification of '" + flag + "' parameter|
|
640
637
|
end
|
@@ -663,7 +660,7 @@ EOS
|
|
663
660
|
code << @args[i].ows(@args[i].matcher(trailer[i]))
|
664
661
|
}
|
665
662
|
|
666
|
-
code << '/x' +
|
663
|
+
code << '/x' + nocasei + ", _pos ) or throw(:paramout)\n"
|
667
664
|
end # if @args
|
668
665
|
|
669
666
|
0.upto( argcount ) { |i|
|
@@ -694,16 +691,25 @@ EOS
|
|
694
691
|
code << "\n " + action + "\n"
|
695
692
|
end
|
696
693
|
|
697
|
-
if
|
694
|
+
if flag && @items==0
|
698
695
|
code << "\n @cache['#{flag}'] = '#{flag}'\n"
|
696
|
+
if @ditto
|
697
|
+
code << "\n @cache['#{@ditto.flag}'] = '#{flag}'\n"
|
698
|
+
end
|
699
699
|
end
|
700
700
|
|
701
701
|
if @items > 1
|
702
702
|
code << " @cache['#{self.name}'] = {} unless @cache['#{self.name}']\n"
|
703
|
+
if @ditto
|
704
|
+
code << "\n @cache['#{@ditto.name}'] = {} unless @cache['#{@ditto.name}']\n"
|
705
|
+
end
|
703
706
|
end
|
704
707
|
|
705
708
|
for subarg in @args
|
706
|
-
code << subarg.cachecode(self.name
|
709
|
+
code << subarg.cachecode(self.name,@items)
|
710
|
+
if ditto
|
711
|
+
code << subarg.cachecode(@ditto.name,@items)
|
712
|
+
end
|
707
713
|
end
|
708
714
|
|
709
715
|
if flag =~ /\A([^a-z0-9]+)/i
|
@@ -742,10 +748,9 @@ EOS
|
|
742
748
|
|
743
749
|
private
|
744
750
|
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
@@nocase
|
751
|
+
class << self
|
752
|
+
@nocase = false
|
753
|
+
attr_accessor :nocase
|
749
754
|
end
|
750
755
|
|
751
756
|
#
|
@@ -782,13 +787,13 @@ EOS
|
|
782
787
|
# Given an array or hash, flatten them to a string
|
783
788
|
def flatten(val, nested = nil)
|
784
789
|
case val
|
785
|
-
|
790
|
+
when Array
|
786
791
|
return val.map{ |i| flatten(i,1) }.join(" ")
|
787
|
-
|
792
|
+
when Hash
|
788
793
|
return val.keys().map{ |i| nested ||
|
789
794
|
i =~ /^-/ ? [i, flatten(val[i],1)] :
|
790
795
|
[flatten(val[i],1)] }.join(" ")
|
791
|
-
|
796
|
+
else
|
792
797
|
return val
|
793
798
|
end
|
794
799
|
end
|
@@ -851,9 +856,9 @@ EOS
|
|
851
856
|
|
852
857
|
if desc =~ /\[no\s*case\]/i
|
853
858
|
if arg
|
854
|
-
arg.nocase = true
|
859
|
+
arg.nocase = true
|
855
860
|
else
|
856
|
-
|
861
|
+
nocase = true
|
857
862
|
end
|
858
863
|
end
|
859
864
|
|
@@ -935,7 +940,7 @@ EOS
|
|
935
940
|
originaldesc.gsub!(/""/,'" ')
|
936
941
|
end
|
937
942
|
|
938
|
-
"#{originaldesc}#{extra}"
|
943
|
+
"#{originaldesc}#{extra}\n"
|
939
944
|
end
|
940
945
|
|
941
946
|
# Check mutex conditions
|
@@ -961,6 +966,17 @@ EOS
|
|
961
966
|
end
|
962
967
|
end
|
963
968
|
|
969
|
+
# Returns a regex to match a single argument line
|
970
|
+
def re_argument
|
971
|
+
/\A(.*?\S.*?#{@@separator})(.*?\n)/
|
972
|
+
end
|
973
|
+
|
974
|
+
# Returns a regex to keep matching a multi-line description
|
975
|
+
# for an argument.
|
976
|
+
def re_more_desc
|
977
|
+
/\A((?![ \t]*(\{|\n)|.*?\S.*?#{@@separator}.*?\S).*?\S.*\n)/
|
978
|
+
end
|
979
|
+
|
964
980
|
public
|
965
981
|
|
966
982
|
# Constructor
|
@@ -993,9 +1009,10 @@ EOS
|
|
993
1009
|
_strict = false
|
994
1010
|
_all_repeatable = false
|
995
1011
|
_lastdesc = nil
|
996
|
-
Getopt::Declare::
|
1012
|
+
Getopt::Declare::nocase = false
|
997
1013
|
Getopt::Declare::ScalarArg::_reset_stdtype()
|
998
1014
|
|
1015
|
+
|
999
1016
|
# CONSTRUCT GRAMMAR
|
1000
1017
|
while i.length > 0
|
1001
1018
|
|
@@ -1047,21 +1064,39 @@ EOS
|
|
1047
1064
|
|
1048
1065
|
|
1049
1066
|
# ARG + DESC:
|
1050
|
-
if i.sub!(
|
1051
|
-
spec = "#$1"
|
1067
|
+
if i.sub!(re_argument,"")
|
1068
|
+
spec = "#$1".strip
|
1052
1069
|
desc = "#$2"
|
1053
1070
|
_strict ||= desc =~ /\[strict\]/
|
1054
1071
|
|
1055
|
-
|
1072
|
+
while i.sub!(re_more_desc,"")
|
1073
|
+
desc += "#$1"
|
1074
|
+
end
|
1056
1075
|
|
1057
1076
|
ditto = nil
|
1058
|
-
|
1059
|
-
|
1077
|
+
if _lastdesc and desc.sub!(/\A\s*\[ditto\]/,_lastdesc)
|
1078
|
+
ditto = arg
|
1079
|
+
else
|
1080
|
+
_lastdesc = desc
|
1081
|
+
end
|
1082
|
+
|
1083
|
+
# Check for GNU spec line like: -d, --debug
|
1084
|
+
arg = nil
|
1085
|
+
if spec =~ /(-[\w_\d]+),\s+(--[\w_\d]+)(\s+.*)?/
|
1086
|
+
specs = ["#$1#$3", "#$2#$3"]
|
1087
|
+
specs.each { |spec|
|
1088
|
+
arg = Arg.new(spec,desc,ditto)
|
1089
|
+
_args.push( arg )
|
1090
|
+
_infer(desc, arg, _mutex)
|
1091
|
+
ditto = arg
|
1092
|
+
}
|
1093
|
+
else
|
1094
|
+
arg = Arg.new(spec,desc,ditto)
|
1095
|
+
_args.push( arg )
|
1096
|
+
_infer(desc, arg, _mutex)
|
1097
|
+
end
|
1060
1098
|
|
1061
|
-
arg = Arg.new(spec,desc,ditto)
|
1062
|
-
_args.push( arg )
|
1063
1099
|
|
1064
|
-
_infer(desc, arg, _mutex)
|
1065
1100
|
next
|
1066
1101
|
end
|
1067
1102
|
|
@@ -1222,10 +1257,6 @@ EOS
|
|
1222
1257
|
Getopt::Declare::ScalarArg::addtype(t)
|
1223
1258
|
end
|
1224
1259
|
|
1225
|
-
|
1226
|
-
@@nocase = false
|
1227
|
-
|
1228
|
-
|
1229
1260
|
# Print out version information and maybe exit
|
1230
1261
|
def version(*t)
|
1231
1262
|
prog = "#{$0}"
|
@@ -1278,15 +1309,14 @@ EOS
|
|
1278
1309
|
|
1279
1310
|
|
1280
1311
|
# ARG + DESC:
|
1281
|
-
if t.sub!(
|
1312
|
+
if t.sub!(re_argument,"")
|
1282
1313
|
decfirst = 0 unless !decfirst.nil?
|
1283
1314
|
spec = "#$1".expand_tabs!()
|
1284
1315
|
desc = "#$2".expand_tabs!()
|
1285
1316
|
|
1286
|
-
t.gsub!(
|
1287
|
-
desc += "#$1".expand_tabs!
|
1288
|
-
|
1289
|
-
}
|
1317
|
+
while t.gsub!(re_more_desc, '')
|
1318
|
+
desc += "#$1".expand_tabs!
|
1319
|
+
end
|
1290
1320
|
|
1291
1321
|
next if desc =~ /\[undocumented\]/i
|
1292
1322
|
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: getopt-declare
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "1.
|
7
|
-
date:
|
6
|
+
version: "1.20"
|
7
|
+
date: 2007-01-17 00:00:00 -03:00
|
8
8
|
summary: Getopt-Declare is a command-line argument parser.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: ggarra@advancedsl.com.ar, GGarramuno@aol.com
|
12
12
|
homepage: http://www.rubyforge.org/projects/getoptdeclare/
|
13
13
|
rubyforge_project: getoptdeclare
|
14
|
-
description: Comprehensive and easy to use command-line parser library using regular expressions. Port of Conway's Perl Getopt-Declare.
|
14
|
+
description: Comprehensive and easy to use command-line parser library using regular expressions. Port of Damian Conway's Perl Getopt-Declare.
|
15
15
|
autorequire: Getopt/Declare
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
18
|
-
has_rdoc:
|
18
|
+
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
@@ -25,14 +25,15 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Gonzalo Garramuno
|
30
31
|
files:
|
31
32
|
- lib/Getopt/Declare.rb
|
32
33
|
- lib/Getopt/DelimScanner.rb
|
34
|
+
- Rakefile
|
33
35
|
- Declare.rdoc
|
34
36
|
- HISTORY.txt
|
35
|
-
- getoptdeclare.gemspec
|
36
37
|
test_files:
|
37
38
|
- samples/cmdline_basic.rb
|
38
39
|
- samples/cmdline_mid.rb
|
@@ -57,7 +58,6 @@ rdoc_options: []
|
|
57
58
|
extra_rdoc_files:
|
58
59
|
- Declare.rdoc
|
59
60
|
- HISTORY.txt
|
60
|
-
- getoptdeclare.gemspec
|
61
61
|
executables: []
|
62
62
|
|
63
63
|
extensions: []
|
data/getoptdeclare.gemspec
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require "rubygems"
|
2
|
-
|
3
|
-
spec = Gem::Specification.new do |spec|
|
4
|
-
spec.name = "getopt-declare"
|
5
|
-
spec.version = '1.13'
|
6
|
-
spec.author = "Gonzalo Garramuno"
|
7
|
-
spec.email = 'ggarra@advancedsl.com.ar, GGarramuno@aol.com'
|
8
|
-
spec.homepage = 'http://www.rubyforge.org/projects/getoptdeclare/'
|
9
|
-
spec.summary = 'Getopt-Declare is a command-line argument parser.'
|
10
|
-
spec.require_path = "lib"
|
11
|
-
spec.autorequire = "Getopt/Declare"
|
12
|
-
spec.files = ["lib/Getopt/Declare.rb", "lib/Getopt/DelimScanner.rb"]
|
13
|
-
spec.description = <<-EOF
|
14
|
-
Comprehensive and easy to use command-line parser library using
|
15
|
-
regular expressions. Port of Conway's Perl Getopt-Declare.
|
16
|
-
EOF
|
17
|
-
spec.extra_rdoc_files = ["Declare.rdoc", "HISTORY.txt", "getoptdeclare.gemspec"]
|
18
|
-
spec.has_rdoc = false
|
19
|
-
spec.test_files = Dir.glob('samples/*.rb')
|
20
|
-
spec.rubyforge_project = 'getoptdeclare'
|
21
|
-
spec.required_ruby_version = '>= 1.6.8'
|
22
|
-
end
|