internal void ReadMultiLocalizedUnicodeTagDataEntry(byte[] data, IccMultiLocalizedUnicodeTagDataEntry expected) { IccDataReader reader = CreateReader(data); IccMultiLocalizedUnicodeTagDataEntry output = reader.ReadMultiLocalizedUnicodeTagDataEntry(); Assert.Equal(expected, output); }
internal void WriteMultiLocalizedUnicodeTagDataEntry(byte[] expected, IccMultiLocalizedUnicodeTagDataEntry data) { IccDataWriter writer = CreateWriter(); writer.WriteMultiLocalizedUnicodeTagDataEntry(data); byte[] output = writer.GetData(); Assert.Equal(expected, output); }
/// <summary> /// Writes a <see cref="IccMultiLocalizedUnicodeTagDataEntry"/> /// </summary> /// <param name="value">The entry to write</param> /// <returns>The number of bytes written</returns> public int WriteMultiLocalizedUnicodeTagDataEntry(IccMultiLocalizedUnicodeTagDataEntry value) { long start = this.dataStream.Position - 8; // 8 is the tag header size int cultureCount = value.Texts.Length; int count = this.WriteUInt32((uint)cultureCount); count += this.WriteUInt32(12); // One record has always 12 bytes size // Jump over position table long tpos = this.dataStream.Position; this.dataStream.Position += cultureCount * 12; uint[] offset = new uint[cultureCount]; int[] lengths = new int[cultureCount]; for (int i = 0; i < cultureCount; i++) { offset[i] = (uint)(this.dataStream.Position - start); count += lengths[i] = this.WriteUnicodeString(value.Texts[i].Text); } // Write position table long lpos = this.dataStream.Position; this.dataStream.Position = tpos; for (int i = 0; i < cultureCount; i++) { string[] code = value.Texts[i].Culture.Name.Split('-'); count += this.WriteAsciiString(code[0].ToLower(), 2, false); count += this.WriteAsciiString(code[1].ToUpper(), 2, false); count += this.WriteUInt32((uint)lengths[i]); count += this.WriteUInt32(offset[i]); } this.dataStream.Position = lpos; return(count); }