mirror of
https://github.com/apache/poi.git
synced 2025-02-10 03:54:44 +00:00
Converted Ptgs to use LittleEndianOutput
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@707486 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
44adbe3e25
commit
4f54a9b557
@ -51,7 +51,7 @@ public final class LinkedDataFormulaField {
|
|||||||
.append( "=" )
|
.append( "=" )
|
||||||
.append(ptg.toString() )
|
.append(ptg.toString() )
|
||||||
.append( "\n" )
|
.append( "\n" )
|
||||||
.append(ptg.toDebugString() )
|
.append(ptg.toString())
|
||||||
.append( "\n" );
|
.append( "\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,8 @@ import org.apache.poi.util.BitField;
|
|||||||
import org.apache.poi.util.BitFieldFactory;
|
import org.apache.poi.util.BitFieldFactory;
|
||||||
import org.apache.poi.util.HexDump;
|
import org.apache.poi.util.HexDump;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The TXO record (0x01B6) is used to define the properties of a text box. It is
|
* The TXO record (0x01B6) is used to define the properties of a text box. It is
|
||||||
@ -190,36 +192,31 @@ public final class TextObjectRecord extends Record {
|
|||||||
|
|
||||||
private int serializeTXORecord(int offset, byte[] data) {
|
private int serializeTXORecord(int offset, byte[] data) {
|
||||||
int dataSize = getDataSize();
|
int dataSize = getDataSize();
|
||||||
|
int recSize = dataSize+4;
|
||||||
|
LittleEndianOutput out = new LittleEndianByteArrayOutputStream(data, offset, recSize);
|
||||||
|
|
||||||
LittleEndian.putUShort(data, 0 + offset, TextObjectRecord.sid);
|
out.writeShort(TextObjectRecord.sid);
|
||||||
LittleEndian.putUShort(data, 2 + offset, dataSize);
|
out.writeShort(dataSize);
|
||||||
|
|
||||||
|
out.writeShort(field_1_options);
|
||||||
LittleEndian.putUShort(data, 4 + offset, field_1_options);
|
out.writeShort(field_2_textOrientation);
|
||||||
LittleEndian.putUShort(data, 6 + offset, field_2_textOrientation);
|
out.writeShort(field_3_reserved4);
|
||||||
LittleEndian.putUShort(data, 8 + offset, field_3_reserved4);
|
out.writeShort(field_4_reserved5);
|
||||||
LittleEndian.putUShort(data, 10 + offset, field_4_reserved5);
|
out.writeShort(field_5_reserved6);
|
||||||
LittleEndian.putUShort(data, 12 + offset, field_5_reserved6);
|
out.writeShort(_text.length());
|
||||||
LittleEndian.putUShort(data, 14 + offset, _text.length());
|
out.writeShort(getFormattingDataLength());
|
||||||
LittleEndian.putUShort(data, 16 + offset, getFormattingDataLength());
|
out.writeInt(field_8_reserved7);
|
||||||
LittleEndian.putInt(data, 18 + offset, field_8_reserved7);
|
|
||||||
|
|
||||||
if (_linkRefPtg != null) {
|
if (_linkRefPtg != null) {
|
||||||
int pos = offset+22;
|
|
||||||
int formulaSize = _linkRefPtg.getSize();
|
int formulaSize = _linkRefPtg.getSize();
|
||||||
LittleEndian.putUShort(data, pos, formulaSize);
|
out.writeShort(formulaSize);
|
||||||
pos += LittleEndian.SHORT_SIZE;
|
out.writeInt(_unknownPreFormulaInt);
|
||||||
LittleEndian.putInt(data, pos, _unknownPreFormulaInt);
|
_linkRefPtg.write(out);
|
||||||
pos += LittleEndian.INT_SIZE;
|
|
||||||
_linkRefPtg.writeBytes(data, pos);
|
|
||||||
pos += formulaSize;
|
|
||||||
if (_unknownPostFormulaByte != null) {
|
if (_unknownPostFormulaByte != null) {
|
||||||
LittleEndian.putByte(data, pos, _unknownPostFormulaByte.byteValue());
|
out.writeByte(_unknownPostFormulaByte.byteValue());
|
||||||
pos += LittleEndian.BYTE_SIZE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return recSize;
|
||||||
return 4 + dataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int serializeTrailingRecords(int offset, byte[] data) {
|
private int serializeTrailingRecords(int offset, byte[] data) {
|
||||||
|
@ -98,7 +98,6 @@ public abstract class AbstractFunctionPtg extends OperationPtg {
|
|||||||
buf.append(")");
|
buf.append(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void writeBytes(byte[] array, int offset);
|
|
||||||
public abstract int getSize();
|
public abstract int getSize();
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common superclass of 2-D area refs
|
* Common superclass of 2-D area refs
|
||||||
@ -29,24 +29,30 @@ public abstract class Area2DPtgBase extends AreaPtgBase {
|
|||||||
protected Area2DPtgBase(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
|
protected Area2DPtgBase(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
|
||||||
super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
|
super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Area2DPtgBase(RecordInputStream in) {
|
protected Area2DPtgBase(RecordInputStream in) {
|
||||||
readCoordinates(in);
|
readCoordinates(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract byte getSid();
|
protected abstract byte getSid();
|
||||||
|
|
||||||
public final void writeBytes(byte [] array, int offset) {
|
public final void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(array, offset+0, getSid() + getPtgClass());
|
out.writeByte(getSid() + getPtgClass());
|
||||||
writeCoordinates(array, offset+1);
|
writeCoordinates(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Area2DPtgBase(String arearef) {
|
public Area2DPtgBase(String arearef) {
|
||||||
super(arearef);
|
super(arearef);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final int getSize() {
|
public final int getSize() {
|
||||||
return SIZE;
|
return SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String toFormulaString() {
|
public final String toFormulaString() {
|
||||||
return formatReferenceAsString();
|
return formatReferenceAsString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String toString() {
|
public final String toString() {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
sb.append(getClass().getName());
|
sb.append(getClass().getName());
|
||||||
|
@ -21,7 +21,7 @@ import org.apache.poi.hssf.record.RecordInputStream;
|
|||||||
import org.apache.poi.ss.formula.ExternSheetReferenceToken;
|
import org.apache.poi.ss.formula.ExternSheetReferenceToken;
|
||||||
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
||||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Title: Area 3D Ptg - 3D reference (Sheet + Area)<P>
|
* Title: Area 3D Ptg - 3D reference (Sheet + Area)<P>
|
||||||
@ -67,10 +67,10 @@ public final class Area3DPtg extends AreaPtgBase implements WorkbookDependentFor
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte[] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putUShort(array, 1 + offset, field_1_index_extern_sheet);
|
out.writeShort(field_1_index_extern_sheet);
|
||||||
writeCoordinates(array, offset+3);
|
writeCoordinates(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
|
@ -19,7 +19,7 @@ package org.apache.poi.hssf.record.formula;
|
|||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AreaErr - handles deleted cell area references.
|
* AreaErr - handles deleted cell area references.
|
||||||
@ -42,10 +42,10 @@ public final class AreaErrPtg extends OperandPtg {
|
|||||||
unused2 = in.readInt();
|
unused2 = in.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte[] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putInt(array, offset + 1, unused1);
|
out.writeInt(unused1);
|
||||||
LittleEndian.putInt(array, offset + 5, unused2);
|
out.writeInt(unused2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString() {
|
public String toFormulaString() {
|
||||||
|
@ -22,7 +22,7 @@ import org.apache.poi.hssf.util.AreaReference;
|
|||||||
import org.apache.poi.hssf.util.CellReference;
|
import org.apache.poi.hssf.util.CellReference;
|
||||||
import org.apache.poi.util.BitField;
|
import org.apache.poi.util.BitField;
|
||||||
import org.apache.poi.util.BitFieldFactory;
|
import org.apache.poi.util.BitFieldFactory;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies a rectangular area of cells A1:A4 for instance.
|
* Specifies a rectangular area of cells A1:A4 for instance.
|
||||||
@ -119,11 +119,11 @@ public abstract class AreaPtgBase extends OperandPtg implements AreaI {
|
|||||||
field_3_first_column = in.readUShort();
|
field_3_first_column = in.readUShort();
|
||||||
field_4_last_column = in.readUShort();
|
field_4_last_column = in.readUShort();
|
||||||
}
|
}
|
||||||
protected final void writeCoordinates(byte[] array, int offset) {
|
protected final void writeCoordinates(LittleEndianOutput out) {
|
||||||
LittleEndian.putUShort(array, offset + 0, field_1_first_row);
|
out.writeShort(field_1_first_row);
|
||||||
LittleEndian.putUShort(array, offset + 2, field_2_last_row);
|
out.writeShort(field_2_last_row);
|
||||||
LittleEndian.putUShort(array, offset + 4, field_3_first_column);
|
out.writeShort(field_3_first_column);
|
||||||
LittleEndian.putUShort(array, offset + 6, field_4_last_column);
|
out.writeShort(field_4_last_column);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,6 +22,7 @@ import org.apache.poi.hssf.record.UnicodeString;
|
|||||||
import org.apache.poi.hssf.record.constant.ConstantValueParser;
|
import org.apache.poi.hssf.record.constant.ConstantValueParser;
|
||||||
import org.apache.poi.hssf.record.constant.ErrorConstant;
|
import org.apache.poi.hssf.record.constant.ErrorConstant;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ArrayPtg - handles arrays
|
* ArrayPtg - handles arrays
|
||||||
@ -153,10 +154,9 @@ public final class ArrayPtg extends Ptg {
|
|||||||
return rowIx * token_1_columns + colIx;
|
return rowIx * token_1_columns + colIx;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte[] data, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putByte(data, offset + 0, sid + getPtgClass());
|
out.write(field_1_reserved);
|
||||||
System.arraycopy(field_1_reserved, 0, data, offset+1, RESERVED_FIELD_LEN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int writeTokenValueBytes(byte[] data, int offset) {
|
public int writeTokenValueBytes(byte[] data, int offset) {
|
||||||
|
@ -21,6 +21,7 @@ import org.apache.poi.hssf.record.RecordInputStream;
|
|||||||
import org.apache.poi.util.BitField;
|
import org.apache.poi.util.BitField;
|
||||||
import org.apache.poi.util.BitFieldFactory;
|
import org.apache.poi.util.BitFieldFactory;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* "Special Attributes"
|
* "Special Attributes"
|
||||||
@ -213,19 +214,16 @@ public final class AttrPtg extends ControlPtg {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset)
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putByte(array, offset+0, sid);
|
out.writeByte(field_1_options);
|
||||||
LittleEndian.putByte(array, offset+1, field_1_options);
|
out.writeShort(field_2_data);
|
||||||
LittleEndian.putShort(array,offset+2, field_2_data);
|
|
||||||
int[] jt = _jumpTable;
|
int[] jt = _jumpTable;
|
||||||
if (jt != null) {
|
if (jt != null) {
|
||||||
int joff = offset+4;
|
|
||||||
for (int i = 0; i < jt.length; i++) {
|
for (int i = 0; i < jt.length; i++) {
|
||||||
LittleEndian.putUShort(array, joff, jt[i]);
|
out.writeShort(jt[i]);
|
||||||
joff+=2;
|
|
||||||
}
|
}
|
||||||
LittleEndian.putUShort(array, joff, _chooseFuncOffset);
|
out.writeShort(_chooseFuncOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,17 +18,18 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Boolean (boolean)
|
* Boolean (boolean) Stores a (java) boolean value in a formula.
|
||||||
* Stores a (java) boolean value in a formula.
|
*
|
||||||
* @author Paul Krause (pkrause at soundbite dot com)
|
* @author Paul Krause (pkrause at soundbite dot com)
|
||||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
*/
|
*/
|
||||||
public final class BoolPtg extends ScalarConstantPtg {
|
public final class BoolPtg extends ScalarConstantPtg {
|
||||||
public final static int SIZE = 2;
|
public final static int SIZE = 2;
|
||||||
public final static byte sid = 0x1d;
|
public final static byte sid = 0x1D;
|
||||||
private final boolean _value;
|
private final boolean _value;
|
||||||
|
|
||||||
public BoolPtg(RecordInputStream in) {
|
public BoolPtg(RecordInputStream in) {
|
||||||
@ -43,9 +44,9 @@ public final class BoolPtg extends ScalarConstantPtg {
|
|||||||
return _value;
|
return _value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
array[ offset + 0 ] = sid;
|
out.writeByte(sid + getPtgClass());
|
||||||
array[ offset + 1 ] = (byte) (_value ? 1 : 0);
|
out.writeByte(_value ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
|
@ -19,9 +19,9 @@ package org.apache.poi.hssf.record.formula;
|
|||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
||||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
|
||||||
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Title: Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)<P>
|
* Title: Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)<P>
|
||||||
@ -60,10 +60,10 @@ public final class DeletedArea3DPtg extends OperandPtg implements WorkbookDepend
|
|||||||
public int getSize() {
|
public int getSize() {
|
||||||
return 11;
|
return 11;
|
||||||
}
|
}
|
||||||
public void writeBytes(byte[] data, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(data, 0 + offset, sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putUShort(data, 1 + offset, field_1_index_extern_sheet);
|
out.writeShort(field_1_index_extern_sheet);
|
||||||
LittleEndian.putInt(data, 3 + offset, unused1);
|
out.writeInt(unused1);
|
||||||
LittleEndian.putInt(data, 7 + offset, unused2);
|
out.writeInt(unused2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,9 @@ package org.apache.poi.hssf.record.formula;
|
|||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
||||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
|
||||||
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Title: Deleted Reference 3D Ptg <P>
|
* Title: Deleted Reference 3D Ptg <P>
|
||||||
@ -60,9 +60,9 @@ public final class DeletedRef3DPtg extends OperandPtg implements WorkbookDepende
|
|||||||
public int getSize() {
|
public int getSize() {
|
||||||
return 7;
|
return 7;
|
||||||
}
|
}
|
||||||
public void writeBytes(byte[] data, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(data, 0 + offset, sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putUShort(data, 1 + offset, field_1_index_extern_sheet);
|
out.writeShort(field_1_index_extern_sheet);
|
||||||
LittleEndian.putInt(data, 3 + offset, unused1);
|
out.writeInt(unused1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ package org.apache.poi.hssf.record.formula;
|
|||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Daniel Noll (daniel at nuix dot com dot au)
|
* @author Daniel Noll (daniel at nuix dot com dot au)
|
||||||
@ -61,10 +62,9 @@ public final class ErrPtg extends ScalarConstantPtg {
|
|||||||
return valueOf(in.readByte());
|
return valueOf(in.readByte());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset)
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
array[offset] = (byte) (sid + getPtgClass());
|
out.writeByte(field_1_error_code);
|
||||||
array[offset + 1] = (byte)field_1_error_code;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString() {
|
public String toFormulaString() {
|
||||||
|
@ -19,7 +19,7 @@ package org.apache.poi.hssf.record.formula;
|
|||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordFormatException;
|
import org.apache.poi.hssf.record.RecordFormatException;
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -39,11 +39,10 @@ public final class ExpPtg extends ControlPtg {
|
|||||||
field_2_first_col = in.readShort();
|
field_2_first_col = in.readShort();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset)
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
array[offset+0]= (byte) (sid);
|
out.writeShort(field_1_first_row);
|
||||||
LittleEndian.putShort(array,offset+1,field_1_first_row);
|
out.writeShort(field_2_first_col);
|
||||||
LittleEndian.putShort(array,offset+3,field_2_first_col);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize()
|
public int getSize()
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
import org.apache.poi.util.LittleEndian;
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.record.formula.function.FunctionMetadata;
|
import org.apache.poi.hssf.record.formula.function.FunctionMetadata;
|
||||||
import org.apache.poi.hssf.record.formula.function.FunctionMetadataRegistry;
|
import org.apache.poi.hssf.record.formula.function.FunctionMetadataRegistry;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author aviks
|
* @author aviks
|
||||||
@ -55,9 +55,9 @@ public final class FuncPtg extends AbstractFunctionPtg {
|
|||||||
paramClass = fm.getParameterClassCodes();
|
paramClass = fm.getParameterClassCodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte[] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
array[offset+0]= (byte) (sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putShort(array,offset+1,field_2_fnc_index);
|
out.writeShort(field_2_fnc_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumberOfOperands() {
|
public int getNumberOfOperands() {
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
import org.apache.poi.util.LittleEndian;
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.record.formula.function.FunctionMetadata;
|
import org.apache.poi.hssf.record.formula.function.FunctionMetadata;
|
||||||
import org.apache.poi.hssf.record.formula.function.FunctionMetadataRegistry;
|
import org.apache.poi.hssf.record.formula.function.FunctionMetadataRegistry;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -64,10 +64,10 @@ public final class FuncVarPtg extends AbstractFunctionPtg{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte[] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
array[offset+0]=(byte) (sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
array[offset+1]=field_1_num_args;
|
out.writeByte(field_1_num_args);
|
||||||
LittleEndian.putShort(array,offset+2,field_2_fnc_index);
|
out.writeShort(field_2_fnc_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumberOfOperands() {
|
public int getNumberOfOperands() {
|
||||||
|
@ -18,11 +18,12 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integer (unsigned short integer)
|
* Integer (unsigned short integer) Stores an unsigned short value (java int) in
|
||||||
* Stores an unsigned short value (java int) in a formula
|
* a formula
|
||||||
|
*
|
||||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
*/
|
*/
|
||||||
@ -33,6 +34,7 @@ public final class IntPtg extends ScalarConstantPtg {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Excel represents integers 0..65535 with the tInt token.
|
* Excel represents integers 0..65535 with the tInt token.
|
||||||
|
*
|
||||||
* @return <code>true</code> if the specified value is within the range of values
|
* @return <code>true</code> if the specified value is within the range of values
|
||||||
* <tt>IntPtg</tt> can represent.
|
* <tt>IntPtg</tt> can represent.
|
||||||
*/
|
*/
|
||||||
@ -59,9 +61,9 @@ public final class IntPtg extends ScalarConstantPtg {
|
|||||||
return field_1_value;
|
return field_1_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
array[ offset + 0 ] = sid;
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putUShort(array, offset + 1, getValue());
|
out.writeShort(getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Daniel Noll (daniel at nuix dot com dot au)
|
* @author Daniel Noll (daniel at nuix dot com dot au)
|
||||||
@ -34,26 +35,19 @@ public final class IntersectionPtg extends OperationPtg {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize()
|
public int getSize() {
|
||||||
{
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes( byte[] array, int offset )
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
array[ offset + 0 ] = sid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Implementation of method from Ptg */
|
public String toFormulaString() {
|
||||||
public String toFormulaString()
|
|
||||||
{
|
|
||||||
return " ";
|
return " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toFormulaString(String[] operands) {
|
||||||
/** implementation of method from OperationsPtg*/
|
|
||||||
public String toFormulaString(String[] operands)
|
|
||||||
{
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
|
||||||
buffer.append(operands[0]);
|
buffer.append(operands[0]);
|
||||||
@ -62,9 +56,7 @@ public final class IntersectionPtg extends OperationPtg {
|
|||||||
return buffer.toString();
|
return buffer.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumberOfOperands()
|
public int getNumberOfOperands() {
|
||||||
{
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Daniel Noll (daniel at nuix dot com dot au)
|
* @author Daniel Noll (daniel at nuix dot com dot au)
|
||||||
@ -26,55 +26,32 @@ import org.apache.poi.util.LittleEndian;
|
|||||||
public class MemAreaPtg extends OperandPtg {
|
public class MemAreaPtg extends OperandPtg {
|
||||||
public final static short sid = 0x26;
|
public final static short sid = 0x26;
|
||||||
private final static int SIZE = 7;
|
private final static int SIZE = 7;
|
||||||
private int field_1_reserved;
|
private final int field_1_reserved;
|
||||||
private short field_2_subex_len;
|
private final int field_2_subex_len;
|
||||||
|
|
||||||
/** Creates new MemAreaPtg */
|
/** Creates new MemAreaPtg */
|
||||||
|
|
||||||
public MemAreaPtg()
|
public MemAreaPtg(int subexLen) {
|
||||||
{
|
field_1_reserved = 0;
|
||||||
|
field_2_subex_len = subexLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MemAreaPtg(RecordInputStream in)
|
public MemAreaPtg(RecordInputStream in) {
|
||||||
{
|
|
||||||
field_1_reserved = in.readInt();
|
field_1_reserved = in.readInt();
|
||||||
field_2_subex_len = in.readShort();
|
field_2_subex_len = in.readShort();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setReserved(int res)
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
field_1_reserved = res;
|
out.writeInt(field_1_reserved);
|
||||||
|
out.writeShort(field_2_subex_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getReserved()
|
public int getSize() {
|
||||||
{
|
|
||||||
return field_1_reserved;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSubexpressionLength(short subexlen)
|
|
||||||
{
|
|
||||||
field_2_subex_len = subexlen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public short getSubexpressionLength()
|
|
||||||
{
|
|
||||||
return field_2_subex_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset)
|
|
||||||
{
|
|
||||||
array[offset] = (byte) (sid + getPtgClass());
|
|
||||||
LittleEndian.putInt(array, offset + 1, field_1_reserved);
|
|
||||||
LittleEndian.putShort(array, offset + 5, field_2_subex_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSize()
|
|
||||||
{
|
|
||||||
return SIZE;
|
return SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString()
|
public String toFormulaString() {
|
||||||
{
|
|
||||||
return ""; // TODO: Not sure how to format this. -- DN
|
return ""; // TODO: Not sure how to format this. -- DN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -26,27 +26,32 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
* @author Daniel Noll (daniel at nuix dot com dot au)
|
* @author Daniel Noll (daniel at nuix dot com dot au)
|
||||||
*/
|
*/
|
||||||
|
public final class MemErrPtg extends OperandPtg {
|
||||||
public final class MemErrPtg extends MemAreaPtg {
|
|
||||||
public final static short sid = 0x27;
|
public final static short sid = 0x27;
|
||||||
|
private final static int SIZE = 7;
|
||||||
/** Creates new MemErrPtg */
|
private int field_1_reserved;
|
||||||
|
private short field_2_subex_len;
|
||||||
public MemErrPtg()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public MemErrPtg(RecordInputStream in) {
|
public MemErrPtg(RecordInputStream in) {
|
||||||
super(in);
|
field_1_reserved = in.readInt();
|
||||||
|
field_2_subex_len = in.readShort();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
super.writeBytes(array, offset);
|
out.writeByte(sid + getPtgClass());
|
||||||
array[offset] = (byte) (sid + getPtgClass());
|
out.writeInt(field_1_reserved);
|
||||||
|
out.writeShort(field_2_subex_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString()
|
public int getSize() {
|
||||||
{
|
return SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toFormulaString() {
|
||||||
return "ERR#";
|
return "ERR#";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public byte getDefaultOperandClass() {
|
||||||
|
return Ptg.CLASS_VALUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Glen Stampoultzis (glens at apache.org)
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
@ -28,8 +28,9 @@ public final class MemFuncPtg extends OperandPtg {
|
|||||||
public final static byte sid = 0x29;
|
public final static byte sid = 0x29;
|
||||||
private final int field_1_len_ref_subexpression;
|
private final int field_1_len_ref_subexpression;
|
||||||
|
|
||||||
/**Creates new function pointer from a byte array
|
/**
|
||||||
* usually called while reading an excel file.
|
* Creates new function pointer from a byte array usually called while
|
||||||
|
* reading an excel file.
|
||||||
*/
|
*/
|
||||||
public MemFuncPtg(RecordInputStream in) {
|
public MemFuncPtg(RecordInputStream in) {
|
||||||
this(in.readUShort());
|
this(in.readUShort());
|
||||||
@ -39,34 +40,28 @@ public final class MemFuncPtg extends OperandPtg {
|
|||||||
field_1_len_ref_subexpression = subExprLen;
|
field_1_len_ref_subexpression = subExprLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize()
|
public int getSize() {
|
||||||
{
|
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes( byte[] array, int offset )
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
array[offset + 0] = sid ;
|
out.writeShort(field_1_len_ref_subexpression);
|
||||||
LittleEndian.putUShort( array, offset + 1, field_1_len_ref_subexpression );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString()
|
public String toFormulaString() {
|
||||||
{
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getDefaultOperandClass()
|
public byte getDefaultOperandClass() {
|
||||||
{
|
|
||||||
return Ptg.CLASS_REF;
|
return Ptg.CLASS_REF;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumberOfOperands()
|
public int getNumberOfOperands() {
|
||||||
{
|
|
||||||
return field_1_len_ref_subexpression;
|
return field_1_len_ref_subexpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLenRefSubexpression()
|
public int getLenRefSubexpression() {
|
||||||
{
|
|
||||||
return field_1_len_ref_subexpression;
|
return field_1_len_ref_subexpression;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,10 +17,13 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Missing Function Arguments
|
* Missing Function Arguments
|
||||||
*
|
*
|
||||||
* Avik Sengupta <avik at apache.org>
|
* Avik Sengupta <avik at apache.org>
|
||||||
|
*
|
||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
*/
|
*/
|
||||||
public final class MissingArgPtg extends ScalarConstantPtg {
|
public final class MissingArgPtg extends ScalarConstantPtg {
|
||||||
@ -34,8 +37,8 @@ public final class MissingArgPtg extends ScalarConstantPtg {
|
|||||||
// enforce singleton
|
// enforce singleton
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
array[ offset + 0 ] = sid;
|
out.writeByte(sid + getPtgClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
|
||||||
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -55,20 +55,20 @@ public final class NamePtg extends OperandPtg implements WorkbookDependentFormul
|
|||||||
return field_1_label_index - 1; // convert to zero based
|
return field_1_label_index - 1; // convert to zero based
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putUShort(array, offset + 1, field_1_label_index);
|
out.writeShort(field_1_label_index);
|
||||||
LittleEndian.putUShort(array, offset + 3, field_2_zero);
|
out.writeShort(field_2_zero);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
return SIZE;
|
return SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString(FormulaRenderingWorkbook book)
|
public String toFormulaString(FormulaRenderingWorkbook book) {
|
||||||
{
|
|
||||||
return book.getNameText(this);
|
return book.getNameText(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString() {
|
public String toFormulaString() {
|
||||||
throw new RuntimeException("3D references need a workbook to determine formula text");
|
throw new RuntimeException("3D references need a workbook to determine formula text");
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
|
||||||
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -55,11 +55,11 @@ public final class NameXPtg extends OperandPtg implements WorkbookDependentFormu
|
|||||||
this(in.readUShort(), in.readUShort(), in.readUShort());
|
this(in.readUShort(), in.readUShort(), in.readUShort());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte[] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putUShort(array, offset + 1, _sheetRefIndex);
|
out.writeShort(_sheetRefIndex);
|
||||||
LittleEndian.putUShort(array, offset + 3, _nameNumber);
|
out.writeShort(_nameNumber);
|
||||||
LittleEndian.putUShort(array, offset + 5, _reserved);
|
out.writeShort(_reserved);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
|
@ -18,12 +18,12 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number
|
* Number Stores a floating point value in a formula value stored in a 8 byte
|
||||||
* Stores a floating point value in a formula
|
* field using IEEE notation
|
||||||
* value stored in a 8 byte field using IEEE notation
|
*
|
||||||
* @author Avik Sengupta
|
* @author Avik Sengupta
|
||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
*/
|
*/
|
||||||
@ -32,15 +32,16 @@ public final class NumberPtg extends ScalarConstantPtg {
|
|||||||
public final static byte sid = 0x1f;
|
public final static byte sid = 0x1f;
|
||||||
private final double field_1_value;
|
private final double field_1_value;
|
||||||
|
|
||||||
/** Create a NumberPtg from a byte array read from disk */
|
|
||||||
public NumberPtg(RecordInputStream in) {
|
public NumberPtg(RecordInputStream in) {
|
||||||
this(in.readDouble());
|
this(in.readDouble());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create a NumberPtg from a string representation of the number
|
/**
|
||||||
* Number format is not checked, it is expected to be validated in the parser
|
* Create a NumberPtg from a string representation of the number Number
|
||||||
* that calls this method.
|
* format is not checked, it is expected to be validated in the parser that
|
||||||
* @param value : String representation of a floating point number
|
* calls this method.
|
||||||
|
*
|
||||||
|
* @param value String representation of a floating point number
|
||||||
*/
|
*/
|
||||||
public NumberPtg(String value) {
|
public NumberPtg(String value) {
|
||||||
this(Double.parseDouble(value));
|
this(Double.parseDouble(value));
|
||||||
@ -54,9 +55,9 @@ public final class NumberPtg extends ScalarConstantPtg {
|
|||||||
return field_1_value;
|
return field_1_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
array[ offset + 0 ] = sid;
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putDouble(array, offset + 1, getValue());
|
out.writeDouble(getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
|
@ -15,17 +15,18 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* While formula tokens are stored in RPN order and thus do not need parenthesis for
|
* While formula tokens are stored in RPN order and thus do not need parenthesis
|
||||||
* precedence reasons, Parenthesis tokens ARE written to ensure that user entered
|
* for precedence reasons, Parenthesis tokens ARE written to ensure that user
|
||||||
* parenthesis are displayed as-is on reading back
|
* entered parenthesis are displayed as-is on reading back
|
||||||
|
*
|
||||||
|
* Avik Sengupta <lists@aviksengupta.com> Andrew C. Oliver (acoliver at
|
||||||
|
* apache dot org)
|
||||||
*
|
*
|
||||||
* Avik Sengupta <lists@aviksengupta.com>
|
|
||||||
* Andrew C. Oliver (acoliver at apache dot org)
|
|
||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
*/
|
*/
|
||||||
public final class ParenthesisPtg extends ControlPtg {
|
public final class ParenthesisPtg extends ControlPtg {
|
||||||
@ -34,26 +35,23 @@ public final class ParenthesisPtg extends ControlPtg {
|
|||||||
public final static byte sid = 0x15;
|
public final static byte sid = 0x15;
|
||||||
|
|
||||||
public static final ControlPtg instance = new ParenthesisPtg();
|
public static final ControlPtg instance = new ParenthesisPtg();
|
||||||
|
|
||||||
private ParenthesisPtg() {
|
private ParenthesisPtg() {
|
||||||
// enforce singleton
|
// enforce singleton
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset)
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
array[ offset + 0 ] = sid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize()
|
public int getSize() {
|
||||||
{
|
|
||||||
return SIZE;
|
return SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString()
|
public String toFormulaString() {
|
||||||
{
|
|
||||||
return "()";
|
return "()";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String toFormulaString(String[] operands) {
|
public String toFormulaString(String[] operands) {
|
||||||
return "(" + operands[0] + ")";
|
return "(" + operands[0] + ")";
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.HexDump;
|
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
|
||||||
import org.apache.poi.util.LittleEndianOutput;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -128,7 +128,7 @@ public abstract class Ptg implements Cloneable {
|
|||||||
|
|
||||||
private static Ptg createBasePtg(byte id, RecordInputStream in) {
|
private static Ptg createBasePtg(byte id, RecordInputStream in) {
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case 0x00: return new UnknownPtg(); // TODO - not a real Ptg
|
case 0x00: return new UnknownPtg(id); // TODO - not a real Ptg
|
||||||
case ExpPtg.sid: return new ExpPtg(in); // 0x01
|
case ExpPtg.sid: return new ExpPtg(in); // 0x01
|
||||||
case TblPtg.sid: return new TblPtg(in); // 0x02
|
case TblPtg.sid: return new TblPtg(in); // 0x02
|
||||||
case AddPtg.sid: return AddPtg.instance; // 0x03
|
case AddPtg.sid: return AddPtg.instance; // 0x03
|
||||||
@ -229,14 +229,16 @@ public abstract class Ptg implements Cloneable {
|
|||||||
*/
|
*/
|
||||||
public static int serializePtgs(Ptg[] ptgs, byte[] array, int offset) {
|
public static int serializePtgs(Ptg[] ptgs, byte[] array, int offset) {
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
int size = ptgs.length;
|
int nTokens = ptgs.length;
|
||||||
|
|
||||||
|
LittleEndianOutput out = new LittleEndianByteArrayOutputStream(array, offset);
|
||||||
|
|
||||||
List arrayPtgs = null;
|
List arrayPtgs = null;
|
||||||
|
|
||||||
for (int k = 0; k < size; k++) {
|
for (int k = 0; k < nTokens; k++) {
|
||||||
Ptg ptg = ptgs[k];
|
Ptg ptg = ptgs[k];
|
||||||
|
|
||||||
ptg.writeBytes(array, pos + offset);
|
ptg.write(out);
|
||||||
if (ptg instanceof ArrayPtg) {
|
if (ptg instanceof ArrayPtg) {
|
||||||
if (arrayPtgs == null) {
|
if (arrayPtgs == null) {
|
||||||
arrayPtgs = new ArrayList(5);
|
arrayPtgs = new ArrayList(5);
|
||||||
@ -266,38 +268,12 @@ public abstract class Ptg implements Cloneable {
|
|||||||
*/
|
*/
|
||||||
// public abstract int getDataSize();
|
// public abstract int getDataSize();
|
||||||
|
|
||||||
public final byte[] getBytes()
|
public abstract void write(LittleEndianOutput out);
|
||||||
{
|
|
||||||
int size = getSize();
|
|
||||||
byte[] bytes = new byte[ size ];
|
|
||||||
|
|
||||||
writeBytes(bytes, 0);
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
/** write this Ptg to a byte array*/
|
|
||||||
public abstract void writeBytes(byte [] array, int offset);
|
|
||||||
|
|
||||||
public void write(LittleEndianOutput out) {
|
|
||||||
out.write(getBytes()); // TODO - optimise - just a hack for the moment
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return a string representation of this token alone
|
* return a string representation of this token alone
|
||||||
*/
|
*/
|
||||||
public abstract String toFormulaString();
|
public abstract String toFormulaString();
|
||||||
/**
|
|
||||||
* dump a debug representation (hexdump) to a string
|
|
||||||
*/
|
|
||||||
public final String toDebugString() {
|
|
||||||
byte[] ba = new byte[getSize()];
|
|
||||||
writeBytes(ba,0);
|
|
||||||
try {
|
|
||||||
return HexDump.dump(ba,0,0);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Overridden toString method to ensure object hash is not printed.
|
/** Overridden toString method to ensure object hash is not printed.
|
||||||
* This helps get rid of gratuitous diffs when comparing two dumps
|
* This helps get rid of gratuitous diffs when comparing two dumps
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Daniel Noll (daniel at nuix dot com dot au)
|
* @author Daniel Noll (daniel at nuix dot com dot au)
|
||||||
@ -40,9 +42,8 @@ public final class RangePtg extends OperationPtg {
|
|||||||
return SIZE;
|
return SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes( byte[] array, int offset )
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
array[ offset + 0 ] = sid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString()
|
public String toFormulaString()
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Josh Micich
|
* @author Josh Micich
|
||||||
@ -44,18 +44,22 @@ abstract class Ref2DPtgBase extends RefPtgBase {
|
|||||||
protected Ref2DPtgBase(RecordInputStream in) {
|
protected Ref2DPtgBase(RecordInputStream in) {
|
||||||
readCoordinates(in);
|
readCoordinates(in);
|
||||||
}
|
}
|
||||||
public final void writeBytes(byte [] array, int offset) {
|
|
||||||
LittleEndian.putByte(array, offset+0, getSid() + getPtgClass());
|
public void write(LittleEndianOutput out) {
|
||||||
writeCoordinates(array, offset+1);
|
out.writeByte(getSid() + getPtgClass());
|
||||||
|
writeCoordinates(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String toFormulaString() {
|
public final String toFormulaString() {
|
||||||
return formatReferenceAsString();
|
return formatReferenceAsString();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract byte getSid();
|
protected abstract byte getSid();
|
||||||
|
|
||||||
public final int getSize() {
|
public final int getSize() {
|
||||||
return SIZE;
|
return SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String toString() {
|
public final String toString() {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
sb.append(getClass().getName());
|
sb.append(getClass().getName());
|
||||||
|
@ -22,7 +22,7 @@ import org.apache.poi.hssf.util.CellReference;
|
|||||||
import org.apache.poi.ss.formula.ExternSheetReferenceToken;
|
import org.apache.poi.ss.formula.ExternSheetReferenceToken;
|
||||||
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
||||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Title: Reference 3D Ptg <P>
|
* Title: Reference 3D Ptg <P>
|
||||||
@ -66,10 +66,10 @@ public final class Ref3DPtg extends RefPtgBase implements WorkbookDependentFormu
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(array, 0 + offset, sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putUShort(array, 1 + offset, getExternSheetIndex());
|
out.writeShort(getExternSheetIndex());
|
||||||
writeCoordinates(array, offset + 3);
|
writeCoordinates(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
|
@ -19,8 +19,7 @@ package org.apache.poi.hssf.record.formula;
|
|||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
import org.apache.poi.util.LittleEndian;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RefError - handles deleted cell reference
|
* RefError - handles deleted cell reference
|
||||||
@ -43,9 +42,9 @@ public final class RefErrorPtg extends OperandPtg {
|
|||||||
return getClass().getName();
|
return getClass().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(array, offset+0, sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putInt(array,offset+1,field_1_reserved);
|
out.writeInt(field_1_reserved);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize()
|
public int getSize()
|
||||||
|
@ -21,10 +21,11 @@ import org.apache.poi.hssf.record.RecordInputStream;
|
|||||||
import org.apache.poi.hssf.util.CellReference;
|
import org.apache.poi.hssf.util.CellReference;
|
||||||
import org.apache.poi.util.BitField;
|
import org.apache.poi.util.BitField;
|
||||||
import org.apache.poi.util.BitFieldFactory;
|
import org.apache.poi.util.BitFieldFactory;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ReferencePtgBase - handles references (such as A1, A2, IA4)
|
* ReferencePtgBase - handles references (such as A1, A2, IA4)
|
||||||
|
*
|
||||||
* @author Andrew C. Oliver (acoliver@apache.org)
|
* @author Andrew C. Oliver (acoliver@apache.org)
|
||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
*/
|
*/
|
||||||
@ -34,10 +35,9 @@ public abstract class RefPtgBase extends OperandPtg {
|
|||||||
|
|
||||||
/** The row index - zero based unsigned 16 bit value */
|
/** The row index - zero based unsigned 16 bit value */
|
||||||
private int field_1_row;
|
private int field_1_row;
|
||||||
/** Field 2
|
/**
|
||||||
* - lower 8 bits is the zero based unsigned byte column index
|
* Field 2 - lower 8 bits is the zero based unsigned byte column index - bit
|
||||||
* - bit 16 - isRowRelative
|
* 16 - isRowRelative - bit 15 - isColumnRelative
|
||||||
* - bit 15 - isColumnRelative
|
|
||||||
*/
|
*/
|
||||||
private int field_2_col;
|
private int field_2_col;
|
||||||
private static final BitField rowRelative = BitFieldFactory.getInstance(0x8000);
|
private static final BitField rowRelative = BitFieldFactory.getInstance(0x8000);
|
||||||
@ -71,16 +71,17 @@ public abstract class RefPtgBase extends OperandPtg {
|
|||||||
field_1_row = in.readUShort();
|
field_1_row = in.readUShort();
|
||||||
field_2_col = in.readUShort();
|
field_2_col = in.readUShort();
|
||||||
}
|
}
|
||||||
protected final void writeCoordinates(byte[] array, int offset) {
|
|
||||||
LittleEndian.putUShort(array, offset + 0, field_1_row);
|
protected final void writeCoordinates(LittleEndianOutput out) {
|
||||||
LittleEndian.putUShort(array, offset + 2, field_2_col);
|
out.writeShort(field_1_row);
|
||||||
|
out.writeShort(field_2_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void setRow(int row) {
|
public final void setRow(int rowIndex) {
|
||||||
if(row < 0 || row >= MAX_ROW_NUMBER) {
|
if (rowIndex < 0 || rowIndex >= MAX_ROW_NUMBER) {
|
||||||
throw new IllegalArgumentException("The row number, when specified as an integer, must be between 0 and " + MAX_ROW_NUMBER);
|
throw new IllegalArgumentException("rowIndex must be between 0 and " + MAX_ROW_NUMBER);
|
||||||
}
|
}
|
||||||
field_1_row = row;
|
field_1_row = rowIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -116,6 +117,7 @@ public abstract class RefPtgBase extends OperandPtg {
|
|||||||
public final int getColumn() {
|
public final int getColumn() {
|
||||||
return column.getValue(field_2_col);
|
return column.getValue(field_2_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final String formatReferenceAsString() {
|
protected final String formatReferenceAsString() {
|
||||||
// Only make cell references as needed. Memory is an issue
|
// Only make cell references as needed. Memory is an issue
|
||||||
CellReference cr = new CellReference(getRow(), getColumn(), !isRowRelative(), !isColRelative());
|
CellReference cr = new CellReference(getRow(), getColumn(), !isRowRelative(), !isColRelative());
|
||||||
|
@ -20,6 +20,7 @@ package org.apache.poi.hssf.record.formula;
|
|||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.BitField;
|
import org.apache.poi.util.BitField;
|
||||||
import org.apache.poi.util.BitFieldFactory;
|
import org.apache.poi.util.BitFieldFactory;
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
import org.apache.poi.util.StringUtil;
|
import org.apache.poi.util.StringUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,14 +79,14 @@ public final class StringPtg extends ScalarConstantPtg {
|
|||||||
return field_3_string;
|
return field_3_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte[] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
array[offset + 0] = sid;
|
out.writeByte(sid + getPtgClass());
|
||||||
array[offset + 1] = (byte) field_1_length;
|
out.writeByte(field_1_length);
|
||||||
array[offset + 2] = field_2_options;
|
out.writeByte(field_2_options);
|
||||||
if (fHighByte.isSet(field_2_options)) {
|
if (fHighByte.isSet(field_2_options)) {
|
||||||
StringUtil.putUnicodeLE(getValue(), array, offset + 3);
|
StringUtil.putUnicodeLE(getValue(), out);
|
||||||
} else {
|
} else {
|
||||||
StringUtil.putCompressedUnicode(getValue(), array, offset + 3);
|
StringUtil.putCompressedUnicode(getValue(), out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ package org.apache.poi.hssf.record.formula;
|
|||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordFormatException;
|
import org.apache.poi.hssf.record.RecordFormatException;
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This ptg indicates a data table.
|
* This ptg indicates a data table.
|
||||||
@ -48,10 +48,10 @@ public final class TblPtg extends ControlPtg {
|
|||||||
field_2_first_col = in.readUShort();
|
field_2_first_col = in.readUShort();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(byte [] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
LittleEndian.putByte(array, offset+0, sid);
|
out.writeByte(sid + getPtgClass());
|
||||||
LittleEndian.putUShort(array, offset+1, field_1_first_row);
|
out.writeShort(field_1_first_row);
|
||||||
LittleEndian.putUShort(array, offset+3, field_2_first_col);
|
out.writeShort(field_2_first_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Glen Stampoultzis (glens at apache.org)
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
@ -39,9 +41,8 @@ public final class UnionPtg extends OperationPtg {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes( byte[] array, int offset )
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(sid + getPtgClass());
|
||||||
array[ offset + 0 ] = sid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString()
|
public String toFormulaString()
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
==================================================================== */
|
==================================================================== */
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -25,22 +25,17 @@ import org.apache.poi.hssf.record.RecordInputStream;
|
|||||||
*/
|
*/
|
||||||
public class UnknownPtg extends Ptg {
|
public class UnknownPtg extends Ptg {
|
||||||
private short size = 1;
|
private short size = 1;
|
||||||
|
private final int _sid;
|
||||||
|
|
||||||
/** Creates new UnknownPtg */
|
public UnknownPtg(int sid) {
|
||||||
|
_sid = sid;
|
||||||
public UnknownPtg()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnknownPtg(RecordInputStream in) {
|
|
||||||
// doesn't need anything
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBaseToken() {
|
public boolean isBaseToken() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
public void writeBytes(byte [] array, int offset)
|
public void write(LittleEndianOutput out) {
|
||||||
{
|
out.writeByte(_sid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize()
|
public int getSize()
|
||||||
@ -55,8 +50,6 @@ public class UnknownPtg extends Ptg {
|
|||||||
public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
|
public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
|
||||||
|
|
||||||
public Object clone() {
|
public Object clone() {
|
||||||
return new UnknownPtg();
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,11 +17,12 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common superclass of all value operators.
|
* Common superclass of all value operators. Subclasses include all unary and
|
||||||
* Subclasses include all unary and binary operators except for the reference operators (IntersectionPtg, RangePtg, UnionPtg)
|
* binary operators except for the reference operators (IntersectionPtg,
|
||||||
|
* RangePtg, UnionPtg)
|
||||||
*
|
*
|
||||||
* @author Josh Micich
|
* @author Josh Micich
|
||||||
*/
|
*/
|
||||||
@ -38,8 +39,8 @@ public abstract class ValueOperatorPtg extends OperationPtg {
|
|||||||
return Ptg.CLASS_VALUE;
|
return Ptg.CLASS_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void writeBytes(byte[] array, int offset) {
|
public void write(LittleEndianOutput out) {
|
||||||
array[offset + 0] = getSid();
|
out.writeByte(getSid());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract byte getSid();
|
protected abstract byte getSid();
|
||||||
@ -47,6 +48,7 @@ public abstract class ValueOperatorPtg extends OperationPtg {
|
|||||||
public final int getSize() {
|
public final int getSize() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String toFormulaString() {
|
public final String toFormulaString() {
|
||||||
// TODO - prune this method out of the hierarchy
|
// TODO - prune this method out of the hierarchy
|
||||||
throw new RuntimeException("toFormulaString(String[] operands) should be used for subclasses of OperationPtgs");
|
throw new RuntimeException("toFormulaString(String[] operands) should be used for subclasses of OperationPtgs");
|
||||||
|
@ -0,0 +1,84 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.util;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adapts a plain byte array to {@link LittleEndianOutput}
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Josh Micich
|
||||||
|
*/
|
||||||
|
public final class LittleEndianByteArrayOutputStream implements LittleEndianOutput {
|
||||||
|
private final byte[] _buf;
|
||||||
|
private final int _endIndex;
|
||||||
|
private int _writeIndex;
|
||||||
|
|
||||||
|
public LittleEndianByteArrayOutputStream(byte[] buf, int startOffset, int maxWriteLen) {
|
||||||
|
_buf = buf;
|
||||||
|
_writeIndex = startOffset;
|
||||||
|
_endIndex = startOffset + maxWriteLen;
|
||||||
|
}
|
||||||
|
public LittleEndianByteArrayOutputStream(byte[] buf, int startOffset) {
|
||||||
|
this(buf, startOffset, buf.length - startOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkPosition(int i) {
|
||||||
|
if (i > _endIndex - _writeIndex) {
|
||||||
|
throw new RuntimeException("Buffer overrun");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeByte(int v) {
|
||||||
|
checkPosition(1);
|
||||||
|
_buf[_writeIndex++] = (byte)v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeDouble(double v) {
|
||||||
|
writeLong(Double.doubleToLongBits(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeInt(int v) {
|
||||||
|
checkPosition(4);
|
||||||
|
int i = _writeIndex;
|
||||||
|
_buf[i++] = (byte)((v >>> 0) & 0xFF);
|
||||||
|
_buf[i++] = (byte)((v >>> 8) & 0xFF);
|
||||||
|
_buf[i++] = (byte)((v >>> 16) & 0xFF);
|
||||||
|
_buf[i++] = (byte)((v >>> 24) & 0xFF);
|
||||||
|
_writeIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeLong(long v) {
|
||||||
|
writeInt((int)(v >> 0));
|
||||||
|
writeInt((int)(v >> 32));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeShort(int v) {
|
||||||
|
checkPosition(2);
|
||||||
|
int i = _writeIndex;
|
||||||
|
_buf[i++] = (byte)((v >>> 0) & 0xFF);
|
||||||
|
_buf[i++] = (byte)((v >>> 8) & 0xFF);
|
||||||
|
_writeIndex = i;
|
||||||
|
}
|
||||||
|
public void write(byte[] b) {
|
||||||
|
int len = b.length;
|
||||||
|
checkPosition(len);
|
||||||
|
System.arraycopy(b, 0, _buf, _writeIndex, len);
|
||||||
|
_writeIndex += len;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user