private void ReadStrings(Stream s, Ofs3Data file) { file.StartOffset = s.Position; file.Padding = 0x04; var stringOffset = (int)s.Position; var value = new TFString { FileId = Id, Offset = stringOffset, Visible = false }; if (stringOffset != 0) { var str = s.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = SAOProject.ReadingReplacements(str); } value.Original = str; value.Translation = str; value.Visible = !string.IsNullOrWhiteSpace(str); } _strings.Add(value); }
private int WriteString(Stream s, TFString str, ExportOptions options) { var result = 0; var writeStr = str.Translation; if (str.Original.Equals(str.Translation)) { writeStr = JJMacfieldProject.WritingReplacements(writeStr); s.WriteStringZ(writeStr, Encoding); result = writeStr.GetLength(Encoding); } else { if (options.CharReplacement != 0) { writeStr = Utils.ReplaceChars(writeStr, options.CharReplacementList); } writeStr = JJMacfieldProject.WritingReplacements(writeStr); s.WriteStringZ(writeStr, options.SelectedEncoding); result = writeStr.GetLength(options.SelectedEncoding); } return(result); }
/// <summary> /// Creates a single-dimension tensor from a byte buffer. This is different than creating a tensor from a byte array that produces a tensor with as many elements as the byte array. /// </summary> public unsafe static TFTensor CreateString(byte [] buffer) { if (buffer == null) { throw new ArgumentNullException(nameof(buffer)); } // // TF_STRING tensors are encoded with a table of 8-byte offsets followed by // TF_StringEncode-encoded bytes. // var size = TFString.TF_StringEncodedSize((UIntPtr)buffer.Length); IntPtr handle = TF_AllocateTensor(TFDataType.String, IntPtr.Zero, 0, (UIntPtr)((ulong)size + 8)); // Clear offset table IntPtr dst = TF_TensorData(handle); Marshal.WriteInt64(dst, 0); var status = TFStatus.TF_NewStatus(); fixed(byte *src = &buffer[0]) { TFString.TF_StringEncode(src, (UIntPtr)buffer.Length, (sbyte *)(dst + 8), size, status); var ok = TFStatus.TF_GetCode(status) == TFCode.Ok; TFStatus.TF_DeleteStatus(status); if (!ok) { return(null); } } return(new TFTensor(handle)); }
public override void Read(Stream s) { _dataList = new List <TFString>(); s.Seek(0x24, SeekOrigin.Begin); var pointer1 = s.ReadValueS32(Endianness); if (pointer1 != -1) { s.Seek(pointer1, SeekOrigin.Begin); var pointer2 = s.ReadValueS32(Endianness); s.Seek(pointer2, SeekOrigin.Begin); var str = s.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = Yakuza0Project.ReadingReplacements(str); } var item = new TFString { FileId = Id, Offset = pointer2, Section = pointer1.ToString("X8"), Original = str, Translation = str, Visible = !string.IsNullOrEmpty(str.TrimEnd('\0')) }; _dataList.Add(item); } }
private TFString ReadString(Stream s) { var stringOffset = (int)s.Position; var value = new TFString { FileId = Id, Offset = stringOffset, Visible = false }; if (stringOffset != 0) { s.Seek(stringOffset, SeekOrigin.Begin); var str = s.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = ShenmueProject.ReadingReplacements(str); } value.Original = str; value.Translation = str; value.Visible = !string.IsNullOrWhiteSpace(str); } return(value); }
private TFString ReadString(Stream s) { var stringOffset = s.ReadValueS32(Endianness); var pos = s.Position; var value = new TFString { FileId = Id, Offset = stringOffset, Visible = false }; if (stringOffset != 0) { s.Seek(stringOffset, SeekOrigin.Begin); var str = s.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = Yakuza0Project.ReadingReplacements(str); value.Original = str; value.Translation = str; value.Visible = true; } } s.Seek(pos, SeekOrigin.Begin); return(value); }
private TFString ReadString(ItemData item, int index) { var stringOffset = item.Offset + index; var value = new TFString { FileId = Id, Offset = stringOffset, Visible = false }; var array = new byte[item.Size - index]; Array.Copy(item.BinaryContent, index, array, 0, array.Length); using (var ms = new MemoryStream(array)) { var str = ms.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = DisgaeaProject.ReadingReplacements(str); } value.Original = str; value.Translation = ReplaceToAscii(str); value.Visible = !string.IsNullOrWhiteSpace(str); } return(value); }
private void InsertPauses(TFString str, IList <short> pauses) { var strClean = RemoveTags(str.Original); var strPauses = AddPauses(strClean, pauses); var strResult = AddTags(strPauses, str.Original); str.Original = strResult; str.Translation = strResult; }
private int GetLength(TFString tfStr, ExportOptions options) { if (tfStr.Original == tfStr.Translation) { var temp = tfStr.Original.Replace("\\r\\n", "\r\n"); return(temp.GetLength(Encoding)); } else { var temp = tfStr.Translation.Replace("\\r\\n", "\r\n"); return(temp.GetLength(options.SelectedEncoding)); } }
private TFString ReadString(Stream s, uint length, string section) { var value = new TFString { FileId = Id, Offset = (int)s.Position, Visible = true, Section = section }; var str = s.ReadString(length, false, Encoding); str = Spellforce2Project.ReadingReplacements(str); value.Original = str; value.Translation = str; return(value); }
private int WriteItem(Stream s, int offset, TFString item, IList <TFString> strings, ExportOptions options) { var result = offset; if (item.Offset != 0) { s.WriteValueS32(result, Endianness); result = WriteString(s, result, item, strings, options); } else { s.WriteValueS32(0); } return(result); }
private void WriteProperties(Stream s, Item item, TFString tfStr) { if (tfStr.Original == tfStr.Translation) { foreach (var p in item.StringProperties) { s.WriteValueU16(p.Type, Endianness); s.WriteBytes(p.Unknown1); s.WriteBytes(p.Unknown2); s.WriteValueU16(p.Position, Endianness); s.WriteBytes(p.Unknown3); } } else { // Como la línea ha cambiado, las propiedades también var newProperties = new List <Property>(); if (item.HasPauses()) { var newPauses = ParsePauses(tfStr.Translation); foreach (var property in item.StringProperties) { if (!property.IsPause()) { newProperties.Add(property); } } newProperties.InsertRange(newProperties.Count - 1, newPauses); } else { foreach (var property in item.StringProperties) { newProperties.Add(property); } } foreach (var p in newProperties) { s.WriteValueU16(p.Type, Endianness); s.WriteBytes(p.Unknown1); s.WriteBytes(p.Unknown2); s.WriteValueU16(p.Position, Endianness); s.WriteBytes(p.Unknown3); } } }
private int WriteString(Stream s, int offset, TFString item, IList <TFString> strings, ExportOptions options) { var pos = s.Position; var result = offset; var tfString = strings.FirstOrDefault(x => x.Offset == item.Offset); s.Seek(offset, SeekOrigin.Begin); var str = tfString.Translation; if (!string.IsNullOrEmpty(str)) { if (!str.Equals(tfString.Original)) { if (options.CharReplacement != 0) { str = Utils.ReplaceChars(str, options.CharReplacementList); } str = Yakuza0Project.WritingReplacements(str); s.WriteStringZ(str, options.SelectedEncoding); result += str.GetLength(options.SelectedEncoding) + 1; } else { str = Yakuza0Project.WritingReplacements(str); s.WriteStringZ(str, Encoding); result += str.GetLength(Encoding) + 1; } } else { // Hay que escribir solo el 0 del final s.WriteString("\0"); result++; } s.Seek(pos, SeekOrigin.Begin); return(result); }
private TFString ReadString(string str) { var value = new TFString { FileId = Id, Offset = 0, Visible = false }; if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = NightCryProject.ReadingReplacements(str); } value.Original = str; value.Translation = str; value.Visible = !string.IsNullOrWhiteSpace(str); return(value); }
private int WriteString(Stream s, int offset, TFString tfString, ExportOptions options, bool writeZero) { var result = offset; s.Seek(offset, SeekOrigin.Begin); string str; Encoding enc; bool replaceChars; if (tfString.Original == tfString.Translation) { str = tfString.Original; enc = Encoding; replaceChars = false; } else { str = tfString.Translation; enc = options.SelectedEncoding; replaceChars = options.CharReplacement != 0; } if (!string.IsNullOrEmpty(str)) { if (replaceChars) { str = Utils.ReplaceChars(str, options.CharReplacementList); } str = Yakuza0Project.WritingReplacements(str); s.WriteStringZ(str, enc); result += str.GetLength(enc) + 1; if (writeZero) { s.WriteByte(0); result++; } } return(result); }
private TFString ReadString(Stream s) { var value = new TFString { FileId = Id, Offset = (int)s.Position, Visible = false }; var str = s.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = BattleRealmsProject.ReadingReplacements(str); value.Original = str; value.Translation = str; value.Visible = true; } return(value); }
private TFString GetString(Stream s, string section) { var pos = s.Position; var str = s.ReadStringZ(Encoding); str = Yakuza0Project.ReadingReplacements(str); var tfString = new TFString { FileId = Id, Original = str, Translation = str, Offset = (int)pos, Section = section, Visible = !string.IsNullOrWhiteSpace(str), }; return(tfString); }
private void WriteString(Stream s, TFString str, ExportOptions options) { var writeStr = str.Translation; if (str.Original.Equals(str.Translation)) { writeStr = Yakuza0Project.WritingReplacements(writeStr); s.WriteStringZ(writeStr, Encoding); } else { if (options.CharReplacement != 0) { writeStr = Utils.ReplaceChars(writeStr, options.CharReplacementList); } writeStr = Yakuza0Project.WritingReplacements(writeStr); s.WriteStringZ(writeStr, options.SelectedEncoding); } }
private void ReadDataItems(Stream s) { _dataList = new List <TFString>(); var readStrings = new List <long>(); foreach (var offset in _offsets) { s.Seek(offset, SeekOrigin.Begin); var stringOffset = s.ReadValueS64(Endianness); var correctedOffset = stringOffset - ((stringOffset >= 0x014E042000)?OUTPUT_BASE:FILE_BASE); TFString tfString; if (readStrings.Contains(stringOffset)) { tfString = new TFString { FileId = Id, Offset = (int)correctedOffset, Section = offset.ToString("X8"), Original = string.Empty, Translation = string.Empty, Visible = false }; } else { var pos = s.Position; s.Seek(correctedOffset, SeekOrigin.Begin); tfString = ReadString(s, (int)correctedOffset); tfString.Section = offset.ToString("X8"); readStrings.Add(stringOffset); s.Seek(pos, SeekOrigin.Begin); } _dataList.Add(tfString); } }
private void WriteString(Stream s, TFString tfString, ExportOptions options) { var pos = s.Position; var zeros = new byte[64]; s.WriteBytes(zeros); s.Seek(pos, SeekOrigin.Begin); string str; Encoding enc; bool replace; if (tfString.Original == tfString.Translation) { str = tfString.Original; enc = Encoding; replace = false; } else { str = tfString.Translation; enc = options.SelectedEncoding; replace = options.CharReplacement != 0; } if (replace) { str = Utils.ReplaceChars(str, options.CharReplacementList); } str = Yakuza0Project.WritingReplacements(str); if (str.GetLength(options.SelectedEncoding) >= 64) { str = str.Substring(0, 63); } s.WriteStringZ(str, enc); s.Seek(pos + 64, SeekOrigin.Begin); }
private void WriteString(Stream s, TFString str, ExportOptions options) { if (str.Original == str.Translation) { var aux = str.Original; aux = Yakuza0Project.WritingReplacements(aux); s.WriteStringZ(aux, Encoding); } else { var aux = str.Translation; if (options.CharReplacement != 0) { aux = Utils.ReplaceChars(aux, options.CharReplacementList); } aux = Yakuza0Project.WritingReplacements(aux); s.WriteStringZ(aux, options.SelectedEncoding); } }
public override void Read(Stream s) { _unknown1 = s.ReadValueS32(Endianness); _unknown2 = s.ReadValueS16(Endianness); _num = s.ReadValueS16(Endianness); _unknown3 = s.ReadValueS32(Endianness); _table2Offset = s.ReadValueS32(Endianness); _dataList1 = new List <TFString>(); _dataList2 = new List <ItemData>(); var firstString = -1; for (var i = 0; i < 43; i++) { var str = ReadString(s); _dataList1.Add(str); if (firstString == -1) { firstString = str.Offset; } } _remainder1 = s.ReadBytes(0x54); s.Seek(-8, SeekOrigin.Current); _barkeeper = ReadString(s); s.Seek(4, SeekOrigin.Current); for (var i = 0; i < _num; i++) { var item = new ItemData(); for (var j = 0; j < 22; j++) { item.Unknown[j] = s.ReadValueS32(Endianness); } if (firstString == -1) { firstString = item.Unknown[8]; } item.Data.Add(ReadString(s, item.Unknown[8])); item.Data.Add(ReadString(s, item.Unknown[14])); item.Data.Add(ReadString(s, item.Unknown[15])); item.Data.Add(ReadString(s, item.Unknown[16])); item.Data.Add(ReadString(s, item.Unknown[17])); item.Data.Add(ReadString(s, item.Unknown[18])); item.Data.Add(ReadString(s, item.Unknown[19])); item.Data.Add(ReadString(s, item.Unknown[20])); item.Data.Add(ReadString(s, item.Unknown[21])); _dataList2.Add(item); } var remainderSize = (int)(firstString - s.Position); if (remainderSize > 0) { _remainder2 = ReadRemainder(s, remainderSize); } }
public DataItem() { Index = new DataIndex(); Data = new TFString(); }
private static TFString FindString(TFString original, IList <TFString> strings) { return(strings.FirstOrDefault(s => s.Offset == original.Offset)); }
public override void Read(Stream s) { s.Seek(0x20, SeekOrigin.Begin); var titlePointer = s.ReadValueS32(Endianness); var descriptionPointer = s.ReadValueS32(Endianness); s.Seek(0x40, SeekOrigin.Begin); var ddsPointer = s.ReadValueS32(Endianness); if (titlePointer != 0) { s.Seek(titlePointer, SeekOrigin.Begin); var str = s.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = Yakuza0Project.ReadingReplacements(str); } var item = new TFString { FileId = Id, Offset = titlePointer, Section = "32", Original = str, Translation = str, Visible = !string.IsNullOrEmpty(str.TrimEnd('\0')) }; _title = item; } if (descriptionPointer != 0) { s.Seek(descriptionPointer, SeekOrigin.Begin); var str = s.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = Yakuza0Project.ReadingReplacements(str); } var item = new TFString { FileId = Id, Offset = descriptionPointer, Section = "36", Original = str, Translation = str, Visible = !string.IsNullOrEmpty(str.TrimEnd('\0')) }; _description = item; } if (ddsPointer != 0) { s.Seek(ddsPointer, SeekOrigin.Begin); var str = s.ReadStringZ(Encoding); if (!string.IsNullOrEmpty(str.TrimEnd('\0'))) { str = Yakuza0Project.ReadingReplacements(str); } var item = new TFString { FileId = Id, Offset = ddsPointer, Section = "64", Original = str, Translation = str, Visible = false }; _dds = item; } }