2004-06-17 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / Commons.Xml.Relaxng / Commons.Xml.Relaxng / Misc.cs
1 //\r
2 // Commons.Xml.Relaxng.General.cs\r
3 //\r
4 // Author:\r
5 //      Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>\r
6 //\r
7 // 2003 Atsushi Enomoto "No rights reserved."\r
8 //\r
9 using System;\r
10 using System.Collections;\r
11 using System.IO;\r
12 using System.Xml;\r
13 using Commons.Xml.Relaxng.Derivative;\r
14 \r
15 namespace Commons.Xml.Relaxng\r
16 {\r
17         internal class Util\r
18         {\r
19                 public static string ResolveUri (string baseUri, string href, XmlResolver resolver)\r
20                 {\r
21                         Uri uri = null;\r
22                         if (baseUri != null && baseUri.Length > 0)
23                                 uri = new Uri (baseUri);
24                         Uri result = resolver.ResolveUri (uri, href);
25                         if (result.Query.Length > 0 || result.Fragment.Length > 0)
26                                 throw new RelaxngException ("Invalid URI format: " + href);
27                         return result.ToString ();
28                 }\r
29 \r
30                 public static string NormalizeWhitespace (string s)\r
31                 {\r
32                         if (s.Length == 0)\r
33                                 return s;\r
34 \r
35                         char [] ca = s.ToCharArray ();\r
36                         int j = 0;\r
37                         for (int i = 0; i < ca.Length; i++) {\r
38                                 switch (ca [i]) {\r
39                                 case ' ':\r
40                                 case '\r':\r
41                                 case '\t':\r
42                                 case '\n':\r
43                                         if (j == 0)\r
44                                                 break;\r
45                                         if (ca [j - 1] != ' ')\r
46                                                 ca [j++] = ' ';\r
47                                         break;\r
48                                 default:\r
49                                         ca [j++] = ca [i];\r
50                                         break;\r
51                                 }\r
52                         }\r
53                         if (j == 0)\r
54                                 return String.Empty;\r
55                         string r = new string (ca, 0, (ca [j - 1] != ' ') ? j : j - 1);\r
56                         return r;\r
57                 }\r
58 \r
59                 public static bool IsWhitespace (string s)\r
60                 {\r
61                         for (int i = 0; i < s.Length; i++) {\r
62                                 switch (s [i]) {\r
63                                 case ' ':\r
64                                 case '\t':\r
65                                 case '\n':\r
66                                 case '\r':\r
67                                         continue;\r
68                                 default:\r
69                                         return false;\r
70                                 }\r
71                         }\r
72                         return true;\r
73                 }\r
74         }\r
75 }\r
76 \r