Esempio n. 1
0
            internal void Serialize(ContinuableRecordOutput out1)
            {
                int dataSize = DataSize;

                out1.WriteContinueIfRequired(8);
                out1.WriteShort(reserved);
                out1.WriteShort(dataSize);
                out1.WriteShort(formattingFontIndex);
                out1.WriteShort(formattingOptions);

                out1.WriteContinueIfRequired(6);
                out1.WriteShort(numberOfRuns);
                out1.WriteShort(phoneticText.Length);
                out1.WriteShort(phoneticText.Length);

                out1.WriteContinueIfRequired(phoneticText.Length * 2);
                StringUtil.PutUnicodeLE(phoneticText, out1);

                for (int i = 0; i < phRuns.Length; i++)
                {
                    phRuns[i].Serialize(out1);
                }

                out1.Write(extraData);
            }
Esempio n. 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();
                }
            }
        }