dotgnu-pnet-commits
[Top][All Lists]
Advanced

[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 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]