Пример #1
0
        public static string[] DecodePropertyList(this ObjectPropertyList list, ClilocLNG lng)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            int length;
            var data = list.Compile(false, out length);
            var msgs = new List <string>();

            var reader = new PacketReader(data, length, false);

            reader.Seek(15, SeekOrigin.Begin);

            for (int i = 15; i < data.Length - 4;)
            {
                int index       = reader.ReadInt32();
                int paramLength = reader.ReadInt16() / 2;

                string param = String.Empty;

                if (paramLength > 0)
                {
                    param = reader.ReadUnicodeStringLE(paramLength);
                }

                msgs.Add(GetString(lng, index, param));

                i += (6 + paramLength);
            }

            return(msgs.ToArray());
        }
Пример #2
0
        public static string GetFullName(this Mobile m, bool html, ClilocLNG lng)
        {
            if (m == null)
            {
                return(String.Empty);
            }

            var name = m.GetOPLHeader(lng);

            if (!String.IsNullOrEmpty(name))
            {
                name = name.Replace("\t", " ").Replace("\u0009", " ").Replace("<br>", "\n").Replace("<BR>", "\n");
            }

            if (String.IsNullOrWhiteSpace(name) && m.Name != null)
            {
                name = m.Name;
            }

            if (!String.IsNullOrWhiteSpace(name) && !html)
            {
                name = name.StripHtml(false);
            }

            if (!String.IsNullOrEmpty(name))
            {
                name = name.StripExcessWhiteSpace().Trim();
            }

            return(name);
        }
Пример #3
0
        public static string GetOPLHeader(this IEntity e, ClilocLNG lng)
        {
            ObjectPropertyList opl = null;

            try
            {
                opl = GetOPL(e, true);

                if (opl != null)
                {
                    return(opl.DecodePropertyListHeader(lng));
                }

                return(String.Empty);
            }
            catch
            {
                return(String.Empty);
            }
            finally
            {
                if (opl != null)
                {
                    opl.Release();
                }
            }
        }
Пример #4
0
 public void Add(IEntity o, ClilocLNG lng)
 {
     if (o != null && Opl != null && o != Opl.Entity)
     {
         AddRange(o.GetOPLStrings(lng));
     }
 }
Пример #5
0
        public static string ToFullString(this ClilocLNG lng)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = Clilocs.DefaultLanguage;
            }

            switch (lng)
            {
            case ClilocLNG.ENU:
                return("English");

            case ClilocLNG.DEU:
                return("German");

            case ClilocLNG.ESP:
                return("Spanish");

            case ClilocLNG.FRA:
                return("French");

            case ClilocLNG.JPN:
                return("Japanese");

            case ClilocLNG.KOR:
                return("Korean");

            case ClilocLNG.CHT:
                return("Chinese");
            }

            return(lng.ToString());
        }
Пример #6
0
		public ClilocData(ClilocLNG lng, int index, long offset, long length)
		{
			Language = lng;
			Index = index;
			Offset = offset;
			Length = length;
		}
Пример #7
0
 public ClilocData(ClilocLNG lng, int index, long offset, long length)
 {
     Language = lng;
     Index    = index;
     Offset   = offset;
     Length   = length;
 }
Пример #8
0
        public static string ResolveName(this Item item, ClilocLNG lng = ClilocLNG.ENU, bool setIfNull = false)
        {
            if (item == null)
            {
                return(String.Empty);
            }

            if (item.Name != null)
            {
                return(item.Name);
            }

            string label = item.DefaultName;

            if (String.IsNullOrWhiteSpace(label) && item.LabelNumber > 0)
            {
                label = lng.GetString(item.LabelNumber);
            }

            if (String.IsNullOrWhiteSpace(label) && TileData.ItemTable.InBounds(item.ItemID))
            {
                label = TileData.ItemTable[item.ItemID].Name;
            }

            if (String.IsNullOrWhiteSpace(label))
            {
                label = item.GetType().Name.SpaceWords();
            }

            return(setIfNull ? (item.Name = label) : label);
        }
Пример #9
0
 public void Add(ObjectPropertyList opl, ClilocLNG lng)
 {
     if (opl != null && opl != Opl && opl.Entity != Opl.Entity)
     {
         AddRange(opl.GetAllLines(lng));
     }
 }
Пример #10
0
        public static IEnumerable <string> GetOPLStrings(this IEntity e, ClilocLNG lng)
        {
            ObjectPropertyList opl = null;

            try
            {
                opl = GetOPL(e);

                if (opl != null)
                {
                    return(opl.DecodePropertyList(lng));
                }

                return(Enumerable.Empty <string>());
            }
            catch
            {
                return(Enumerable.Empty <string>());
            }
            finally
            {
                if (opl != null)
                {
                    opl.Release();
                }
            }
        }
Пример #11
0
        public static string DecodePropertyListHeader(this ObjectPropertyList list, ClilocLNG lng)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            var header = String.Empty;

            try
            {
                var data = list.UnderlyingStream.UnderlyingStream.ToArray();

                var index = 15;

                while (index + 4 < data.Length)
                {
                    var id = data[index++] << 24 | data[index++] << 16 | data[index++] << 8 | data[index++];

                    if (index + 2 > data.Length)
                    {
                        break;
                    }

                    var paramLength = data[index++] << 8 | data[index++];

                    var param = String.Empty;

                    if (paramLength > 0)
                    {
                        var terminate = index + paramLength;

                        if (terminate >= data.Length)
                        {
                            terminate = data.Length - 1;
                        }

                        while (index + 2 <= terminate + 1)
                        {
                            var peek = (short)(data[index++] | data[index++] << 8);

                            if (peek == 0)
                            {
                                break;
                            }

                            param += Encoding.Unicode.GetString(BitConverter.GetBytes(peek));
                        }
                    }

                    header = GetString(lng, id, param) ?? String.Empty;
                    break;
                }
            }
            catch
            { }

            return(header);
        }
Пример #12
0
        public ClilocInfo(ClilocLNG lng, int index, string text)
        {
            Language = lng;
            Index    = index;
            Text     = text;

            InvalidateArgs();
        }
Пример #13
0
		public ClilocInfo(ClilocLNG lng, int index, string text)
		{
			Language = lng;
			Index = index;
			Text = text;

			InvalidateArgs();
		}
Пример #14
0
        public static ClilocInfo Lookup(this ClilocLNG lng, Type t)
        {
            if (t == null)
            {
                return(null);
            }

            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            try
            {
                int index;

                if (_TypeCache.TryGetValue(t, out index))
                {
                    if (index < 0)
                    {
                        return(null);
                    }

                    return(Lookup(lng, index));
                }

                if (!_LabelNumberProp.IsSupported(t, typeof(int)))
                {
                    return(null);
                }

                var o = t.CreateInstanceSafe <object>();

                if (o != null)
                {
                    index = (int)_LabelNumberProp.GetValue(o, -1);                     // LabelNumber_get()

                    o.CallMethod("Delete");
                }
                else
                {
                    index = -1;
                }

                _TypeCache[t] = index;

                if (index < 0)
                {
                    return(null);
                }

                return(Lookup(lng, index));
            }
            catch
            {
                return(null);
            }
        }
Пример #15
0
        public static string GetString(this TextDefinition text, ClilocLNG lng)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            return(text.Number > 0 ? GetString(lng, text.Number) : (text.String ?? String.Empty));
        }
Пример #16
0
        public unsafe string GetRawString(ClilocLNG lng, int index)
        {
            if (_Tables.ContainsKey(lng) && _Tables[lng] != null && !_Tables[lng].IsNullOrEmpty(index))
            {
                return(_Tables[lng][index].Text);
            }

            return(String.Empty);
        }
Пример #17
0
        public unsafe ClilocInfo GetCliloc(ClilocLNG lng, int index)
        {
            if (_Tables.ContainsKey(lng) && _Tables[lng] != null)
            {
                return(_Tables[lng].Lookup(index));
            }

            return(null);
        }
Пример #18
0
        public static ClilocInfo Lookup(this ClilocLNG lng, int index)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            return(Tables.ContainsKey(lng) && Tables[lng] != null ? Tables[lng].Lookup(index) : null);
        }
Пример #19
0
        public static string[] GetBody(this ObjectPropertyList list, ClilocLNG lng)
        {
            var lines = GetAllLines(list, lng);

            var body = new string[lines.Length - 1];

            Array.Copy(lines, 1, body, 0, body.Length);

            return(body);
        }
Пример #20
0
        public unsafe string GetString(ClilocLNG lng, int index, string args)
        {
            ClilocInfo info = GetCliloc(lng, index);

            if (info == null)
            {
                return(String.Empty);
            }

            return(info.ToString(args));
        }
Пример #21
0
        public static string GetRawString(this ClilocLNG lng, int index)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            return(Tables.ContainsKey(lng) && Tables[lng] != null && !Tables[lng].IsNullOrWhiteSpace(index)
                                           ? Tables[lng][index].Text
                                           : String.Empty);
        }
Пример #22
0
		public static IEnumerable<string> GetOPLStrings(this IEntity e, ClilocLNG lng)
		{
			var opl = GetOPL(e);

			if (opl != null)
			{
				return opl.DecodePropertyList(lng);
			}

			return Enumerable.Empty<string>();
		}
Пример #23
0
        public static IEnumerable <string> GetOPLStrings(this IEntity e, ClilocLNG lng)
        {
            var opl = GetOPL(e);

            if (opl != null)
            {
                return(opl.DecodePropertyList(lng));
            }

            return(Enumerable.Empty <string>());
        }
Пример #24
0
        public static string GetOPLHeader(this IEntity e, ClilocLNG lng)
        {
            var opl = GetOPL(e);

            if (opl != null)
            {
                return(opl.DecodePropertyListHeader(lng));
            }

            return(String.Empty);
        }
Пример #25
0
        public static string GetString(this ClilocLNG lng, Type t)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            var info = Lookup(lng, t);

            return(info == null ? String.Empty : info.ToString());
        }
Пример #26
0
        public static string GetString(this ClilocLNG lng, int index, params object[] args)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            var info = Lookup(lng, index);

            return(info == null ? String.Empty : info.ToString(args));
        }
Пример #27
0
        public void Load(FileInfo file)
        {
            if (Loaded)
            {
                return;
            }

            try
            {
                ClilocLNG lng = ClilocLNG.NULL;

                if (!Enum.TryParse <ClilocLNG>(file.Extension.TrimStart('.'), true, out lng))
                {
                    throw new FileLoadException("Could not detect language for: " + file.FullName);
                }

                Language  = lng;
                InputFile = file;

                using (BinaryReader reader = new BinaryReader(InputFile.OpenRead(), Encoding.UTF8))
                {
                    long size = reader.BaseStream.Seek(0, SeekOrigin.End);
                    reader.BaseStream.Seek(0, SeekOrigin.Begin);

                    reader.ReadInt32();
                    reader.ReadInt16();

                    while (reader.BaseStream.Position < size)
                    {
                        int index = reader.ReadInt32();
                        reader.ReadByte();
                        int  length = reader.ReadInt16();
                        long offset = reader.BaseStream.Position;
                        reader.BaseStream.Seek(length, SeekOrigin.Current);

                        if (_Table.ContainsKey(index))
                        {
                            _Table[index] = new ClilocData(Language, index, offset, length);
                        }
                        else
                        {
                            _Table.Add(index, new ClilocData(Language, index, offset, length));
                        }
                    }
                }

                Loaded = true;
            }
            catch (Exception e)
            {
                Tracer.Error(e);
            }
        }
Пример #28
0
        public static ClilocInfo Lookup(this ClilocLNG lng, Type t)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            int index;

            if (_TypeCache.TryGetValue(t, out index))
            {
                return(Lookup(lng, index));
            }

            return(VitaNexCore.TryCatchGet(
                       () =>
            {
                if (t == null)
                {
                    return null;
                }

                if (!_LabelNumberProp.IsSupported(t, typeof(int)))
                {
                    return null;
                }

                var o = t.CreateInstanceSafe <object>();

                if (o == null)
                {
                    return null;
                }

                index = (int)_LabelNumberProp.GetValue(o, -1);                         // LabelNumber_get()

                var m = t.GetMethod("Delete");

                if (m != null)
                {
                    m.Invoke(o, new object[0]);                             // Delete_call()
                }

                _TypeCache.Add(t, index);

                return Lookup(lng, index);
            }));
        }
Пример #29
0
        public static ClilocInfo Lookup(this ClilocLNG lng, int index)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            if (Tables.ContainsKey(lng) && Tables[lng] != null && !Tables[lng].IsNullOrWhiteSpace(index))
            {
                return(Tables[lng][index]);
            }

            if (lng != ClilocLNG.ENU)
            {
                return(Lookup(ClilocLNG.ENU, index));
            }

            return(null);
        }
Пример #30
0
        public static ClilocInfo Lookup(this ClilocLNG lng, Type t)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            return(VitaNexCore.TryCatchGet(
                       () =>
            {
                if (t == null)
                {
                    return null;
                }

                PropertyInfo p = t.GetProperty("LabelNumber");

                if (p == null || !p.CanRead)
                {
                    return null;
                }

                object o = t.CreateInstanceSafe <object>();

                if (o == null)
                {
                    return null;
                }

                var index = (int)p.GetValue(o, null);                         // LabelNumber_get()

                MethodInfo m = t.GetMethod("Delete");

                if (m != null)
                {
                    m.Invoke(o, new object[0]);                             // Delete_call()
                }

                return Lookup(lng, index);
            }));
        }
Пример #31
0
		public static FileInfo Export(ClilocLNG lng)
		{
			if (lng == ClilocLNG.NULL)
			{
				lng = DefaultLanguage;
			}

			var list = new XmlDataStore<int, ClilocData>(VitaNexCore.DataDirectory + "/Exported Clilocs/", lng.ToString());
			ClilocTable table = Tables[lng];

			list.OnSerialize = doc =>
			{
				XmlNode node;
				XmlCDataSection cdata;
				ClilocInfo info;

				XmlNode root = doc.CreateElement("clilocs");

				XmlAttribute attr = doc.CreateAttribute("len");
				attr.Value = table.Count.ToString(CultureInfo.InvariantCulture);

				if (root.Attributes != null)
				{
					root.Attributes.Append(attr);
				}

				attr = doc.CreateAttribute("lng");
				attr.Value = table.Language.ToString();

				if (root.Attributes != null)
				{
					root.Attributes.Append(attr);
				}

				foreach (ClilocData d in table.Where(d => d.Length > 0))
				{
					info = d.Lookup(table.InputFile, true);

					if (info == null || String.IsNullOrWhiteSpace(info.Text))
					{
						continue;
					}

					node = doc.CreateElement("cliloc");

					attr = doc.CreateAttribute("idx");
					attr.Value = d.Index.ToString(CultureInfo.InvariantCulture);

					if (node.Attributes != null)
					{
						node.Attributes.Append(attr);
					}

					attr = doc.CreateAttribute("len");
					attr.Value = d.Length.ToString(CultureInfo.InvariantCulture);

					if (node.Attributes != null)
					{
						node.Attributes.Append(attr);
					}

					cdata = doc.CreateCDataSection(info.Text);
					node.AppendChild(cdata);

					root.AppendChild(node);
				}

				doc.AppendChild(root);
				table.Clear();

				return true;
			};

			list.Export();
			list.Clear();

			return list.Document;
		}
Пример #32
0
		public static string GetString(this TextDefinition text, ClilocLNG lng)
		{
			if (lng == ClilocLNG.NULL)
			{
				lng = DefaultLanguage;
			}

			return text.Number > 0 ? lng.GetString(text.Number) : (text.String ?? String.Empty);
		}
Пример #33
0
		public static string[] DecodePropertyList(this ObjectPropertyList list, ClilocLNG lng)
		{
			if (lng == ClilocLNG.NULL)
			{
				lng = DefaultLanguage;
			}

			int length;
			var data = list.Compile(false, out length);
			var msgs = new List<string>();

			var reader = new PacketReader(data, length, false);
			reader.Seek(15, SeekOrigin.Begin);

			for (int i = 15; i < data.Length - 4;)
			{
				int index = reader.ReadInt32();
				int paramLength = reader.ReadInt16() / 2;

				string param = String.Empty;

				if (paramLength > 0)
				{
					param = reader.ReadUnicodeStringLE(paramLength);
				}

				msgs.Add(GetString(lng, index, param));

				i += (6 + paramLength);
			}

			return msgs.ToArray();
		}
Пример #34
0
        public static string ResolveName(this Item item, ClilocLNG lng = ClilocLNG.ENU, bool setIfNull = false)
        {
            if (item == null)
            {
                return(String.Empty);
            }

            var opl = item.PropertyList;

            if (opl == null)
            {
                opl = new ObjectPropertyList(item);

                item.GetProperties(opl);
            }

            var label = opl.GetHeader();

            if (!String.IsNullOrEmpty(label))
            {
                label = label.Replace("\t", " ").Replace("\u0009", " ").Replace("<br>", "\n").Replace("<BR>", "\n");
            }

            if (!String.IsNullOrEmpty(label))
            {
                var idx = label.IndexOf('\n');

                if (idx >= 0)
                {
                    label = label.Substring(0, label.Length - idx);
                }

                label = label.StripHtml(false);
                label = label.Trim();

                idx = 0;

                while (idx < label.Length)
                {
                    if (Char.IsNumber(label, idx))
                    {
                        ++idx;
                    }
                    else if (Char.IsPunctuation(label, idx) && idx + 1 < label.Length && Char.IsNumber(label, idx + 1))
                    {
                        ++idx;
                    }
                    else
                    {
                        break;
                    }
                }

                if (idx > 0)
                {
                    label = label.Substring(idx);
                    label = label.Trim();
                }
            }

            if (String.IsNullOrWhiteSpace(label) && item.Name != null)
            {
                label = item.Name;
            }

            if (String.IsNullOrWhiteSpace(label) && item.DefaultName != null)
            {
                label = item.DefaultName;
            }

            if (String.IsNullOrWhiteSpace(label) && item.LabelNumber > 0)
            {
                label = lng.GetString(item.LabelNumber);
            }

            if (String.IsNullOrWhiteSpace(label) && TileData.ItemTable.InBounds(item.ItemID))
            {
                label = TileData.ItemTable[item.ItemID].Name;
            }

            if (String.IsNullOrWhiteSpace(label))
            {
                label = item.GetType().Name.SpaceWords();
            }

            if (!String.IsNullOrEmpty(label))
            {
                label = label.StripExcessWhiteSpace().Trim();
            }

            return(setIfNull ? (item.Name = label) : label);
        }
Пример #35
0
		/// <summary>
		///     Default constructor
		/// </summary>
		public LanguagePack(ClilocLNG lng = ClilocLNG.ENU)
		{
			Language = lng;
		}
Пример #36
0
        public static string[] DecodePropertyList(this ObjectPropertyList list, ClilocLNG lng)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            var msgs = new List <string>(10);

            try
            {
                var data = list.UnderlyingStream.UnderlyingStream.ToArray();

                var index = 15;

                while (index + 4 < data.Length)
                {
                    var id = data[index++] << 24 | data[index++] << 16 | data[index++] << 8 | data[index++];

                    if (index + 2 > data.Length)
                    {
                        break;
                    }

                    var paramLength = data[index++] << 8 | data[index++];

                    var param = String.Empty;

                    if (paramLength > 0)
                    {
                        var terminate = index + paramLength;

                        if (terminate >= data.Length)
                        {
                            terminate = data.Length - 1;
                        }

                        while (index + 2 <= terminate + 1)
                        {
                            var peek = (short)(data[index++] | data[index++] << 8);

                            if (peek == 0)
                            {
                                break;
                            }

                            param += Encoding.Unicode.GetString(BitConverter.GetBytes(peek));
                        }
                    }

                    msgs.Add(GetString(lng, id, param) ?? String.Empty);
                }

                var join = String.Join("\n", msgs);

                msgs.Clear();
                msgs.AddRange(join.Split('\n'));
            }
            catch
            { }

            var arr = msgs.ToArray();

            msgs.Free(true);

            return(arr);
        }
Пример #37
0
		public static string GetOPLString(this IEntity e, ClilocLNG lng)
		{
			return String.Join("\n", GetOPLStrings(e, lng));
		}
Пример #38
0
		public static string[] DecodePropertyList(this ObjectPropertyList list, ClilocLNG lng)
		{
			if (lng == ClilocLNG.NULL)
			{
				lng = DefaultLanguage;
			}

			var msgs = new List<string>(10);

			try
			{
				var data = list.UnderlyingStream.UnderlyingStream.ToArray();

				var index = 15;

				while (index + 4 < data.Length)
				{
					var id = data[index++] << 24 | data[index++] << 16 | data[index++] << 8 | data[index++];

					if (index + 2 > data.Length)
					{
						break;
					}

					var paramLength = data[index++] << 8 | data[index++];

					var param = String.Empty;

					if (paramLength > 0)
					{
						var terminate = index + paramLength;

						if (terminate >= data.Length)
						{
							terminate = data.Length - 1;
						}

						while (index + 2 <= terminate + 1)
						{
							var peek = (short)(data[index++] | data[index++] << 8);

							if (peek == 0)
							{
								break;
							}

							param += Encoding.Unicode.GetString(BitConverter.GetBytes(peek));
						}
					}

					msgs.Add(GetString(lng, id, param) ?? String.Empty);
				}

				var join = String.Join("\n", msgs);

				msgs.Clear();
				msgs.AddRange(join.Split('\n'));
			}
			catch
			{ }

			var arr = msgs.ToArray();

			msgs.Free(true);

			return arr;
		}
Пример #39
0
		public static string DecodePropertyListHeader(this ObjectPropertyList list, ClilocLNG lng)
		{
			if (lng == ClilocLNG.NULL)
			{
				lng = DefaultLanguage;
			}

			var header = String.Empty;

			try
			{
				var data = list.UnderlyingStream.UnderlyingStream.ToArray();

				var index = 15;

				while (index + 4 < data.Length)
				{
					var id = data[index++] << 24 | data[index++] << 16 | data[index++] << 8 | data[index++];

					if (index + 2 > data.Length)
					{
						break;
					}

					var paramLength = data[index++] << 8 | data[index++];

					var param = String.Empty;

					if (paramLength > 0)
					{
						var terminate = index + paramLength;

						if (terminate >= data.Length)
						{
							terminate = data.Length - 1;
						}

						while (index + 2 <= terminate + 1)
						{
							var peek = (short)(data[index++] | data[index++] << 8);

							if (peek == 0)
							{
								break;
							}

							param += Encoding.Unicode.GetString(BitConverter.GetBytes(peek));
						}
					}

					header = GetString(lng, id, param) ?? String.Empty;
					break;
				}
			}
			catch
			{ }

			return header;
		}
Пример #40
0
 public ClilocInfo(ClilocLNG lng, int index, string text)
 {
     Language = lng;
     Index = index;
     Text = text;
 }
Пример #41
0
		public static string[] DecodePropertyList(this ObjectPropertyList list, ClilocLNG lng)
		{
			if (lng == ClilocLNG.NULL)
			{
				lng = DefaultLanguage;
			}

			var msgs = new List<string>();

			try
			{
				var data = list.UnderlyingStream.UnderlyingStream.ToArray();

				int index = 15;

				while (index + 4 < data.Length)
				{
					int id = data[index++] << 24 | data[index++] << 16 | data[index++] << 8 | data[index++];

					if (index + 2 > data.Length)
					{
						break;
					}

					int paramLength = data[index++] << 8 | data[index++];

					string param = String.Empty;

					if (paramLength > 0)
					{
						int terminate = index + paramLength;

						if (terminate >= data.Length)
						{
							terminate = data.Length - 1;
						}

						while (index + 2 <= terminate + 1)
						{
							short peek = (short)(data[index++] | data[index++] << 8);

							if (peek == 0)
							{
								break;
							}

							param += Encoding.Unicode.GetString(BitConverter.GetBytes(peek));
						}
					}

					string prop = GetString(lng, id, param);

					if (!String.IsNullOrWhiteSpace(prop))
					{
						msgs.Add(prop);
					}
				}
			}
			catch
			{ }

			return msgs.ToArray();
		}
Пример #42
0
        public static FileInfo Export(ClilocLNG lng)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            var list  = new XmlDataStore <int, ClilocData>(VitaNexCore.DataDirectory + "/Exported Clilocs/", lng.ToString());
            var table = Tables[lng];

            list.OnSerialize = doc =>
            {
                XmlNode         node;
                XmlCDataSection cdata;
                ClilocInfo      info;

                XmlNode root = doc.CreateElement("clilocs");

                var attr = doc.CreateAttribute("len");
                attr.Value = table.Count.ToString(CultureInfo.InvariantCulture);

                if (root.Attributes != null)
                {
                    root.Attributes.Append(attr);
                }

                attr       = doc.CreateAttribute("lng");
                attr.Value = table.Language.ToString();

                if (root.Attributes != null)
                {
                    root.Attributes.Append(attr);
                }

                foreach (var d in table.Where(d => d.Length > 0))
                {
                    info = d.Lookup(table.InputFile, true);

                    if (info == null || String.IsNullOrWhiteSpace(info.Text))
                    {
                        continue;
                    }

                    node = doc.CreateElement("cliloc");

                    attr       = doc.CreateAttribute("idx");
                    attr.Value = d.Index.ToString(CultureInfo.InvariantCulture);

                    if (node.Attributes != null)
                    {
                        node.Attributes.Append(attr);
                    }

                    attr       = doc.CreateAttribute("len");
                    attr.Value = d.Length.ToString(CultureInfo.InvariantCulture);

                    if (node.Attributes != null)
                    {
                        node.Attributes.Append(attr);
                    }

                    cdata = doc.CreateCDataSection(info.Text);
                    node.AppendChild(cdata);

                    root.AppendChild(node);
                }

                doc.AppendChild(root);
                table.Clear();

                return(true);
            };

            list.Export();
            list.Clear();

            return(list.Document);
        }