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()); }
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); }
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(); } } }
public void Add(IEntity o, ClilocLNG lng) { if (o != null && Opl != null && o != Opl.Entity) { AddRange(o.GetOPLStrings(lng)); } }
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()); }
public ClilocData(ClilocLNG lng, int index, long offset, long length) { Language = lng; Index = index; Offset = offset; Length = length; }
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); }
public void Add(ObjectPropertyList opl, ClilocLNG lng) { if (opl != null && opl != Opl && opl.Entity != Opl.Entity) { AddRange(opl.GetAllLines(lng)); } }
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(); } } }
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); }
public ClilocInfo(ClilocLNG lng, int index, string text) { Language = lng; Index = index; Text = text; InvalidateArgs(); }
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); } }
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)); }
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); }
public unsafe ClilocInfo GetCliloc(ClilocLNG lng, int index) { if (_Tables.ContainsKey(lng) && _Tables[lng] != null) { return(_Tables[lng].Lookup(index)); } return(null); }
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); }
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); }
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)); }
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); }
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>(); }
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>()); }
public static string GetOPLHeader(this IEntity e, ClilocLNG lng) { var opl = GetOPL(e); if (opl != null) { return(opl.DecodePropertyListHeader(lng)); } return(String.Empty); }
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()); }
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)); }
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); } }
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); })); }
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); }
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); })); }
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; }
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); }
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(); }
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); }
/// <summary> /// Default constructor /// </summary> public LanguagePack(ClilocLNG lng = ClilocLNG.ENU) { Language = lng; }
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); }
public static string GetOPLString(this IEntity e, ClilocLNG lng) { return String.Join("\n", GetOPLStrings(e, lng)); }
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; }
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; }
public ClilocInfo(ClilocLNG lng, int index, string text) { Language = lng; Index = index; Text = text; }
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(); }
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); }