19 bool IsDigitCh(
const char& Ch)
const {
return (Ch>=0)&&IsDigitV[Ch];}
20 bool IsSchemeCh(
const char& Ch)
const {
return (Ch>=0)&&IsSchemeV[Ch];}
21 bool IsHostCh(
const char& Ch)
const {
return (Ch>=0)&&IsHostV[Ch];}
23 return (Ch<0)||((Ch>=0)&&IsHSegmentV[Ch]);}
31 for (
int CC=0; CC<Str.
Len(); CC++){BoolV[Str.
GetCh(CC)]=
true;}}
34 for (
int BoolN=0; BoolN<BoolV.
Len(); BoolN++){
35 BoolV[BoolN]=BoolV[BoolN]||OrBoolV[BoolN];}}
38 IsLoAlphaV(
TCh::Vals), IsHiAlphaV(
TCh::Vals), IsAlphaV(
TCh::Vals),
39 IsDigitV(
TCh::Vals), IsSafeV(
TCh::Vals), IsExtraV(
TCh::Vals),
40 IsNationalV(
TCh::Vals), IsPunctuationV(
TCh::Vals),
41 IsReservedV(
TCh::Vals), IsHexV(
TCh::Vals),
42 IsUnreservedV(
TCh::Vals), IsUCharV(
TCh::Vals), IsXCharV(
TCh::Vals),
43 IsSchemeV(
TCh::Vals), IsHostV(
TCh::Vals), IsHSegmentV(
TCh::Vals){
84 bool Eof()
const {
return BfC==Bf.
Len();};
89 for (
int ChN=0; ChN<Str.
Len(); ChN++){
GetCh(Str[ChN]);}
return Str;}
91 int Len = (int) strlen(Str);
92 for (
int ChN=0; ChN<Len; ChN++){
GetCh(Str[ChN]);}
107 Str.
ToLc();
return Str;}
143 Str+=HSegStr; PathSegV.
Add(HSegStr);
160 const char *DbSlashStr=
"//";
161 Str+=Lx.
GetStr(DbSlashStr);
190 if (NrRelUrlStr.
Len()>0){
191 if (NrRelUrlStr[0]==
'/'){
192 TStr SlashStr;
int SlashChN=0;
193 while ((SlashChN<NrRelUrlStr.
Len())&&(NrRelUrlStr[SlashChN]==
'/')){
194 SlashChN++; SlashStr+=
"/";}
195 int ChN=0;
bool Found=
false;
196 while ((!Found)&&((ChN=AbsUrlStr.
SearchStr(SlashStr, ChN))!=-1)){
198 Found=((ChN==0)||(Str[0]!=
'/'))&&
199 ((ChN+SlashStr.
Len()-1==AbsUrlStr.
Len()-1)||(Str[Str.
Len()-1]!=
'/'));
204 AbsUrlStr+=NrRelUrlStr;
207 int ChN=AbsUrlStr.
Len()-1;
208 while ((ChN>=0)&&(AbsUrlStr[ChN]!=
'/')){ChN--;}
210 AbsUrlStr+=NrRelUrlStr;
214 const char *PrevDirStr=
"/../";
216 while ((ChN=AbsUrlStr.
SearchStr(PrevDirStr))!=-1){
217 int BChN=ChN;
int EChN=ChN+(int) strlen(PrevDirStr)-1;
218 while ((BChN-1>=0)&&(AbsUrlStr[BChN-1]!=
'/')){BChN--;}
222 const char *CurDirStr=
"/.";
223 while (AbsUrlStr.
DelStr(CurDirStr)){}
230 UrlStr(), RelUrlStr(_RelUrlStr), BaseUrlStr(_BaseUrlStr),
231 SchemeNm(), HostNm(),
232 PortStr(), PathStr(), SearchStr(), FragIdStr(),
233 PortN(-1), PathSegV(),
235 FinalUrlStr(), FinalHostNm(),
271 TChA DmChA;
int DmSegs=0;
272 for (
int ChN=
HostNm.
Len()-1; ChN>=0; ChN--){
275 if (DmSegs==MxDmSegs){
break;}
else {DmChA+=
'.';}
292 FinalUrlChA+=
SchemeNm; FinalUrlChA+=
"://";
295 FinalUrlChA+=
":"; FinalUrlChA+=
PortStr;}
307 for (
int PathSegN=0; PathSegN<
PathSegV.
Len(); PathSegN++){
329 return (ColonChN!=-1)&&((SlashChN==-1)||((SlashChN!=-1)&&(ColonChN<SlashChN)));
334 return UrlStr.
IsChIn(
'?');
344 const TStr& DfHostNmPrefix,
const TStr& DfHostNmSufix){
348 if (Url->
IsOk()){
return Url;}
350 if (ShortcutUrlStr.
IsChIn(
'.')){
351 UrlStr=TUrl::UrlHttpAbsPrefixStr+ShortcutUrlStr;
353 if (Url->
IsOk()){
return Url;}
356 if (ShortcutUrlStr.
IsChIn(
'.')){
357 UrlStr=TUrl::UrlHttpAbsPrefixStr+ShortcutUrlStr+
"/";
359 if (Url->
IsOk()){
return Url;}
363 DfHostNmPrefix+
"."+ShortcutUrlStr+
"."+DfHostNmSufix+
"/";
370 for (
int ChN=0; ChN<InChA.
Len(); ChN++){
375 if ((
' '<Ch)&&(Ch<=
'~')&&(Ch!=
'+')&&(Ch!=
'&')&&(Ch!=
'%')){
388 for (
int ChN=0; ChN<InChA.
Len(); ChN++){
392 }
else if (Ch==
'%') {
393 ChN++;
if (ChN==InChA.
Len()) {
break; }
394 char FirstCh = InChA[ChN];
396 ChN++;
if (ChN==InChA.
Len()) {
break; }
397 char SecondCh = InChA[ChN];
410 for (
int StrN=0; StrN<StrV.
Len(); StrN++){
411 TStr UcStr=StrV[StrN].GetUc();
412 if ((UcStr.
Len()>3)&&(UcStr!=
"HTTP")&&(UcStr!=
"HTML")&&(UcStr!=
"INDEX")&&(UcStr!=
"DEFAULT")){
413 for (
int CopyN=0; CopyN<Copies; CopyN++){
414 if (!DocChA.
Empty()){DocChA+=
' ';} DocChA+=StrV[StrN];
422 const TStr& UrlStr,
const int& MxLen,
const bool& HostOnlyP){
428 for (
int HostNmSegN=0; HostNmSegN<HostNmSegV.
Len(); HostNmSegN++){
429 if (HostNmSegN>0){DocNm+=
'.';}
430 DocNm+=HostNmSegV[HostNmSegV.
Len()-HostNmSegN-1];
436 DocNm=UrlStr.
GetLc();
451 for (
int KeyN=0; KeyN<
GetKeys(); KeyN++){
454 for (
int ValStrN=0; ValStrN<ValStrV.
Len(); ValStrN++){
455 if (KeyVals>0){SearchChA+=
"&";}
static bool IsHex(const char &Ch)
int SearchCh(const char &Ch, const int &BChN=0) const
static TStr GetHexStr(const int &Val)
void GetAbs(const TStr &AbsUrlStr)
TStr GetDmNm(const int &MxDmSegs=-1) const
static bool IsSite(const TStr &UrlStr)
bool IsHostCh(const char &Ch) const
bool IsPrefix(const char *Str) const
TStr GetHPath(TStrV &PathSegV)
void InclBoolV(TBoolV &BoolV, const TBoolV &OrBoolV)
void DefFinalUrl(const TStr &_FinalHostNm)
static TStr GetTopDownDocNm(const TStr &UrlStr, const int &MxLen=-1, const bool &HostOnlyP=false)
TSizeTy Len() const
Returns the number of elements in the vector.
const char * GetStr(const char *Str)
void InclStr(TBoolV &BoolV, const TStr &Str)
static int GetHex(const char &Ch)
static PUrl New(const TStr &RelUrlStr, const TStr &BaseUrlStr=TStr())
TStr GetSubStr(const int &BChN, const int &EChN) const
bool IsOk(const TUrlScheme _Scheme=usUndef) const
bool DelStr(const TStr &Str)
static PUrl GetUrlFromShortcut(const TStr &ShortcutUrlStr, const TStr &DfHostNmPrefix, const TStr &DfHostNmSufix)
TUrl(const TStr &_RelUrlStr, const TStr &_BaseUrlStr=TStr())
const TDat & GetDat(const TKey &Key) const
static bool IsAbs(const TStr &UrlStr)
bool IsSchemeCh(const char &Ch) const
bool IsHSegmentCh() const
TStr GetHostPort(TStr &HostNm, TStr &PortStr, int &PortN)
int ChangeStrAll(const TStr &SrcStr, const TStr &DstStr, const bool &FromStartP=false)
static const TStr UrlHttpPrefixStr
static TStr DecodeUrlStr(const TStr &UrlStr)
int SearchStr(const TStr &Str, const int &BChN=0) const
static PUrlEnv MkClone(const PUrlEnv &UrlEnv)
TStr GetToCh(const char &Ch=TUrlLxChDef::EofCh)
void InclCh(TBoolV &BoolV, const char &Ch)
TStr GetFragIdStr() const
char GetCh(const int &ChN) const
TStr GetKeyNm(const int &KeyN) const
void DelSubStr(const int &BChN, const int &EChN)
bool IsHSegmentCh(const char &Ch) const
static const TUrlLxChDef ChDef
bool IsDigitCh(const char &Ch) const
char GetCh(const char &Ch)
TStr GetSearchStr() const
void SplitOnNonAlNum(TStrV &StrV) const
bool IsChIn(const char &Ch) const
void SplitOnAllCh(const char &SplitCh, TStrV &StrV, const bool &SkipEmpty=true) const
bool IsDefFinalUrl() const
static TStr GetUrlSearchStr(const TStr &Str)
#define EAssertR(Cond, MsgStr)
void GetAbsFromBase(const TStr &RelUrlStr, const TStr &BaseUrlStr)
TStr GetStr(const TStr &Str)
static bool IsScript(const TStr &UrlStr)
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element.
static const TStr UrlHttpAbsPrefixStr
TStr GetFullUrlStr() const
static TStr GetDocStrFromUrlStr(const TStr &UrlStr, const int &Copies=1)