1 //
2 // System.Web.Util.StrUtils
3 //
4 // Author(s):
5 //  Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 //
7 // (C) 2005 Novell, Inc, (http://www.novell.com)
8 //
9 
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 //
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 //
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 
31 using System;
32 using System.Globalization;
33 using System.Text;
34 
35 namespace System.Web.Util {
36 	internal sealed class StrUtils
37 	{
StrUtils()38 		StrUtils () { }
39 
StartsWith(string str1, string str2)40 		public static bool StartsWith (string str1, string str2)
41 		{
42 			return StartsWith (str1, str2, false);
43 		}
44 
StartsWith(string str1, string str2, bool ignore_case)45 		public static bool StartsWith (string str1, string str2, bool ignore_case)
46 		{
47 			int l2 = str2.Length;
48 			if (l2 == 0)
49 				return true;
50 
51 			int l1 = str1.Length;
52 			if (l2 > l1)
53 				return false;
54 
55 			return (0 == String.Compare (str1, 0, str2, 0, l2, ignore_case, Helpers.InvariantCulture));
56 		}
57 
EndsWith(string str1, string str2)58 		public static bool EndsWith (string str1, string str2)
59 		{
60 			return EndsWith (str1, str2, false);
61 		}
62 
EndsWith(string str1, string str2, bool ignore_case)63 		public static bool EndsWith (string str1, string str2, bool ignore_case)
64 		{
65 			int l2 = str2.Length;
66 			if (l2 == 0)
67 				return true;
68 
69 			int l1 = str1.Length;
70 			if (l2 > l1)
71 				return false;
72 
73 			return (0 == String.Compare (str1, l1 - l2, str2, 0, l2, ignore_case, Helpers.InvariantCulture));
74 		}
75 
EscapeQuotesAndBackslashes(string attributeValue)76 		public static string EscapeQuotesAndBackslashes (string attributeValue)
77 		{
78 			StringBuilder sb = null;
79 			for (int i = 0; i < attributeValue.Length; i++) {
80 				char ch = attributeValue [i];
81 				if (ch == '\'' || ch == '"' || ch == '\\') {
82 					if (sb == null) {
83 						sb = new StringBuilder ();
84 						sb.Append (attributeValue.Substring (0, i));
85 					}
86 					sb.Append ('\\');
87 					sb.Append (ch);
88 				}
89 				else {
90 					if (sb != null)
91 						sb.Append (ch);
92 				}
93 			}
94 			if (sb != null)
95 				return sb.ToString ();
96 			return attributeValue;
97 		}
98 
IsNullOrEmpty(string value)99 		public static bool IsNullOrEmpty (string value)
100 		{
101 			return String.IsNullOrEmpty (value);
102 		}
103 
SplitRemoveEmptyEntries(string value, char [] separator)104 		public static string [] SplitRemoveEmptyEntries (string value, char [] separator)
105 		{
106 			return value.Split (separator, StringSplitOptions.RemoveEmptyEntries);
107 		}
108 	}
109 }
110 
111