From 97d590469d4aaa67459aa4f041ea9bfa409dbecb Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Mon, 21 Aug 2000 17:06:38 +0000 Subject: [PATCH] Doc fix and SetArguments implementation git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8152 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/latex/wx/cmdlpars.tex | 5 ++--- src/common/cmdline.cpp | 46 ++++++++++++++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/docs/latex/wx/cmdlpars.tex b/docs/latex/wx/cmdlpars.tex index 5fe7725f15..c7164c0163 100644 --- a/docs/latex/wx/cmdlpars.tex +++ b/docs/latex/wx/cmdlpars.tex @@ -196,7 +196,7 @@ application-specific text before the explanation given by \membersection{Parsing command line}\label{wxcmdlineparserparsing} -After the command line description was constructed and the desiredoptions were +After the command line description was constructed and the desired options were set, you can finally call \helpref{Parse}{wxcmdlineparserparse} method. It returns $0$ if the command line was correct and was parsed, $-1$ if the help option was specified (this is a separate case as, normally, the program will @@ -231,8 +231,7 @@ command line or FALSE if they were not specified. \func{}{wxCmdLineParser}{\void} Default constructor. You must use -\helpref{SetCmdLine}{wxcmdlineparsersetcmdlineargc} or -\helpref{SetCmdLinelater.}{wxcmdlineparsersetcmdlinestr} later. +\helpref{SetCmdLine}{wxcmdlineparsersetcmdlineargc} later. \membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserargc} diff --git a/src/common/cmdline.cpp b/src/common/cmdline.cpp index 965d1143de..a8764a296f 100644 --- a/src/common/cmdline.cpp +++ b/src/common/cmdline.cpp @@ -190,12 +190,50 @@ void wxCmdLineParserData::SetArguments(int argc, char **argv) } } -void wxCmdLineParserData::SetArguments(const wxString& WXUNUSED(cmdline)) +void wxCmdLineParserData::SetArguments(const wxString& cmdLine) { - // either use wxMSW wxApp::ConvertToStandardCommandArgs() or move its logic - // here and use this method from it - but don't duplicate the code + m_arguments.Empty(); + + m_arguments.Add(wxTheApp->GetAppName()); + + // Break up string + // Treat strings enclosed in double-quotes as single arguments + int i = 0; + int len = cmdLine.Length(); + while (i < len) + { + // Skip whitespace + while ((i < len) && wxIsspace(cmdLine.GetChar(i))) + i ++; + + if (i < len) + { + if (cmdLine.GetChar(i) == wxT('"')) // We found the start of a string + { + i ++; + int first = i; + while ((i < len) && (cmdLine.GetChar(i) != wxT('"'))) + i ++; + + wxString arg(cmdLine.Mid(first, (i - first))); - wxFAIL_MSG(_T("TODO")); + m_arguments.Add(arg); + + if (i < len) + i ++; // Skip past 2nd quote + } + else // Unquoted argument + { + int first = i; + while ((i < len) && !wxIsspace(cmdLine.GetChar(i))) + i ++; + + wxString arg(cmdLine.Mid(first, (i - first))); + + m_arguments.Add(arg); + } + } + } } int wxCmdLineParserData::FindOption(const wxString& name) -- 2.45.2