Esempio n. 1
0
        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);
        }