corrade-vassal – Diff between revs 13 and 16

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 13 Rev 16
1 /////////////////////////////////////////////////////////////////////////// 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 // 2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // 3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. // 4 // rights of fair usage, the disclaimer and warranty conditions. //
5 /////////////////////////////////////////////////////////////////////////// 5 ///////////////////////////////////////////////////////////////////////////
-   6  
6   7 using System;
7 using System.Collections.Generic; 8 using System.Collections.Generic;
-   9 using System.Linq;
8 using System.Linq; 10 using System.Linq.Expressions;
-   11 using System.Text;
9 using System.Text; 12 using System.Text.RegularExpressions;
-   13 using System.Threading.Tasks;
10 using System.Threading.Tasks; 14 using System.Xml.Linq;
11   15  
12 namespace wasSharp 16 namespace wasSharp
13 { 17 {
14 public class XML 18 public static class XML
15 { 19 {
-   20 private static readonly Func<string, bool> directIsSafeXML =
-   21 ((Expression<Func<string, bool>>)
-   22 (data =>
-   23 Regex.Replace(data,
-   24 @"(" + string.Join("|", @"&amp;", @"&lt;", @"&gt;", @"&quot;", @"&apos;") + @")",
-   25 @"", RegexOptions.IgnoreCase | RegexOptions.Multiline)
-   26 .IndexOfAny(new[] {'&', '<', '>', '"', '\''})
-   27 .Equals(-1))).Compile();
-   28  
16 /////////////////////////////////////////////////////////////////////////// 29 ///////////////////////////////////////////////////////////////////////////
17 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 // 30 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
18 /////////////////////////////////////////////////////////////////////////// 31 ///////////////////////////////////////////////////////////////////////////
19 /// <summary> 32 /// <summary>
20 /// Unescapes a string used in XML. 33 /// Unescapes a string used in XML.
21 /// </summary> 34 /// </summary>
22 /// <param name="s">the string to unescape</param> 35 /// <param name="s">the string to unescape</param>
23 /// <returns>an XML unescaped string</returns> 36 /// <returns>an XML unescaped string</returns>
24 public static string UnescapeXML(string s) 37 public static string UnescapeXML(string s)
25 { 38 {
26 Queue<char> t = new Queue<char>(); 39 var t = new Queue<char>();
27 StringBuilder m = new StringBuilder(); 40 var m = new StringBuilder();
28 foreach (char c in s) 41 foreach (var c in s)
29 { 42 {
30 switch (c) 43 switch (c)
31 { 44 {
32 case '&': 45 case '&':
33 if (!t.Count.Equals(0)) 46 if (!t.Count.Equals(0))
34 { 47 {
35 m.Append(string.Join("", t.ToArray())); 48 m.Append(string.Join("", t.ToArray()));
36 t.Clear(); 49 t.Clear();
37 } 50 }
38 t.Enqueue(c); 51 t.Enqueue(c);
39 break; 52 break;
40 case ';': 53 case ';':
41 if (!t.Count.Equals(0)) 54 if (!t.Count.Equals(0))
42 { 55 {
43 t.Enqueue(c); 56 t.Enqueue(c);
44 string special = string.Join("", t.ToArray()); 57 var special = string.Join("", t.ToArray());
45 switch (special) 58 switch (special)
46 { 59 {
47 case "&apos;": 60 case "&apos;":
48 m.Append('\''); 61 m.Append('\'');
49 break; 62 break;
50 case "&quot;": 63 case "&quot;":
51 m.Append('"'); 64 m.Append('"');
52 break; 65 break;
53 case "&gt;": 66 case "&gt;":
54 m.Append('>'); 67 m.Append('>');
55 break; 68 break;
56 case "&lt;": 69 case "&lt;":
57 m.Append('<'); 70 m.Append('<');
58 break; 71 break;
59 case "&amp;": 72 case "&amp;":
60 m.Append('&'); 73 m.Append('&');
61 break; 74 break;
62 default: // Unrecognized escape sequence 75 default: // Unrecognized escape sequence
63 m.Append(special); 76 m.Append(special);
64 break; 77 break;
65 } 78 }
66 t.Clear(); 79 t.Clear();
67 break; 80 break;
68 } 81 }
69 m.Append(c); 82 m.Append(c);
70 break; 83 break;
71 default: 84 default:
72 if (!t.Count.Equals(0)) 85 if (!t.Count.Equals(0))
73 { 86 {
74 t.Enqueue(c); 87 t.Enqueue(c);
75 if (t.Count >= 6) 88 if (t.Count >= 6)
76 { 89 {
77 m.Append(string.Join("", t.ToArray())); 90 m.Append(string.Join("", t.ToArray()));
78 t.Clear(); 91 t.Clear();
79 } 92 }
80 break; 93 break;
81 } 94 }
82 m.Append(c); 95 m.Append(c);
83 break; 96 break;
84 } 97 }
85 } 98 }
86 return m.ToString(); 99 return m.ToString();
87 } 100 }
88   101  
89 /////////////////////////////////////////////////////////////////////////// 102 ///////////////////////////////////////////////////////////////////////////
90 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 // 103 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
91 /////////////////////////////////////////////////////////////////////////// 104 ///////////////////////////////////////////////////////////////////////////
92 /// <summary> 105 /// <summary>
93 /// Escapes a string to be used in XML. 106 /// Escapes a string to be used in XML.
94 /// </summary> 107 /// </summary>
95 /// <param name="s">the string to escape</param> 108 /// <param name="s">the string to escape</param>
96 /// <returns>an XML escaped string</returns> 109 /// <returns>an XML escaped string</returns>
97 public static string EscapeXML(string s) 110 public static string EscapeXML(string s)
98 { 111 {
99 if (string.IsNullOrEmpty(s)) return s; 112 if (string.IsNullOrEmpty(s)) return s;
100   113  
101 string[] result = new string[s.Length]; 114 var result = new string[s.Length];
102 Parallel.ForEach(Enumerable.Range(0, s.Length), o => 115 Parallel.ForEach(Enumerable.Range(0, s.Length), o =>
103 { 116 {
104 switch (s[o]) 117 switch (s[o])
105 { 118 {
106 case '&': 119 case '&':
107 result[o] = @"&amp;"; 120 result[o] = @"&amp;";
108 break; 121 break;
109 case '<': 122 case '<':
110 result[o] = @"&lt;"; 123 result[o] = @"&lt;";
111 break; 124 break;
112 case '>': 125 case '>':
113 result[o] = @"&gt;"; 126 result[o] = @"&gt;";
114 break; 127 break;
115 case '"': 128 case '"':
116 result[o] = @"&quot;"; 129 result[o] = @"&quot;";
117 break; 130 break;
118 case '\'': 131 case '\'':
119 result[o] = @"&apos;"; 132 result[o] = @"&apos;";
120 break; 133 break;
121 default: 134 default:
122 result[o] = s[o].ToString(); 135 result[o] = s[o].ToString();
123 break; 136 break;
124 } 137 }
125 }); 138 });
126 return string.Join("", result); 139 return string.Join("", result);
127 } 140 }
-   141  
-   142 ///////////////////////////////////////////////////////////////////////////
-   143 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
-   144 ///////////////////////////////////////////////////////////////////////////
-   145 /// <summary>
-   146 /// Determines whether a string is safe to use in XML
-   147 /// </summary>
-   148 /// <param name="data">the string to check</param>
-   149 /// <returns>true in case the string is safe</returns>
-   150 public static bool IsSafeXML(string data)
-   151 {
-   152 return directIsSafeXML(data);
-   153 }
-   154  
-   155 ///////////////////////////////////////////////////////////////////////////
-   156 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
-   157 ///////////////////////////////////////////////////////////////////////////
-   158 /// <summary>
-   159 /// Recursively rename a node by name.
-   160 /// </summary>
-   161 /// <param name="root">the root from where to start</param>
-   162 /// <param name="name">the name to replace</param>
-   163 /// <param name="rename">the name to replace with</param>
-   164 public static void RenameNodes(XElement root, string name, string rename)
-   165 {
-   166 if (root.Name.LocalName.Equals(name))
-   167 {
-   168 root.Name = rename;
-   169 }
-   170  
-   171 foreach (var xElement in root.Elements())
-   172 {
-   173 RenameNodes(xElement, name, rename);
-   174 }
-   175 }
128 } 176 }
129 } 177 }
130   178  
131
Generated by GNU Enscript 1.6.5.90.
179
Generated by GNU Enscript 1.6.5.90.
132   180  
133   181  
134   182