internal void Serialize(ContinuableRecordOutput out1) { out1.WriteContinueIfRequired(6); out1.WriteShort(phoneticTextFirstCharacterOffset); out1.WriteShort(realTextFirstCharacterOffset); out1.WriteShort(realTextLength); }
private void SerializeTrailingRecords(ContinuableRecordOutput out1) { out1.WriteContinue(); out1.WriteStringData(_text.String); out1.WriteContinue(); WriteFormatData(out1, _text); }
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); }
protected override void Serialize(ContinuableRecordOutput out1) { out1.WriteShort(field_1_strings_per_bucket); for (int k = 0; k < _sstInfos.Length; k++) { _sstInfos[k].Serialize(out1); } }
private void ConfirmSize(int expectedSize) { ContinuableRecordOutput cro = ContinuableRecordOutput.CreateForCountingOnly(); SSTSerializer ss = new SSTSerializer(strings, 0, 0); ss.Serialize(cro); Assert.AreEqual(expectedSize, cro.TotalSize); }
/** * called by the class that Is responsible for writing this sucker. * Subclasses should implement this so that their data Is passed back in a * byte array. * * @return size */ protected override void Serialize(ContinuableRecordOutput out1) { SSTSerializer serializer = new SSTSerializer(field_3_strings, NumStrings, NumUniqueStrings); serializer.Serialize(out1); bucketAbsoluteOffsets = serializer.BucketAbsoluteOffsets; bucketRelativeOffsets = serializer.BucketRelativeOffsets; }
protected override void Serialize(ContinuableRecordOutput out1) { SerializeTXORecord(out1); if (_text.String.Length > 0) { SerializeTrailingRecords(out1); } }
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(); } } }
private void WriteFormatData(ContinuableRecordOutput out1, IRichTextString str) { int nRuns = str.NumFormattingRuns; for (int i = 0; i < nRuns; i++) { out1.WriteShort(str.GetIndexOfFormattingRun(i)); int fontIndex = ((HSSFRichTextString)str).GetFontOfFormattingRun(i); out1.WriteShort(fontIndex == HSSFRichTextString.NO_FONT ? 0 : fontIndex); out1.WriteInt(0); // skip reserved } out1.WriteShort(str.Length); out1.WriteShort(0); out1.WriteInt(0); // skip reserved }
/** * called by the class that Is responsible for writing this sucker. * Subclasses should implement this so that their data Is passed back in a * @param offset to begin writing at * @param data byte array containing instance data * @return number of bytes written */ protected override void Serialize(ContinuableRecordOutput out1) { int field_7_length_custom_menu = field_14_custom_menu_text.Length; int field_8_length_description_text = field_15_description_text.Length; int field_9_length_help_topic_text = field_16_help_topic_text.Length; int field_10_length_status_bar_text = field_17_status_bar_text.Length; //int rawNameSize = NameRawSize; // size defined below out1.WriteShort(OptionFlag); out1.WriteByte(KeyboardShortcut); out1.WriteByte(NameTextLength); // Note - formula size is not immediately before encoded formula, and does not include any array constant data out1.WriteShort(field_13_name_definition.EncodedTokenSize); out1.WriteShort(field_5_externSheetIndex_plus1); out1.WriteShort(field_6_sheetNumber); out1.WriteByte(field_7_length_custom_menu); out1.WriteByte(field_8_length_description_text); out1.WriteByte(field_9_length_help_topic_text); out1.WriteByte(field_10_length_status_bar_text); out1.WriteByte(field_11_nameIsMultibyte ? 1 : 0); if (IsBuiltInName) { out1.WriteByte(field_12_built_in_code); } else { String nameText = field_12_name_text; if (field_11_nameIsMultibyte) { StringUtil.PutUnicodeLE(nameText, out1); } else { StringUtil.PutCompressedUnicode(nameText, out1); } } field_13_name_definition.SerializeTokens(out1); field_13_name_definition.SerializeArrayConstantData(out1); StringUtil.PutCompressedUnicode(CustomMenuText, out1); StringUtil.PutCompressedUnicode(DescriptionText, out1); StringUtil.PutCompressedUnicode(HelpTopicText, out1); StringUtil.PutCompressedUnicode(StatusBarText, out1); }
/** * 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); }
public void Serialize(ContinuableRecordOutput out1) { out1.WriteInt(_numStrings); out1.WriteInt(_numUniqueStrings); for (int k = 0; k < strings.Size; k++) { if (k % ExtSSTRecord.DEFAULT_BUCKET_SIZE == 0) { int rOff = out1.TotalSize; int index = k / ExtSSTRecord.DEFAULT_BUCKET_SIZE; if (index < ExtSSTRecord.MAX_BUCKETS) { //Excel only indexes the first 128 buckets. bucketAbsoluteOffsets[index] = rOff; bucketRelativeOffsets[index] = rOff; } } UnicodeString s = GetUnicodeString(k); s.Serialize(out1); } }
/** * 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); } }
private void SerializeTXORecord(ContinuableRecordOutput out1) { out1.WriteShort(field_1_options); out1.WriteShort(field_2_textOrientation); out1.WriteShort(field_3_reserved4); out1.WriteShort(field_4_reserved5); out1.WriteShort(field_5_reserved6); out1.WriteShort(_text.Length); out1.WriteShort(FormattingDataLength); out1.WriteInt(field_8_reserved7); if (_linkRefPtg != null) { int formulaSize = _linkRefPtg.Size; out1.WriteShort(formulaSize); out1.WriteInt(_unknownPreFormulaInt); _linkRefPtg.Write(out1); if (_unknownPostFormulaByte != null) { out1.WriteByte(Convert.ToByte(_unknownPostFormulaByte, CultureInfo.InvariantCulture)); } } }
/** * called by the class that Is responsible for writing this sucker. * Subclasses should implement this so that their data Is passed back in a * byte array. * * @param offset to begin writing at * @param data byte array containing instance data * @return number of bytes written */ protected override void Serialize(ContinuableRecordOutput out1) { out1.WriteShort(this._text.Length); out1.WriteStringData(this._text); }
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); }