Exemplo n.º 1
0
        public override void Serialize(LittleEndianOutput out1)
        {
            out1.WriteShort(sid);
            out1.WriteShort(_cbFContinued); // note - this is *not* the size
            if (_linkPtg == null)
            {
                out1.WriteShort(0);
            }
            else
            {
                int formulaSize = _linkPtg.Size;
                int linkSize    = formulaSize + 6;
                if (_unknownPostFormulaByte != null)
                {
                    linkSize++;
                }
                out1.WriteShort(linkSize);
                out1.WriteShort(formulaSize);
                out1.WriteInt(_unknownPreFormulaInt);
                _linkPtg.Write(out1);
                if (_unknownPostFormulaByte != null)
                {
                    out1.WriteByte(Convert.ToByte(_unknownPostFormulaByte));
                }
            }
            out1.WriteShort(_cLines);
            out1.WriteShort(_iSel);
            out1.WriteShort(_flags);
            out1.WriteShort(_idEdit);

            if (_dropData != null)
            {
                _dropData.Serialize(out1);
            }

            if (_rgLines != null)
            {
                foreach (String str in _rgLines)
                {
                    StringUtil.WriteUnicodeString(out1, str);
                }
            }

            if (_bsels != null)
            {
                foreach (bool val in _bsels)
                {
                    out1.WriteByte(val ? 1 : 0);
                }
            }
        }
Exemplo n.º 2
0
        public override void Serialize(LittleEndianOutput out1)
        {
            int formulaSize = field_2_refPtg == null ? field_2_unknownFormulaData.Length : field_2_refPtg.Size;
            int idOffset    = GetStreamIDOffset(formulaSize);
            int dataSize    = GetDataSize(idOffset);


            out1.WriteShort(sid);
            out1.WriteShort(dataSize);

            out1.WriteShort(idOffset);
            out1.WriteShort(formulaSize);
            out1.WriteInt(field_1_unknown_int);

            int pos = 12;

            if (field_2_refPtg == null)
            {
                out1.Write(field_2_unknownFormulaData);
            }
            else
            {
                field_2_refPtg.Write(out1);
            }
            pos += formulaSize;

            int stringLen;

            if (field_4_ole_classname == null)
            {
                // don't write 0x03, stringLen, flag, text
                stringLen = 0;
            }
            else
            {
                out1.WriteByte(0x03);
                pos      += 1;
                stringLen = field_4_ole_classname.Length;
                out1.WriteShort(stringLen);
                pos += 2;
                if (stringLen > 0)
                {
                    out1.WriteByte(field_3_unicode_flag ? 0x01 : 0x00);
                    pos += 1;

                    if (field_3_unicode_flag)
                    {
                        StringUtil.PutUnicodeLE(field_4_ole_classname, out1);
                        pos += stringLen * 2;
                    }
                    else
                    {
                        StringUtil.PutCompressedUnicode(field_4_ole_classname, out1);
                        pos += stringLen;
                    }
                }
            }

            // pad to next 2-byte boundary (requires 0 or 1 bytes)
            switch (idOffset - (pos - 6))
            { // 6 for 3 shorts: sid, dataSize, idOffset
            case 1:
                out1.WriteByte(field_4_unknownByte == null ? 0x00 : (int)Convert.ToByte(field_4_unknownByte));
                pos++;
                break;

            case 0:
                break;

            default:
                throw new InvalidOperationException("Bad padding calculation (" + idOffset + ", " + pos + ")");
            }

            if (field_5_stream_id != null)
            {
                out1.WriteInt(Convert.ToInt32(field_5_stream_id));
                pos += 4;
            }
            out1.Write(field_6_unknown);
        }