30const char*
const kURI_pchar =
"(?:[[:alpha:][:digit:]\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f][0-9A-Fa-f])";
125 return u11.GetUri() ==
u22.GetUri();
165 while (
source.Length() > 0) {
175 if (
TPRegexp(
"^/\.\./(.*)$|^/\.\.($)").Substitute(
source,
"/$1") > 0) {
179 sink.Remove(last,
sink.Length() - last);
184 if (
source.CompareTo(
".") == 0 ||
source.CompareTo(
"..") == 0) {
259 Error(
"SetScheme",
"<scheme> component \"%s\" of URI is not compliant with RFC 3986.",
scheme.Data());
273 "^[[:alpha:]][[:alpha:][:digit:]+\-.]*$"
309 Error(
"SetQuery",
"<query> component \"%s\" of URI is not compliant with RFC 3986.",
query.Data());
349 if (
tokens->GetEntries() != 4) {
350 Error(
"SetAuthority",
"<authority> component \"%s\" of URI is not compliant with RFC 3986.",
authority.Data());
392 if (
tokens->GetEntries() == 4)
416 Error(
"SetUserInfo",
"<userinfo> component \"%s\" of URI is not compliant with RFC 3986.",
userinfo.Data());
432 ).Match(
string) > 0 && !
TString(
string).Contains(
"@"));
449 Error(
"SetHost",
"<host> component \"%s\" of URI is not compliant with RFC 3986.", host.
Data());
467 Error(
"SetPort",
"<port> component \"%s\" of URI is not compliant with RFC 3986.", port.
Data());
488 Error(
"SetPath",
"<path> component \"%s\" of URI is not compliant with RFC 3986.", path.
Data());
505 Error(
"SetFragment",
"<fragment> component \"%s\" of URI is not compliant with RFC 3986.",
fragment.Data());
520 ).Match(
string) > 0);
608 TPRegexp regexp =
TPRegexp(
"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)([?]([^#]*))?(#(.*))?");
614 switch (
tokens->GetEntries()) {
640 Error(
"SetUri",
"URI \"%s\" is not is not compliant with RFC 3986.", uri.
Data());
705 if (
tokens->GetEntries() == 0) {
706 Error(
"SetHierPart",
"<hier-part> component \"%s\" of URI is not compliant with RFC 3986.",
hier.Data());
727 Error(
"SetHierPart",
"<hier-part> component \"%s\" of URI is not compliant with RFC 3986.",
hier.Data());
783 if (
tokens->GetEntries() == 0) {
784 Error(
"SetRelativePath",
"<relative-part> component \"%s\" of URI is not compliant with RFC 3986.",
relative.Data());
804 Error(
"SetRelativePath",
"<relative-part> component \"%s\" of URI is not compliant with RFC 3986.",
relative.Data());
874 ).Match(
string) > 0);
889 ).Match(
string) > 0);
904 ).Match(
string) > 0);
939 return (
TPRegexp(
"^[[:digit:]]*$").Match(
string) > 0);
953 "^([[:alpha:][:digit:]\-._~!$&'()*+,;=]|%[0-9A-Fa-f][0-9A-Fa-f])*$").Match(
string) > 0);
965 "^([[:digit:]]{1,3}[.]){3}[[:digit:]]{1,3}$").Match(
string) > 0);
1016 while (i <
source.Length()) {
1018 if (
source.Length() < i+2) {
1061 while (i <
source.Length()) {
1063 if (
source.Length() < i+2) {
1090 while (i <
source.Length()) {
1092 if (
source.Length() < i+2) {
1141 if (reference.
GetPath().IsNull()) {
1150 if (reference.
GetPath().BeginsWith(
"/")) {
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
Bool_t operator==(const TUri &u1, const TUri &u2)
Implementation of a TUri Equivalence operator that uses syntax-based normalisation see chapter 6....
const char *const kURI_unreserved
const char *const kURI_pchar
Collectable string class.
Mother of all ROOT objects.
TObject & operator=(const TObject &rhs)
TObject assignment operator.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Int_t Match(const TString &s, const TString &mods="", Int_t start=0, Int_t nMaxMatch=10, TArrayI *pos=nullptr)
The number of matches is returned, this equals the full match + sub-pattern matches.
TObjArray * MatchS(const TString &s, const TString &mods="", Int_t start=0, Int_t nMaxMatch=10)
Returns a TObjArray of matched substrings as TObjString's.
void ToLower()
Change string to lower-case.
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Remove(Ssiz_t pos)
This class represents a RFC 3986 compatible URI.
const TString GetRelativePart() const
relative-part = "//" authority path-abempty
static Bool_t IsPath(const TString &)
Returns kTRUE if string qualifies as valid path component:
Bool_t SetScheme(const TString &scheme)
Set scheme component of URI:
Bool_t IsRelative() const
Returns kTRUE if instance qualifies as relative-ref relative-ref = relative-part [ "?...
static const TString RemoveDotSegments(const TString &)
This functions implements the "remove_dot_segments" routine of chapter 5.2.4 "for interpreting and re...
Bool_t SetFragment(const TString &fragment)
Set fragment component of URI:
Bool_t SetPath(const TString &path)
Set path component of URI:
static Bool_t IsPathAbempty(const TString &)
Returns kTRUE if string qualifies as valid path-abempty component:
Bool_t SetRelativePart(const TString &)
Returns kTRUE is string qualifies as relative-part:
Bool_t IsAbsolute() const
Returns kTRUE if instance qualifies as absolute-URI absolute-URI = scheme ":" hier-part [ "?...
const TString GetHost() const
static Bool_t IsFragment(const TString &)
Returns kTRUE if string qualifies as valid fragment component.
Bool_t SetUserInfo(const TString &userinfo)
Set userinfo component of URI:
static Bool_t IsQuery(const TString &)
Returns kTRUE if string qualifies as URI query:
Bool_t IsUri() const
Returns kTRUE if instance qualifies as URI URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] ...
static const TString PctEncode(const TString &source)
Percent-encode and return the given string according to RFC 3986 in principle, this function cannot f...
static const TString PctNormalise(const TString &source)
Normalise the percent-encoded parts of the string i.e.
const TString GetPath() const
const TString GetHierPart() const
void Normalise()
Syntax based normalisation according to RFC chapter 6.2.2.
static Bool_t IsUserInfo(const TString &)
Return kTRUE is string qualifies as valid URI userinfo:
const TString GetUri() const
Returns the whole URI - an implementation of chapter 5.3 component recomposition.
const TString GetFragment() const
static Bool_t IsPathRootless(const TString &)
Returns kTRUE if string qualifies as valid path-rootless component:
static Bool_t IsHost(const TString &)
Returns kTRUE if string qualifies as valid host component: host = IP-literal / IPv4address / reg-name...
static Bool_t IsScheme(const TString &)
Returns kTRUE if string qualifies as URI scheme:
const TString GetQuery() const
Bool_t SetAuthority(const TString &authority)
Set authority part of URI:
static TUri Transform(const TUri &reference, const TUri &base)
Transform a URI reference into its target URI using given a base URI.
void Reset()
Initialize this URI object.
const TString GetAuthority() const
Returns the authority part of the instance:
Bool_t HasFragment() const
void Print(Option_t *option="") const override
Display function,.
static Bool_t IsPort(const TString &)
Returns kTRUE if string qualifies as valid port component:
static Bool_t IsAuthority(const TString &)
Returns kTRUE if string qualifies as valid URI authority:
Bool_t HasRelativePart() const
static Bool_t IsPathNoscheme(const TString &)
Returns kTRUE if string qualifies as valid path-noscheme component:
static const TString MergePaths(const TUri &reference, const TUri &base)
RFC 3986, 5.3.2.
static Bool_t IsPathAbsolute(const TString &)
Returns kTRUE if string qualifies as valid path-absolute component.
static Bool_t IsUnreserved(const TString &string)
Returns kTRUE, if the given string does not contain RFC 3986 reserved characters.
Bool_t SetPort(const TString &port)
Set port component of URI:
Bool_t SetQuery(const TString &path)
Set query component of URI:
Bool_t HasHierPart() const
static Bool_t IsHierPart(const TString &)
Returns kTRUE if string qualifies as hier-part:
static Bool_t IsRelativePart(const TString &)
Returns kTRUE is string qualifies as relative-part:
static Bool_t IsIpv4(const TString &)
Returns kTRUE, if string holds a valid IPv4 address currently only decimal variant supported.
Bool_t IsReference() const
Returns kTRUE if instance qualifies as URI-reference URI-reference = URI / relative-ref cf.
static Bool_t IsPathEmpty(const TString &)
Returns kTRUE if string qualifies as valid path-empty component:
TUri & operator=(const TUri &rhs)
TUri assignment operator.
Bool_t SetUri(const TString &uri)
Parse URI and set the member variables accordingly, returns kTRUE if URI validates,...
Bool_t SetHost(const TString &host)
Set host component of URI:
Bool_t SetHierPart(const TString &hier)
returns hier-part component of URI
static const TString PctDecodeUnreserved(const TString &source)
Percent-decode the given string according to chapter 2.1 we assume a valid pct-encoded string.
Bool_t HasAuthority() const
const TString GetScheme() const
static const TString PctDecode(const TString &source)
Percent-decode the given string according to chapter 2.1 we assume a valid pct-encoded string.
static Bool_t IsRegName(const TString &)
Returns kTRUE if string qualifies as valid reg-name: