ENH: added two functions for URL parsing:
1. an "abridged" version that separates protocol from dataglom in an expression with the form protocol://dataglom 2. a "full" version that parses protocol, username, password, hostname, port, and path in a standard URL (all of these variables are optional, except for protocol and hostname).
This commit is contained in:
parent
8eea168c23
commit
f18ae2234c
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
=========================================================================*/
|
=========================================================================*/
|
||||||
#include "kwsysPrivate.h"
|
#include "kwsysPrivate.h"
|
||||||
|
#include KWSYS_HEADER(RegularExpression.hxx)
|
||||||
#include KWSYS_HEADER(SystemTools.hxx)
|
#include KWSYS_HEADER(SystemTools.hxx)
|
||||||
#include KWSYS_HEADER(Directory.hxx)
|
#include KWSYS_HEADER(Directory.hxx)
|
||||||
|
|
||||||
@ -76,12 +77,16 @@
|
|||||||
# define HAVE_TTY_INFO 1
|
# define HAVE_TTY_INFO 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define VTK_URL_PROTOCOL_REGEX "([a-zA-Z0-9]*)://(.*)"
|
||||||
|
#define VTK_URL_REGEX "([a-zA-Z0-9]*)://(([A-Za-z]+)(:([^:@]+))?@)?([^:@/]+)(:([0-9]+))?/(.+)?";
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#include <sys/utime.h>
|
#include <sys/utime.h>
|
||||||
#else
|
#else
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// This is a hack to prevent warnings about these functions being
|
// This is a hack to prevent warnings about these functions being
|
||||||
// declared but not referenced.
|
// declared but not referenced.
|
||||||
#if defined(__sgi) && !defined(__GNUC__)
|
#if defined(__sgi) && !defined(__GNUC__)
|
||||||
@ -4252,6 +4257,58 @@ kwsys_stl::string SystemTools::GetOperatingSystemNameAndVersion()
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
bool SystemTools::ParseURLProtocol( const kwsys_stl::string& URL,
|
||||||
|
kwsys_stl::string& protocol,
|
||||||
|
kwsys_stl::string& dataglom )
|
||||||
|
{
|
||||||
|
// match 0 entire url
|
||||||
|
// match 1 protocol
|
||||||
|
// match 2 dataglom following protocol://
|
||||||
|
vtksys::RegularExpression urlRe( VTK_URL_PROTOCOL_REGEX );
|
||||||
|
|
||||||
|
if ( ! urlRe.find( URL ) ) return false;
|
||||||
|
|
||||||
|
protocol = urlRe.match( 1 );
|
||||||
|
dataglom = urlRe.match( 2 );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
bool SystemTools::ParseURL( const kwsys_stl::string& URL,
|
||||||
|
kwsys_stl::string& protocol,
|
||||||
|
kwsys_stl::string& username,
|
||||||
|
kwsys_stl::string& password,
|
||||||
|
kwsys_stl::string& hostname,
|
||||||
|
kwsys_stl::string& dataport,
|
||||||
|
kwsys_stl::string& database )
|
||||||
|
{
|
||||||
|
vtksys::RegularExpression urlRe( VTK_URL_PROTOCOL_REGEX );
|
||||||
|
if ( ! urlRe.find( URL ) ) return false;
|
||||||
|
|
||||||
|
// match 0 URL
|
||||||
|
// match 1 protocol
|
||||||
|
// match 2 mangled user
|
||||||
|
// match 3 username
|
||||||
|
// match 4 mangled password
|
||||||
|
// match 5 password
|
||||||
|
// match 6 hostname
|
||||||
|
// match 7 mangled port
|
||||||
|
// match 8 dataport
|
||||||
|
// match 9 database name
|
||||||
|
|
||||||
|
protocol = urlRe.match( 1 );
|
||||||
|
username = urlRe.match( 3 );
|
||||||
|
password = urlRe.match( 5 );
|
||||||
|
hostname = urlRe.match( 6 );
|
||||||
|
dataport = urlRe.match( 8 );
|
||||||
|
database = urlRe.match( 9 );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
// These must NOT be initialized. Default initialization to zero is
|
// These must NOT be initialized. Default initialization to zero is
|
||||||
// necessary.
|
// necessary.
|
||||||
unsigned int SystemToolsManagerCount;
|
unsigned int SystemToolsManagerCount;
|
||||||
|
@ -783,6 +783,36 @@ public:
|
|||||||
static void ConvertWindowsCommandLineToUnixArguments(
|
static void ConvertWindowsCommandLineToUnixArguments(
|
||||||
const char *cmd_line, int *argc, char ***argv);
|
const char *cmd_line, int *argc, char ***argv);
|
||||||
|
|
||||||
|
/** -----------------------------------------------------------------
|
||||||
|
* URL Manipulation Routines
|
||||||
|
* -----------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a character string :
|
||||||
|
* protocol://dataglom
|
||||||
|
* and fill protocol as appropriate.
|
||||||
|
* Return false if the URL does not have the required form, true otherwise.
|
||||||
|
*/
|
||||||
|
static bool ParseURLProtocol( const kwsys_stl::string& URL,
|
||||||
|
kwsys_stl::string& protocol,
|
||||||
|
kwsys_stl::string& dataglom );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a string (a URL without protocol prefix) with the form:
|
||||||
|
* protocol://[[username[':'password]'@']hostname[':'dataport]]'/'[datapath]
|
||||||
|
* and fill protocol, username, password, hostname, dataport, and datapath
|
||||||
|
* when values are found.
|
||||||
|
* Return true if the string matches the format; false otherwise.
|
||||||
|
*/
|
||||||
|
static bool ParseURL( const kwsys_stl::string& URL,
|
||||||
|
kwsys_stl::string& protocol,
|
||||||
|
kwsys_stl::string& username,
|
||||||
|
kwsys_stl::string& password,
|
||||||
|
kwsys_stl::string& hostname,
|
||||||
|
kwsys_stl::string& dataport,
|
||||||
|
kwsys_stl::string& datapath );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Allocate the std::map that serve as the Path Translation table.
|
* Allocate the std::map that serve as the Path Translation table.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user