como 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/doc/file.como.html DELETED
@@ -1,1962 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII" />
6
- <title>
7
- File: como
8
-
9
- &mdash; Documentation by YARD 0.8.6.1
10
-
11
- </title>
12
-
13
- <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
-
15
- <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
-
17
- <script type="text/javascript" charset="utf-8">
18
- hasFrames = window.top.frames.main ? true : false;
19
- relpath = '';
20
- framesUrl = "frames.html#!" + escape(window.location.href);
21
- </script>
22
-
23
-
24
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
25
-
26
- <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
27
-
28
-
29
- </head>
30
- <body>
31
- <div id="header">
32
- <div id="menu">
33
-
34
- <a href="_index.html">Index</a> &raquo;
35
- <span class="title">File: como</span>
36
-
37
-
38
- <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
39
- </div>
40
-
41
- <div id="search">
42
-
43
- <a class="full_list_link" id="class_list_link"
44
- href="class_list.html">
45
- Class List
46
- </a>
47
-
48
- <a class="full_list_link" id="method_list_link"
49
- href="method_list.html">
50
- Method List
51
- </a>
52
-
53
- <a class="full_list_link" id="file_list_link"
54
- href="file_list.html">
55
- File List
56
- </a>
57
-
58
- </div>
59
- <div class="clear"></div>
60
- </div>
61
-
62
- <iframe id="search_frame"></iframe>
63
-
64
- <div id="content"><div id='filecontents'><pre class="code ruby"><span class='comment'># = Como
65
- </span><span class='comment'>#
66
- </span><span class='comment'># == Introduction
67
- </span><span class='comment'>#
68
- </span><span class='comment'># Como provides low manifest command line option parsing and
69
- </span><span class='comment'># deployment. The command line options are described in compact table
70
- </span><span class='comment'># format and option values are stored to conveniently named
71
- </span><span class='comment'># properties. Como provides the command usage information based on the
72
- </span><span class='comment'># option table (+ generic program info) automatically. Como supports
73
- </span><span class='comment'># also subcommands and checking for option combinations using a simple
74
- </span><span class='comment'># DSL.
75
- </span><span class='comment'>#
76
- </span><span class='comment'>#
77
- </span><span class='comment'>#
78
- </span><span class='comment'># == Usage Examples
79
- </span><span class='comment'>#
80
- </span><span class='comment'># === Simple example
81
- </span><span class='comment'>#
82
- </span><span class='comment'># Below is a small example program (&quot;como_simple&quot;) that demonstrates
83
- </span><span class='comment'># typical usage.
84
- </span><span class='comment'>#
85
- </span><span class='comment'># ==== Program listing
86
- </span><span class='comment'>#
87
- </span><span class='comment'># require &quot;como&quot;
88
- </span><span class='comment'># include Como
89
- </span><span class='comment'>#
90
- </span><span class='comment'># # Define command line arguments:
91
- </span><span class='comment'># Spec.command( &quot;como_simple&quot;, &quot;Programmer&quot;, &quot;2013&quot;,
92
- </span><span class='comment'># [
93
- </span><span class='comment'># [ :single, &quot;file&quot;, &quot;-f&quot;, &quot;File argument.&quot; ],
94
- </span><span class='comment'># [ :switch, &quot;debug&quot;, &quot;-d&quot;, &quot;Enable debugging.&quot; ],
95
- </span><span class='comment'># ] )
96
- </span><span class='comment'>#
97
- </span><span class='comment'># puts &quot; File option: #{Opt['file'].value}&quot;
98
- </span><span class='comment'># puts &quot; Debugging selected!&quot; if Opt['debug'].given
99
- </span><span class='comment'>#
100
- </span><span class='comment'># &quot;Spec.defineCheckHelp&quot; method takes 4 arguments:
101
- </span><span class='comment'># [progname] Name of the program (or command).
102
- </span><span class='comment'># [author] Author of the program.
103
- </span><span class='comment'># [year] Year (or any date) for the program.
104
- </span><span class='comment'># [option table] Description of the command options in format with 4
105
- </span><span class='comment'># entries in each sub-array.
106
- </span><span class='comment'>#
107
- </span><span class='comment'># Help is added silenty by default:
108
- </span><span class='comment'># [ :silent, &quot;help&quot;, &quot;-h&quot;, &quot;Display usage info.&quot; ],
109
- </span><span class='comment'>#
110
- </span><span class='comment'># Each option table entry is an Array of 4 values: type, name,
111
- </span><span class='comment'># mnemonic, doc. Three different types are present in the example:
112
- </span><span class='comment'># [:silent] Silent is left out from the &quot;usage&quot; printout (see
113
- </span><span class='comment'># below). Also &quot;help&quot; is reserved as special option name to
114
- </span><span class='comment'># designate command line Usage Help.
115
- </span><span class='comment'># [:single] Single means that the option requires one argument (and only one).
116
- </span><span class='comment'># [:switch] Switch is an optional flag (default value is false).
117
- </span><span class='comment'>#
118
- </span><span class='comment'># Option name is used to reference the option value from Opt class.
119
- </span><span class='comment'># The command line option values are stored to Opt class
120
- </span><span class='comment'># automatically. For example the file option value is returned by
121
- </span><span class='comment'># executing &quot;Opt['file'].value&quot;. The option name also doubles as
122
- </span><span class='comment'># long option, i.e. one could use &quot;--file &lt;filename&gt;&quot; on the command
123
- </span><span class='comment'># line.
124
- </span><span class='comment'>#
125
- </span><span class='comment'># Existence of optional options can be tested using the &quot;given&quot;
126
- </span><span class='comment'># method. For example &quot;Opt['debug'].given&quot; would return &quot;true&quot; if
127
- </span><span class='comment'># &quot;-d&quot; was given on the command line.
128
- </span><span class='comment'>#
129
- </span><span class='comment'># ==== Example executions
130
- </span><span class='comment'>#
131
- </span><span class='comment'># Normal behavior would be achieved by executing:
132
- </span><span class='comment'># shell&gt; como_simple -f example -d
133
- </span><span class='comment'>#
134
- </span><span class='comment'># The program would execute with the following output:
135
- </span><span class='comment'># File option: example
136
- </span><span class='comment'># Debugging selected!
137
- </span><span class='comment'>#
138
- </span><span class='comment'># Same output would be achieved with:
139
- </span><span class='comment'># shell&gt; como_simple --file example --debug
140
- </span><span class='comment'>#
141
- </span><span class='comment'># Since option name doubles as long option.
142
- </span><span class='comment'>#
143
- </span><span class='comment'># Como includes certain &quot;extra&quot; behavior out-of-box. For example
144
- </span><span class='comment'># given the command:
145
- </span><span class='comment'># shell&gt; como_simple
146
- </span><span class='comment'>#
147
- </span><span class='comment'># The following is displayed on the screen:
148
- </span><span class='comment'>#
149
- </span><span class='comment'># como_simple error: Option &quot;-f&quot; missing for &quot;como_simple&quot;...
150
- </span><span class='comment'>#
151
- </span><span class='comment'># Usage:
152
- </span><span class='comment'># como_simple -f &lt;file&gt; [-d]
153
- </span><span class='comment'>#
154
- </span><span class='comment'># -f File argument.
155
- </span><span class='comment'># -d Enable debugging.
156
- </span><span class='comment'>#
157
- </span><span class='comment'>#
158
- </span><span class='comment'># Copyright (c) 2013 by Programmer
159
- </span><span class='comment'>#
160
- </span><span class='comment'>#
161
- </span><span class='comment'># Missing option error is displayed since &quot;file&quot; is a mandatory
162
- </span><span class='comment'># option. The error message is followed by &quot;usage&quot; display (Usage
163
- </span><span class='comment'># Help).
164
- </span><span class='comment'>#
165
- </span><span class='comment'># Given the command:
166
- </span><span class='comment'># shell&gt; como_simple -h
167
- </span><span class='comment'>#
168
- </span><span class='comment'># would display the same &quot;usage&quot; screen except without the error
169
- </span><span class='comment'># line. Documentation string is taken from the specification to
170
- </span><span class='comment'># &quot;usage&quot; display. The &quot;help&quot; option is added automatically to the
171
- </span><span class='comment'># specification.
172
- </span><span class='comment'>#
173
- </span><span class='comment'>#
174
- </span><span class='comment'>#
175
- </span><span class='comment'># === Subcmd example
176
- </span><span class='comment'>#
177
- </span><span class='comment'>#
178
- </span><span class='comment'>#
179
- </span><span class='comment'>#
180
- </span><span class='comment'>#
181
- </span><span class='comment'>#
182
- </span><span class='comment'># == Option specification
183
- </span><span class='comment'>#
184
- </span><span class='comment'># === Overview
185
- </span><span class='comment'>#
186
- </span><span class='comment'>#
187
- </span><span class='comment'>#
188
- </span><span class='comment'># === Option types
189
- </span><span class='comment'>#
190
- </span><span class='comment'># The following types can be defined for the command line options:
191
- </span><span class='comment'># [:switch] Single switch option (no arguments).
192
- </span><span class='comment'># [:single] Mandatory single argument option.
193
- </span><span class='comment'># [:multi] Mandatory multiple argument option. Option values in
194
- </span><span class='comment'># array.
195
- </span><span class='comment'># [:opt_single] Optional single argument option.
196
- </span><span class='comment'># [:opt_multi] Optional multiple argument option. Option values in array.
197
- </span><span class='comment'># [:opt_any] Optional multiple argument option (also none accepted).
198
- </span><span class='comment'># Option values in array.
199
- </span><span class='comment'># [:default] Default option (no switch associated). Any name and
200
- </span><span class='comment'># option String value can be supplied to the spec, since
201
- </span><span class='comment'># only the document string is used. Default option is
202
- </span><span class='comment'># referred with &quot;nil&quot;.
203
- </span><span class='comment'># [:exclusive] Option that does not coexist with other options.
204
- </span><span class='comment'># [:silent] Option that does not coexist with other options and is not
205
- </span><span class='comment'># displayed as an option in &quot;usage&quot; display. In effect a
206
- </span><span class='comment'># sub-option of :exclusive.
207
- </span><span class='comment'>#
208
- </span><span class='comment'># TODO: multi note about termination.
209
- </span><span class='comment'># TODO: leaving out short option.
210
- </span><span class='comment'>#
211
- </span><span class='comment'># === TODO: Change header: Specification method options
212
- </span><span class='comment'>#
213
- </span><span class='comment'># The common method for specifying the options is to use
214
- </span><span class='comment'># &quot;Spec.defineCheckHelp&quot;. Method invocation includes definition
215
- </span><span class='comment'># of the options, parsing the command line, checking for missing
216
- </span><span class='comment'># mandatory options, and it will automatically display &quot;usage&quot; if
217
- </span><span class='comment'># &quot;help&quot; option is given.
218
- </span><span class='comment'>#
219
- </span><span class='comment'># Automatic &quot;help&quot; option processing can be avoided using
220
- </span><span class='comment'># &quot;Spec.defineCheck&quot; instead.
221
- </span><span class='comment'>#
222
- </span><span class='comment'># TODO: How options are inherited, program vs subcmd.
223
- </span><span class='comment'>#
224
- </span><span class='comment'># Both methods above accept additional parameters passed in a
225
- </span><span class='comment'># Hash. The usable hash keys:
226
- </span>
227
- <span class='comment'># [:autohelp] Add help option automatically (default: true). Custom
228
- </span><span class='comment'># help option can be provided and it can be made also
229
- </span><span class='comment'># visible to user.
230
- </span><span class='comment'># [:rulehelp] Include RuleCheck help to Usage Help (default: false).
231
- </span><span class='comment'># [:header] Header lines before standard usage printout.
232
- </span><span class='comment'># [:footer] Footer lines after standard usage printout.
233
- </span><span class='comment'># [:subcheck] TODO
234
- </span><span class='comment'># [:check] Check for missing arguments (default: true).
235
- </span><span class='comment'># [:tab] TODO (default: 12).
236
- </span><span class='comment'># [:help_exit] Exit program if help displayed (default: true).
237
- </span><span class='comment'># [:error_exit] Exit program if error in options (default: true).
238
- </span><span class='comment'>#
239
- </span><span class='comment'>#
240
- </span><span class='comment'>#
241
- </span><span class='comment'># == Option referencing
242
- </span><span class='comment'>#
243
- </span><span class='comment'># Opt class includes the parsed option values. All options can be
244
- </span><span class='comment'># tested whether they are specified on the command line using
245
- </span><span class='comment'># &quot;Opt['name'].given&quot;. The &quot;given&quot; method takes optionally a block
246
- </span><span class='comment'># argument. When block argument is used, the block is supplied with
247
- </span><span class='comment'># option value and the block is executed if the option has been
248
- </span><span class='comment'># set.
249
- </span><span class='comment'>#
250
- </span><span class='comment'># &quot;Opt['name'].value&quot; returns the provided option value. For
251
- </span><span class='comment'># &quot;:switch&quot; type it is true/false value and for the other types a
252
- </span><span class='comment'># String or an Array of Strings.
253
- </span><span class='comment'>#
254
- </span><span class='comment'># If an option takes multiple arguments, the value for the option is
255
- </span><span class='comment'># an Array. The values can be iterated simply by:
256
- </span><span class='comment'># Opt['files'].value.each do |val|
257
- </span><span class='comment'># puts val
258
- </span><span class='comment'># end
259
- </span><span class='comment'>#
260
- </span><span class='comment'># Short syntax for value referencing is performed with unary operator
261
- </span><span class='comment'># &quot;~&quot;. Thus
262
- </span><span class='comment'># Opt['files'].value
263
- </span><span class='comment'># is equal to
264
- </span><span class='comment'># ~Opt['files']
265
- </span><span class='comment'>#
266
- </span><span class='comment'># Sometimes it is convenient for the program to use an option to
267
- </span><span class='comment'># include multiple parameter settings. These settings can be parsed
268
- </span><span class='comment'># and mapped to a Hash. Como performs automatic conversion to numeric
269
- </span><span class='comment'># values if possible. For example with option:
270
- </span><span class='comment'># --set rounds=10 length=5
271
- </span><span class='comment'># Como can be used extract the parameter values with the &quot;params&quot; method:
272
- </span><span class='comment'># Opt['set'].params
273
- </span><span class='comment'># And a Hash is returned:
274
- </span><span class='comment'># { 'rounds' =&gt; 10, 'length' =&gt; 5 }
275
- </span><span class='comment'>#
276
- </span><span class='comment'># With &quot;:opt_any&quot; type, the user should first check if the option was given:
277
- </span><span class='comment'># Opt['many_files_or_none'].given
278
- </span><span class='comment'># Then check how many arguments where given:
279
- </span><span class='comment'># Opt['many_files_or_none'].value.length
280
- </span><span class='comment'># And finally decide what to do.
281
- </span><span class='comment'>#
282
- </span><span class='comment'># If the user gives the &quot;--&quot; option (double-dash), the arguments after
283
- </span><span class='comment'># that option is returned as an Array with &quot;Opt.external&quot;. TODO:
284
- </span><span class='comment'># silent to terminate multi options.
285
- </span><span class='comment'>#
286
- </span><span class='comment'>#
287
- </span><span class='comment'>#
288
- </span><span class='comment'># == Customization
289
- </span><span class='comment'>#
290
- </span><span class='comment'># If the default behavior is not satisfactory, changes can be
291
- </span><span class='comment'># implemented simply by overloading the existing functions. Some
292
- </span><span class='comment'># knowledge of the internal workings of Como is required though.
293
- </span><span class='comment'>#
294
- </span><span class='comment'>#
295
- </span><span class='comment'># == Additional checks
296
- </span><span class='comment'>#
297
- </span><span class='comment'># Sometimes the options have to be used in combination to make sense
298
- </span><span class='comment'># for the program. Como provides a facility to create relations
299
- </span><span class='comment'># between options. Consider the following options spec:
300
- </span><span class='comment'># Spec.defineCheckHelp( &quot;como_fulltest&quot;, &quot;Programmer&quot;, &quot;2013&quot;,
301
- </span><span class='comment'># [
302
- </span><span class='comment'># [ :silent, &quot;help&quot;, &quot;-h&quot;, &quot;Display usage info.&quot; ],
303
- </span><span class='comment'># [ :single, &quot;file&quot;, &quot;-f&quot;, &quot;File argument.&quot; ],
304
- </span><span class='comment'># [ :switch, &quot;o1&quot;, &quot;-o1&quot;, &quot;o1&quot; ],
305
- </span><span class='comment'># [ :opt_single, &quot;o2&quot;, &quot;-o2&quot;, &quot;o2&quot; ],
306
- </span><span class='comment'># [ :opt_single, &quot;o3&quot;, &quot;-o3&quot;, &quot;o3&quot; ],
307
- </span><span class='comment'># [ :opt_multi, &quot;o4&quot;, &quot;-o4&quot;, &quot;o4&quot; ],
308
- </span><span class='comment'># [ :opt_any, &quot;o5&quot;, &quot;-o5&quot;, &quot;o5&quot; ],
309
- </span><span class='comment'># [ :switch, &quot;debug&quot;, &quot;-d&quot;, &quot;Enable debugging.&quot; ],
310
- </span><span class='comment'># ] )
311
- </span><span class='comment'>#
312
- </span><span class='comment'># Spec.checkRule do
313
- </span><span class='comment'># all( 'file',
314
- </span><span class='comment'># one(
315
- </span><span class='comment'># all( 'o1', 'o2' ),
316
- </span><span class='comment'># one( 'o3', 'o4', 'o5' )
317
- </span><span class='comment'># )
318
- </span><span class='comment'># )
319
- </span><span class='comment'># end
320
- </span><span class='comment'>#
321
- </span><span class='comment'># This spec includes multiple optional options (&quot;o?&quot;). The
322
- </span><span class='comment'># &quot;Spec.checkRule&quot; method accepts a block where option rule
323
- </span><span class='comment'># check DSL (Domain Specific Language) is used. The rule specifies
324
- </span><span class='comment'># that the &quot;file&quot; option has to be used in combination with some other
325
- </span><span class='comment'># options. These are &quot;all( 'o1', 'o2' )&quot; or &quot;one( 'o3', 'o4', 'o5' )&quot;,
326
- </span><span class='comment'># i.e. either both &quot;o1&quot; and &quot;o2&quot;, or one of [&quot;o3&quot;,&quot;o4&quot;,&quot;o5]. The
327
- </span><span class='comment'># checker will validate this rule and error if for example the command
328
- </span><span class='comment'># line reads:
329
- </span><span class='comment'># shell&gt; como_fulltest --file myfile -o3 black -o5
330
- </span><span class='comment'>#
331
- </span><span class='comment'># The following rules can be used (in combination):
332
- </span><span class='comment'># [all] All options in the list.
333
- </span><span class='comment'># [one] One and only one from the list.
334
- </span><span class='comment'># [any] At least one of the list is given.
335
- </span><span class='comment'># [none] No options are required.
336
- </span><span class='comment'># [inv] Logical negation for existence.
337
- </span><span class='comment'># [incr] Incremental options in order i.e. have to have previous to
338
- </span><span class='comment'># have later.
339
- </span><span class='comment'># [follow] Incremental options in order i.e. have to have all later if
340
- </span><span class='comment'># had first.
341
- </span>
342
- <span class='kw'>module</span> <span class='const'>Como</span>
343
-
344
-
345
- <span class='comment'># IO stream options for Como classes.
346
- </span> <span class='kw'>class</span> <span class='const'>ComoCommon</span>
347
-
348
- <span class='comment'># Default value for display output.
349
- </span> <span class='cvar'>@@io</span> <span class='op'>=</span> <span class='const'>STDOUT</span>
350
-
351
- <span class='comment'># Set @@io.
352
- </span> <span class='kw'>def</span> <span class='const'>ComoCommon</span><span class='period'>.</span><span class='id identifier rubyid_setIo'>setIo</span><span class='lparen'>(</span> <span class='id identifier rubyid_io'>io</span> <span class='rparen'>)</span>
353
- <span class='cvar'>@@io</span> <span class='op'>=</span> <span class='id identifier rubyid_io'>io</span>
354
- <span class='kw'>end</span>
355
-
356
- <span class='comment'># Get @@io.
357
- </span> <span class='kw'>def</span> <span class='const'>ComoCommon</span><span class='period'>.</span><span class='id identifier rubyid_getIo'>getIo</span>
358
- <span class='cvar'>@@io</span>
359
- <span class='kw'>end</span>
360
- <span class='kw'>end</span>
361
-
362
-
363
- <span class='comment'># User interface for Como.
364
- </span> <span class='kw'>class</span> <span class='const'>Spec</span> <span class='op'>&lt;</span> <span class='const'>ComoCommon</span>
365
-
366
- <span class='comment'># Create specification for program with subcmds.
367
- </span> <span class='comment'>#
368
- </span> <span class='comment'># @param author [String] Program author.
369
- </span> <span class='comment'># @param year [String] Year (or dates) for program.
370
- </span> <span class='comment'># @yield defs [] Subcmd definitions.
371
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_program'>program</span><span class='lparen'>(</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_defs'>defs</span> <span class='rparen'>)</span>
372
- <span class='kw'>if</span> <span class='id identifier rubyid_config'>config</span>
373
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_configOverlay'>configOverlay</span><span class='lparen'>(</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
374
- <span class='kw'>end</span>
375
- <span class='id identifier rubyid_spec'>spec</span> <span class='op'>=</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span> <span class='rparen'>)</span>
376
- <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid_instance_eval'>instance_eval</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_defs'>defs</span> <span class='rparen'>)</span>
377
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span> <span class='const'>ArgsParseState</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='cvar'>@@argv</span> <span class='rparen'>)</span> <span class='rparen'>)</span>
378
- <span class='kw'>end</span>
379
-
380
-
381
- <span class='comment'># The primary entry point to Como. Defines the command
382
- </span> <span class='comment'># switches and parses the command line. Performs &quot;usage&quot;
383
- </span> <span class='comment'># display if &quot;help&quot; was selected.
384
- </span> <span class='comment'>#
385
- </span> <span class='comment'># @param prog [String] Program (i.e. command) name.
386
- </span> <span class='comment'># @param author [String] Author of the program.
387
- </span> <span class='comment'># @param year [String] Year (or dates) for program.
388
- </span> <span class='comment'># @param defs [Array&lt;Array&gt;] Option definitions.
389
- </span> <span class='comment'># @param config [Hash] Option definition's behavioral config
390
- </span> <span class='comment'># (changes @@config defaults).
391
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_command'>command</span><span class='lparen'>(</span> <span class='id identifier rubyid_prog'>prog</span><span class='comma'>,</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span><span class='comma'>,</span> <span class='id identifier rubyid_defs'>defs</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='rparen'>)</span>
392
- <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_defineCheck'>defineCheck</span><span class='lparen'>(</span> <span class='id identifier rubyid_prog'>prog</span><span class='comma'>,</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span><span class='comma'>,</span> <span class='id identifier rubyid_defs'>defs</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
393
- <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_usage'>usage</span> <span class='kw'>if</span> <span class='const'>Opt</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>help</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
394
- <span class='kw'>end</span>
395
-
396
- <span class='comment'># Alias to Spec.command.
397
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_defineCheckHelp'>defineCheckHelp</span><span class='lparen'>(</span> <span class='id identifier rubyid_prog'>prog</span><span class='comma'>,</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span><span class='comma'>,</span> <span class='id identifier rubyid_defs'>defs</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='rparen'>)</span>
398
- <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_command'>command</span><span class='lparen'>(</span> <span class='id identifier rubyid_prog'>prog</span><span class='comma'>,</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span><span class='comma'>,</span> <span class='id identifier rubyid_defs'>defs</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
399
- <span class='kw'>end</span>
400
-
401
- <span class='comment'># Same as &quot;defineCheckHelp&quot; except without automatic &quot;help&quot;
402
- </span> <span class='comment'># option processing.
403
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_defineCheck'>defineCheck</span><span class='lparen'>(</span> <span class='id identifier rubyid_prog'>prog</span><span class='comma'>,</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span><span class='comma'>,</span> <span class='id identifier rubyid_defs'>defs</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='rparen'>)</span>
404
- <span class='id identifier rubyid_spec'>spec</span> <span class='op'>=</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span> <span class='rparen'>)</span>
405
- <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid_subcmd'>subcmd</span><span class='lparen'>(</span> <span class='id identifier rubyid_prog'>prog</span><span class='comma'>,</span> <span class='id identifier rubyid_defs'>defs</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
406
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span> <span class='const'>ArgsParseState</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='cvar'>@@argv</span> <span class='rparen'>)</span> <span class='rparen'>)</span>
407
- <span class='kw'>end</span>
408
-
409
-
410
- <span class='comment'># Create Spec object that can handle subcmd definitions.
411
- </span> <span class='comment'>#
412
- </span> <span class='comment'># @param author [String] Program author.
413
- </span> <span class='comment'># @param year [String] Year (or dates) for program.
414
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span> <span class='rparen'>)</span>
415
- <span class='ivar'>@author</span> <span class='op'>=</span> <span class='id identifier rubyid_author'>author</span>
416
- <span class='ivar'>@year</span> <span class='op'>=</span> <span class='id identifier rubyid_year'>year</span>
417
-
418
- <span class='const'>Spec</span><span class='period'>.</span><span class='const'>ArgCheck</span><span class='lparen'>(</span> <span class='id identifier rubyid_author'>author</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>String</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Author name is not a String</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
419
- <span class='const'>Spec</span><span class='period'>.</span><span class='const'>ArgCheck</span><span class='lparen'>(</span> <span class='id identifier rubyid_year'>year</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>String</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Year is not a String</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
420
- <span class='kw'>end</span>
421
-
422
-
423
- <span class='comment'># Define subcommand options.
424
- </span> <span class='comment'>#
425
- </span> <span class='comment'># @param cmd [String] Subcmd name.
426
- </span> <span class='comment'># @param defs [Array&lt;Array&gt;] Option definition table.
427
- </span> <span class='comment'># @param config [] Configuration options.
428
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_subcmd'>subcmd</span><span class='lparen'>(</span> <span class='id identifier rubyid_cmd'>cmd</span><span class='comma'>,</span> <span class='id identifier rubyid_defs'>defs</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='rparen'>)</span>
429
-
430
- <span class='kw'>unless</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span>
431
-
432
- <span class='id identifier rubyid_master'>master</span> <span class='op'>=</span> <span class='const'>MasterOpt</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='ivar'>@author</span><span class='comma'>,</span> <span class='ivar'>@year</span><span class='comma'>,</span>
433
- <span class='id identifier rubyid_cmd'>cmd</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='symbol'>:subcmd</span><span class='comma'>,</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
434
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_setMaster'>setMaster</span><span class='lparen'>(</span> <span class='id identifier rubyid_master'>master</span> <span class='rparen'>)</span>
435
- <span class='id identifier rubyid_subcmd'>subcmd</span> <span class='op'>=</span> <span class='id identifier rubyid_master'>master</span>
436
-
437
- <span class='kw'>else</span>
438
-
439
- <span class='id identifier rubyid_subcmd'>subcmd</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_findOpt'>findOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_cmd'>cmd</span> <span class='rparen'>)</span>
440
-
441
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_setSubcmd'>setSubcmd</span><span class='lparen'>(</span> <span class='id identifier rubyid_subcmd'>subcmd</span> <span class='rparen'>)</span>
442
-
443
- <span class='const'>Spec</span><span class='period'>.</span><span class='const'>ArgCheck</span><span class='lparen'>(</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Subcommand \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cmd'>cmd</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot; not defined.</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_subcmd'>subcmd</span>
444
-
445
- <span class='kw'>end</span>
446
-
447
- <span class='comment'># Overlay user config on top of default.
448
- </span> <span class='id identifier rubyid_subcmd'>subcmd</span><span class='period'>.</span><span class='id identifier rubyid_applyConfig'>applyConfig</span><span class='lparen'>(</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
449
-
450
- <span class='kw'>if</span> <span class='id identifier rubyid_subcmd'>subcmd</span><span class='period'>.</span><span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span> <span class='symbol'>:autohelp</span> <span class='rbracket'>]</span>
451
- <span class='comment'># Automatically add the help option.
452
- </span> <span class='id identifier rubyid_defs'>defs</span><span class='period'>.</span><span class='id identifier rubyid_insert'>insert</span><span class='lparen'>(</span> <span class='int'>0</span><span class='comma'>,</span> <span class='lbracket'>[</span> <span class='symbol'>:silent</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>help</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>-h</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Display usage info.</span><span class='tstring_end'>&quot;</span></span> <span class='rbracket'>]</span> <span class='rparen'>)</span>
453
- <span class='kw'>end</span>
454
-
455
- <span class='id identifier rubyid_subcmd'>subcmd</span><span class='period'>.</span><span class='id identifier rubyid_setSubopt'>setSubopt</span><span class='lparen'>(</span> <span class='op'>*</span><span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_specify'>specify</span><span class='lparen'>(</span> <span class='id identifier rubyid_defs'>defs</span> <span class='rparen'>)</span> <span class='rparen'>)</span>
456
- <span class='id identifier rubyid_subcmd'>subcmd</span>
457
-
458
- <span class='kw'>end</span>
459
-
460
-
461
- <span class='comment'># Specify and check options spec.
462
- </span> <span class='comment'>#
463
- </span> <span class='comment'># @param table [Array&lt;Array&gt;] Option definition table.
464
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_specify'>specify</span><span class='lparen'>(</span> <span class='id identifier rubyid_table'>table</span> <span class='rparen'>)</span>
465
-
466
- <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
467
- <span class='id identifier rubyid_subcmds'>subcmds</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
468
-
469
- <span class='comment'># Type checks for valid user input.
470
- </span> <span class='const'>Spec</span><span class='period'>.</span><span class='const'>ArgCheck</span><span class='lparen'>(</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>Array</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Option table is not an Array</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
471
-
472
- <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_each_index'>each_index</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_idx'>idx</span><span class='op'>|</span>
473
-
474
- <span class='id identifier rubyid_i'>i</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='lbracket'>[</span> <span class='id identifier rubyid_idx'>idx</span> <span class='rbracket'>]</span>
475
-
476
- <span class='const'>Spec</span><span class='period'>.</span><span class='const'>ArgCheck</span><span class='lparen'>(</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>Array</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Option table entry is not an Array</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
477
-
478
- <span class='kw'>if</span> <span class='id identifier rubyid_i'>i</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='symbol'>:default</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>2</span>
479
-
480
- <span class='comment'># Add 2 dummy entries for :default type if needed.
481
- </span> <span class='id identifier rubyid_table'>table</span><span class='lbracket'>[</span> <span class='id identifier rubyid_idx'>idx</span> <span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span> <span class='id identifier rubyid_i'>i</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='rbracket'>]</span>
482
-
483
- <span class='kw'>elsif</span> <span class='id identifier rubyid_i'>i</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='symbol'>:subcmd</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>3</span>
484
-
485
- <span class='comment'># Add 1 dummy entry for :subcmd type if needed.
486
- </span> <span class='id identifier rubyid_table'>table</span><span class='lbracket'>[</span> <span class='id identifier rubyid_idx'>idx</span> <span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span> <span class='id identifier rubyid_i'>i</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span> <span class='rbracket'>]</span>
487
- <span class='kw'>end</span>
488
-
489
- <span class='const'>Spec</span><span class='period'>.</span><span class='const'>ArgCheck</span><span class='lparen'>(</span> <span class='id identifier rubyid_table'>table</span><span class='lbracket'>[</span> <span class='id identifier rubyid_idx'>idx</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>4</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Option table entry length not 4</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
490
- <span class='kw'>end</span>
491
-
492
-
493
- <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_e'>e</span><span class='op'>|</span>
494
-
495
- <span class='kw'>if</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='symbol'>:subcmd</span>
496
-
497
- <span class='id identifier rubyid_subcmds'>subcmds</span><span class='lbracket'>[</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_subcmd'>subcmd</span><span class='lparen'>(</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>3</span><span class='rbracket'>]</span> <span class='rparen'>)</span>
498
-
499
- <span class='kw'>else</span>
500
-
501
- <span class='id identifier rubyid_option'>option</span> <span class='op'>=</span> <span class='kw'>nil</span>
502
-
503
- <span class='kw'>case</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
504
-
505
- <span class='kw'>when</span> <span class='symbol'>:switch</span>
506
- <span class='id identifier rubyid_option'>option</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_switch'>switch</span><span class='lparen'>(</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>3</span><span class='rbracket'>]</span> <span class='rparen'>)</span>
507
-
508
- <span class='kw'>when</span> <span class='symbol'>:exclusive</span>
509
- <span class='id identifier rubyid_option'>option</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_exclusive'>exclusive</span><span class='lparen'>(</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>3</span><span class='rbracket'>]</span> <span class='rparen'>)</span>
510
-
511
- <span class='kw'>when</span> <span class='symbol'>:silent</span>
512
- <span class='id identifier rubyid_option'>option</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_exclusive'>exclusive</span><span class='lparen'>(</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>3</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='kw'>true</span> <span class='rparen'>)</span>
513
-
514
- <span class='kw'>when</span> <span class='symbol'>:single</span><span class='comma'>,</span> <span class='symbol'>:multi</span><span class='comma'>,</span> <span class='symbol'>:opt_single</span><span class='comma'>,</span> <span class='symbol'>:opt_multi</span><span class='comma'>,</span> <span class='symbol'>:opt_any</span>
515
- <span class='id identifier rubyid_option'>option</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_full'>full</span><span class='lparen'>(</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>3</span><span class='rbracket'>]</span> <span class='rparen'>)</span>
516
-
517
- <span class='kw'>when</span> <span class='symbol'>:default</span>
518
- <span class='id identifier rubyid_option'>option</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_defaultOpt'>defaultOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>3</span><span class='rbracket'>]</span> <span class='rparen'>)</span>
519
-
520
- <span class='kw'>else</span>
521
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unknown option type: \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;...</span><span class='tstring_end'>&quot;</span></span>
522
- <span class='kw'>end</span>
523
-
524
- <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_option'>option</span>
525
-
526
- <span class='kw'>end</span>
527
-
528
- <span class='kw'>end</span>
529
-
530
- <span class='lbracket'>[</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_values'>values</span><span class='comma'>,</span> <span class='id identifier rubyid_subcmds'>subcmds</span><span class='period'>.</span><span class='id identifier rubyid_values'>values</span> <span class='rbracket'>]</span>
531
- <span class='kw'>end</span>
532
-
533
-
534
- <span class='comment'># Command line options source.
535
- </span> <span class='cvar'>@@argv</span> <span class='op'>=</span> <span class='const'>ARGV</span>
536
-
537
- <span class='comment'># Set command line options source, i.e. @@argv (default: ARGV).
538
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_setArgv'>setArgv</span><span class='lparen'>(</span> <span class='id identifier rubyid_newArgv'>newArgv</span> <span class='rparen'>)</span>
539
- <span class='cvar'>@@argv</span> <span class='op'>=</span> <span class='id identifier rubyid_newArgv'>newArgv</span>
540
- <span class='kw'>end</span>
541
-
542
- <span class='comment'># Display program usage (and optionally exit).
543
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_usage'>usage</span>
544
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_usage'>usage</span>
545
- <span class='kw'>end</span>
546
-
547
- <span class='comment'># Set optional header for &quot;usage&quot;.
548
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_setUsageHeader'>setUsageHeader</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
549
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_setUsageHeader'>setUsageHeader</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
550
- <span class='kw'>end</span>
551
-
552
-
553
- <span class='comment'># Set optional footer for &quot;usage&quot;.
554
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_setUsageFooter'>setUsageFooter</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
555
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_setUsageFooter'>setUsageFooter</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
556
- <span class='kw'>end</span>
557
-
558
-
559
- <span class='comment'># Check option combination rules.
560
- </span> <span class='comment'>#
561
- </span> <span class='comment'># @param opt [String] Opt name to which rules are set. If not
562
- </span> <span class='comment'># given, Opt.current is used.
563
- </span> <span class='comment'># @param rule [Proc] Rules to check.
564
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_checkRule'>checkRule</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
565
- <span class='kw'>if</span> <span class='id identifier rubyid_opt'>opt</span>
566
- <span class='id identifier rubyid_opt'>opt</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='lbracket'>[</span> <span class='id identifier rubyid_opt'>opt</span> <span class='rbracket'>]</span>
567
- <span class='kw'>else</span>
568
- <span class='id identifier rubyid_opt'>opt</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span>
569
- <span class='kw'>end</span>
570
- <span class='id identifier rubyid_opt'>opt</span><span class='period'>.</span><span class='id identifier rubyid_setRuleCheck'>setRuleCheck</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
571
- <span class='id identifier rubyid_opt'>opt</span><span class='period'>.</span><span class='id identifier rubyid_checkRule'>checkRule</span>
572
- <span class='kw'>end</span>
573
-
574
-
575
- <span class='comment'># Check option combination rules.
576
- </span> <span class='comment'>#
577
- </span> <span class='comment'># @param opt [String] Opt name to which rules are set. If not
578
- </span> <span class='comment'># given, Opt.current is used.
579
- </span> <span class='comment'># @param rule [Proc] Rules to check.
580
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_checkRule'>checkRule</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
581
- <span class='kw'>if</span> <span class='id identifier rubyid_opt'>opt</span>
582
- <span class='id identifier rubyid_opt'>opt</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='lbracket'>[</span> <span class='id identifier rubyid_opt'>opt</span> <span class='rbracket'>]</span>
583
- <span class='kw'>else</span>
584
- <span class='id identifier rubyid_opt'>opt</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span>
585
- <span class='kw'>end</span>
586
- <span class='id identifier rubyid_opt'>opt</span><span class='period'>.</span><span class='id identifier rubyid_setRuleCheck'>setRuleCheck</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
587
- <span class='kw'>end</span>
588
-
589
- <span class='comment'># Additional option check.
590
- </span> <span class='comment'># @param opt [String] Option name.
591
- </span> <span class='comment'># @param error [String] Error string for false return values (from check).
592
- </span> <span class='comment'># @param check [Proc] Checker proc run for the option. Either
593
- </span> <span class='comment'># return false or generate an exception when errors found.
594
- </span> <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='id identifier rubyid_checkAlso'>checkAlso</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_error'>error</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_check'>check</span> <span class='rparen'>)</span>
595
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_checkAlso'>checkAlso</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_error'>error</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_check'>check</span> <span class='rparen'>)</span>
596
- <span class='kw'>end</span>
597
-
598
-
599
- <span class='id identifier rubyid_private'>private</span>
600
-
601
- <span class='kw'>def</span> <span class='const'>Spec</span><span class='period'>.</span><span class='const'>ArgCheck</span><span class='lparen'>(</span> <span class='id identifier rubyid_cond'>cond</span><span class='comma'>,</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
602
- <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_cond'>cond</span>
603
- <span class='kw'>end</span>
604
-
605
-
606
- <span class='kw'>end</span>
607
-
608
-
609
-
610
-
611
- <span class='comment'># Opt includes all options spec information and parsed options
612
- </span> <span class='comment'># and their values. Option instance is accessed with
613
- </span> <span class='comment'># &quot;Opt['name']&quot;. The option status (Opt instance) can be
614
- </span> <span class='comment'># queried with for example &quot;given&quot; and &quot;value&quot; methods.
615
- </span> <span class='kw'>class</span> <span class='const'>Opt</span> <span class='op'>&lt;</span> <span class='const'>ComoCommon</span>
616
-
617
-
618
- <span class='comment'># Create exception with capability to pass arbitrary data
619
- </span> <span class='kw'>class</span> <span class='const'>ErrorWithData</span> <span class='op'>&lt;</span> <span class='const'>StandardError</span>
620
- <span class='id identifier rubyid_attr_reader'>attr_reader</span> <span class='symbol'>:data</span>
621
- <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span> <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
622
- <span class='kw'>super</span><span class='lparen'>(</span> <span class='id identifier rubyid_message'>message</span> <span class='rparen'>)</span>
623
- <span class='ivar'>@data</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span>
624
- <span class='kw'>end</span>
625
- <span class='kw'>end</span>
626
-
627
-
628
- <span class='comment'># Missing argument exception.
629
- </span> <span class='kw'>class</span> <span class='const'>MissingArgument</span> <span class='op'>&lt;</span> <span class='const'>ErrorWithData</span><span class='semicolon'>;</span> <span class='kw'>end</span>
630
-
631
- <span class='comment'># Invalid (non-existing) option exception.
632
- </span> <span class='kw'>class</span> <span class='const'>InvalidOption</span> <span class='op'>&lt;</span> <span class='const'>ErrorWithData</span><span class='semicolon'>;</span> <span class='kw'>end</span>
633
-
634
-
635
-
636
- <span class='comment'># ------------------------------------------------------------
637
- </span> <span class='comment'># Option specification:
638
- </span>
639
-
640
- <span class='comment'># Program i.e. highest level subcommand.
641
- </span> <span class='cvar'>@@master</span> <span class='op'>=</span> <span class='kw'>nil</span>
642
-
643
- <span class='comment'># List of parsed option specs and option values.
644
- </span> <span class='cvar'>@@opts</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
645
-
646
- <span class='comment'># Current subcommand recorded.
647
- </span> <span class='cvar'>@@subcmd</span> <span class='op'>=</span> <span class='kw'>nil</span>
648
-
649
-
650
- <span class='comment'># Set of default configs for printout.
651
- </span> <span class='cvar'>@@config</span> <span class='op'>=</span> <span class='lbrace'>{</span>
652
- <span class='symbol'>:autohelp</span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
653
- <span class='symbol'>:rulehelp</span> <span class='op'>=&gt;</span> <span class='kw'>false</span><span class='comma'>,</span>
654
- <span class='symbol'>:header</span> <span class='op'>=&gt;</span> <span class='kw'>nil</span><span class='comma'>,</span>
655
- <span class='symbol'>:footer</span> <span class='op'>=&gt;</span> <span class='kw'>nil</span><span class='comma'>,</span>
656
- <span class='symbol'>:subcheck</span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
657
- <span class='symbol'>:check</span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
658
- <span class='symbol'>:tab</span> <span class='op'>=&gt;</span> <span class='int'>12</span><span class='comma'>,</span>
659
- <span class='symbol'>:help_exit</span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
660
- <span class='symbol'>:error_exit</span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
661
- <span class='rbrace'>}</span>
662
-
663
-
664
- <span class='comment'># Set master option.
665
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_setMaster'>setMaster</span><span class='lparen'>(</span> <span class='id identifier rubyid_master'>master</span> <span class='rparen'>)</span>
666
- <span class='cvar'>@@master</span> <span class='op'>=</span> <span class='id identifier rubyid_master'>master</span>
667
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_setSubcmd'>setSubcmd</span><span class='lparen'>(</span> <span class='id identifier rubyid_master'>master</span> <span class='rparen'>)</span>
668
- <span class='kw'>end</span>
669
-
670
- <span class='comment'># Get master option.
671
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span>
672
- <span class='cvar'>@@master</span>
673
- <span class='kw'>end</span>
674
-
675
-
676
- <span class='comment'># Add option to options list.
677
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_addOpt'>addOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span> <span class='rparen'>)</span>
678
- <span class='cvar'>@@opts</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_opt'>opt</span>
679
- <span class='kw'>end</span>
680
-
681
-
682
- <span class='comment'># Set current subcmd.
683
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_setSubcmd'>setSubcmd</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span> <span class='rparen'>)</span>
684
- <span class='cvar'>@@subcmd</span> <span class='op'>=</span> <span class='id identifier rubyid_opt'>opt</span>
685
- <span class='kw'>end</span>
686
-
687
-
688
- <span class='comment'># Current subcmd processed.
689
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span>
690
- <span class='cvar'>@@subcmd</span>
691
- <span class='kw'>end</span>
692
-
693
-
694
- <span class='comment'># Find option by name.
695
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_findOpt'>findOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span> <span class='rparen'>)</span>
696
- <span class='id identifier rubyid_idx'>idx</span> <span class='op'>=</span> <span class='cvar'>@@opts</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>==</span> <span class='id identifier rubyid_name'>name</span> <span class='kw'>end</span>
697
- <span class='kw'>if</span> <span class='id identifier rubyid_idx'>idx</span>
698
- <span class='cvar'>@@opts</span><span class='lbracket'>[</span> <span class='id identifier rubyid_idx'>idx</span> <span class='rbracket'>]</span>
699
- <span class='kw'>else</span>
700
- <span class='kw'>nil</span>
701
- <span class='kw'>end</span>
702
- <span class='kw'>end</span>
703
-
704
-
705
- <span class='comment'># Reset &quot;dynamic&quot; class members.
706
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_reset'>reset</span>
707
- <span class='cvar'>@@opts</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
708
- <span class='kw'>end</span>
709
-
710
-
711
- <span class='comment'># Select option object by name. Master is searched first and
712
- </span> <span class='comment'># then the flattened list of all options.
713
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='op'>[]</span><span class='lparen'>(</span><span class='id identifier rubyid_str'>str</span><span class='rparen'>)</span>
714
-
715
- <span class='comment'># Search Master first.
716
- </span> <span class='id identifier rubyid_ret'>ret</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_argByName'>argByName</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
717
-
718
- <span class='kw'>unless</span> <span class='id identifier rubyid_ret'>ret</span>
719
- <span class='id identifier rubyid_ret'>ret</span> <span class='op'>=</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_findOpt'>findOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
720
- <span class='kw'>unless</span> <span class='id identifier rubyid_ret'>ret</span>
721
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Option \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_str'>str</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot; does not exist...</span><span class='tstring_end'>&quot;</span></span>
722
- <span class='kw'>end</span>
723
- <span class='kw'>end</span>
724
-
725
- <span class='id identifier rubyid_ret'>ret</span>
726
- <span class='kw'>end</span>
727
-
728
-
729
- <span class='comment'># Return program name.
730
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_progname'>progname</span>
731
- <span class='cvar'>@@master</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
732
- <span class='kw'>end</span>
733
-
734
-
735
- <span class='comment'># Return program year.
736
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_year'>year</span>
737
- <span class='cvar'>@@master</span><span class='period'>.</span><span class='id identifier rubyid_year'>year</span>
738
- <span class='kw'>end</span>
739
-
740
-
741
- <span class='comment'># Return author.
742
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_author'>author</span>
743
- <span class='cvar'>@@master</span><span class='period'>.</span><span class='id identifier rubyid_author'>author</span>
744
- <span class='kw'>end</span>
745
-
746
-
747
- <span class='comment'># Return arguments (options) that are specified as command
748
- </span> <span class='comment'># external (i.e. after '--').
749
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_external'>external</span>
750
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_external'>external</span>
751
- <span class='kw'>end</span>
752
-
753
-
754
- <span class='comment'># Return arguments (options) that have no switch.
755
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_default'>default</span>
756
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_default'>default</span>
757
- <span class='kw'>end</span>
758
-
759
-
760
- <span class='comment'># Create option spec.
761
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_full'>full</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No doc.</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
762
- <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span> <span class='rparen'>)</span>
763
- <span class='kw'>end</span>
764
-
765
- <span class='comment'># Create sub-command option spec.
766
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_subcmd'>subcmd</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No doc.</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
767
- <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='symbol'>:subcmd</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span><span class='comma'>,</span> <span class='kw'>false</span> <span class='rparen'>)</span>
768
- <span class='kw'>end</span>
769
-
770
- <span class='comment'># Create switch option spec.
771
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_switch'>switch</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No doc.</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
772
- <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='symbol'>:switch</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span><span class='comma'>,</span> <span class='kw'>false</span> <span class='rparen'>)</span>
773
- <span class='kw'>end</span>
774
-
775
- <span class='comment'># Create exclusive option spec.
776
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_exclusive'>exclusive</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No doc.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_silent'>silent</span> <span class='op'>=</span> <span class='kw'>false</span> <span class='rparen'>)</span>
777
- <span class='id identifier rubyid_o'>o</span> <span class='op'>=</span> <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='symbol'>:exclusive</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span><span class='comma'>,</span> <span class='kw'>false</span> <span class='rparen'>)</span>
778
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_silent'>silent</span> <span class='op'>=</span> <span class='id identifier rubyid_silent'>silent</span>
779
- <span class='id identifier rubyid_o'>o</span>
780
- <span class='kw'>end</span>
781
-
782
- <span class='comment'># Create default option spec, no switch.
783
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_defaultOpt'>defaultOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_doc'>doc</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No doc.</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
784
- <span class='comment'>#new( nil, &quot;&lt;args&gt;&quot;, :default, doc, [] )
785
- </span> <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;default&gt;</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;args&gt;</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='symbol'>:default</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='rparen'>)</span>
786
- <span class='kw'>end</span>
787
-
788
- <span class='comment'># Options iterator for all options.
789
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_blk'>blk</span> <span class='rparen'>)</span>
790
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='op'>&amp;</span><span class='id identifier rubyid_blk'>blk</span>
791
- <span class='kw'>end</span>
792
-
793
- <span class='comment'># Options iterator for given options.
794
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_each_given'>each_given</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_blk'>blk</span> <span class='rparen'>)</span>
795
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_each_given'>each_given</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_blk'>blk</span> <span class='rparen'>)</span>
796
- <span class='kw'>end</span>
797
-
798
- <span class='comment'># Overlay Opt default configuration options.
799
- </span> <span class='kw'>def</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_configOverlay'>configOverlay</span><span class='lparen'>(</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
800
- <span class='cvar'>@@config</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span><span class='lparen'>(</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
801
- <span class='kw'>end</span>
802
-
803
-
804
- <span class='comment'># ------------------------------------------------------------
805
- </span> <span class='comment'># Opt properties:
806
- </span>
807
-
808
- <span class='comment'># Subcommand parent (i.e. host).
809
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:parent</span>
810
-
811
-
812
- <span class='comment'># Option name.
813
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:name</span>
814
-
815
- <span class='comment'># Short option string.
816
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:opt</span>
817
-
818
- <span class='comment'># Long option string.
819
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:longOpt</span>
820
-
821
- <span class='comment'># Option type.
822
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:type</span>
823
-
824
- <span class='comment'># Option value.
825
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:value</span>
826
-
827
- <span class='comment'># Option documentation string.
828
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:doc</span>
829
-
830
- <span class='comment'># Is option specified?
831
- </span> <span class='id identifier rubyid_attr_writer'>attr_writer</span> <span class='symbol'>:given</span>
832
-
833
- <span class='comment'># Is option hidden (usage).
834
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:silent</span>
835
-
836
- <span class='comment'># List of suboptions.
837
- </span> <span class='id identifier rubyid_attr_reader'>attr_reader</span> <span class='symbol'>:subopt</span>
838
-
839
- <span class='comment'># List of subcommands.
840
- </span> <span class='id identifier rubyid_attr_reader'>attr_reader</span> <span class='symbol'>:subcmd</span>
841
-
842
- <span class='comment'># Opt configuration.
843
- </span> <span class='id identifier rubyid_attr_reader'>attr_reader</span> <span class='symbol'>:config</span>
844
-
845
- <span class='comment'># Opt rules.
846
- </span> <span class='id identifier rubyid_attr_reader'>attr_reader</span> <span class='symbol'>:rules</span>
847
-
848
-
849
- <span class='comment'># Create Opt object:
850
- </span> <span class='comment'># [name] Option name string.
851
- </span> <span class='comment'># [opt] Switch string.
852
- </span> <span class='comment'># [type] Option type. One of:
853
- </span> <span class='comment'># * :switch
854
- </span> <span class='comment'># * :single
855
- </span> <span class='comment'># * :multi
856
- </span> <span class='comment'># * :opt_single
857
- </span> <span class='comment'># * :opt_multi
858
- </span> <span class='comment'># * :opt_any
859
- </span> <span class='comment'># * :default
860
- </span> <span class='comment'># * :exclusive
861
- </span> <span class='comment'># * :silent
862
- </span> <span class='comment'># [doc] Option documentation.
863
- </span> <span class='comment'># [value] Default value.
864
- </span>
865
- <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
866
- <span class='ivar'>@parent</span> <span class='op'>=</span> <span class='kw'>nil</span>
867
- <span class='ivar'>@name</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span>
868
- <span class='ivar'>@opt</span> <span class='op'>=</span> <span class='id identifier rubyid_opt'>opt</span>
869
- <span class='ivar'>@longOpt</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>--</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span>
870
- <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span>
871
- <span class='ivar'>@value</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span>
872
- <span class='ivar'>@doc</span> <span class='op'>=</span> <span class='id identifier rubyid_doc'>doc</span>
873
- <span class='ivar'>@silent</span> <span class='op'>=</span> <span class='kw'>false</span>
874
- <span class='comment'># Whether option was set or not.
875
- </span> <span class='ivar'>@given</span> <span class='op'>=</span> <span class='kw'>false</span>
876
- <span class='ivar'>@subopt</span> <span class='op'>=</span> <span class='kw'>nil</span>
877
- <span class='ivar'>@subcmd</span> <span class='op'>=</span> <span class='kw'>nil</span>
878
- <span class='ivar'>@rules</span> <span class='op'>=</span> <span class='kw'>nil</span>
879
-
880
- <span class='ivar'>@config</span> <span class='op'>=</span> <span class='cvar'>@@config</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
881
-
882
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_addOpt'>addOpt</span><span class='lparen'>(</span> <span class='kw'>self</span> <span class='rparen'>)</span>
883
- <span class='kw'>end</span>
884
-
885
-
886
- <span class='comment'># Set subcommand suboptions.
887
- </span> <span class='comment'>#
888
- </span> <span class='comment'># @param opts [Array&lt;Opt&gt;]
889
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_setSubopt'>setSubopt</span><span class='lparen'>(</span> <span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_subs'>subs</span> <span class='rparen'>)</span>
890
- <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
891
- <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_parent'>parent</span> <span class='op'>=</span> <span class='kw'>self</span>
892
- <span class='kw'>end</span>
893
-
894
- <span class='id identifier rubyid_subs'>subs</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
895
- <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_parent'>parent</span> <span class='op'>=</span> <span class='kw'>self</span>
896
- <span class='kw'>end</span>
897
-
898
- <span class='ivar'>@subopt</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span>
899
- <span class='ivar'>@subcmd</span> <span class='op'>=</span> <span class='id identifier rubyid_subs'>subs</span>
900
- <span class='kw'>end</span>
901
-
902
-
903
- <span class='comment'># Merge config to base config.
904
- </span> <span class='comment'>#
905
- </span> <span class='comment'># @param config [Hash] Configuration Hash to merge.
906
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_applyConfig'>applyConfig</span><span class='lparen'>(</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
907
- <span class='ivar'>@config</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span><span class='lparen'>(</span> <span class='id identifier rubyid_config'>config</span> <span class='rparen'>)</span>
908
- <span class='kw'>end</span>
909
-
910
-
911
- <span class='comment'># Set rule checks for the option.
912
- </span> <span class='comment'>#
913
- </span> <span class='comment'># @param rule [Proc] Rule to check after command line parsing.
914
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_setRuleCheck'>setRuleCheck</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
915
- <span class='ivar'>@rules</span> <span class='op'>=</span> <span class='id identifier rubyid_rule'>rule</span>
916
- <span class='kw'>end</span>
917
-
918
-
919
- <span class='comment'># ------------------------------------------------------------
920
- </span> <span class='comment'># Command line parsing and checking:
921
- </span>
922
- <span class='comment'># Check provided args.
923
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span> <span class='id identifier rubyid_argsState'>argsState</span> <span class='rparen'>)</span>
924
-
925
- <span class='comment'># Start at top.
926
- </span> <span class='id identifier rubyid_top'>top</span> <span class='op'>=</span> <span class='kw'>self</span>
927
-
928
- <span class='kw'>begin</span>
929
-
930
- <span class='comment'># Parse and check for invalid arguments.
931
- </span> <span class='kw'>begin</span>
932
- <span class='id identifier rubyid_top'>top</span> <span class='op'>=</span> <span class='id identifier rubyid_top'>top</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span> <span class='id identifier rubyid_argsState'>argsState</span><span class='comma'>,</span> <span class='id identifier rubyid_top'>top</span><span class='period'>.</span><span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span> <span class='symbol'>:check</span> <span class='rbracket'>]</span> <span class='rparen'>)</span>
933
- <span class='kw'>end</span> <span class='kw'>while</span><span class='lparen'>(</span> <span class='id identifier rubyid_top'>top</span> <span class='rparen'>)</span>
934
-
935
- <span class='comment'># Check for any missing valid arguments.
936
- </span> <span class='id identifier rubyid_checkMissing'>checkMissing</span>
937
-
938
- <span class='kw'>rescue</span> <span class='const'>Opt</span><span class='op'>::</span><span class='const'>MissingArgument</span><span class='comma'>,</span> <span class='const'>Opt</span><span class='op'>::</span><span class='const'>InvalidOption</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_err'>err</span>
939
-
940
- <span class='cvar'>@@io</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span>
941
-
942
- <span class='id identifier rubyid_error'>error</span><span class='lparen'>(</span> <span class='id identifier rubyid_err'>err</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rparen'>)</span>
943
-
944
- <span class='comment'># Display subcmd specific usage info.
945
- </span> <span class='id identifier rubyid_err'>err</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_usage'>usage</span>
946
-
947
- <span class='id identifier rubyid_exit'>exit</span><span class='lparen'>(</span> <span class='int'>1</span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_config'>config</span><span class='lbracket'>[</span> <span class='symbol'>:error_exit</span> <span class='rbracket'>]</span>
948
-
949
- <span class='kw'>end</span>
950
-
951
- <span class='comment'># Revert back to top after hierarchy travelsal.
952
- </span> <span class='id identifier rubyid_usageIfHelp'>usageIfHelp</span>
953
-
954
- <span class='comment'># Check rules.
955
- </span> <span class='id identifier rubyid_cur'>cur</span> <span class='op'>=</span> <span class='kw'>self</span>
956
- <span class='kw'>while</span> <span class='id identifier rubyid_cur'>cur</span>
957
- <span class='id identifier rubyid_cur'>cur</span><span class='period'>.</span><span class='id identifier rubyid_checkRule'>checkRule</span>
958
- <span class='id identifier rubyid_cur'>cur</span> <span class='op'>=</span> <span class='id identifier rubyid_cur'>cur</span><span class='period'>.</span><span class='id identifier rubyid_givenSubcmd'>givenSubcmd</span>
959
- <span class='kw'>end</span>
960
-
961
- <span class='kw'>self</span>
962
- <span class='kw'>end</span>
963
-
964
-
965
-
966
- <span class='comment'># Parse cmdline options from args.
967
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span> <span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='id identifier rubyid_checkInvalids'>checkInvalids</span> <span class='op'>=</span> <span class='kw'>true</span> <span class='rparen'>)</span>
968
-
969
- <span class='kw'>while</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span>
970
-
971
- <span class='comment'>#puts &quot;Opt.parse (#{@name}): #{args.get}&quot;
972
- </span>
973
- <span class='kw'>if</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_isOptTerm'>isOptTerm</span>
974
-
975
- <span class='comment'># Rest of the args do not belong to this program.
976
- </span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span>
977
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_master'>master</span><span class='period'>.</span><span class='id identifier rubyid_external'>external</span> <span class='op'>=</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_rest'>rest</span>
978
- <span class='kw'>break</span>
979
-
980
- <span class='kw'>elsif</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_isOpt'>isOpt</span>
981
-
982
- <span class='id identifier rubyid_o'>o</span> <span class='op'>=</span> <span class='id identifier rubyid_findOpt'>findOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span> <span class='rparen'>)</span>
983
-
984
- <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_o'>o</span>
985
- <span class='kw'>if</span> <span class='id identifier rubyid_checkInvalids'>checkInvalids</span>
986
- <span class='id identifier rubyid_raise'>raise</span> \
987
- <span class='const'>InvalidOption</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unknown option \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;...</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
988
- <span class='kw'>self</span> <span class='rparen'>)</span>
989
- <span class='kw'>else</span>
990
- <span class='id identifier rubyid_o'>o</span> <span class='op'>=</span> <span class='id identifier rubyid_findOpt'>findOpt</span><span class='lparen'>(</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
991
- <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_o'>o</span>
992
- <span class='id identifier rubyid_raise'>raise</span> \
993
- <span class='const'>InvalidOption</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
994
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No default option specified for \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;...</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
995
- <span class='kw'>self</span> <span class='rparen'>)</span>
996
- <span class='kw'>else</span>
997
- <span class='comment'># Default option.
998
- </span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_toValue'>toValue</span>
999
- <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span>
1000
- <span class='kw'>end</span>
1001
- <span class='kw'>end</span>
1002
-
1003
- <span class='kw'>elsif</span> <span class='id identifier rubyid_o'>o</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_hasArg'>hasArg</span>
1004
-
1005
- <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span>
1006
-
1007
- <span class='kw'>if</span> <span class='lparen'>(</span> <span class='op'>!</span><span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span> <span class='op'>||</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_isOpt'>isOpt</span> <span class='rparen'>)</span> <span class='op'>&amp;&amp;</span>
1008
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>!=</span> <span class='symbol'>:opt_any</span>
1009
-
1010
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>MissingArgument</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
1011
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No argument given for \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_opt'>opt</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;...</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
1012
- <span class='kw'>self</span> <span class='rparen'>)</span>
1013
-
1014
- <span class='kw'>else</span>
1015
-
1016
- <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_hasMany'>hasMany</span>
1017
-
1018
- <span class='comment'># Get all argument for multi-option.
1019
- </span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
1020
- <span class='kw'>while</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_isOpt'>isOpt</span>
1021
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_toValue'>toValue</span>
1022
- <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span>
1023
- <span class='kw'>end</span>
1024
-
1025
- <span class='kw'>else</span>
1026
-
1027
- <span class='comment'># Get one argument for single-option.
1028
- </span>
1029
- <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
1030
- <span class='id identifier rubyid_raise'>raise</span> \
1031
- <span class='const'>InvalidOption</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
1032
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Too many arguments for option (\&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;)...</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
1033
- <span class='kw'>self</span> <span class='rparen'>)</span>
1034
- <span class='kw'>else</span>
1035
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_toValue'>toValue</span>
1036
- <span class='kw'>end</span>
1037
- <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span>
1038
- <span class='kw'>end</span>
1039
- <span class='kw'>end</span>
1040
-
1041
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span> <span class='op'>=</span> <span class='kw'>true</span>
1042
-
1043
- <span class='kw'>else</span>
1044
-
1045
- <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_o'>o</span>
1046
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>InvalidOption</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No valid options specified...</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
1047
- <span class='kw'>self</span> <span class='rparen'>)</span>
1048
- <span class='kw'>else</span>
1049
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='op'>!</span><span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
1050
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span> <span class='op'>=</span> <span class='kw'>true</span>
1051
- <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span>
1052
- <span class='kw'>end</span>
1053
- <span class='kw'>end</span>
1054
-
1055
- <span class='kw'>else</span>
1056
-
1057
- <span class='comment'># Subcmd or default. Check for Subcmd first.
1058
- </span>
1059
- <span class='comment'># Search for Subcmd.
1060
- </span> <span class='id identifier rubyid_o'>o</span> <span class='op'>=</span> <span class='id identifier rubyid_findOpt'>findOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span> <span class='rparen'>)</span>
1061
-
1062
- <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_o'>o</span>
1063
-
1064
- <span class='comment'># Search for default option.
1065
- </span> <span class='id identifier rubyid_o'>o</span> <span class='op'>=</span> <span class='id identifier rubyid_findOpt'>findOpt</span><span class='lparen'>(</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
1066
- <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_o'>o</span>
1067
- <span class='id identifier rubyid_raise'>raise</span> \
1068
- <span class='const'>InvalidOption</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
1069
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No default option specified for \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;...</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
1070
- <span class='kw'>self</span> <span class='rparen'>)</span>
1071
- <span class='kw'>else</span>
1072
- <span class='comment'># Default option.
1073
- </span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span> <span class='op'>=</span> <span class='kw'>true</span>
1074
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_toValue'>toValue</span>
1075
- <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span>
1076
- <span class='kw'>end</span>
1077
-
1078
- <span class='kw'>else</span>
1079
-
1080
- <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span> <span class='op'>=</span> <span class='kw'>true</span>
1081
- <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span>
1082
- <span class='kw'>return</span> <span class='id identifier rubyid_o'>o</span>
1083
-
1084
- <span class='kw'>end</span>
1085
-
1086
- <span class='kw'>end</span>
1087
- <span class='kw'>end</span>
1088
-
1089
- <span class='kw'>nil</span>
1090
- <span class='kw'>end</span>
1091
-
1092
-
1093
- <span class='comment'># Check for any non-given required arguments recursively
1094
- </span> <span class='comment'># through hierarchy of subcommands. MissingArgument Exception
1095
- </span> <span class='comment'># is generated if argument is missing.
1096
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_checkMissing'>checkMissing</span>
1097
-
1098
- <span class='comment'># Full cmd name.
1099
- </span> <span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>=</span> <span class='lparen'>(</span> <span class='id identifier rubyid_getParents'>getParents</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='kw'>end</span> <span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> </span><span class='tstring_end'>'</span></span> <span class='rparen'>)</span>
1100
-
1101
- <span class='comment'># Check for any exclusive args first.
1102
- </span> <span class='ivar'>@subopt</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1103
- <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:exclusive</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
1104
- <span class='kw'>return</span>
1105
- <span class='kw'>end</span>
1106
- <span class='kw'>end</span>
1107
-
1108
-
1109
- <span class='comment'># Check for required arguments for this level before
1110
- </span> <span class='comment'># subcmds.
1111
- </span> <span class='ivar'>@subopt</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1112
- <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_isRequired'>isRequired</span>
1113
- <span class='kw'>unless</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
1114
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>MissingArgument</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
1115
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Option \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_opt'>opt</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot; missing for \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cmd'>cmd</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;...</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
1116
- <span class='kw'>self</span> <span class='rparen'>)</span>
1117
- <span class='kw'>end</span>
1118
- <span class='kw'>end</span>
1119
- <span class='kw'>end</span>
1120
-
1121
- <span class='kw'>if</span> <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:subcheck</span> <span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_hasSubcmd'>hasSubcmd</span>
1122
- <span class='comment'># Compulsory Subcommand checking enabled.
1123
- </span> <span class='id identifier rubyid_subcmdGiven'>subcmdGiven</span> <span class='op'>=</span> <span class='kw'>false</span>
1124
- <span class='kw'>else</span>
1125
- <span class='id identifier rubyid_subcmdGiven'>subcmdGiven</span> <span class='op'>=</span> <span class='kw'>true</span>
1126
- <span class='kw'>end</span>
1127
-
1128
- <span class='comment'># Check for any subcmd args.
1129
- </span> <span class='id identifier rubyid_sub'>sub</span> <span class='op'>=</span> <span class='id identifier rubyid_givenSubcmd'>givenSubcmd</span>
1130
- <span class='kw'>if</span> <span class='id identifier rubyid_sub'>sub</span>
1131
- <span class='id identifier rubyid_subcmdGiven'>subcmdGiven</span> <span class='op'>=</span> <span class='kw'>true</span>
1132
- <span class='comment'># Use recursion to examine the next level.
1133
- </span> <span class='kw'>return</span> <span class='id identifier rubyid_sub'>sub</span><span class='period'>.</span><span class='id identifier rubyid_checkMissing'>checkMissing</span>
1134
- <span class='kw'>end</span>
1135
-
1136
- <span class='comment'># If no subcmds are given, issue error.
1137
- </span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'>MissingArgument</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
1138
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Subcommand required for \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cmd'>cmd</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;...</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
1139
- <span class='kw'>self</span> <span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_subcmdGiven'>subcmdGiven</span>
1140
-
1141
- <span class='kw'>end</span>
1142
-
1143
-
1144
-
1145
- <span class='comment'># Check option combination rules.
1146
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_checkRule'>checkRule</span>
1147
-
1148
- <span class='kw'>return</span> <span class='kw'>unless</span> <span class='ivar'>@rules</span>
1149
-
1150
- <span class='kw'>begin</span>
1151
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>Opt</span><span class='op'>::</span><span class='const'>InvalidOption</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Option combination mismatch!</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='kw'>self</span> <span class='rparen'>)</span> <span class='kw'>unless</span>
1152
- <span class='const'>RuleCheck</span><span class='period'>.</span><span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span> <span class='kw'>self</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='ivar'>@rules</span> <span class='rparen'>)</span>
1153
-
1154
- <span class='kw'>rescue</span> <span class='const'>Opt</span><span class='op'>::</span><span class='const'>MissingArgument</span><span class='comma'>,</span> <span class='const'>Opt</span><span class='op'>::</span><span class='const'>InvalidOption</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_err'>err</span>
1155
- <span class='cvar'>@@io</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span>
1156
- <span class='id identifier rubyid_error'>error</span><span class='lparen'>(</span> <span class='id identifier rubyid_err'>err</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rparen'>)</span>
1157
-
1158
- <span class='id identifier rubyid_usage'>usage</span><span class='lparen'>(</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='kw'>true</span> <span class='rparen'>)</span>
1159
-
1160
- <span class='comment'># Included in
1161
- </span><span class='comment'># # Display the possible combination:
1162
- </span><span class='comment'># @@io.puts &quot;\n Option combinations:\n\n&quot;
1163
- </span><span class='comment'># RuleDisplay.print( &amp;@rules )
1164
- </span>
1165
- <span class='kw'>end</span>
1166
- <span class='kw'>end</span>
1167
-
1168
-
1169
- <span class='comment'># Additional option check.
1170
- </span> <span class='comment'># @param opt [String] Option name.
1171
- </span> <span class='comment'># @param error [String] Error string for false return values (from check).
1172
- </span> <span class='comment'># @param check [Proc] Checker proc run for the option. Either
1173
- </span> <span class='comment'># return false or generate an exception when errors found.
1174
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_checkAlso'>checkAlso</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_error'>error</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_check'>check</span> <span class='rparen'>)</span>
1175
- <span class='kw'>begin</span>
1176
- <span class='kw'>if</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_opt'>opt</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_evalCheck'>evalCheck</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_check'>check</span> <span class='rparen'>)</span> <span class='op'>!=</span> <span class='kw'>true</span>
1177
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>Opt</span><span class='op'>::</span><span class='const'>InvalidOption</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_error'>error</span><span class='comma'>,</span> <span class='kw'>self</span> <span class='rparen'>)</span>
1178
- <span class='kw'>end</span>
1179
- <span class='kw'>rescue</span> <span class='const'>Opt</span><span class='op'>::</span><span class='const'>MissingArgument</span><span class='comma'>,</span> <span class='const'>Opt</span><span class='op'>::</span><span class='const'>InvalidOption</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_err'>err</span>
1180
- <span class='cvar'>@@io</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span>
1181
- <span class='id identifier rubyid_error'>error</span><span class='lparen'>(</span> <span class='id identifier rubyid_err'>err</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rparen'>)</span>
1182
- <span class='id identifier rubyid_err'>err</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_usage'>usage</span>
1183
- <span class='id identifier rubyid_exit'>exit</span><span class='lparen'>(</span> <span class='int'>1</span> <span class='rparen'>)</span>
1184
- <span class='kw'>end</span>
1185
- <span class='kw'>end</span>
1186
-
1187
-
1188
-
1189
-
1190
- <span class='comment'># ------------------------------------------------------------
1191
- </span> <span class='comment'># Opt query user interface:
1192
- </span>
1193
- <span class='comment'># Select option object by name operator.
1194
- </span> <span class='kw'>def</span> <span class='op'>[]</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1195
- <span class='id identifier rubyid_ret'>ret</span> <span class='op'>=</span> <span class='id identifier rubyid_argByName'>argByName</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1196
- <span class='kw'>unless</span> <span class='id identifier rubyid_ret'>ret</span>
1197
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Subopt \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_str'>str</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot; does not exist for \&quot;</span><span class='embexpr_beg'>#{</span><span class='ivar'>@name</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot;!</span><span class='tstring_end'>&quot;</span></span>
1198
- <span class='kw'>end</span>
1199
- <span class='id identifier rubyid_ret'>ret</span>
1200
- <span class='kw'>end</span>
1201
-
1202
-
1203
- <span class='comment'># All subcommand options, options and subcommands.
1204
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_suball'>suball</span>
1205
- <span class='ivar'>@subopt</span> <span class='op'>+</span> <span class='ivar'>@subcmd</span>
1206
- <span class='kw'>end</span>
1207
-
1208
-
1209
- <span class='comment'># Options list iterator.
1210
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_blk'>blk</span> <span class='rparen'>)</span>
1211
- <span class='id identifier rubyid_suball'>suball</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1212
- <span class='kw'>yield</span> <span class='id identifier rubyid_o'>o</span>
1213
- <span class='kw'>end</span>
1214
- <span class='kw'>end</span>
1215
-
1216
-
1217
- <span class='comment'># Options iterator for given options.
1218
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_each_given'>each_given</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_blk'>blk</span> <span class='rparen'>)</span>
1219
- <span class='id identifier rubyid_suball'>suball</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1220
- <span class='kw'>yield</span> <span class='id identifier rubyid_o'>o</span> <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
1221
- <span class='kw'>end</span>
1222
- <span class='kw'>end</span>
1223
-
1224
-
1225
- <span class='comment'># Number of given options.
1226
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_givenCount'>givenCount</span>
1227
- <span class='id identifier rubyid_cnt'>cnt</span> <span class='op'>=</span> <span class='int'>0</span>
1228
- <span class='id identifier rubyid_each_given'>each_given</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
1229
- <span class='id identifier rubyid_cnt'>cnt</span> <span class='op'>+=</span> <span class='int'>1</span>
1230
- <span class='kw'>end</span>
1231
- <span class='id identifier rubyid_cnt'>cnt</span>
1232
- <span class='kw'>end</span>
1233
-
1234
-
1235
- <span class='comment'># Short syntax for value reference. Example: &quot;~Opt['file']&quot;.
1236
- </span> <span class='kw'>def</span> <span class='op'>~</span><span class='lparen'>(</span><span class='rparen'>)</span>
1237
- <span class='ivar'>@value</span>
1238
- <span class='kw'>end</span>
1239
-
1240
-
1241
- <span class='comment'># Return option value if given otherwise the default.
1242
- </span> <span class='comment'># Example usage: fileName = Opt[&quot;file&quot;].apply( &quot;no_name.txt&quot; )
1243
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_apply'>apply</span><span class='lparen'>(</span> <span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
1244
- <span class='kw'>if</span> <span class='id identifier rubyid_given'>given</span>
1245
- <span class='id identifier rubyid_value'>value</span>
1246
- <span class='kw'>else</span>
1247
- <span class='id identifier rubyid_default'>default</span>
1248
- <span class='kw'>end</span>
1249
- <span class='kw'>end</span>
1250
-
1251
-
1252
- <span class='comment'># Returns true if option is given, and block is not
1253
- </span> <span class='comment'># present. When block is present, the block is executed (with
1254
- </span> <span class='comment'># value as parameter) if option has been given.
1255
- </span> <span class='comment'>#
1256
- </span> <span class='comment'># @param yieldOpt [Boolean] Pass Opt to block instead of its
1257
- </span> <span class='comment'># value.
1258
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_given'>given</span><span class='lparen'>(</span> <span class='id identifier rubyid_yieldOpt'>yieldOpt</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_prog'>prog</span> <span class='rparen'>)</span>
1259
- <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
1260
- <span class='kw'>if</span> <span class='ivar'>@given</span>
1261
- <span class='kw'>if</span> <span class='id identifier rubyid_yieldOpt'>yieldOpt</span>
1262
- <span class='kw'>yield</span><span class='lparen'>(</span> <span class='kw'>self</span> <span class='rparen'>)</span>
1263
- <span class='kw'>else</span>
1264
- <span class='kw'>yield</span><span class='lparen'>(</span> <span class='ivar'>@value</span> <span class='rparen'>)</span>
1265
- <span class='kw'>end</span>
1266
- <span class='kw'>else</span>
1267
- <span class='kw'>false</span>
1268
- <span class='kw'>end</span>
1269
- <span class='kw'>else</span>
1270
- <span class='ivar'>@given</span>
1271
- <span class='kw'>end</span>
1272
- <span class='kw'>end</span>
1273
-
1274
-
1275
- <span class='comment'># Alias for given.
1276
- </span> <span class='kw'>alias</span> <span class='id identifier rubyid_given?'>given?</span> <span class='id identifier rubyid_given'>given</span>
1277
-
1278
-
1279
- <span class='comment'># Return the selected subcommand.
1280
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_givenSubcmd'>givenSubcmd</span>
1281
- <span class='lparen'>(</span> <span class='ivar'>@subcmd</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span> <span class='kw'>end</span> <span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
1282
- <span class='kw'>end</span>
1283
-
1284
-
1285
- <span class='comment'># Returns Hash of option value parameters. Example command
1286
- </span> <span class='comment'># line content:
1287
- </span> <span class='comment'># -p rounds=10 length=5
1288
- </span> <span class='comment'># Option value content in this case would be (Array of param
1289
- </span> <span class='comment'># settings):
1290
- </span> <span class='comment'># [ &quot;rounds=10&quot;, &quot;length=5&quot; ]
1291
- </span> <span class='comment'># @return [Hash] Parameter settings included in the option.
1292
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_params'>params</span>
1293
- <span class='id identifier rubyid_map'>map</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1294
- <span class='ivar'>@value</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
1295
- <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>=</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
1296
- <span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_str_to_num'>str_to_num</span><span class='lparen'>(</span> <span class='id identifier rubyid_value'>value</span> <span class='rparen'>)</span>
1297
- <span class='id identifier rubyid_map'>map</span><span class='lbracket'>[</span> <span class='id identifier rubyid_name'>name</span> <span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span>
1298
- <span class='kw'>end</span>
1299
- <span class='id identifier rubyid_map'>map</span>
1300
- <span class='kw'>end</span>
1301
-
1302
-
1303
- <span class='comment'># Return default options.
1304
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_default'>default</span>
1305
- <span class='id identifier rubyid_argByName'>argByName</span><span class='lparen'>(</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
1306
- <span class='kw'>end</span>
1307
-
1308
-
1309
- <span class='comment'># Select option object by name.
1310
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_argByName'>argByName</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1311
- <span class='kw'>if</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>==</span> <span class='kw'>nil</span>
1312
- <span class='ivar'>@subopt</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1313
- <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:default</span>
1314
- <span class='kw'>return</span> <span class='id identifier rubyid_o'>o</span>
1315
- <span class='kw'>end</span>
1316
- <span class='kw'>end</span>
1317
- <span class='kw'>nil</span>
1318
- <span class='kw'>else</span>
1319
- <span class='id identifier rubyid_suball'>suball</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1320
- <span class='kw'>if</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>==</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
1321
- <span class='kw'>return</span> <span class='id identifier rubyid_o'>o</span>
1322
- <span class='kw'>end</span>
1323
- <span class='kw'>end</span>
1324
- <span class='kw'>nil</span>
1325
- <span class='kw'>end</span>
1326
- <span class='kw'>end</span>
1327
-
1328
-
1329
- <span class='comment'># Select option object by name/opt/longOpt.
1330
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_argById'>argById</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1331
- <span class='kw'>if</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>==</span> <span class='kw'>nil</span>
1332
- <span class='ivar'>@subopt</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1333
- <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:default</span>
1334
- <span class='kw'>return</span> <span class='id identifier rubyid_o'>o</span>
1335
- <span class='kw'>end</span>
1336
- <span class='kw'>end</span>
1337
- <span class='kw'>nil</span>
1338
- <span class='kw'>else</span>
1339
- <span class='id identifier rubyid_suball'>suball</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1340
- <span class='kw'>if</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>==</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>||</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>==</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_opt'>opt</span> <span class='op'>||</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>==</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_longOpt'>longOpt</span>
1341
- <span class='kw'>return</span> <span class='id identifier rubyid_o'>o</span>
1342
- <span class='kw'>end</span>
1343
- <span class='kw'>end</span>
1344
- <span class='kw'>nil</span>
1345
- <span class='kw'>end</span>
1346
- <span class='kw'>end</span>
1347
-
1348
-
1349
- <span class='comment'># Option requires argument?
1350
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_hasArg'>hasArg</span>
1351
- <span class='kw'>case</span> <span class='ivar'>@type</span>
1352
- <span class='kw'>when</span> <span class='symbol'>:single</span><span class='comma'>,</span> <span class='symbol'>:multi</span><span class='comma'>,</span> <span class='symbol'>:opt_single</span><span class='comma'>,</span> <span class='symbol'>:opt_multi</span><span class='comma'>,</span> <span class='symbol'>:opt_any</span><span class='semicolon'>;</span> <span class='kw'>true</span>
1353
- <span class='kw'>else</span> <span class='kw'>false</span>
1354
- <span class='kw'>end</span>
1355
- <span class='kw'>end</span>
1356
-
1357
-
1358
- <span class='comment'># Option requires many arguments?
1359
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_hasMany'>hasMany</span>
1360
- <span class='kw'>case</span> <span class='ivar'>@type</span>
1361
- <span class='kw'>when</span> <span class='symbol'>:multi</span><span class='comma'>,</span> <span class='symbol'>:opt_multi</span><span class='comma'>,</span> <span class='symbol'>:opt_any</span><span class='semicolon'>;</span> <span class='kw'>true</span>
1362
- <span class='kw'>else</span> <span class='kw'>false</span>
1363
- <span class='kw'>end</span>
1364
- <span class='kw'>end</span>
1365
-
1366
-
1367
- <span class='comment'># Is mandatory argument?
1368
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_isRequired'>isRequired</span>
1369
- <span class='kw'>case</span> <span class='ivar'>@type</span>
1370
- <span class='kw'>when</span> <span class='symbol'>:single</span><span class='comma'>,</span> <span class='symbol'>:multi</span><span class='semicolon'>;</span> <span class='kw'>true</span>
1371
- <span class='kw'>else</span> <span class='kw'>false</span>
1372
- <span class='kw'>end</span>
1373
- <span class='kw'>end</span>
1374
-
1375
-
1376
- <span class='comment'># Test if option is silent.
1377
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_silent?'>silent?</span>
1378
- <span class='ivar'>@silent</span>
1379
- <span class='kw'>end</span>
1380
-
1381
-
1382
- <span class='comment'># Test if option is of switch type.
1383
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_isSwitch'>isSwitch</span>
1384
- <span class='kw'>case</span> <span class='ivar'>@type</span>
1385
- <span class='kw'>when</span> <span class='symbol'>:switch</span><span class='comma'>,</span> <span class='symbol'>:exclusive</span><span class='comma'>,</span> <span class='symbol'>:default</span><span class='semicolon'>;</span> <span class='kw'>true</span>
1386
- <span class='kw'>else</span> <span class='kw'>false</span>
1387
- <span class='kw'>end</span>
1388
- <span class='kw'>end</span>
1389
-
1390
-
1391
- <span class='comment'># ------------------------------------------------------------
1392
- </span> <span class='comment'># Opt &quot;Usage Help&quot; user interface:
1393
- </span>
1394
- <span class='comment'># Set optional header for &quot;usage&quot;.
1395
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_setUsageHeader'>setUsageHeader</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1396
- <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:header</span> <span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_str'>str</span>
1397
- <span class='kw'>end</span>
1398
-
1399
-
1400
- <span class='comment'># Set optional footer for &quot;usage&quot;.
1401
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_setUsageFooter'>setUsageFooter</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1402
- <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:footer</span> <span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_str'>str</span>
1403
- <span class='kw'>end</span>
1404
-
1405
-
1406
- <span class='comment'># Display program usage (and optionally exit).
1407
- </span> <span class='comment'>#
1408
- </span> <span class='comment'># @param doExit [NilClass,Boolean] Exit program after help
1409
- </span> <span class='comment'># display. Default to help_exit config if nil.
1410
- </span> <span class='comment'># @param ruleHelp [NilClass,Boolean] Include rule help to help
1411
- </span> <span class='comment'># display. Deault to rulehelp config if nil.
1412
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_usage'>usage</span><span class='lparen'>(</span> <span class='id identifier rubyid_doExit'>doExit</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_ruleHelp'>ruleHelp</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
1413
-
1414
- <span class='id identifier rubyid_doExit'>doExit</span> <span class='op'>=</span> <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:help_exit</span> <span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_doExit'>doExit</span> <span class='op'>==</span> <span class='kw'>nil</span>
1415
- <span class='id identifier rubyid_ruleHelp'>ruleHelp</span> <span class='op'>=</span> <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:rulehelp</span> <span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_ruleHelp'>ruleHelp</span> <span class='op'>==</span> <span class='kw'>nil</span>
1416
-
1417
- <span class='cvar'>@@io</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_usageNormal'>usageNormal</span>
1418
-
1419
- <span class='kw'>if</span> <span class='id identifier rubyid_ruleHelp'>ruleHelp</span>
1420
- <span class='cvar'>@@io</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n Option Combinations:</span><span class='tstring_end'>&quot;</span></span>
1421
- <span class='cvar'>@@io</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='const'>RuleDisplay</span><span class='period'>.</span><span class='id identifier rubyid_print'>print</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='ivar'>@rules</span> <span class='rparen'>)</span>
1422
- <span class='kw'>end</span>
1423
-
1424
- <span class='id identifier rubyid_exit'>exit</span><span class='lparen'>(</span> <span class='int'>1</span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_doExit'>doExit</span>
1425
- <span class='kw'>end</span>
1426
-
1427
-
1428
- <span class='comment'># Display program usage (and optionally exit).
1429
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_usageIfHelp'>usageIfHelp</span>
1430
- <span class='kw'>if</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>help</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
1431
- <span class='id identifier rubyid_usage'>usage</span>
1432
- <span class='kw'>elsif</span> <span class='id identifier rubyid_hasSubcmd'>hasSubcmd</span>
1433
- <span class='id identifier rubyid_givenSubcmd'>givenSubcmd</span><span class='period'>.</span><span class='id identifier rubyid_usageIfHelp'>usageIfHelp</span>
1434
- <span class='kw'>end</span>
1435
- <span class='kw'>end</span>
1436
-
1437
-
1438
- <span class='comment'># Usage printout for command.
1439
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_usageCommand'>usageCommand</span>
1440
- <span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span>
1441
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>
1442
- Subcommand \&quot;</span><span class='embexpr_beg'>#{</span><span class='ivar'>@name</span><span class='rbrace'>}</span><span class='tstring_content'>\&quot; usage:
1443
- </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_fullCommand'>fullCommand</span><span class='rbrace'>}</span><span class='tstring_content'> </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cmdline'>cmdline</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='rbrace'>}</span><span class='tstring_content'>
1444
-
1445
- </span><span class='tstring_end'>&quot;</span></span>
1446
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='id identifier rubyid_suboptDoc'>suboptDoc</span>
1447
-
1448
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span>
1449
- <span class='kw'>end</span>
1450
-
1451
- <span class='comment'># Usage info for Opt:s.
1452
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_usageNormal'>usageNormal</span>
1453
- <span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span>
1454
-
1455
- <span class='kw'>if</span> <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:header</span> <span class='rbracket'>]</span>
1456
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span>
1457
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:header</span> <span class='rbracket'>]</span>
1458
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span>
1459
- <span class='kw'>end</span>
1460
-
1461
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='id identifier rubyid_usageCommand'>usageCommand</span>
1462
-
1463
- <span class='kw'>if</span> <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:footer</span> <span class='rbracket'>]</span>
1464
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:footer</span> <span class='rbracket'>]</span>
1465
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span>
1466
- <span class='kw'>end</span>
1467
-
1468
- <span class='id identifier rubyid_str'>str</span>
1469
- <span class='kw'>end</span>
1470
-
1471
-
1472
- <span class='comment'># Return cmdline usage strings for options in an Array.
1473
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_cmdline'>cmdline</span>
1474
- <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
1475
-
1476
- <span class='ivar'>@subopt</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1477
-
1478
- <span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_silent?'>silent?</span>
1479
-
1480
- <span class='id identifier rubyid_prural'>prural</span> <span class='op'>=</span> <span class='kw'>nil</span>
1481
- <span class='kw'>case</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span>
1482
- <span class='kw'>when</span> <span class='symbol'>:multi</span><span class='comma'>,</span> <span class='symbol'>:opt_multi</span><span class='semicolon'>;</span> <span class='id identifier rubyid_prural'>prural</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>+</span><span class='tstring_end'>&quot;</span></span>
1483
- <span class='kw'>when</span> <span class='symbol'>:opt_any</span><span class='semicolon'>;</span> <span class='id identifier rubyid_prural'>prural</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>*</span><span class='tstring_end'>&quot;</span></span>
1484
- <span class='kw'>else</span> <span class='id identifier rubyid_prural'>prural</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span>
1485
- <span class='kw'>end</span>
1486
-
1487
-
1488
- <span class='kw'>if</span> <span class='op'>!</span><span class='lparen'>(</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_isSwitch'>isSwitch</span> <span class='rparen'>)</span>
1489
- <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> &lt;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span><span class='tstring_content'>&gt;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_prural'>prural</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span>
1490
- <span class='kw'>else</span>
1491
- <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span>
1492
- <span class='kw'>end</span>
1493
-
1494
- <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_opt'>opt</span> <span class='op'>==</span> <span class='kw'>nil</span>
1495
- <span class='id identifier rubyid_opt'>opt</span> <span class='op'>=</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_longOpt'>longOpt</span>
1496
- <span class='kw'>else</span>
1497
- <span class='id identifier rubyid_opt'>opt</span> <span class='op'>=</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_opt'>opt</span>
1498
- <span class='kw'>end</span>
1499
-
1500
- <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_isRequired'>isRequired</span>
1501
- <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_opt'>opt</span><span class='rbrace'>}</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span>
1502
- <span class='kw'>else</span>
1503
- <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>[</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_opt'>opt</span><span class='rbrace'>}</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span><span class='tstring_content'>]</span><span class='tstring_end'>&quot;</span></span>
1504
- <span class='kw'>end</span>
1505
- <span class='kw'>end</span>
1506
-
1507
-
1508
- <span class='kw'>if</span> <span class='id identifier rubyid_hasSubcmd'>hasSubcmd</span>
1509
- <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;&lt;subcommand&gt;&gt;</span><span class='tstring_end'>&quot;</span></span>
1510
- <span class='kw'>end</span>
1511
-
1512
- <span class='id identifier rubyid_opts'>opts</span>
1513
-
1514
- <span class='kw'>end</span>
1515
-
1516
-
1517
- <span class='comment'># Return document strings for options.
1518
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_suboptDoc'>suboptDoc</span>
1519
-
1520
- <span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span>
1521
- <span class='id identifier rubyid_format'>format</span> <span class='op'>=</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_s'>s</span><span class='comma'>,</span><span class='id identifier rubyid_d'>d</span><span class='op'>|</span> <span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> %-</span><span class='embexpr_beg'>#{</span><span class='ivar'>@config</span><span class='lbracket'>[</span> <span class='symbol'>:tab</span> <span class='rbracket'>]</span><span class='rbrace'>}</span><span class='tstring_content'>s%s\n</span><span class='tstring_end'>&quot;</span></span> <span class='op'>%</span> <span class='lbracket'>[</span> <span class='id identifier rubyid_s'>s</span><span class='comma'>,</span> <span class='id identifier rubyid_d'>d</span> <span class='rbracket'>]</span> <span class='rparen'>)</span> <span class='kw'>end</span>
1522
-
1523
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Options:</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_hasSubcmd'>hasSubcmd</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_hasVisibleOptions'>hasVisibleOptions</span>
1524
-
1525
- <span class='ivar'>@subopt</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1526
- <span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_silent?'>silent?</span>
1527
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_opt'>opt</span> <span class='op'>?</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_opt'>opt</span> <span class='op'>:</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_longOpt'>longOpt</span><span class='comma'>,</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_doc'>doc</span> <span class='rparen'>)</span>
1528
- <span class='kw'>end</span>
1529
-
1530
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Subcommands:</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_hasSubcmd'>hasSubcmd</span>
1531
-
1532
- <span class='ivar'>@subcmd</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span>
1533
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_o'>o</span><span class='period'>.</span><span class='id identifier rubyid_doc'>doc</span> <span class='rparen'>)</span>
1534
- <span class='kw'>end</span>
1535
-
1536
- <span class='id identifier rubyid_str'>str</span>
1537
- <span class='kw'>end</span>
1538
-
1539
-
1540
- <span class='comment'># Find option object by option str.
1541
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_findOpt'>findOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1542
- <span class='kw'>if</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>==</span> <span class='kw'>nil</span>
1543
- <span class='lparen'>(</span> <span class='id identifier rubyid_suball'>suball</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:default</span> <span class='rbrace'>}</span> <span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
1544
- <span class='kw'>elsif</span> <span class='id identifier rubyid_str'>str</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>--</span><span class='tstring_end'>&quot;</span></span>
1545
- <span class='lparen'>(</span> <span class='id identifier rubyid_suball'>suball</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_longOpt'>longOpt</span> <span class='op'>==</span> <span class='id identifier rubyid_str'>str</span> <span class='rbrace'>}</span> <span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
1546
- <span class='kw'>elsif</span> <span class='id identifier rubyid_str'>str</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>!=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>-</span><span class='tstring_end'>&quot;</span></span>
1547
- <span class='lparen'>(</span> <span class='id identifier rubyid_suball'>suball</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>==</span> <span class='id identifier rubyid_str'>str</span> <span class='rbrace'>}</span> <span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
1548
- <span class='kw'>else</span>
1549
- <span class='lparen'>(</span> <span class='id identifier rubyid_suball'>suball</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_opt'>opt</span> <span class='op'>==</span> <span class='id identifier rubyid_str'>str</span> <span class='rbrace'>}</span> <span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
1550
- <span class='kw'>end</span>
1551
- <span class='kw'>end</span>
1552
-
1553
-
1554
- <span class='comment'># Como error printout.
1555
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_error'>error</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1556
- <span class='cvar'>@@io</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_progname'>progname</span><span class='rbrace'>}</span><span class='tstring_content'> error: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_str'>str</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span>
1557
- <span class='kw'>end</span>
1558
-
1559
-
1560
-
1561
-
1562
- <span class='comment'># ------------------------------------------------------------
1563
- </span> <span class='comment'># Internal methods:
1564
- </span>
1565
- <span class='id identifier rubyid_private'>private</span>
1566
-
1567
-
1568
- <span class='comment'># Convert string to number if possible. The order of checks:
1569
- </span> <span class='comment'># integer, float, and no-conversion.
1570
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_str_to_num'>str_to_num</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1571
- <span class='kw'>begin</span> <span class='kw'>return</span> <span class='const'>Integer</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span><span class='semicolon'>;</span> <span class='kw'>rescue</span> <span class='semicolon'>;</span> <span class='kw'>end</span>
1572
- <span class='kw'>begin</span> <span class='kw'>return</span> <span class='const'>Float</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span><span class='semicolon'>;</span> <span class='kw'>rescue</span> <span class='semicolon'>;</span> <span class='kw'>end</span>
1573
- <span class='id identifier rubyid_str'>str</span>
1574
- <span class='kw'>end</span>
1575
-
1576
-
1577
- <span class='comment'># Return list of parents.
1578
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_getParents'>getParents</span>
1579
- <span class='id identifier rubyid_list'>list</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
1580
- <span class='id identifier rubyid_cur'>cur</span> <span class='op'>=</span> <span class='kw'>self</span>
1581
- <span class='kw'>begin</span>
1582
- <span class='id identifier rubyid_list'>list</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_cur'>cur</span>
1583
- <span class='id identifier rubyid_cur'>cur</span> <span class='op'>=</span> <span class='id identifier rubyid_cur'>cur</span><span class='period'>.</span><span class='id identifier rubyid_parent'>parent</span>
1584
- <span class='kw'>end</span> <span class='kw'>while</span> <span class='id identifier rubyid_cur'>cur</span>
1585
-
1586
- <span class='id identifier rubyid_list'>list</span><span class='period'>.</span><span class='id identifier rubyid_reverse'>reverse</span>
1587
- <span class='kw'>end</span>
1588
-
1589
-
1590
- <span class='comment'># Full command name.
1591
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_fullCommand'>fullCommand</span>
1592
- <span class='lparen'>(</span> <span class='id identifier rubyid_getParents'>getParents</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='kw'>end</span> <span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> </span><span class='tstring_end'>'</span></span> <span class='rparen'>)</span>
1593
- <span class='kw'>end</span>
1594
-
1595
-
1596
- <span class='comment'># Test if option is of subcmd type.
1597
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_isSubcmd'>isSubcmd</span>
1598
- <span class='ivar'>@type</span> <span class='op'>==</span> <span class='symbol'>:subcmd</span>
1599
- <span class='kw'>end</span>
1600
-
1601
-
1602
- <span class='comment'># Test if option is of subcmd type.
1603
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_hasVisibleOptions'>hasVisibleOptions</span>
1604
- <span class='comment'># Count non-silent options.
1605
- </span> <span class='lparen'>(</span> <span class='ivar'>@subopt</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='op'>!</span><span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_silent?'>silent?</span> <span class='kw'>end</span> <span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&gt;</span> <span class='int'>0</span>
1606
- <span class='kw'>end</span>
1607
-
1608
-
1609
- <span class='comment'># Test if option is of subcmd type.
1610
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_hasSubcmd'>hasSubcmd</span>
1611
- <span class='op'>!</span><span class='ivar'>@subcmd</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
1612
- <span class='kw'>end</span>
1613
-
1614
-
1615
- <span class='comment'># Custom check for the option. User has to know some Como
1616
- </span> <span class='comment'># internals.
1617
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_evalCheck'>evalCheck</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_check'>check</span> <span class='rparen'>)</span>
1618
- <span class='id identifier rubyid_instance_eval'>instance_eval</span> <span class='op'>&amp;</span><span class='id identifier rubyid_check'>check</span>
1619
- <span class='kw'>end</span>
1620
-
1621
- <span class='kw'>end</span>
1622
-
1623
-
1624
-
1625
- <span class='comment'># Specialized Opt class for program (i.e. highest level
1626
- </span> <span class='comment'># subcommand).
1627
- </span> <span class='kw'>class</span> <span class='const'>MasterOpt</span> <span class='op'>&lt;</span> <span class='const'>Opt</span>
1628
-
1629
- <span class='comment'># Program external arguments:
1630
- </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:external</span>
1631
-
1632
- <span class='comment'># Program author and year (date).
1633
- </span> <span class='id identifier rubyid_attr_reader'>attr_reader</span> <span class='symbol'>:author</span><span class='comma'>,</span> <span class='symbol'>:year</span>
1634
-
1635
-
1636
- <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span> <span class='id identifier rubyid_author'>author</span><span class='comma'>,</span> <span class='id identifier rubyid_year'>year</span><span class='comma'>,</span>
1637
- <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
1638
- <span class='ivar'>@author</span> <span class='op'>=</span> <span class='id identifier rubyid_author'>author</span>
1639
- <span class='ivar'>@year</span> <span class='op'>=</span> <span class='id identifier rubyid_year'>year</span>
1640
- <span class='ivar'>@external</span> <span class='op'>=</span> <span class='kw'>nil</span>
1641
- <span class='kw'>super</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_doc'>doc</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='rparen'>)</span>
1642
-
1643
- <span class='comment'># # Set of default configs for printout.
1644
- </span><span class='comment'># @config = {
1645
- </span><span class='comment'># :header =&gt; nil,
1646
- </span><span class='comment'># :footer =&gt; nil,
1647
- </span><span class='comment'># :subcheck =&gt; true,
1648
- </span><span class='comment'># :check =&gt; true,
1649
- </span><span class='comment'># :tab =&gt; 12,
1650
- </span><span class='comment'># :help_exit =&gt; true,
1651
- </span><span class='comment'># :error_exit =&gt; true,
1652
- </span><span class='comment'># }
1653
- </span> <span class='kw'>end</span>
1654
-
1655
-
1656
- <span class='comment'># Full command name.
1657
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_fullCommand'>fullCommand</span>
1658
- <span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_progname'>progname</span>
1659
- <span class='kw'>end</span>
1660
-
1661
-
1662
- <span class='comment'># Usage printout for command.
1663
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_usageCommand'>usageCommand</span>
1664
- <span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>
1665
- Usage:
1666
- </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_fullCommand'>fullCommand</span><span class='rbrace'>}</span><span class='tstring_content'> </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cmdline'>cmdline</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='rbrace'>}</span><span class='tstring_content'>
1667
-
1668
- </span><span class='tstring_end'>&quot;</span></span>
1669
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='id identifier rubyid_suboptDoc'>suboptDoc</span>
1670
-
1671
- <span class='id identifier rubyid_str'>str</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>
1672
-
1673
- Copyright (c) </span><span class='embexpr_beg'>#{</span><span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_year'>year</span><span class='rbrace'>}</span><span class='tstring_content'> by </span><span class='embexpr_beg'>#{</span><span class='const'>Opt</span><span class='period'>.</span><span class='id identifier rubyid_author'>author</span><span class='rbrace'>}</span><span class='tstring_content'>
1674
-
1675
- </span><span class='tstring_end'>&quot;</span></span>
1676
- <span class='kw'>end</span>
1677
-
1678
- <span class='kw'>end</span>
1679
-
1680
-
1681
- <span class='comment'># Command argument parsing state.
1682
- </span> <span class='kw'>class</span> <span class='const'>ArgsParseState</span>
1683
-
1684
- <span class='comment'># @param list [Array&lt;String&gt;] List of Command Line Arguments (default:
1685
- </span> <span class='comment'># ARGV).
1686
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span> <span class='id identifier rubyid_list'>list</span> <span class='rparen'>)</span>
1687
- <span class='id identifier rubyid_set'>set</span><span class='lparen'>(</span> <span class='id identifier rubyid_list'>list</span> <span class='rparen'>)</span>
1688
- <span class='ivar'>@idx</span> <span class='op'>=</span> <span class='int'>0</span>
1689
- <span class='kw'>end</span>
1690
-
1691
- <span class='comment'># Set list of arguments.
1692
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_set'>set</span><span class='lparen'>(</span> <span class='id identifier rubyid_list'>list</span> <span class='rparen'>)</span>
1693
- <span class='ivar'>@args</span> <span class='op'>=</span> <span class='id identifier rubyid_list'>list</span>
1694
- <span class='kw'>end</span>
1695
-
1696
- <span class='comment'># Step to next argument.
1697
- </span> <span class='kw'>def</span> <span class='kw'>next</span>
1698
- <span class='ivar'>@idx</span> <span class='op'>+=</span> <span class='int'>1</span>
1699
- <span class='kw'>end</span>
1700
-
1701
- <span class='comment'># Step to previous argument.
1702
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_prev'>prev</span>
1703
- <span class='ivar'>@idx</span> <span class='op'>-=</span> <span class='int'>1</span>
1704
- <span class='kw'>end</span>
1705
-
1706
- <span class='comment'># Get current argument.
1707
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span> <span class='id identifier rubyid_idx'>idx</span> <span class='op'>=</span> <span class='ivar'>@idx</span> <span class='rparen'>)</span>
1708
- <span class='ivar'>@args</span><span class='lbracket'>[</span> <span class='id identifier rubyid_idx'>idx</span> <span class='rbracket'>]</span>
1709
- <span class='kw'>end</span>
1710
-
1711
- <span class='comment'># Get last argument.
1712
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_last'>last</span><span class='lparen'>(</span> <span class='id identifier rubyid_idx'>idx</span> <span class='op'>=</span> <span class='ivar'>@idx</span> <span class='rparen'>)</span>
1713
- <span class='id identifier rubyid_idx'>idx</span> <span class='op'>==</span> <span class='lparen'>(</span> <span class='ivar'>@args</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span><span class='op'>-</span><span class='int'>1</span> <span class='rparen'>)</span>
1714
- <span class='kw'>end</span>
1715
-
1716
- <span class='comment'># Get rest of the arguments.
1717
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_rest'>rest</span><span class='lparen'>(</span> <span class='id identifier rubyid_idx'>idx</span> <span class='op'>=</span> <span class='ivar'>@idx</span> <span class='rparen'>)</span>
1718
- <span class='ivar'>@args</span><span class='lbracket'>[</span> <span class='id identifier rubyid_idx'>idx</span><span class='op'>..</span><span class='op'>-</span><span class='int'>1</span> <span class='rbracket'>]</span>
1719
- <span class='kw'>end</span>
1720
-
1721
- <span class='comment'># Parser at argument list end?
1722
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_done?'>done?</span>
1723
- <span class='ivar'>@idx</span> <span class='op'>&gt;=</span> <span class='ivar'>@list</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span>
1724
- <span class='kw'>end</span>
1725
-
1726
-
1727
- <span class='comment'># Test whether str is an option.
1728
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_isOpt'>isOpt</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='id identifier rubyid_get'>get</span> <span class='rparen'>)</span>
1729
- <span class='id identifier rubyid_str'>str</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>-</span><span class='tstring_end'>&quot;</span></span>
1730
- <span class='kw'>end</span>
1731
-
1732
- <span class='comment'># Test whether str is an option list terminator.
1733
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_isOptTerm'>isOptTerm</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='id identifier rubyid_get'>get</span> <span class='rparen'>)</span>
1734
- <span class='id identifier rubyid_str'>str</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>--</span><span class='tstring_end'>&quot;</span></span>
1735
- <span class='kw'>end</span>
1736
-
1737
- <span class='comment'># Format value string if escaped.
1738
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_toValue'>toValue</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='id identifier rubyid_get'>get</span> <span class='rparen'>)</span>
1739
- <span class='kw'>if</span> <span class='id identifier rubyid_str'>str</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\\</span><span class='tstring_end'>&quot;</span></span>
1740
- <span class='id identifier rubyid_str'>str</span><span class='lbracket'>[</span><span class='int'>1</span><span class='op'>..</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span>
1741
- <span class='kw'>else</span>
1742
- <span class='id identifier rubyid_str'>str</span>
1743
- <span class='kw'>end</span>
1744
- <span class='kw'>end</span>
1745
-
1746
- <span class='kw'>end</span>
1747
-
1748
-
1749
-
1750
- <span class='comment'># Set of methods which represent option combination checking.
1751
- </span> <span class='comment'># In effect this is a meta language (DSL) for option
1752
- </span> <span class='comment'># combinations.
1753
- </span> <span class='comment'>#
1754
- </span> <span class='comment'># Example:
1755
- </span> <span class='comment'># RuleCheck.check( opt ) do
1756
- </span> <span class='comment'># one(
1757
- </span> <span class='comment'># incr( &quot;gcov&quot;, &quot;exclude&quot;, &quot;refreshed&quot; ),
1758
- </span> <span class='comment'># &quot;manifest&quot;,
1759
- </span> <span class='comment'># &quot;pairs&quot;,
1760
- </span> <span class='comment'># &quot;files&quot;
1761
- </span> <span class='comment'># )
1762
- </span> <span class='comment'># end
1763
- </span> <span class='kw'>class</span> <span class='const'>RuleCheck</span>
1764
-
1765
- <span class='kw'>def</span> <span class='const'>RuleCheck</span><span class='period'>.</span><span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
1766
- <span class='id identifier rubyid_rc'>rc</span> <span class='op'>=</span> <span class='const'>RuleCheck</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span> <span class='rparen'>)</span>
1767
- <span class='id identifier rubyid_rc'>rc</span><span class='period'>.</span><span class='id identifier rubyid_instance_eval'>instance_eval</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
1768
- <span class='kw'>end</span>
1769
-
1770
- <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span> <span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
1771
- <span class='ivar'>@opt</span> <span class='op'>=</span> <span class='id identifier rubyid_opt'>opt</span>
1772
- <span class='kw'>end</span>
1773
-
1774
-
1775
- <span class='comment'># Get given count.
1776
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_getScore'>getScore</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1777
- <span class='id identifier rubyid_score'>score</span> <span class='op'>=</span> <span class='int'>0</span>
1778
- <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
1779
- <span class='kw'>if</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>TrueClass</span> <span class='op'>||</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>FalseClass</span>
1780
- <span class='id identifier rubyid_score'>score</span> <span class='op'>+=</span> <span class='int'>1</span> <span class='kw'>if</span> <span class='id identifier rubyid_i'>i</span>
1781
- <span class='kw'>else</span>
1782
- <span class='id identifier rubyid_score'>score</span> <span class='op'>+=</span> <span class='int'>1</span> <span class='kw'>if</span> <span class='ivar'>@opt</span><span class='period'>.</span><span class='id identifier rubyid_argById'>argById</span><span class='lparen'>(</span><span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_given'>given</span>
1783
- <span class='kw'>end</span>
1784
- <span class='kw'>end</span>
1785
- <span class='id identifier rubyid_score'>score</span>
1786
- <span class='kw'>end</span>
1787
-
1788
- <span class='comment'># Special condition when no options are given.
1789
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_none'>none</span>
1790
- <span class='ivar'>@opt</span><span class='period'>.</span><span class='id identifier rubyid_givenCount'>givenCount</span> <span class='op'>==</span> <span class='int'>0</span>
1791
- <span class='kw'>end</span>
1792
-
1793
- <span class='comment'># Incremental options in order i.e. have to have previous
1794
- </span> <span class='comment'># to have later.
1795
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_incr'>incr</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1796
- <span class='id identifier rubyid_had'>had</span> <span class='op'>=</span> <span class='int'>0</span>
1797
- <span class='id identifier rubyid_add'>add</span> <span class='op'>=</span> <span class='kw'>true</span>
1798
- <span class='id identifier rubyid_scoreAll'>scoreAll</span> <span class='op'>=</span> <span class='int'>0</span>
1799
- <span class='id identifier rubyid_i'>i</span> <span class='op'>=</span> <span class='int'>0</span>
1800
- <span class='kw'>while</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
1801
- <span class='id identifier rubyid_score'>score</span> <span class='op'>=</span> <span class='id identifier rubyid_getScore'>getScore</span><span class='lparen'>(</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='rparen'>)</span>
1802
- <span class='id identifier rubyid_had'>had</span> <span class='op'>+=</span> <span class='int'>1</span> <span class='kw'>if</span> <span class='lparen'>(</span> <span class='id identifier rubyid_score'>score</span> <span class='op'>==</span> <span class='int'>1</span> <span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_add'>add</span>
1803
- <span class='id identifier rubyid_add'>add</span> <span class='op'>=</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='lparen'>(</span> <span class='id identifier rubyid_score'>score</span> <span class='op'>==</span> <span class='int'>0</span> <span class='rparen'>)</span>
1804
- <span class='id identifier rubyid_scoreAll'>scoreAll</span> <span class='op'>+=</span> <span class='id identifier rubyid_score'>score</span>
1805
- <span class='id identifier rubyid_i'>i</span> <span class='op'>+=</span> <span class='int'>1</span>
1806
- <span class='kw'>end</span>
1807
-
1808
- <span class='lparen'>(</span> <span class='id identifier rubyid_had'>had</span> <span class='op'>==</span> <span class='id identifier rubyid_scoreAll'>scoreAll</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_had'>had</span> <span class='op'>&gt;</span> <span class='int'>0</span> <span class='rparen'>)</span>
1809
- <span class='kw'>end</span>
1810
-
1811
- <span class='comment'># Incremental options in order i.e. have to have all later
1812
- </span> <span class='comment'># if had first.
1813
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_follow'>follow</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1814
- <span class='kw'>if</span> <span class='id identifier rubyid_getScore'>getScore</span><span class='lparen'>(</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='rparen'>)</span>
1815
- <span class='id identifier rubyid_getScore'>getScore</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span> <span class='op'>==</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span>
1816
- <span class='kw'>else</span>
1817
- <span class='kw'>true</span>
1818
- <span class='kw'>end</span>
1819
- <span class='kw'>end</span>
1820
-
1821
- <span class='comment'># One of list given.
1822
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_one'>one</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1823
- <span class='id identifier rubyid_getScore'>getScore</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span> <span class='op'>==</span> <span class='int'>1</span>
1824
- <span class='kw'>end</span>
1825
-
1826
- <span class='comment'># At least one is given.
1827
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_any'>any</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1828
- <span class='id identifier rubyid_getScore'>getScore</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span> <span class='op'>&gt;</span> <span class='int'>0</span>
1829
- <span class='kw'>end</span>
1830
-
1831
- <span class='comment'># All are given.
1832
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_all'>all</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1833
- <span class='id identifier rubyid_getScore'>getScore</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span> <span class='op'>==</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span>
1834
- <span class='kw'>end</span>
1835
-
1836
- <span class='comment'># Logical inversion.
1837
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_inv'>inv</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1838
- <span class='id identifier rubyid_getScore'>getScore</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span> <span class='op'>==</span> <span class='int'>0</span>
1839
- <span class='kw'>end</span>
1840
- <span class='kw'>end</span>
1841
-
1842
-
1843
-
1844
- <span class='comment'># Display utility for RuleCheck. Usage model.
1845
- </span> <span class='comment'>#
1846
- </span> <span class='comment'># RuleDisplay.new.evalAndDisplay( &amp;rule )
1847
- </span> <span class='comment'>#
1848
- </span> <span class='comment'># Example expansion of options:
1849
- </span> <span class='comment'>#
1850
- </span> <span class='comment'># |--# One of:
1851
- </span> <span class='comment'># | |--# Adding in order:
1852
- </span> <span class='comment'># | | |--&lt;gcov&gt;
1853
- </span> <span class='comment'># | | |--&lt;exclude&gt;
1854
- </span> <span class='comment'># | | |--&lt;refreshed&gt;
1855
- </span> <span class='comment'># | |--&lt;manifest&gt;
1856
- </span> <span class='comment'># | |--&lt;pairs&gt;
1857
- </span> <span class='comment'># | |--&lt;files&gt;
1858
- </span> <span class='comment'>#
1859
- </span> <span class='kw'>class</span> <span class='const'>RuleDisplay</span> <span class='op'>&lt;</span> <span class='const'>ComoCommon</span>
1860
-
1861
- <span class='comment'># Eval rules to get an nested array and then display it.
1862
- </span> <span class='kw'>def</span> <span class='const'>RuleDisplay</span><span class='period'>.</span><span class='id identifier rubyid_print'>print</span><span class='lparen'>(</span> <span class='id identifier rubyid_prefixStr'>prefixStr</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> </span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
1863
- <span class='id identifier rubyid_rd'>rd</span> <span class='op'>=</span> <span class='const'>RuleDisplay</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='id identifier rubyid_prefixStr'>prefixStr</span> <span class='rparen'>)</span>
1864
- <span class='id identifier rubyid_rd'>rd</span><span class='period'>.</span><span class='id identifier rubyid_evalAndDisplay'>evalAndDisplay</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
1865
- <span class='kw'>end</span>
1866
-
1867
- <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span> <span class='id identifier rubyid_prefixStr'>prefixStr</span> <span class='rparen'>)</span>
1868
- <span class='comment'># Prefix string for lines. Rules add/rm from it.
1869
- </span> <span class='ivar'>@prefixStr</span> <span class='op'>=</span> <span class='id identifier rubyid_prefixStr'>prefixStr</span>
1870
- <span class='kw'>end</span>
1871
-
1872
- <span class='kw'>def</span> <span class='id identifier rubyid_evalAndDisplay'>evalAndDisplay</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span>
1873
- <span class='id identifier rubyid_printRule'>printRule</span><span class='lparen'>(</span> <span class='id identifier rubyid_instance_eval'>instance_eval</span><span class='lparen'>(</span> <span class='op'>&amp;</span><span class='id identifier rubyid_rule'>rule</span> <span class='rparen'>)</span> <span class='rparen'>)</span>
1874
- <span class='kw'>end</span>
1875
-
1876
- <span class='comment'># Increase prefix string.
1877
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_addPrefix'>addPrefix</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1878
- <span class='ivar'>@prefixStr</span> <span class='op'>+=</span> <span class='id identifier rubyid_str'>str</span>
1879
- <span class='kw'>end</span>
1880
-
1881
- <span class='comment'># Remove from prefix (either str or length ).
1882
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_rmPrefix'>rmPrefix</span><span class='lparen'>(</span> <span class='id identifier rubyid_item'>item</span> <span class='rparen'>)</span>
1883
- <span class='kw'>if</span> <span class='id identifier rubyid_item'>item</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>String</span>
1884
- <span class='id identifier rubyid_cnt'>cnt</span> <span class='op'>=</span> <span class='id identifier rubyid_item'>item</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span>
1885
- <span class='kw'>else</span>
1886
- <span class='id identifier rubyid_cnt'>cnt</span> <span class='op'>=</span> <span class='id identifier rubyid_item'>item</span>
1887
- <span class='kw'>end</span>
1888
- <span class='ivar'>@prefixStr</span> <span class='op'>=</span> <span class='ivar'>@prefixStr</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='op'>-</span><span class='lparen'>(</span><span class='id identifier rubyid_cnt'>cnt</span><span class='op'>+</span><span class='int'>1</span><span class='rparen'>)</span><span class='rbracket'>]</span>
1889
- <span class='kw'>end</span>
1890
-
1891
- <span class='comment'># Print prefix + str.
1892
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_p'>p</span><span class='lparen'>(</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1893
- <span class='cvar'>@@io</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span><span class='lparen'>(</span> <span class='ivar'>@prefixStr</span> <span class='op'>+</span> <span class='id identifier rubyid_str'>str</span> <span class='rparen'>)</span>
1894
- <span class='kw'>end</span>
1895
-
1896
- <span class='comment'># Recursively go through the nested array of rule items and
1897
- </span> <span class='comment'># print out rules.
1898
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_printRule'>printRule</span><span class='lparen'>(</span> <span class='id identifier rubyid_arr'>arr</span> <span class='rparen'>)</span>
1899
- <span class='id identifier rubyid_p'>p</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>|--# </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_arr'>arr</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rbrace'>}</span><span class='tstring_content'>:</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
1900
- <span class='id identifier rubyid_item'>item</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>| </span><span class='tstring_end'>&quot;</span></span>
1901
- <span class='id identifier rubyid_addPrefix'>addPrefix</span><span class='lparen'>(</span> <span class='id identifier rubyid_item'>item</span> <span class='rparen'>)</span>
1902
-
1903
- <span class='id identifier rubyid_arr'>arr</span><span class='lbracket'>[</span><span class='int'>1</span><span class='op'>..</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
1904
- <span class='kw'>if</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>Array</span>
1905
- <span class='id identifier rubyid_printRule'>printRule</span><span class='lparen'>(</span> <span class='id identifier rubyid_i'>i</span> <span class='rparen'>)</span>
1906
- <span class='kw'>else</span>
1907
- <span class='id identifier rubyid_p'>p</span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>|--&lt;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_i'>i</span><span class='rbrace'>}</span><span class='tstring_content'>&gt;</span><span class='tstring_end'>&quot;</span></span> <span class='rparen'>)</span>
1908
- <span class='kw'>end</span>
1909
- <span class='kw'>end</span>
1910
- <span class='id identifier rubyid_rmPrefix'>rmPrefix</span><span class='lparen'>(</span> <span class='id identifier rubyid_item'>item</span> <span class='rparen'>)</span>
1911
- <span class='kw'>end</span>
1912
-
1913
- <span class='comment'># Special condition where no arguments are given.
1914
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_none'>none</span>
1915
- <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>NONE</span><span class='tstring_end'>&quot;</span></span> <span class='rbracket'>]</span>
1916
- <span class='kw'>end</span>
1917
-
1918
- <span class='comment'># Incremental options in order i.e. have to have previous
1919
- </span> <span class='comment'># to have later.
1920
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_incr'>incr</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1921
- <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Adding in order</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rbracket'>]</span>
1922
- <span class='kw'>end</span>
1923
-
1924
- <span class='comment'># Incremental options in order i.e. have to have all later
1925
- </span> <span class='comment'># if had first.
1926
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_follow'>follow</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1927
- <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>If first then rest</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rbracket'>]</span>
1928
- <span class='kw'>end</span>
1929
-
1930
- <span class='comment'># One of list given.
1931
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_one'>one</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1932
- <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>One of</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rbracket'>]</span>
1933
- <span class='kw'>end</span>
1934
-
1935
- <span class='comment'># At least one is given.
1936
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_any'>any</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1937
- <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>One or more of</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rbracket'>]</span>
1938
- <span class='kw'>end</span>
1939
-
1940
- <span class='comment'># All are given.
1941
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_all'>all</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1942
- <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>All of</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rbracket'>]</span>
1943
- <span class='kw'>end</span>
1944
-
1945
- <span class='comment'># Logical inversion.
1946
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_inv'>inv</span><span class='lparen'>(</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rparen'>)</span>
1947
- <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Not</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span> <span class='rbracket'>]</span>
1948
- <span class='kw'>end</span>
1949
-
1950
- <span class='kw'>end</span>
1951
-
1952
-
1953
- <span class='kw'>end</span></pre></div></div>
1954
-
1955
- <div id="footer">
1956
- Generated on Wed Nov 27 11:34:25 2013 by
1957
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1958
- 0.8.6.1 (ruby-1.9.3).
1959
- </div>
1960
-
1961
- </body>
1962
- </html>