[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnetlib/System Uri.cs,1.35,1.36
From: |
Gopal.V <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnetlib/System Uri.cs,1.35,1.36 |
Date: |
Sat, 24 May 2003 02:43:42 -0400 |
Update of /cvsroot/dotgnu-pnet/pnetlib/System
In directory subversions:/tmp/cvs-serv29644/System
Modified Files:
Uri.cs
Log Message:
implement MakeRelative() for Uris
Index: Uri.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/System/Uri.cs,v
retrieving revision 1.35
retrieving revision 1.36
diff -C2 -r1.35 -r1.36
*** Uri.cs 24 May 2003 04:26:53 -0000 1.35
--- Uri.cs 24 May 2003 06:43:39 -0000 1.36
***************
*** 598,605 ****
}
- [TODO]
public String MakeRelative(Uri toUri)
{
! throw new NotImplementedException("MakeRelative");
}
--- 598,638 ----
}
public String MakeRelative(Uri toUri)
{
! if((this.Scheme != toUri.Scheme) ||
! (this.Authority != this.Authority))
! {
! return toUri.ToString();
! }
! if(this.path == toUri.path)
! {
! return String.Empty;
! }
! String []seg1 = this.Segments;
! String []seg2 = toUri.Segments;
!
! int k;
! for(k=0;k < Math.Min(seg1.Length , seg2.Length) ; k++)
! {
! if(seg1[k] != seg2[k])
! {
! break;
! }
! }
! bool lastWasDir = false;
!
! StringBuilder sb = new StringBuilder();
! for(int i = k ; i < seg1.Length ; i++)
! {
! if(seg1[i].EndsWith("/"))
! {
! sb.Append("../");
! }
! }
! for(int i = k ; i < seg2.Length ; i++)
! {
! sb.Append(seg2[i]);
! }
! return sb.ToString();
}
***************
*** 626,629 ****
--- 659,663 ----
private void CheckParsed()
{
+ this.hostNameType = CheckHostName(this.host);
if(hostNameType==UriHostNameType.Unknown)
{
***************
*** 690,694 ****
this.userinfo = MatchToString(uriString, matches, 6);
this.host = MatchToString(uriString, matches,7);
- this.hostNameType = CheckHostName(this.host);
this.portString = MatchToString(uriString, matches,9);
this.path = MatchToString(uriString, matches, 10);
--- 724,727 ----
***************
*** 715,730 ****
sb.Append(this.fragment);
!
! return Unescape(sb.ToString());
}
! protected virtual String Unescape(String path)
{
! if(path == null || path.Length==0) return String.Empty;
! StringBuilder sb = new StringBuilder(path.Length);
! for(int i=0; i < path.Length;)
{
! sb.Append(HexUnescape(path, ref i));
}
return sb.ToString();
--- 748,770 ----
sb.Append(this.fragment);
!
! if(this.userEscaped)
! {
! return sb.ToString();
! }
! else
! {
! return Unescape(sb.ToString());
! }
}
! protected virtual String Unescape(String str)
{
! if(str == null || str.Length==0) return String.Empty;
! StringBuilder sb = new StringBuilder(str.Length);
! for(int i=0; i < str.Length;)
{
! sb.Append(HexUnescape(str, ref i));
}
return sb.ToString();
***************
*** 892,895 ****
--- 932,965 ----
}
}
+
+ #if !ECMA_COMPAT
+ public
+ #else
+ private
+ #endif
+ String [] Segments
+ {
+ get
+ {
+ if(path == null || path == String.Empty)
+ {
+ return new String[0];
+ }
+ if(path == "/")
+ {
+ return new String[]{"/"};
+ }
+ String [] toks = path.Split('/');
+ bool endSlash = path.EndsWith("/");
+ for(int i=0;i<toks.Length-1; i++)
+ {
+ toks[i]+="/";
+ }
+ String [] segments = new String[toks.Length - (endSlash
? 1 : 0)];
+ Array.Copy(toks, segments, toks.Length - (endSlash ? 1
:0));
+ return segments;
+ }
+ }
+
public bool UserEscaped
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnetlib/System Uri.cs,1.35,1.36,
Gopal.V <address@hidden> <=
- Prev by Date:
[Dotgnu-pnet-commits] CVS: pnetlib ChangeLog,1.922,1.923
- Next by Date:
[Dotgnu-pnet-commits] CVS: cscctest/csharp/stmt locals2.il,1.3,1.4 locals2.jl,1.2,1.3
- Previous by thread:
[Dotgnu-pnet-commits] CVS: pnetlib ChangeLog,1.922,1.923
- Next by thread:
[Dotgnu-pnet-commits] CVS: cscctest/csharp/stmt locals2.il,1.3,1.4 locals2.jl,1.2,1.3
- Index(es):