예제 #1
0
  public void serialize(LittleEndianOutput out) {
    _range.serialize(out);

    _guid.serialize(out);
    out.writeInt(0x00000002); // TODO const
    out.writeInt(_linkOpts);

    if ((_linkOpts & HLINK_LABEL) != 0) {
      out.writeInt(_label.length());
      StringUtil.putUnicodeLE(_label, out);
    }
    if ((_linkOpts & HLINK_TARGET_FRAME) != 0) {
      out.writeInt(_targetFrame.length());
      StringUtil.putUnicodeLE(_targetFrame, out);
    }

    if ((_linkOpts & HLINK_URL) != 0 && (_linkOpts & HLINK_UNC_PATH) != 0) {
      out.writeInt(_address.length());
      StringUtil.putUnicodeLE(_address, out);
    }

    if ((_linkOpts & HLINK_URL) != 0 && (_linkOpts & HLINK_UNC_PATH) == 0) {
      _moniker.serialize(out);
      if (URL_MONIKER.equals(_moniker)) {
        if (_uninterpretedTail == null) {
          out.writeInt(_address.length() * 2);
          StringUtil.putUnicodeLE(_address, out);
        } else {
          out.writeInt(_address.length() * 2 + TAIL_SIZE);
          StringUtil.putUnicodeLE(_address, out);
          writeTail(_uninterpretedTail, out);
        }
      } else if (FILE_MONIKER.equals(_moniker)) {
        out.writeShort(_fileOpts);
        out.writeInt(_shortFilename.length());
        StringUtil.putCompressedUnicode(_shortFilename, out);
        writeTail(_uninterpretedTail, out);
        if (_address == null) {
          out.writeInt(0);
        } else {
          int addrLen = _address.length() * 2;
          out.writeInt(addrLen + 6);
          out.writeInt(addrLen);
          out.writeShort(0x0003); // TODO const
          StringUtil.putUnicodeLE(_address, out);
        }
      }
    }
    if ((_linkOpts & HLINK_PLACE) != 0) {
      out.writeInt(_textMark.length());
      StringUtil.putUnicodeLE(_textMark, out);
    }
  }
예제 #2
0
 public void write(LittleEndianOutput out) {
   out.writeByte(sid + getPtgClass());
   out.writeByte(_options);
   out.writeShort(_data);
   int[] jt = _jumpTable;
   if (jt != null) {
     for (int i = 0; i < jt.length; i++) {
       out.writeShort(jt[i]);
     }
     out.writeShort(_chooseFuncOffset);
   }
 }
  @Override
  protected void serialize(LittleEndianOutput out) {

    out.writeShort(_sxaxis);
    out.writeShort(_cSub);
    out.writeShort(_grbitSub);
    out.writeShort(_cItm);

    if (_name != null) {
      StringUtil.writeUnicodeString(out, _name);
    } else {
      out.writeShort(STRING_NOT_PRESENT_LEN);
    }
  }
예제 #4
0
  public void serialize(LittleEndianOutput out) {
    out.writeShort(field_1_number_of_sheets);

    if (isExternalReferences()) {
      StringUtil.writeUnicodeString(out, field_2_encoded_url);

      for (int i = 0; i < field_3_sheet_names.length; i++) {
        StringUtil.writeUnicodeString(out, field_3_sheet_names[i]);
      }
    } else {
      int field2val = _isAddInFunctions ? TAG_ADD_IN_FUNCTIONS : TAG_INTERNAL_REFERENCES;

      out.writeShort(field2val);
    }
  }
예제 #5
0
파일: ArrayPtg.java 프로젝트: orione/POI
  public int writeTokenValueBytes(LittleEndianOutput out) {

    out.writeByte(token_1_columns - 1);
    out.writeShort(token_2_rows - 1);
    ConstantValueParser.encode(out, token_3_arrayValues);
    return 3 + ConstantValueParser.getEncodedSize(token_3_arrayValues);
  }
 public void serialize(LittleEndianOutput out) {
   int nItems = _list.size();
   out.writeShort(nItems);
   for (int k = 0; k < nItems; k++) {
     CellRangeAddress region = _list.get(k);
     region.serialize(out);
   }
 }
예제 #7
0
  public void serialize(LittleEndianOutput out) {
    int nItems = _list.size();

    out.writeShort(nItems);

    for (int i = 0; i < nItems; i++) {
      getRef(i).serialize(out);
    }
  }
예제 #8
0
  @Override
  protected void serializeValue(LittleEndianOutput out) {

    if (specialCachedValue == null) {
      out.writeDouble(field_4_value);
    } else {
      specialCachedValue.serialize(out);
    }

    out.writeShort(getOptions());

    out.writeInt(
        field_6_zero); // may as well write original data back so as to minimise differences from
                       // original
    field_8_parsed_expr.serialize(out);
  }
예제 #9
0
 /**
  * Writes The formula encoding is includes:
  *
  * <ul>
  *   <li>ushort tokenDataLen
  *   <li>tokenData
  *   <li>arrayConstantData (if present)
  * </ul>
  */
 public void serialize(LittleEndianOutput out) {
   out.writeShort(_encodedTokenLen);
   out.write(_byteEncoding);
 }
 public void serialize(LittleEndianOutput out) {
   out.writeShort(getColWidth());
 }
예제 #11
0
 public void serialize(LittleEndianOutput out) {
   out.writeShort(_character);
   out.writeShort(_fontIndex);
 }
예제 #12
0
 public void serialize(LittleEndianOutput out) {
   out.writeShort(getBackup());
 }
예제 #13
0
 public void serialize(LittleEndianOutput out) {
   out.writeInt(_d1);
   out.writeShort(_d2);
   out.writeShort(_d3);
   out.writeLong(_d4);
 }
예제 #14
0
 public void serialize(LittleEndianOutput out) {
   out.write(_variableData);
   out.writeShort(0xFFFF);
 }
예제 #15
0
 protected final void writeCoordinates(LittleEndianOutput out) {
   out.writeShort(field_1_first_row);
   out.writeShort(field_2_last_row);
   out.writeShort(field_3_first_column);
   out.writeShort(field_4_last_column);
 }
  public void serialize(LittleEndianOutput out) {

    int formulaSize =
        field_2_refPtg == null ? field_2_unknownFormulaData.length : field_2_refPtg.getSize();
    int idOffset = getStreamIDOffset(formulaSize);
    int dataSize = getDataSize(idOffset);

    out.writeShort(sid);
    out.writeShort(dataSize);

    out.writeShort(idOffset);
    out.writeShort(formulaSize);
    out.writeInt(field_1_unknown_int);

    int pos = 12;

    if (field_2_refPtg == null) {
      out.write(field_2_unknownFormulaData);
    } else {
      field_2_refPtg.write(out);
    }
    pos += formulaSize;

    int stringLen;
    if (field_4_ole_classname == null) {
      // don't write 0x03, stringLen, flag, text
      stringLen = 0;
    } else {
      out.writeByte(0x03);
      pos += 1;
      stringLen = field_4_ole_classname.length();
      out.writeShort(stringLen);
      pos += 2;
      if (stringLen > 0) {
        out.writeByte(field_3_unicode_flag ? 0x01 : 0x00);
        pos += 1;

        if (field_3_unicode_flag) {
          StringUtil.putUnicodeLE(field_4_ole_classname, out);
          pos += stringLen * 2;
        } else {
          StringUtil.putCompressedUnicode(field_4_ole_classname, out);
          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:
        out.writeByte(field_4_unknownByte == null ? 0x00 : field_4_unknownByte.intValue());
        pos++;
      case 0:
        break;
      default:
        throw new IllegalStateException("Bad padding calculation (" + idOffset + ", " + pos + ")");
    }

    if (field_5_stream_id != null) {
      out.writeInt(field_5_stream_id.intValue());
      pos += 4;
    }
    out.write(field_6_unknown);
  }
예제 #17
0
 public void serialize(LittleEndianOutput out) {
   out.writeShort(_extBookIndex);
   out.writeShort(_firstSheetIndex);
   out.writeShort(_lastSheetIndex);
 }
예제 #18
0
 public void serialize(LittleEndianOutput out) {
   out.writeShort(0);
 }
 public void serialize(LittleEndianOutput out) {
   out.writeShort(sid);
   out.writeShort(reserved.length);
   out.write(reserved);
 }
예제 #20
0
 public void write(LittleEndianOutput out) {
   out.writeByte(sid + getPtgClass());
   out.writeInt(field_1_reserved);
   out.writeShort(field_2_subex_len);
 }
예제 #21
0
 public void write(LittleEndianOutput out) {
   out.writeByte(sid + getPtgClass());
   out.writeShort(field_1_index_extern_sheet);
   out.writeInt(unused1);
 }