wasSharp – Blame information for rev 4

Subversion Repositories:
Rev:
Rev Author Line No. Line
4 zed 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. //
5 ///////////////////////////////////////////////////////////////////////////
6  
7 using System.Collections.Generic;
8 using System.Linq;
9 using System.Text;
10 using System.Threading.Tasks;
11  
12 namespace wasSharp
13 {
14 public class XML
15 {
16 ///////////////////////////////////////////////////////////////////////////
17 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
18 ///////////////////////////////////////////////////////////////////////////
19 /// <summary>
20 /// Unescapes a string used in XML.
21 /// </summary>
22 /// <param name="s">the string to unescape</param>
23 /// <returns>an XML unescaped string</returns>
24 public static string UnescapeXML(string s)
25 {
26 Queue<char> t = new Queue<char>();
27 StringBuilder m = new StringBuilder();
28 foreach (char c in s)
29 {
30 switch (c)
31 {
32 case '&':
33 if (!t.Count.Equals(0))
34 {
35 m.Append(string.Join("", t.ToArray()));
36 t.Clear();
37 }
38 t.Enqueue(c);
39 break;
40 case ';':
41 if (!t.Count.Equals(0))
42 {
43 t.Enqueue(c);
44 string special = string.Join("", t.ToArray());
45 switch (special)
46 {
47 case "&apos;":
48 m.Append('\'');
49 break;
50 case "&quot;":
51 m.Append('"');
52 break;
53 case "&gt;":
54 m.Append('>');
55 break;
56 case "&lt;":
57 m.Append('<');
58 break;
59 case "&amp;":
60 m.Append('&');
61 break;
62 default: // Unrecognized escape sequence
63 m.Append(special);
64 break;
65 }
66 t.Clear();
67 break;
68 }
69 m.Append(c);
70 break;
71 default:
72 if (!t.Count.Equals(0))
73 {
74 t.Enqueue(c);
75 if (t.Count >= 6)
76 {
77 m.Append(string.Join("", t.ToArray()));
78 t.Clear();
79 }
80 break;
81 }
82 m.Append(c);
83 break;
84 }
85 }
86 return m.ToString();
87 }
88  
89 ///////////////////////////////////////////////////////////////////////////
90 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
91 ///////////////////////////////////////////////////////////////////////////
92 /// <summary>
93 /// Escapes a string to be used in XML.
94 /// </summary>
95 /// <param name="s">the string to escape</param>
96 /// <returns>an XML escaped string</returns>
97 public static string EscapeXML(string s)
98 {
99 if (string.IsNullOrEmpty(s)) return s;
100  
101 string[] result = new string[s.Length];
102 Parallel.ForEach(Enumerable.Range(0, s.Length), o =>
103 {
104 switch (s[o])
105 {
106 case '&':
107 result[o] = @"&amp;";
108 break;
109 case '<':
110 result[o] = @"&lt;";
111 break;
112 case '>':
113 result[o] = @"&gt;";
114 break;
115 case '"':
116 result[o] = @"&quot;";
117 break;
118 case '\'':
119 result[o] = @"&apos;";
120 break;
121 default:
122 result[o] = s[o].ToString();
123 break;
124 }
125 });
126 return string.Join("", result);
127 }
128 }
129 }