From 466930a3e8c96df6fbb4386c25eaa5f03922985c Mon Sep 17 00:00:00 2001 From: Gaurav Vaish Date: Fri, 9 Nov 2001 02:33:00 +0000 Subject: [PATCH] 2001:11:09 Gaurav Vaish * UrlUtils.cs Added the following functions: GetProtocol(string) -> Returns the protocol used (before ://) IsRootUrl(string) -> Is the url supplied is RootUrl IsValidProtocol(string) -> Can the protocol represent a valid protocol RegionMatches(...) -> Matches an inner part of a string svn path=/trunk/mcs/; revision=1302 --- .../System.Web.WebUtils/UrlUtils.cs | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 mcs/class/System.Web/System.Web.WebUtils/UrlUtils.cs diff --git a/mcs/class/System.Web/System.Web.WebUtils/UrlUtils.cs b/mcs/class/System.Web/System.Web.WebUtils/UrlUtils.cs new file mode 100644 index 00000000000..cdb21e9dce5 --- /dev/null +++ b/mcs/class/System.Web/System.Web.WebUtils/UrlUtils.cs @@ -0,0 +1,145 @@ +/** + * Namespace: System.Web.UI.WebUtils + * Class: UrlUtils + * + * Author: Gaurav Vaish + * Contact: + * Status: 10??% + * + * (C) Gaurav Vaish (2001) + */ + +using System; + +namespace System.Web.UI.WebUtils +{ + internal class UrlUtils + { + /* + * I could not find these functions in the class System.Uri + * Besides, an instance of Uri will not be formed until and unless the address is of + * the form protocol://[user:pass]host[:port]/[fullpath] + * ie, a protocol, and that too without any blanks before, + * is a must which may not be the case here. + */ + public static string GetProtocol(string url) + { + //String url = URL; + if(url!=null) + { + if(url.Length>0) + { + + int i, start = 0, limit; + limit = url.Length; + char c; + bool aRef = false; + while( (limit > 0) && (url[limit-1] <= ' ')) + { + limit --; + } + while( (start < limit) && (url[start] <= ' ')) + { + start++; + } + if(RegionMatches(true, url, start, "url:", 0, 4)) + { + start += 4; + } + if(start < url.Length && url[start]=='#') + { + aRef = true; + } + for(i = start; !aRef && (i < limit) && ((c=url[i]) != '/'); i++) + { + if(c==':') + { + return url.Substring(start, i - start); + } + } + } + } + return String.Empty; + } + + public static bool IsRootUrl(string url) + { + //Taking code from Java Class java.net.URL + if(url!=null) + { + if(url.Length>0) + { + return IsValidProtocol(GetProtocol(url).ToLower()); + } + } + return false; + } + + public static bool IsValidProtocol(string protocol) + { + if(protocol.Length < 1) + return false; + char c = protocol[0]; + if(!Char.IsLetter(c)) + { + System.Console.WriteLine("Character {0} is not a letter.", c); + return false; + } + for(int i=1; i < protocol.Length; i++) + { + c = protocol[i]; + if(!Char.IsLetterOrDigit(c) && c!='.' && c!='+' && c!='-') + { + System.Console.WriteLine("Character \"{0}\" is not a letter or a digit or something.", c); + return false; + } + } + return true; + } + + public static string MakeRelative(string from, string to) + { + //Uri fromUri; + //Uri toUri; + return String.Empty; + } + + /* + * Check JavaDocs for java.lang.String#RegionMatches(bool, int, String, int, int) + * Could not find anything similar in the System.String class + */ + public static bool RegionMatches(bool ignoreCase, string source, int start, string match, int offset, int len) + { + if(source!=null || match!=null) + { + if(source.Length>0 && match.Length>0) + { + char[] ta = source.ToCharArray(); + char[] pa = match.ToCharArray(); + if((offset < 0) || (start < 0) || (start > (source.Length - len)) || (offset > (match.Length - len))) + { + return false; + } + while(len-- > 0) + { + char c1 = ta[start++]; + char c2 = pa[offset++]; + if(c1==c2) + continue; + if(ignoreCase) + { + if(Char.ToUpper(c1)==Char.ToUpper(c2)) + continue; + // Check for Gregorian Calendar where the above may not hold good + if(Char.ToLower(c1)==Char.ToLower(c2)) + continue; + } + return false; + } + return true; + } + } + return false; + } + } +} -- 2.25.1