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); }
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(); } } }