示例#1
0
 private void SerializeTrailingRecords(ContinuableRecordOutput out1)
 {
     out1.WriteContinue();
     out1.WriteStringData(_text.String);
     out1.WriteContinue();
     WriteFormatData(out1, _text);
 }
示例#2
0
        public void Serialize(ContinuableRecordOutput out1)
        {
            int numberOfRichTextRuns = 0;
            int extendedDataSize     = 0;

            if (IsRichText && field_4_format_Runs != null)
            {
                numberOfRichTextRuns = field_4_format_Runs.Count;
            }
            if (IsExtendedText && field_5_ext_rst != null)
            {
                extendedDataSize = field_5_ext_rst.Length;
            }

            out1.WriteString(field_3_string, numberOfRichTextRuns, extendedDataSize);

            if (numberOfRichTextRuns > 0)
            {
                //This will ensure that a run does not split a continue
                for (int i = 0; i < numberOfRichTextRuns; i++)
                {
                    if (out1.AvailableSpace < 4)
                    {
                        out1.WriteContinue();
                    }
                    FormatRun r = field_4_format_Runs[i];
                    r.Serialize(out1);
                }
            }

            if (extendedDataSize > 0)
            {
                // OK ExtRst is actually not documented, so i am going to hope
                // that we can actually continue on byte boundaries

                int extPos = 0;
                while (true)
                {
                    int nBytesToWrite = Math.Min(extendedDataSize - extPos, out1.AvailableSpace);
                    out1.Write(field_5_ext_rst, extPos, nBytesToWrite);
                    extPos += nBytesToWrite;
                    if (extPos >= extendedDataSize)
                    {
                        break;
                    }
                    out1.WriteContinue();
                }
            }
        }
示例#3
0
        /**
         * Note - a value of zero for <c>amountUsedInCurrentRecord</c> would only ever occur just
         * after a {@link ContinueRecord} had been started.  In the initial {@link SSTRecord} this
         * value starts at 8 (for the first {@link UnicodeString} written).  In general, it can be
         * any value between 0 and {@link #MAX_DATA_SIZE}
         */
        private static void ConfirmSize(int expectedSize, UnicodeString s, int amountUsedInCurrentRecord)
        {
            ContinuableRecordOutput out1 = ContinuableRecordOutput.CreateForCountingOnly();

            out1.WriteContinue();
            for (int i = amountUsedInCurrentRecord; i > 0; i--)
            {
                out1.WriteByte(0);
            }
            int size0 = out1.TotalSize;

            s.Serialize(out1);
            int size1      = out1.TotalSize;
            int actualSize = size1 - size0;

            Assert.AreEqual(expectedSize, actualSize);
        }
示例#4
0
        /**
         * Serialises out the String. There are special rules
         *  about where we can and can't split onto
         *  Continue records.
         */
        public void Serialize(ContinuableRecordOutput out1)
        {
            int numberOfRichTextRuns = 0;
            int extendedDataSize     = 0;

            if (IsRichText && field_4_format_Runs != null)
            {
                numberOfRichTextRuns = field_4_format_Runs.Count;
            }
            if (IsExtendedText && field_5_ext_rst != null)
            {
                extendedDataSize = 4 + field_5_ext_rst.DataSize;
            }

            // Serialise the bulk of the String
            // The WriteString handles tricky continue stuff for us
            out1.WriteString(field_3_string, numberOfRichTextRuns, extendedDataSize);

            if (numberOfRichTextRuns > 0)
            {
                //This will ensure that a run does not split a continue
                for (int i = 0; i < numberOfRichTextRuns; i++)
                {
                    if (out1.AvailableSpace < 4)
                    {
                        out1.WriteContinue();
                    }
                    FormatRun r = field_4_format_Runs[(i)];
                    r.Serialize(out1);
                }
            }

            if (extendedDataSize > 0)
            {
                field_5_ext_rst.Serialize(out1);
            }
        }
示例#5
0
        public void TestExtRstFromEmpty()
        {
            UnicodeString.ExtRst ext = new UnicodeString.ExtRst();

            Assert.AreEqual(0, ext.NumberOfRuns);
            Assert.AreEqual(0, ext.FormattingFontIndex);
            Assert.AreEqual(0, ext.FormattingOptions);
            Assert.AreEqual("", ext.PhoneticText);
            Assert.AreEqual(0, ext.PhRuns.Length);
            Assert.AreEqual(10, ext.DataSize); // Excludes 4 byte header

            MemoryStream             baos = new MemoryStream();
            LittleEndianOutputStream out1 = new LittleEndianOutputStream(baos);
            ContinuableRecordOutput  cout = new ContinuableRecordOutput(out1, 0xffff);

            ext.Serialize(cout);
            cout.WriteContinue();

            byte[] b = baos.ToArray();
            Assert.AreEqual(20, b.Length);

            // First 4 bytes from the outputstream
            Assert.AreEqual(-1, (sbyte)b[0]);
            Assert.AreEqual(-1, (sbyte)b[1]);
            Assert.AreEqual(14, b[2]);
            Assert.AreEqual(00, b[3]);

            // Reserved
            Assert.AreEqual(1, b[4]);
            Assert.AreEqual(0, b[5]);
            // Data size
            Assert.AreEqual(10, b[6]);
            Assert.AreEqual(00, b[7]);
            // Font*2
            Assert.AreEqual(0, b[8]);
            Assert.AreEqual(0, b[9]);
            Assert.AreEqual(0, b[10]);
            Assert.AreEqual(0, b[11]);
            // 0 Runs
            Assert.AreEqual(0, b[12]);
            Assert.AreEqual(0, b[13]);
            // Size=0, *2
            Assert.AreEqual(0, b[14]);
            Assert.AreEqual(0, b[15]);
            Assert.AreEqual(0, b[16]);
            Assert.AreEqual(0, b[17]);

            // Last 2 bytes from the outputstream
            Assert.AreEqual(ContinueRecord.sid, b[18]);
            Assert.AreEqual(0, b[19]);


            // Load in again and re-test
            byte[] data = new byte[14];
            Array.Copy(b, 4, data, 0, data.Length);
            LittleEndianInputStream inp = new LittleEndianInputStream(
                new MemoryStream(data)
                );

            ext = new UnicodeString.ExtRst(inp, data.Length);

            Assert.AreEqual(0, ext.NumberOfRuns);
            Assert.AreEqual(0, ext.FormattingFontIndex);
            Assert.AreEqual(0, ext.FormattingOptions);
            Assert.AreEqual("", ext.PhoneticText);
            Assert.AreEqual(0, ext.PhRuns.Length);
        }