X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/12f5e1e78fe906050ff2fee9529476db332633f0..c29c95fe24973b94fd724db767193171ca7c513d:/interface/wx/cmdline.h diff --git a/interface/wx/cmdline.h b/interface/wx/cmdline.h index 5aae4a95b7..a9b7630e9a 100644 --- a/interface/wx/cmdline.h +++ b/interface/wx/cmdline.h @@ -3,39 +3,47 @@ // Purpose: interface of wxCmdLineParser // Author: wxWidgets team // RCS-ID: $Id$ -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// /** wxCmdLineEntryDesc::flags field is a combination of these bit masks. Notice that by default (i.e. if flags are just 0), options are optional - (sic) and each call to wxCmdLineEntryDesc::AddParam() allows one more + (sic) and each call to wxCmdLineParser::AddParam() allows one more parameter - this may be changed by giving non-default flags to it, i.e. use - wxCMD_LINE_OPTION_MANDATORY to require that the option is given and - wxCMD_LINE_PARAM_OPTIONAL to make a parameter optional. Also, - wxCMD_LINE_PARAM_MULTIPLE may be specified if the programs accepts a + @c wxCMD_LINE_OPTION_MANDATORY to require that the option is given and + @c wxCMD_LINE_PARAM_OPTIONAL to make a parameter optional. + + Also, @c wxCMD_LINE_PARAM_MULTIPLE may be specified if the programs accepts a variable number of parameters - but it only can be given for the last parameter in the command line description. If you use this flag, you will probably need to use wxCmdLineEntryDesc::GetParamCount() to retrieve the number of parameters effectively specified after calling wxCmdLineEntryDesc::Parse(). - wxCMD_LINE_NEEDS_SEPARATOR can be specified to require a separator (either + @c wxCMD_LINE_NEEDS_SEPARATOR can be specified to require a separator (either a colon, an equal sign or white space) between the option name and its value. By default, no separator is required. + + @c wxCMD_LINE_SWITCH_NEGATABLE can be specified if you want to allow the + user to specify the switch in both normal form and in negated one (e.g. + /R-). You will need to use wxCmdLineParser::FoundSwitch() to distinguish + between the normal and negated forms of the switch. This flag is new since + wxWidgets 2.9.2. */ -enum +enum wxCmdLineEntryFlags { wxCMD_LINE_OPTION_MANDATORY = 0x01, ///< This option must be given. wxCMD_LINE_PARAM_OPTIONAL = 0x02, ///< The parameter may be omitted. wxCMD_LINE_PARAM_MULTIPLE = 0x04, ///< The parameter may be repeated. wxCMD_LINE_OPTION_HELP = 0x08, ///< This option is a help request. - wxCMD_LINE_NEEDS_SEPARATOR = 0x10 ///< Must have a separator before the value. + wxCMD_LINE_NEEDS_SEPARATOR = 0x10, ///< Must have a separator before the value. + wxCMD_LINE_SWITCH_NEGATABLE = 0x20 ///< This switch can be negated (e.g. /S-) }; /** - The possible values of wxCmdLineEntryDesc::type which specifies the type of + The possible values of wxCmdLineEntryDesc::type which specify the type of the value accepted by an option. */ enum wxCmdLineParamType @@ -52,36 +60,97 @@ enum wxCmdLineParamType */ enum wxCmdLineEntryType { + /// A boolean argument of the program; e.g. @c -v to enable verbose mode. wxCMD_LINE_SWITCH, + + /// An argument with an associated value; e.g. @c "-o filename" to specify + /// an optional output filename. wxCMD_LINE_OPTION, + + /// A parameter: a required program argument. wxCMD_LINE_PARAM, + + /// Additional usage text. See wxCmdLineParser::AddUsageText. wxCMD_LINE_USAGE_TEXT, + wxCMD_LINE_NONE ///< Use this to terminate the list. }; /** - The structure wxCmdLineEntryDesc is used to describe the one command line + The state of a switch as returned by wxCmdLineParser::FoundSwitch(). + + @since 2.9.2 +*/ +enum wxCmdLineSwitchState +{ + /// The switch was found in negated form, i.e. followed by a '-'. + wxCMD_SWITCH_OFF, + + /// The switch was not found at all on the command line. + wxCMD_SWITCH_NOT_FOUND + + /// The switch was found (and was not negated) + wxCMD_SWITCH_ON +}; + + +/** + Flags determining wxCmdLineParser::ConvertStringToArgs() behaviour. + */ +enum wxCmdLineSplitType +{ + wxCMD_LINE_SPLIT_DOS, + wxCMD_LINE_SPLIT_UNIX +}; + +/** + The structure wxCmdLineEntryDesc is used to describe a command line switch, option or parameter. An array of such structures should be passed - to wxCmdLineParser::SetDesc(). Also, the meanings of parameters of the - wxCmdLineParser::AddXXX() functions are the same as of the corresponding - fields in this structure. - - The field @c shortName is the usual, short, name of the switch or the - option. @c longName is the corresponding long name or empty if the option - has no long name. Both of these fields are unused for the parameters. Both - the short and long option names can contain only letters, digits and the - underscores. - - @c description is used by the wxCmdLineEntryDesc::Usage() method to - construct a help message explaining the syntax of the program. + to wxCmdLineParser::SetDesc(). + + Note that the meanings of parameters of the wxCmdLineParser::AddXXX() functions + are the same as of the corresponding fields in this structure. */ struct wxCmdLineEntryDesc { + /** + The kind of this program argument. + See ::wxCmdLineEntryType for more info. + */ wxCmdLineEntryType kind; + + /** + The usual, short, name of the switch or the option. + + It may contain only letters, digits and the underscores. + This field is unused if kind == wxCMD_LINE_PARAM. + */ const char *shortName; + + /** + The long name for this program argument (may be empty if the option + has no long name). + + It may contain only letters, digits and the underscores. + This field is unused if kind == wxCMD_LINE_PARAM. + */ const char *longName; + + /** + This description is used by the wxCmdLineParser::Usage() method to + construct a help message explaining the syntax of the program. + */ const char *description; + + /** + The type associated with this option (ignored if kind != wxCMD_LINE_OPTION). + See ::wxCmdLineParamType for more info. + */ wxCmdLineParamType type; + + /** + A combination of one or more ::wxCmdLineEntryFlags enum values. + */ int flags; }; @@ -106,18 +175,20 @@ struct wxCmdLineEntryDesc -# Call Parse(). -# Use Found() to retrieve the results. + You can also use wxApp's default command line processing just overriding + wxAppConsole::OnInitCmdLine() and wxAppConsole::OnCmdLineParsed(). + In the documentation below the following terminology is used: - - @b switch: This is a boolean option which can be given or not, but which - doesn't have any value. We use the word switch to distinguish + - @b switch: a boolean option which can be given or not, but which doesn't have + any value. We use the word @e switch to distinguish such boolean options from more generic options like those described below. For example, @c "-v" might be a switch meaning "enable verbose mode". - - @b option: Option for us here is something which comes with a value 0 - unlike a switch. For example, @c -o: @c filename might be an + - @b option: a switch with a value associated to it. + For example, @c "-o filename" might be an option for specifying the name of the output file. - - @b parameter: This is a required program argument. - - @b text: This is a text which can be shown in usage information. + - @b parameter: a required program argument. @section cmdlineparser_construction Construction @@ -199,7 +270,7 @@ struct wxCmdLineEntryDesc @library{wxbase} @category{appmanagement} - @see wxApp::argc, wxApp::argv, @ref page_samples_console "Console Sample" + @see wxApp::argc, wxApp::argv, @ref page_samples_console */ class wxCmdLineParser { @@ -209,20 +280,27 @@ public: */ wxCmdLineParser(); - //@{ /** Constructor which specifies the command line to parse. This is the traditional (Unix) command line format. The parameters @a argc and @a argv have the same meaning as the typical @c main() function. - The second overloaded constructor is only available in Unicode build. - The first one is available in both ANSI and Unicode modes because under + This constructor is available in both ANSI and Unicode modes because under some platforms the command line arguments are passed as ASCII strings even to Unicode programs. */ wxCmdLineParser(int argc, char** argv); + + /** + Constructor which specifies the command line to parse. + This is the traditional (Unix) command line format. + + The parameters @a argc and @a argv have the same meaning as the typical + @c main() function. + + This constructor is only available in Unicode build. + */ wxCmdLineParser(int argc, wchar_t** argv); - //@} /** Constructor which specify the command line to parse in Windows format. @@ -301,12 +379,20 @@ public: bool AreLongOptionsEnabled() const; /** - Breaks down the string containing the full command line in words. The - words are separated by whitespace. The quotes can be used in the input - string to quote the white space and the back slashes can be used to - quote the quotes. + Breaks down the string containing the full command line in words. + + Words are separated by whitespace and double quotes can be used to + preserve the spaces inside the words. + + By default, this function uses Windows-like word splitting algorithm, + i.e. single quotes have no special meaning and backslash can't be used + to escape spaces neither. With @c wxCMD_LINE_SPLIT_UNIX flag Unix + semantics is used, i.e. both single and double quotes can be used and + backslash can be used to escape all the other special characters. */ - static wxArrayString ConvertStringToArgs(const wxChar cmdline); + static wxArrayString + ConvertStringToArgs(const wxString& cmdline, + wxCmdLineSplitType flags = wxCMD_LINE_SPLIT_DOS); /** Identical to EnableLongOptions(@false). @@ -328,6 +414,26 @@ public: */ bool Found(const wxString& name) const; + /** + Returns whether the switch was found on the command line and whether it + was negated. + + This method can be used for any kind of switch but is especially useful + for switches that can be negated, i.e. were added with + wxCMD_LINE_SWITCH_NEGATABLE flag, as otherwise Found() is simpler to + use. + + However Found() doesn't allow to distinguish between switch specified + normally, i.e. without dash following it, and negated switch, i.e. with + the following dash. This method will return @c wxCMD_SWITCH_ON or @c + wxCMD_SWITCH_OFF depending on whether the switch was negated or not. + And if the switch was not found at all, @c wxCMD_SWITCH_NOT_FOUND is + returned. + + @since 2.9.2 + */ + wxCmdLineSwitchState FoundSwitch(const wxString& name) const; + /** Returns true if an option taking a string value was found and stores the value in the provided pointer (which should not be @NULL).