123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using System;
- using System.Text;
- namespace FairyGUI.Utils
- {
-
-
-
- public class XMLUtils
- {
- public static string DecodeString(string aSource)
- {
- int len = aSource.Length;
- StringBuilder sb = new StringBuilder();
- int pos1 = 0, pos2 = 0;
- while (true)
- {
- pos2 = aSource.IndexOf('&', pos1);
- if (pos2 == -1)
- {
- sb.Append(aSource.Substring(pos1));
- break;
- }
- sb.Append(aSource.Substring(pos1, pos2 - pos1));
- pos1 = pos2 + 1;
- pos2 = pos1;
- int end = Math.Min(len, pos2 + 10);
- for (; pos2 < end; pos2++)
- {
- if (aSource[pos2] == ';')
- break;
- }
- if (pos2 < end && pos2 > pos1)
- {
- string entity = aSource.Substring(pos1, pos2 - pos1);
- int u = 0;
- if (entity[0] == '#')
- {
- if (entity.Length > 1)
- {
- if (entity[1] == 'x')
- u = Convert.ToInt16(entity.Substring(2), 16);
- else
- u = Convert.ToInt16(entity.Substring(1));
- sb.Append((char)u);
- pos1 = pos2 + 1;
- }
- else
- sb.Append('&');
- }
- else
- {
- switch (entity)
- {
- case "amp":
- u = 38;
- break;
- case "apos":
- u = 39;
- break;
- case "gt":
- u = 62;
- break;
- case "lt":
- u = 60;
- break;
- case "nbsp":
- u = 32;
- break;
- case "quot":
- u = 34;
- break;
- }
- if (u > 0)
- {
- sb.Append((char)u);
- pos1 = pos2 + 1;
- }
- else
- sb.Append('&');
- }
- }
- else
- {
- sb.Append('&');
- }
- }
- return sb.ToString();
- }
- private static string[] ESCAPES = new string[] {
- "&", "&",
- "<", "<",
- ">", ">",
- "'", "'",
- "\"", """,
- "\t", "	",
- "\n", "
",
- "\r", "
"
- };
- public static void EncodeString(StringBuilder sb, int start, bool isAttribute = false)
- {
- int count;
- int len = isAttribute ? ESCAPES.Length : 6;
- for (int i = 0; i < len; i += 2)
- {
- count = sb.Length - start;
- sb.Replace(ESCAPES[i], ESCAPES[i + 1], start, count);
- }
- }
- public static string EncodeString(string str, bool isAttribute = false)
- {
- if (string.IsNullOrEmpty(str))
- return "";
- else
- {
- StringBuilder sb = new StringBuilder(str);
- EncodeString(sb, 0);
- return sb.ToString();
- }
- }
- }
- }
|