1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 %% Purpose: wxCmdLineParser documentation
4 %% Author: Vadim Zeitlin
8 %% Copyright: (c) Vadim Zeitlin
9 %% License: wxWidgets license
10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12 \section{\class{wxCmdLineParser
}}\label{wxcmdlineparser
}
14 wxCmdLineParser is a class for parsing the command line.
16 It has the following features:
18 \begin{enumerate
}\itemsep=
0pt
19 \item distinguishes options, switches and parameters; allows option grouping
20 \item allows both short and long options
21 \item automatically generates the usage message from the command line description
22 \item does type checks on the options values (number, date, $
\ldots$).
25 To use it you should follow these steps:
27 \begin{enumerate
}\itemsep=
0pt
28 \item \helpref{construct
}{wxcmdlineparserconstruction
} an object of this class
29 giving it the command line to parse and optionally its description or use
30 {\tt AddXXX()
} functions later
31 \item call
{\tt Parse()
}
32 \item use
{\tt Found()
} to retrieve the results
35 In the documentation below the following terminology is used:
37 \begin{twocollist
}\itemsep=
0pt
38 \twocolitem{switch
}{This is a boolean option which can be given or not, but
39 which doesn't have any value. We use the word switch to distinguish such boolean
40 options from more generic options like those described below. For example,
41 {\tt -v
} might be a switch meaning "enable verbose mode".
}
42 \twocolitem{option
}{Option for us here is something which comes with a value
0
43 unlike a switch. For example,
{\tt -o:filename
} might be an option which allows
44 to specify the name of the output file.
}
45 \twocolitem{parameter
}{This is a required program argument.
}
48 \wxheading{Derived from
}
52 \wxheading{Include files
}
58 The structure wxCmdLineEntryDesc is used to describe the one command
59 line switch, option or parameter. An array of such structures should be passed
60 to
\helpref{SetDesc()
}{wxcmdlineparsersetdesc
}. Also, the meanings of parameters
61 of the
{\tt AddXXX()
} functions are the same as of the corresponding fields in
65 struct wxCmdLineEntryDesc
67 wxCmdLineEntryType kind;
68 const wxChar *shortName;
69 const wxChar *longName;
70 const wxChar *description;
71 wxCmdLineParamType type;
76 The type of a command line entity is in the
{\tt kind
} field and may be one of
77 the following constants:
81 enum wxCmdLineEntryType
86 wxCMD_LINE_NONE // use this to terminate the list
91 The field
{\tt shortName
} is the usual, short, name of the switch or the option.
92 {\tt longName
} is the corresponding long name or NULL if the option has no long
93 name. Both of these fields are unused for the parameters. Both the short and
94 long option names can contain only letters, digits and the underscores.
96 {\tt description
} is used by the
\helpref{Usage()
}{wxcmdlineparserusage
} method
97 to construct a help message explaining the syntax of the program.
99 The possible values of
{\tt type
} which specifies the type of the value accepted
100 by an option or parameter are:
104 enum wxCmdLineParamType
106 wxCMD_LINE_VAL_STRING, // default
107 wxCMD_LINE_VAL_NUMBER,
114 Finally, the
{\tt flags
} field is a combination of the following bit masks:
120 wxCMD_LINE_OPTION_MANDATORY =
0x01, // this option must be given
121 wxCMD_LINE_PARAM_OPTIONAL =
0x02, // the parameter may be omitted
122 wxCMD_LINE_PARAM_MULTIPLE =
0x04, // the parameter may be repeated
123 wxCMD_LINE_OPTION_HELP =
0x08, // this option is a help request
124 wxCMD_LINE_NEEDS_SEPARATOR =
0x10, // must have sep before the value
129 Notice that by default (i.e. if flags are just $
0$), options are optional (sic)
130 and each call to
\helpref{AddParam()
}{wxcmdlineparseraddparam
} allows one more
131 parameter - this may be changed by giving non-default flags to it, i.e. use
132 {\tt wxCMD
\_LINE\_OPTION\_MANDATORY} to require that the option is given and
133 {\tt wxCMD
\_LINE\_PARAM\_OPTIONAL} to make a parameter optional. Also,
134 {\tt wxCMD
\_LINE\_PARAM\_MULTIPLE} may be specified if the programs accepts a
135 variable number of parameters - but it only can be given for the last parameter
136 in the command line description. If you use this flag, you will probably need to
137 use
\helpref{GetParamCount
}{wxcmdlineparsergetparamcount
} to retrieve the number
138 of parameters effectively specified after calling
139 \helpref{Parse
}{wxcmdlineparserparse
}.
141 The last flag
{\tt wxCMD
\_LINE\_NEEDS\_SEPARATOR} can be specified to require a
142 separator (either a colon, an equal sign or white space) between the option
143 name and its value. By default, no separator is required.
147 \helpref{wxApp::argc
}{wxappargc
} and
\helpref{wxApp::argv
}{wxappargv
}\\
150 %%%%%%%%%%%%% Methods by group %%%%%%%%%%%%%
151 \latexignore{\rtfignore{\wxheading{Function groups
}}}
154 \membersection{Construction
}\label{wxcmdlineparserconstruction
}
156 Before
\helpref{Parse
}{wxcmdlineparserparse
} can be called, the command line
157 parser object must have the command line to parse and also the rules saying
158 which switches, options and parameters are valid - this is called command line
159 description in what follows.
161 You have complete freedom of choice as to when specify the required information,
162 the only restriction is that it must be done before calling
163 \helpref{Parse
}{wxcmdlineparserparse
}.
165 To specify the command line to parse you may use either one of constructors
166 accepting it (
\helpref{wxCmdLineParser(argc, argv)
}{wxcmdlineparserwxcmdlineparserargc
} or
167 \helpref{wxCmdLineParser
}{wxcmdlineparserwxcmdlineparserdescargc
} usually) or,
168 if you use
\helpref{the default constructor
}{wxcmdlineparserwxcmdlineparserdef
},
169 you can do it later by calling
170 \helpref{SetCmdLine
}{wxcmdlineparsersetcmdlineargc
}.
172 The same holds for command line description: it can be specified either in
173 the constructor (
\helpref{without command line
}{wxcmdlineparserwxcmdlineparserdesc
} or
174 \helpref{together with it
}{wxcmdlineparserwxcmdlineparserdescargc
}) or
175 constructed later using either
\helpref{SetDesc
}{wxcmdlineparsersetdesc
} or
176 combination of
\helpref{AddSwitch
}{wxcmdlineparseraddswitch
},
177 \helpref{AddOption
}{wxcmdlineparseraddoption
} and
178 \helpref{AddParam
}{wxcmdlineparseraddparam
} methods.
180 Using constructors or
\helpref{SetDesc
}{wxcmdlineparsersetdesc
} uses a (usually
181 {\tt const static
}) table containing the command line description. If you want
182 to decide which options to accept during the run-time, using one of the
183 {\tt AddXXX()
} functions above might be preferable.
186 \membersection{Customization
}\label{wxcmdlineparsercustomization
}
188 wxCmdLineParser has several global options which may be changed by the
189 application. All of the functions described in this section should be called
190 before
\helpref{Parse
}{wxcmdlineparserparse
}.
192 First global option is the support for long (also known as GNU-style) options.
193 The long options are the ones which start with two dashes (
{\tt "--"
}) and look
194 like this:
{\tt --verbose
}, i.e. they generally are complete words and not some
195 abbreviations of them. As long options are used by more and more applications,
196 they are enabled by default, but may be disabled with
197 \helpref{DisableLongOptions
}{wxcmdlineparserdisablelongoptions
}.
199 Another global option is the set of characters which may be used to start an
200 option (otherwise, the word on the command line is assumed to be a parameter).
201 Under Unix,
{\tt '-'
} is always used, but Windows has at least two common
202 choices for this:
{\tt '-'
} and
{\tt '/'
}. Some programs also use
{\tt '+'
}.
203 The default is to use what suits most the current platform, but may be changed
204 with
\helpref{SetSwitchChars
}{wxcmdlineparsersetswitchchars
} method.
206 Finally,
\helpref{SetLogo
}{wxcmdlineparsersetlogo
} can be used to show some
207 application-specific text before the explanation given by
208 \helpref{Usage
}{wxcmdlineparserusage
} function.
211 \membersection{Parsing command line
}\label{wxcmdlineparserparsing
}
213 After the command line description was constructed and the desired options were
214 set, you can finally call
\helpref{Parse
}{wxcmdlineparserparse
} method.
215 It returns $
0$ if the command line was correct and was parsed, $-
1$ if the help
216 option was specified (this is a separate case as, normally, the program will
217 terminate after this) or a positive number if there was an error during the
218 command line parsing.
220 In the latter case, the appropriate error message and usage information are
221 logged by wxCmdLineParser itself using the standard wxWidgets logging functions.
224 \membersection{Getting results
}\label{wxcmdlineparsergettingresults
}
226 After calling
\helpref{Parse
}{wxcmdlineparserparse
} (and if it returned $
0$),
227 you may access the results of parsing using one of overloaded
{\tt Found()
}
230 For a simple switch, you will simply call
231 \helpref{Found
}{wxcmdlineparserfoundswitch
} to determine if the switch was given
232 or not, for an option or a parameter, you will call a version of
{\tt Found()
}
233 which also returns the associated value in the provided variable. All
234 {\tt Found()
} functions return true if the switch or option were found in the
235 command line or false if they were not specified.
237 %%%%%%%%%%%%% Methods in alphabetic order %%%%%%%%%%%%%
238 \helponly{\insertatlevel{2}{
245 \membersection{wxCmdLineParser::wxCmdLineParser
}\label{wxcmdlineparserwxcmdlineparserdef
}
247 \func{}{wxCmdLineParser
}{\void}
249 Default constructor. You must use
250 \helpref{SetCmdLine
}{wxcmdlineparsersetcmdlineargc
} later.
253 \membersection{wxCmdLineParser::wxCmdLineParser
}\label{wxcmdlineparserwxcmdlineparserargc
}
255 \func{}{wxCmdLineParser
}{\param{int
}{argc
},
\param{char**
}{argv
}}
257 \func{}{wxCmdLineParser
}{\param{int
}{argc
},
\param{wchar
\_t**
}{argv
}}
259 Constructor specifies the command line to parse. This is the traditional
260 (Unix) command line format. The parameters
{\it argc
} and
{\it argv
} have the
261 same meaning as for
{\tt main()
} function.
263 The second overloaded constructor is only available in Unicode build. The
264 first one is available in both ANSI and Unicode modes because under some
265 platforms the command line arguments are passed as ASCII strings even to
269 \membersection{wxCmdLineParser::wxCmdLineParser
}\label{wxcmdlineparserwxcmdlineparserstr
}
271 \func{}{wxCmdLineParser
}{\param{const wxString\&
}{cmdline
}}
273 Constructor specifies the command line to parse in Windows format. The parameter
274 {\it cmdline
} has the same meaning as the corresponding parameter of
278 \membersection{wxCmdLineParser::wxCmdLineParser
}\label{wxcmdlineparserwxcmdlineparserdesc
}
280 \func{}{wxCmdLineParser
}{\param{const wxCmdLineEntryDesc*
}{desc
}}
282 Same as
\helpref{wxCmdLineParser
}{wxcmdlineparserwxcmdlineparserdef
}, but also
283 specifies the
\helpref{command line description
}{wxcmdlineparsersetdesc
}.
286 \membersection{wxCmdLineParser::wxCmdLineParser
}\label{wxcmdlineparserwxcmdlineparserdescargc
}
288 \func{}{wxCmdLineParser
}{\param{const wxCmdLineEntryDesc*
}{desc
},
\param{int
}{argc
},
\param{char**
}{argv
}}
290 Same as
\helpref{wxCmdLineParser
}{wxcmdlineparserwxcmdlineparserargc
}, but also
291 specifies the
\helpref{command line description
}{wxcmdlineparsersetdesc
}.
294 \membersection{wxCmdLineParser::wxCmdLineParser
}\label{wxcmdlineparserwxcmdlineparserdescstr
}
296 \func{}{wxCmdLineParser
}{\param{const wxCmdLineEntryDesc*
}{desc
},
\param{const wxString\&
}{cmdline
}}
298 Same as
\helpref{wxCmdLineParser
}{wxcmdlineparserwxcmdlineparserstr
}, but also
299 specifies the
\helpref{command line description
}{wxcmdlineparsersetdesc
}.
302 \membersection{wxCmdLineParser::ConvertStringToArgs
}\label{wxcmdlineparserconvertstringtoargs
}
304 \func{static wxArrayString
}{ConvertStringToArgs
}{\param{const wxChar
}{*cmdline
}}
306 Breaks down the string containing the full command line in words. The words are
307 separated by whitespace. The quotes can be used in the input string to quote
308 the white space and the back slashes can be used to quote the quotes.
311 \membersection{wxCmdLineParser::SetCmdLine
}\label{wxcmdlineparsersetcmdlineargc
}
313 \func{void
}{SetCmdLine
}{\param{int
}{argc
},
\param{char**
}{argv
}}
315 \func{void
}{SetCmdLine
}{\param{int
}{argc
},
\param{wchar
\_t**
}{argv
}}
317 Set command line to parse after using one of the constructors which don't do it.
318 The second overload of this function is only available in Unicode build.
322 \helpref{wxCmdLineParser
}{wxcmdlineparserwxcmdlineparserargc
}
325 \membersection{wxCmdLineParser::SetCmdLine
}\label{wxcmdlineparsersetcmdlinestr
}
327 \func{void
}{SetCmdLine
}{\param{const wxString\&
}{cmdline
}}
329 Set command line to parse after using one of the constructors which don't do it.
333 \helpref{wxCmdLineParser
}{wxcmdlineparserwxcmdlineparserstr
}
336 \membersection{wxCmdLineParser::
\destruct{wxCmdLineParser
}}\label{wxcmdlineparserdtor
}
338 \func{}{\destruct{wxCmdLineParser
}}{\void}
340 Frees resources allocated by the object.
342 {\bf NB:
} destructor is not virtual, don't use this class polymorphically.
345 \membersection{wxCmdLineParser::SetSwitchChars
}\label{wxcmdlineparsersetswitchchars
}
347 \func{void
}{SetSwitchChars
}{\param{const wxString\&
}{switchChars
}}
349 {\it switchChars
} contains all characters with which an option or switch may
350 start. Default is
{\tt "-"
} for Unix,
{\tt "-/"
} for Windows.
353 \membersection{wxCmdLineParser::EnableLongOptions
}\label{wxcmdlineparserenablelongoptions
}
355 \func{void
}{EnableLongOptions
}{\param{bool
}{enable = true
}}
357 Enable or disable support for the long options.
359 As long options are not (yet) POSIX-compliant, this option allows to disable
364 \helpref{Customization
}{wxcmdlineparsercustomization
} and
\helpref{AreLongOptionsEnabled
}{wxcmdlineparserarelongoptionsenabled
}
367 \membersection{wxCmdLineParser::DisableLongOptions
}\label{wxcmdlineparserdisablelongoptions
}
369 \func{void
}{DisableLongOptions
}{\void}
371 Identical to
\helpref{EnableLongOptions(false)
}{wxcmdlineparserenablelongoptions
}.
374 \membersection{wxCmdLineParser::AreLongOptionsEnabled
}\label{wxcmdlineparserarelongoptionsenabled
}
376 \func{bool
}{AreLongOptionsEnabled
}{\void}
378 Returns true if long options are enabled, otherwise false.
382 \helpref{EnableLongOptions
}{wxcmdlineparserenablelongoptions
}
385 \membersection{wxCmdLineParser::SetLogo
}\label{wxcmdlineparsersetlogo
}
387 \func{void
}{SetLogo
}{\param{const wxString\&
}{logo
}}
389 {\it logo
} is some extra text which will be shown by
390 \helpref{Usage
}{wxcmdlineparserusage
} method.
393 \membersection{wxCmdLineParser::SetDesc
}\label{wxcmdlineparsersetdesc
}
395 \func{void
}{SetDesc
}{\param{const wxCmdLineEntryDesc*
}{desc
}}
397 Construct the command line description
399 Take the command line description from the wxCMD
\_LINE\_NONE terminated table.
404 static const wxCmdLineEntryDesc cmdLineDesc
[] =
406 { wxCMD_LINE_SWITCH, "v", "verbose", "be verbose"
},
407 { wxCMD_LINE_SWITCH, "q", "quiet", "be quiet"
},
409 { wxCMD_LINE_OPTION, "o", "output", "output file"
},
410 { wxCMD_LINE_OPTION, "i", "input", "input dir"
},
411 { wxCMD_LINE_OPTION, "s", "size", "output block size", wxCMD_LINE_VAL_NUMBER
},
412 { wxCMD_LINE_OPTION, "d", "date", "output file date", wxCMD_LINE_VAL_DATE
},
414 { wxCMD_LINE_PARAM, NULL, NULL, "input file", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE
},
419 wxCmdLineParser parser;
421 parser.SetDesc(cmdLineDesc);
425 \membersection{wxCmdLineParser::AddSwitch
}\label{wxcmdlineparseraddswitch
}
427 \func{void
}{AddSwitch
}{\param{const wxString\&
}{name
},
\param{const wxString\&
}{lng = wxEmptyString
},
\param{const wxString\&
}{desc = wxEmptyString
},
\param{int
}{flags =
0}}
429 Add a switch
{\it name
} with an optional long name
{\it lng
} (no long name if it
430 is empty, which is default), description
{\it desc
} and flags
{\it flags
} to the
431 command line description.
434 \membersection{wxCmdLineParser::AddOption
}\label{wxcmdlineparseraddoption
}
436 \func{void
}{AddOption
}{\param{const wxString\&
}{name
},
\param{const wxString\&
}{lng = wxEmptyString
},
\param{const wxString\&
}{desc = wxEmptyString
},
\param{wxCmdLineParamType
}{type = wxCMD
\_LINE\_VAL\_STRING},
\param{int
}{flags =
0}}
438 Add an option
{\it name
} with an optional long name
{\it lng
} (no long name if
439 it is empty, which is default) taking a value of the given type (string by
440 default) to the command line description.
443 \membersection{wxCmdLineParser::AddParam
}\label{wxcmdlineparseraddparam
}
445 \func{void
}{AddParam
}{\param{const wxString\&
}{desc = wxEmptyString
},
\param{wxCmdLineParamType
}{type = wxCMD
\_LINE\_VAL\_STRING},
\param{int
}{flags =
0}}
447 Add a parameter of the given
{\it type
} to the command line description.
450 \membersection{wxCmdLineParser::Parse
}\label{wxcmdlineparserparse
}
452 \func{int
}{Parse
}{\param{bool
}{giveUsage =
{\tt true
}}}
454 Parse the command line, return $
0$ if ok, $-
1$ if
{\tt "-h"
} or
{\tt "--help"
}
455 option was encountered and the help message was given or a positive value if a
456 syntax error occured.
458 \wxheading{Parameters
}
460 \docparam{giveUsage
}{If
{\tt true
} (default), the usage message is given if a
461 syntax error was encountered while parsing the command line or if help was
462 requested. If
{\tt false
}, only error messages about possible syntax errors
463 are given, use
\helpref{Usage
}{wxcmdlineparserusage
} to show the usage message
464 from the caller if needed.
}
467 \membersection{wxCmdLineParser::Usage
}\label{wxcmdlineparserusage
}
469 \func{void
}{Usage
}{\void}
471 Give the standard usage message describing all program options. It will use the
472 options and parameters descriptions specified earlier, so the resulting message
473 will not be helpful to the user unless the descriptions were indeed specified.
477 \helpref{SetLogo
}{wxcmdlineparsersetlogo
}
480 \membersection{wxCmdLineParser::Found
}\label{wxcmdlineparserfoundswitch
}
482 \constfunc{bool
}{Found
}{\param{const wxString\&
}{name
}}
484 Returns true if the given switch was found, false otherwise.
487 \membersection{wxCmdLineParser::Found
}\label{wxcmdlineparserfoundstringoption
}
489 \constfunc{bool
}{Found
}{\param{const wxString\&
}{name
},
\param{wxString*
}{value
}}
491 Returns true if an option taking a string value was found and stores the
492 value in the provided pointer (which should not be NULL).
495 \membersection{wxCmdLineParser::Found
}\label{wxcmdlineparserfoundintoption
}
497 \constfunc{bool
}{Found
}{\param{const wxString\&
}{name
},
\param{long*
}{value
}}
499 Returns true if an option taking an integer value was found and stores
500 the value in the provided pointer (which should not be NULL).
503 \membersection{wxCmdLineParser::Found
}\label{wxcmdlineparserfounddateoption
}
505 \constfunc{bool
}{Found
}{\param{const wxString\&
}{name
},
\param{wxDateTime*
}{value
}}
507 Returns true if an option taking a date value was found and stores the
508 value in the provided pointer (which should not be NULL).
511 \membersection{wxCmdLineParser::GetParamCount
}\label{wxcmdlineparsergetparamcount
}
513 \constfunc{size
\_t}{GetParamCount
}{\void}
515 Returns the number of parameters found. This function makes sense mostly if you
516 had used
{\tt wxCMD
\_LINE\_PARAM\_MULTIPLE} flag.
519 \membersection{wxCmdLineParser::GetParam
}\label{wxcmdlineparsergetparam
}
521 \constfunc{wxString
}{GetParam
}{\param{size
\_t }{n =
0u}}
523 Returns the value of Nth parameter (as string only for now).
527 \helpref{GetParamCount
}{wxcmdlineparsergetparamcount
}