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
1369bb9314
commit
812aded595
@ -51,7 +51,7 @@ public final class LinkedDataFormulaField {
|
||||
.append( "=" )
|
||||
.append(ptg.toString() )
|
||||
.append( "\n" )
|
||||
.append(ptg.toDebugString() )
|
||||
.append(ptg.toString())
|
||||
.append( "\n" );
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ import org.apache.poi.util.BitField;
|
||||
import org.apache.poi.util.BitFieldFactory;
|
||||
import org.apache.poi.util.HexDump;
|
||||
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
|
||||
@ -190,36 +192,31 @@ public final class TextObjectRecord extends Record {
|
||||
|
||||
private int serializeTXORecord(int offset, byte[] data) {
|
||||
int dataSize = getDataSize();
|
||||
int recSize = dataSize+4;
|
||||
LittleEndianOutput out = new LittleEndianByteArrayOutputStream(data, offset, recSize);
|
||||
|
||||
LittleEndian.putUShort(data, 0 + offset, TextObjectRecord.sid);
|
||||
LittleEndian.putUShort(data, 2 + offset, dataSize);
|
||||
out.writeShort(TextObjectRecord.sid);
|
||||
out.writeShort(dataSize);
|
||||
|
||||
|
||||
LittleEndian.putUShort(data, 4 + offset, field_1_options);
|
||||
LittleEndian.putUShort(data, 6 + offset, field_2_textOrientation);
|
||||
LittleEndian.putUShort(data, 8 + offset, field_3_reserved4);
|
||||
LittleEndian.putUShort(data, 10 + offset, field_4_reserved5);
|
||||
LittleEndian.putUShort(data, 12 + offset, field_5_reserved6);
|
||||
LittleEndian.putUShort(data, 14 + offset, _text.length());
|
||||
LittleEndian.putUShort(data, 16 + offset, getFormattingDataLength());
|
||||
LittleEndian.putInt(data, 18 + offset, field_8_reserved7);
|
||||
out.writeShort(field_1_options);
|
||||
out.writeShort(field_2_textOrientation);
|
||||
out.writeShort(field_3_reserved4);
|
||||
out.writeShort(field_4_reserved5);
|
||||
out.writeShort(field_5_reserved6);
|
||||
out.writeShort(_text.length());
|
||||
out.writeShort(getFormattingDataLength());
|
||||
out.writeInt(field_8_reserved7);
|
||||
|
||||
if (_linkRefPtg != null) {
|
||||
int pos = offset+22;
|
||||
int formulaSize = _linkRefPtg.getSize();
|
||||
LittleEndian.putUShort(data, pos, formulaSize);
|
||||
pos += LittleEndian.SHORT_SIZE;
|
||||
LittleEndian.putInt(data, pos, _unknownPreFormulaInt);
|
||||
pos += LittleEndian.INT_SIZE;
|
||||
_linkRefPtg.writeBytes(data, pos);
|
||||
pos += formulaSize;
|
||||
out.writeShort(formulaSize);
|
||||
out.writeInt(_unknownPreFormulaInt);
|
||||
_linkRefPtg.write(out);
|
||||
if (_unknownPostFormulaByte != null) {
|
||||
LittleEndian.putByte(data, pos, _unknownPostFormulaByte.byteValue());
|
||||
pos += LittleEndian.BYTE_SIZE;
|
||||
out.writeByte(_unknownPostFormulaByte.byteValue());
|
||||
}
|
||||
}
|
||||
|
||||
return 4 + dataSize;
|
||||
return recSize;
|
||||
}
|
||||
|
||||
private int serializeTrailingRecords(int offset, byte[] data) {
|
||||
|
@ -98,7 +98,6 @@ public abstract class AbstractFunctionPtg extends OperationPtg {
|
||||
buf.append(")");
|
||||
}
|
||||
|
||||
public abstract void writeBytes(byte[] array, int offset);
|
||||
public abstract int getSize();
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
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
|
||||
@ -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) {
|
||||
super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
|
||||
}
|
||||
|
||||
protected Area2DPtgBase(RecordInputStream in) {
|
||||
readCoordinates(in);
|
||||
}
|
||||
|
||||
protected abstract byte getSid();
|
||||
|
||||
public final void writeBytes(byte [] array, int offset) {
|
||||
LittleEndian.putByte(array, offset+0, getSid() + getPtgClass());
|
||||
writeCoordinates(array, offset+1);
|
||||
public final void write(LittleEndianOutput out) {
|
||||
out.writeByte(getSid() + getPtgClass());
|
||||
writeCoordinates(out);
|
||||
}
|
||||
|
||||
public Area2DPtgBase(String arearef) {
|
||||
super(arearef);
|
||||
}
|
||||
|
||||
public final int getSize() {
|
||||
return SIZE;
|
||||
}
|
||||
|
||||
public final String toFormulaString() {
|
||||
return formatReferenceAsString();
|
||||
}
|
||||
|
||||
public final String toString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
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.FormulaRenderingWorkbook;
|
||||
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>
|
||||
@ -67,10 +67,10 @@ public final class Area3DPtg extends AreaPtgBase implements WorkbookDependentFor
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void writeBytes(byte[] array, int offset) {
|
||||
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
||||
LittleEndian.putUShort(array, 1 + offset, field_1_index_extern_sheet);
|
||||
writeCoordinates(array, offset+3);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(field_1_index_extern_sheet);
|
||||
writeCoordinates(out);
|
||||
}
|
||||
|
||||
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.usermodel.HSSFErrorConstants;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* AreaErr - handles deleted cell area references.
|
||||
@ -42,10 +42,10 @@ public final class AreaErrPtg extends OperandPtg {
|
||||
unused2 = in.readInt();
|
||||
}
|
||||
|
||||
public void writeBytes(byte[] array, int offset) {
|
||||
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
||||
LittleEndian.putInt(array, offset + 1, unused1);
|
||||
LittleEndian.putInt(array, offset + 5, unused2);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeInt(unused1);
|
||||
out.writeInt(unused2);
|
||||
}
|
||||
|
||||
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.util.BitField;
|
||||
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.
|
||||
@ -119,11 +119,11 @@ public abstract class AreaPtgBase extends OperandPtg implements AreaI {
|
||||
field_3_first_column = in.readUShort();
|
||||
field_4_last_column = in.readUShort();
|
||||
}
|
||||
protected final void writeCoordinates(byte[] array, int offset) {
|
||||
LittleEndian.putUShort(array, offset + 0, field_1_first_row);
|
||||
LittleEndian.putUShort(array, offset + 2, field_2_last_row);
|
||||
LittleEndian.putUShort(array, offset + 4, field_3_first_column);
|
||||
LittleEndian.putUShort(array, offset + 6, field_4_last_column);
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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.ErrorConstant;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* ArrayPtg - handles arrays
|
||||
@ -153,10 +154,9 @@ public final class ArrayPtg extends Ptg {
|
||||
return rowIx * token_1_columns + colIx;
|
||||
}
|
||||
|
||||
public void writeBytes(byte[] data, int offset) {
|
||||
|
||||
LittleEndian.putByte(data, offset + 0, sid + getPtgClass());
|
||||
System.arraycopy(field_1_reserved, 0, data, offset+1, RESERVED_FIELD_LEN);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.write(field_1_reserved);
|
||||
}
|
||||
|
||||
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.BitFieldFactory;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* "Special Attributes"
|
||||
@ -213,19 +214,16 @@ public final class AttrPtg extends ControlPtg {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset)
|
||||
{
|
||||
LittleEndian.putByte(array, offset+0, sid);
|
||||
LittleEndian.putByte(array, offset+1, field_1_options);
|
||||
LittleEndian.putShort(array,offset+2, field_2_data);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeByte(field_1_options);
|
||||
out.writeShort(field_2_data);
|
||||
int[] jt = _jumpTable;
|
||||
if (jt != null) {
|
||||
int joff = offset+4;
|
||||
for (int i = 0; i < jt.length; i++) {
|
||||
LittleEndian.putUShort(array, joff, jt[i]);
|
||||
joff+=2;
|
||||
out.writeShort(jt[i]);
|
||||
}
|
||||
LittleEndian.putUShort(array, joff, _chooseFuncOffset);
|
||||
out.writeShort(_chooseFuncOffset);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,17 +18,18 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.hssf.record.RecordInputStream;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* Boolean (boolean)
|
||||
* Stores a (java) boolean value in a formula.
|
||||
* Boolean (boolean) Stores a (java) boolean value in a formula.
|
||||
*
|
||||
* @author Paul Krause (pkrause at soundbite dot com)
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author Jason Height (jheight at chariot dot net dot au)
|
||||
*/
|
||||
public final class BoolPtg extends ScalarConstantPtg {
|
||||
public final static int SIZE = 2;
|
||||
public final static byte sid = 0x1d;
|
||||
public final static byte sid = 0x1D;
|
||||
private final boolean _value;
|
||||
|
||||
public BoolPtg(RecordInputStream in) {
|
||||
@ -43,9 +44,9 @@ public final class BoolPtg extends ScalarConstantPtg {
|
||||
return _value;
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset) {
|
||||
array[ offset + 0 ] = sid;
|
||||
array[ offset + 1 ] = (byte) (_value ? 1 : 0);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeByte(_value ? 1 : 0);
|
||||
}
|
||||
|
||||
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.usermodel.HSSFErrorConstants;
|
||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||
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>
|
||||
@ -60,10 +60,10 @@ public final class DeletedArea3DPtg extends OperandPtg implements WorkbookDepend
|
||||
public int getSize() {
|
||||
return 11;
|
||||
}
|
||||
public void writeBytes(byte[] data, int offset) {
|
||||
LittleEndian.putByte(data, 0 + offset, sid + getPtgClass());
|
||||
LittleEndian.putUShort(data, 1 + offset, field_1_index_extern_sheet);
|
||||
LittleEndian.putInt(data, 3 + offset, unused1);
|
||||
LittleEndian.putInt(data, 7 + offset, unused2);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(field_1_index_extern_sheet);
|
||||
out.writeInt(unused1);
|
||||
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.usermodel.HSSFErrorConstants;
|
||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||
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>
|
||||
@ -60,9 +60,9 @@ public final class DeletedRef3DPtg extends OperandPtg implements WorkbookDepende
|
||||
public int getSize() {
|
||||
return 7;
|
||||
}
|
||||
public void writeBytes(byte[] data, int offset) {
|
||||
LittleEndian.putByte(data, 0 + offset, sid + getPtgClass());
|
||||
LittleEndian.putUShort(data, 1 + offset, field_1_index_extern_sheet);
|
||||
LittleEndian.putInt(data, 3 + offset, unused1);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(field_1_index_extern_sheet);
|
||||
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.usermodel.HSSFErrorConstants;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* @author Daniel Noll (daniel at nuix dot com dot au)
|
||||
@ -61,10 +62,9 @@ public final class ErrPtg extends ScalarConstantPtg {
|
||||
return valueOf(in.readByte());
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset)
|
||||
{
|
||||
array[offset] = (byte) (sid + getPtgClass());
|
||||
array[offset + 1] = (byte)field_1_error_code;
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeByte(field_1_error_code);
|
||||
}
|
||||
|
||||
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.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();
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset)
|
||||
{
|
||||
array[offset+0]= (byte) (sid);
|
||||
LittleEndian.putShort(array,offset+1,field_1_first_row);
|
||||
LittleEndian.putShort(array,offset+3,field_2_first_col);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(field_1_first_row);
|
||||
out.writeShort(field_2_first_col);
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
|
@ -16,10 +16,10 @@
|
||||
==================================================================== */
|
||||
|
||||
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.formula.function.FunctionMetadata;
|
||||
import org.apache.poi.hssf.record.formula.function.FunctionMetadataRegistry;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* @author aviks
|
||||
@ -55,9 +55,9 @@ public final class FuncPtg extends AbstractFunctionPtg {
|
||||
paramClass = fm.getParameterClassCodes();
|
||||
}
|
||||
|
||||
public void writeBytes(byte[] array, int offset) {
|
||||
array[offset+0]= (byte) (sid + getPtgClass());
|
||||
LittleEndian.putShort(array,offset+1,field_2_fnc_index);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(field_2_fnc_index);
|
||||
}
|
||||
|
||||
public int getNumberOfOperands() {
|
||||
|
@ -16,10 +16,10 @@
|
||||
==================================================================== */
|
||||
|
||||
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.formula.function.FunctionMetadata;
|
||||
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) {
|
||||
array[offset+0]=(byte) (sid + getPtgClass());
|
||||
array[offset+1]=field_1_num_args;
|
||||
LittleEndian.putShort(array,offset+2,field_2_fnc_index);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeByte(field_1_num_args);
|
||||
out.writeShort(field_2_fnc_index);
|
||||
}
|
||||
|
||||
public int getNumberOfOperands() {
|
||||
|
@ -18,11 +18,12 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.hssf.record.RecordInputStream;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* Integer (unsigned short integer)
|
||||
* Stores an unsigned short value (java int) in a formula
|
||||
* Integer (unsigned short integer) Stores an unsigned short value (java int) in
|
||||
* a formula
|
||||
*
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author Jason Height (jheight at chariot dot net dot au)
|
||||
*/
|
||||
@ -33,11 +34,12 @@ public final class IntPtg extends ScalarConstantPtg {
|
||||
|
||||
/**
|
||||
* Excel represents integers 0..65535 with the tInt token.
|
||||
*
|
||||
* @return <code>true</code> if the specified value is within the range of values
|
||||
* <tt>IntPtg</tt> can represent.
|
||||
*/
|
||||
public static boolean isInRange(int i) {
|
||||
return i>=MIN_VALUE && i <=MAX_VALUE;
|
||||
return i >= MIN_VALUE && i <= MAX_VALUE;
|
||||
}
|
||||
|
||||
public final static int SIZE = 3;
|
||||
@ -49,7 +51,7 @@ public final class IntPtg extends ScalarConstantPtg {
|
||||
}
|
||||
|
||||
public IntPtg(int value) {
|
||||
if(!isInRange(value)) {
|
||||
if (!isInRange(value)) {
|
||||
throw new IllegalArgumentException("value is out of range: " + value);
|
||||
}
|
||||
field_1_value = value;
|
||||
@ -59,9 +61,9 @@ public final class IntPtg extends ScalarConstantPtg {
|
||||
return field_1_value;
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset) {
|
||||
array[ offset + 0 ] = sid;
|
||||
LittleEndian.putUShort(array, offset + 1, getValue());
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(getValue());
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* @author Daniel Noll (daniel at nuix dot com dot au)
|
||||
@ -34,37 +35,28 @@ public final class IntersectionPtg extends OperationPtg {
|
||||
return true;
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
{
|
||||
public int getSize() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public void writeBytes( byte[] array, int offset )
|
||||
{
|
||||
array[ offset + 0 ] = sid;
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
}
|
||||
|
||||
/** Implementation of method from Ptg */
|
||||
public String toFormulaString()
|
||||
{
|
||||
public String toFormulaString() {
|
||||
return " ";
|
||||
}
|
||||
|
||||
|
||||
/** implementation of method from OperationsPtg*/
|
||||
public String toFormulaString(String[] operands)
|
||||
{
|
||||
public String toFormulaString(String[] operands) {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
|
||||
buffer.append(operands[ 0 ]);
|
||||
buffer.append(operands[0]);
|
||||
buffer.append(" ");
|
||||
buffer.append(operands[ 1 ]);
|
||||
buffer.append(operands[1]);
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public int getNumberOfOperands()
|
||||
{
|
||||
public int getNumberOfOperands() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
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)
|
||||
@ -26,55 +26,32 @@ import org.apache.poi.util.LittleEndian;
|
||||
public class MemAreaPtg extends OperandPtg {
|
||||
public final static short sid = 0x26;
|
||||
private final static int SIZE = 7;
|
||||
private int field_1_reserved;
|
||||
private short field_2_subex_len;
|
||||
private final int field_1_reserved;
|
||||
private final int field_2_subex_len;
|
||||
|
||||
/** 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_2_subex_len = in.readShort();
|
||||
}
|
||||
|
||||
public void setReserved(int res)
|
||||
{
|
||||
field_1_reserved = res;
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeInt(field_1_reserved);
|
||||
out.writeShort(field_2_subex_len);
|
||||
}
|
||||
|
||||
public int getReserved()
|
||||
{
|
||||
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()
|
||||
{
|
||||
public int getSize() {
|
||||
return SIZE;
|
||||
}
|
||||
|
||||
public String toFormulaString()
|
||||
{
|
||||
public String toFormulaString() {
|
||||
return ""; // TODO: Not sure how to format this. -- DN
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
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 Daniel Noll (daniel at nuix dot com dot au)
|
||||
*/
|
||||
|
||||
public final class MemErrPtg extends MemAreaPtg {
|
||||
public final class MemErrPtg extends OperandPtg {
|
||||
public final static short sid = 0x27;
|
||||
|
||||
/** Creates new MemErrPtg */
|
||||
|
||||
public MemErrPtg()
|
||||
{
|
||||
}
|
||||
private final static int SIZE = 7;
|
||||
private int field_1_reserved;
|
||||
private short field_2_subex_len;
|
||||
|
||||
public MemErrPtg(RecordInputStream in) {
|
||||
super(in);
|
||||
field_1_reserved = in.readInt();
|
||||
field_2_subex_len = in.readShort();
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset) {
|
||||
super.writeBytes(array, offset);
|
||||
array[offset] = (byte) (sid + getPtgClass());
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(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#";
|
||||
}
|
||||
|
||||
public byte getDefaultOperandClass() {
|
||||
return Ptg.CLASS_VALUE;
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
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)
|
||||
@ -28,8 +28,9 @@ public final class MemFuncPtg extends OperandPtg {
|
||||
public final static byte sid = 0x29;
|
||||
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) {
|
||||
this(in.readUShort());
|
||||
@ -39,34 +40,28 @@ public final class MemFuncPtg extends OperandPtg {
|
||||
field_1_len_ref_subexpression = subExprLen;
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
{
|
||||
public int getSize() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
public void writeBytes( byte[] array, int offset )
|
||||
{
|
||||
array[offset + 0] = sid ;
|
||||
LittleEndian.putUShort( array, offset + 1, field_1_len_ref_subexpression );
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(field_1_len_ref_subexpression);
|
||||
}
|
||||
|
||||
public String toFormulaString()
|
||||
{
|
||||
public String toFormulaString() {
|
||||
return "";
|
||||
}
|
||||
|
||||
public byte getDefaultOperandClass()
|
||||
{
|
||||
public byte getDefaultOperandClass() {
|
||||
return Ptg.CLASS_REF;
|
||||
}
|
||||
|
||||
public int getNumberOfOperands()
|
||||
{
|
||||
public int getNumberOfOperands() {
|
||||
return field_1_len_ref_subexpression;
|
||||
}
|
||||
|
||||
public int getLenRefSubexpression()
|
||||
{
|
||||
public int getLenRefSubexpression() {
|
||||
return field_1_len_ref_subexpression;
|
||||
}
|
||||
}
|
@ -17,10 +17,13 @@
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* Missing Function Arguments
|
||||
*
|
||||
* Avik Sengupta <avik at apache.org>
|
||||
*
|
||||
* @author Jason Height (jheight at chariot dot net dot au)
|
||||
*/
|
||||
public final class MissingArgPtg extends ScalarConstantPtg {
|
||||
@ -34,8 +37,8 @@ public final class MissingArgPtg extends ScalarConstantPtg {
|
||||
// enforce singleton
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset) {
|
||||
array[ offset + 0 ] = sid;
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
|
@ -18,9 +18,9 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
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.util.LittleEndian;
|
||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -38,7 +38,7 @@ public final class NamePtg extends OperandPtg implements WorkbookDependentFormul
|
||||
* @param nameIndex zero-based index to name within workbook
|
||||
*/
|
||||
public NamePtg(int nameIndex) {
|
||||
field_1_label_index = 1+nameIndex; // convert to 1-based
|
||||
field_1_label_index = 1 + nameIndex; // convert to 1-based
|
||||
}
|
||||
|
||||
/** Creates new NamePtg */
|
||||
@ -52,23 +52,23 @@ public final class NamePtg extends OperandPtg implements WorkbookDependentFormul
|
||||
* @return zero based index to a defined name record in the LinkTable
|
||||
*/
|
||||
public int getIndex() {
|
||||
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) {
|
||||
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
||||
LittleEndian.putUShort(array, offset + 1, field_1_label_index);
|
||||
LittleEndian.putUShort(array, offset + 3, field_2_zero);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(field_1_label_index);
|
||||
out.writeShort(field_2_zero);
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
return SIZE;
|
||||
}
|
||||
|
||||
public String toFormulaString(FormulaRenderingWorkbook book)
|
||||
{
|
||||
public String toFormulaString(FormulaRenderingWorkbook book) {
|
||||
return book.getNameText(this);
|
||||
}
|
||||
|
||||
public String toFormulaString() {
|
||||
throw new RuntimeException("3D references need a workbook to determine formula text");
|
||||
}
|
||||
|
@ -18,9 +18,9 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
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.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());
|
||||
}
|
||||
|
||||
public void writeBytes(byte[] array, int offset) {
|
||||
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
||||
LittleEndian.putUShort(array, offset + 1, _sheetRefIndex);
|
||||
LittleEndian.putUShort(array, offset + 3, _nameNumber);
|
||||
LittleEndian.putUShort(array, offset + 5, _reserved);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(_sheetRefIndex);
|
||||
out.writeShort(_nameNumber);
|
||||
out.writeShort(_reserved);
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
|
@ -18,12 +18,12 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.hssf.record.RecordInputStream;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* Number
|
||||
* Stores a floating point value in a formula
|
||||
* value stored in a 8 byte field using IEEE notation
|
||||
* Number Stores a floating point value in a formula value stored in a 8 byte
|
||||
* field using IEEE notation
|
||||
*
|
||||
* @author Avik Sengupta
|
||||
* @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;
|
||||
private final double field_1_value;
|
||||
|
||||
/** Create a NumberPtg from a byte array read from disk */
|
||||
public NumberPtg(RecordInputStream in) {
|
||||
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
|
||||
* that calls this method.
|
||||
* @param value : String representation of a floating point number
|
||||
/**
|
||||
* Create a NumberPtg from a string representation of the number Number
|
||||
* format is not checked, it is expected to be validated in the parser that
|
||||
* calls this method.
|
||||
*
|
||||
* @param value String representation of a floating point number
|
||||
*/
|
||||
public NumberPtg(String value) {
|
||||
this(Double.parseDouble(value));
|
||||
@ -54,9 +55,9 @@ public final class NumberPtg extends ScalarConstantPtg {
|
||||
return field_1_value;
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset) {
|
||||
array[ offset + 0 ] = sid;
|
||||
LittleEndian.putDouble(array, offset + 1, getValue());
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeDouble(getValue());
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
|
@ -15,17 +15,18 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
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
|
||||
* precedence reasons, Parenthesis tokens ARE written to ensure that user entered
|
||||
* parenthesis are displayed as-is on reading back
|
||||
* While formula tokens are stored in RPN order and thus do not need parenthesis
|
||||
* for precedence reasons, Parenthesis tokens ARE written to ensure that user
|
||||
* 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)
|
||||
*/
|
||||
public final class ParenthesisPtg extends ControlPtg {
|
||||
@ -34,27 +35,24 @@ public final class ParenthesisPtg extends ControlPtg {
|
||||
public final static byte sid = 0x15;
|
||||
|
||||
public static final ControlPtg instance = new ParenthesisPtg();
|
||||
|
||||
private ParenthesisPtg() {
|
||||
// enforce singleton
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset)
|
||||
{
|
||||
array[ offset + 0 ] = sid;
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
{
|
||||
public int getSize() {
|
||||
return SIZE;
|
||||
}
|
||||
|
||||
public String toFormulaString()
|
||||
{
|
||||
public String toFormulaString() {
|
||||
return "()";
|
||||
}
|
||||
|
||||
|
||||
public String toFormulaString(String[] operands) {
|
||||
return "("+operands[0]+")";
|
||||
return "(" + operands[0] + ")";
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
@ -128,7 +128,7 @@ public abstract class Ptg implements Cloneable {
|
||||
|
||||
private static Ptg createBasePtg(byte id, RecordInputStream in) {
|
||||
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 TblPtg.sid: return new TblPtg(in); // 0x02
|
||||
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) {
|
||||
int pos = 0;
|
||||
int size = ptgs.length;
|
||||
int nTokens = ptgs.length;
|
||||
|
||||
LittleEndianOutput out = new LittleEndianByteArrayOutputStream(array, offset);
|
||||
|
||||
List arrayPtgs = null;
|
||||
|
||||
for (int k = 0; k < size; k++) {
|
||||
for (int k = 0; k < nTokens; k++) {
|
||||
Ptg ptg = ptgs[k];
|
||||
|
||||
ptg.writeBytes(array, pos + offset);
|
||||
ptg.write(out);
|
||||
if (ptg instanceof ArrayPtg) {
|
||||
if (arrayPtgs == null) {
|
||||
arrayPtgs = new ArrayList(5);
|
||||
@ -266,38 +268,12 @@ public abstract class Ptg implements Cloneable {
|
||||
*/
|
||||
// public abstract int getDataSize();
|
||||
|
||||
public final byte[] getBytes()
|
||||
{
|
||||
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
|
||||
}
|
||||
public abstract void write(LittleEndianOutput out);
|
||||
|
||||
/**
|
||||
* return a string representation of this token alone
|
||||
*/
|
||||
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.
|
||||
* This helps get rid of gratuitous diffs when comparing two dumps
|
||||
|
@ -17,6 +17,8 @@
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
|
||||
/**
|
||||
* @author Daniel Noll (daniel at nuix dot com dot au)
|
||||
@ -40,9 +42,8 @@ public final class RangePtg extends OperationPtg {
|
||||
return SIZE;
|
||||
}
|
||||
|
||||
public void writeBytes( byte[] array, int offset )
|
||||
{
|
||||
array[ offset + 0 ] = sid;
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
}
|
||||
|
||||
public String toFormulaString()
|
||||
|
@ -18,7 +18,7 @@
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.hssf.record.RecordInputStream;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* @author Josh Micich
|
||||
@ -44,18 +44,22 @@ abstract class Ref2DPtgBase extends RefPtgBase {
|
||||
protected Ref2DPtgBase(RecordInputStream in) {
|
||||
readCoordinates(in);
|
||||
}
|
||||
public final void writeBytes(byte [] array, int offset) {
|
||||
LittleEndian.putByte(array, offset+0, getSid() + getPtgClass());
|
||||
writeCoordinates(array, offset+1);
|
||||
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(getSid() + getPtgClass());
|
||||
writeCoordinates(out);
|
||||
}
|
||||
|
||||
public final String toFormulaString() {
|
||||
return formatReferenceAsString();
|
||||
}
|
||||
|
||||
protected abstract byte getSid();
|
||||
|
||||
public final int getSize() {
|
||||
return SIZE;
|
||||
}
|
||||
|
||||
public final String toString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
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.FormulaRenderingWorkbook;
|
||||
import org.apache.poi.ss.formula.WorkbookDependentFormula;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* Title: Reference 3D Ptg <P>
|
||||
@ -66,10 +66,10 @@ public final class Ref3DPtg extends RefPtgBase implements WorkbookDependentFormu
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset) {
|
||||
LittleEndian.putByte(array, 0 + offset, sid + getPtgClass());
|
||||
LittleEndian.putUShort(array, 1 + offset, getExternSheetIndex());
|
||||
writeCoordinates(array, offset + 3);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(getExternSheetIndex());
|
||||
writeCoordinates(out);
|
||||
}
|
||||
|
||||
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.usermodel.HSSFErrorConstants;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* RefError - handles deleted cell reference
|
||||
@ -43,9 +42,9 @@ public final class RefErrorPtg extends OperandPtg {
|
||||
return getClass().getName();
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset) {
|
||||
LittleEndian.putByte(array, offset+0, sid + getPtgClass());
|
||||
LittleEndian.putInt(array,offset+1,field_1_reserved);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeInt(field_1_reserved);
|
||||
}
|
||||
|
||||
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.util.BitField;
|
||||
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)
|
||||
*
|
||||
* @author Andrew C. Oliver (acoliver@apache.org)
|
||||
* @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 */
|
||||
private int field_1_row;
|
||||
/** Field 2
|
||||
* - lower 8 bits is the zero based unsigned byte column index
|
||||
* - bit 16 - isRowRelative
|
||||
* - bit 15 - isColumnRelative
|
||||
/**
|
||||
* Field 2 - lower 8 bits is the zero based unsigned byte column index - bit
|
||||
* 16 - isRowRelative - bit 15 - isColumnRelative
|
||||
*/
|
||||
private int field_2_col;
|
||||
private static final BitField rowRelative = BitFieldFactory.getInstance(0x8000);
|
||||
@ -45,7 +45,7 @@ public abstract class RefPtgBase extends OperandPtg {
|
||||
private static final BitField column = BitFieldFactory.getInstance(0x00FF);
|
||||
|
||||
protected RefPtgBase() {
|
||||
//Required for clone methods
|
||||
// Required for clone methods
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,7 +53,7 @@ public abstract class RefPtgBase extends OperandPtg {
|
||||
* numeric fields.
|
||||
*/
|
||||
protected RefPtgBase(String cellref) {
|
||||
CellReference c= new CellReference(cellref);
|
||||
CellReference c = new CellReference(cellref);
|
||||
setRow(c.getRow());
|
||||
setColumn(c.getCol());
|
||||
setColRelative(!c.isColAbsolute());
|
||||
@ -71,22 +71,23 @@ public abstract class RefPtgBase extends OperandPtg {
|
||||
field_1_row = in.readUShort();
|
||||
field_2_col = in.readUShort();
|
||||
}
|
||||
protected final void writeCoordinates(byte[] array, int offset) {
|
||||
LittleEndian.putUShort(array, offset + 0, field_1_row);
|
||||
LittleEndian.putUShort(array, offset + 2, field_2_col);
|
||||
|
||||
protected final void writeCoordinates(LittleEndianOutput out) {
|
||||
out.writeShort(field_1_row);
|
||||
out.writeShort(field_2_col);
|
||||
}
|
||||
|
||||
public final void setRow(int row) {
|
||||
if(row < 0 || row >= MAX_ROW_NUMBER) {
|
||||
throw new IllegalArgumentException("The row number, when specified as an integer, must be between 0 and " + MAX_ROW_NUMBER);
|
||||
public final void setRow(int rowIndex) {
|
||||
if (rowIndex < 0 || rowIndex >= MAX_ROW_NUMBER) {
|
||||
throw new IllegalArgumentException("rowIndex must be between 0 and " + MAX_ROW_NUMBER);
|
||||
}
|
||||
field_1_row = row;
|
||||
field_1_row = rowIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the row number as an int, between 0 and 65535
|
||||
*/
|
||||
public final int getRow(){
|
||||
public final int getRow() {
|
||||
return field_1_row;
|
||||
}
|
||||
|
||||
@ -95,7 +96,7 @@ public abstract class RefPtgBase extends OperandPtg {
|
||||
}
|
||||
|
||||
public final void setRowRelative(boolean rel) {
|
||||
field_2_col=rowRelative.setBoolean(field_2_col,rel);
|
||||
field_2_col = rowRelative.setBoolean(field_2_col, rel);
|
||||
}
|
||||
|
||||
public final boolean isColRelative() {
|
||||
@ -103,11 +104,11 @@ public abstract class RefPtgBase extends OperandPtg {
|
||||
}
|
||||
|
||||
public final void setColRelative(boolean rel) {
|
||||
field_2_col=colRelative.setBoolean(field_2_col,rel);
|
||||
field_2_col = colRelative.setBoolean(field_2_col, rel);
|
||||
}
|
||||
|
||||
public final void setColumn(int col) {
|
||||
if(col < 0 || col >= 0x100) {
|
||||
if (col < 0 || col >= 0x100) {
|
||||
throw new IllegalArgumentException("Specified colIx (" + col + ") is out of range");
|
||||
}
|
||||
field_2_col = column.setValue(field_2_col, col);
|
||||
@ -116,6 +117,7 @@ public abstract class RefPtgBase extends OperandPtg {
|
||||
public final int getColumn() {
|
||||
return column.getValue(field_2_col);
|
||||
}
|
||||
|
||||
protected final String formatReferenceAsString() {
|
||||
// Only make cell references as needed. Memory is an issue
|
||||
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.util.BitField;
|
||||
import org.apache.poi.util.BitFieldFactory;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
import org.apache.poi.util.StringUtil;
|
||||
|
||||
/**
|
||||
@ -78,14 +79,14 @@ public final class StringPtg extends ScalarConstantPtg {
|
||||
return field_3_string;
|
||||
}
|
||||
|
||||
public void writeBytes(byte[] array, int offset) {
|
||||
array[offset + 0] = sid;
|
||||
array[offset + 1] = (byte) field_1_length;
|
||||
array[offset + 2] = field_2_options;
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeByte(field_1_length);
|
||||
out.writeByte(field_2_options);
|
||||
if (fHighByte.isSet(field_2_options)) {
|
||||
StringUtil.putUnicodeLE(getValue(), array, offset + 3);
|
||||
StringUtil.putUnicodeLE(getValue(), out);
|
||||
} 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.RecordInputStream;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
/**
|
||||
* This ptg indicates a data table.
|
||||
@ -48,10 +48,10 @@ public final class TblPtg extends ControlPtg {
|
||||
field_2_first_col = in.readUShort();
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset) {
|
||||
LittleEndian.putByte(array, offset+0, sid);
|
||||
LittleEndian.putUShort(array, offset+1, field_1_first_row);
|
||||
LittleEndian.putUShort(array, offset+3, field_2_first_col);
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
out.writeShort(field_1_first_row);
|
||||
out.writeShort(field_2_first_col);
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
|
@ -17,6 +17,8 @@
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndianOutput;
|
||||
|
||||
|
||||
/**
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
@ -39,9 +41,8 @@ public final class UnionPtg extends OperationPtg {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public void writeBytes( byte[] array, int offset )
|
||||
{
|
||||
array[ offset + 0 ] = sid;
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(sid + getPtgClass());
|
||||
}
|
||||
|
||||
public String toFormulaString()
|
||||
|
@ -16,7 +16,7 @@
|
||||
==================================================================== */
|
||||
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 {
|
||||
private short size = 1;
|
||||
private final int _sid;
|
||||
|
||||
/** Creates new UnknownPtg */
|
||||
|
||||
public UnknownPtg()
|
||||
{
|
||||
}
|
||||
|
||||
public UnknownPtg(RecordInputStream in) {
|
||||
// doesn't need anything
|
||||
public UnknownPtg(int sid) {
|
||||
_sid = sid;
|
||||
}
|
||||
|
||||
public boolean isBaseToken() {
|
||||
return true;
|
||||
}
|
||||
public void writeBytes(byte [] array, int offset)
|
||||
{
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(_sid);
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
@ -55,8 +50,6 @@ public class UnknownPtg extends Ptg {
|
||||
public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
|
||||
|
||||
public Object clone() {
|
||||
return new UnknownPtg();
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -17,11 +17,12 @@
|
||||
|
||||
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.
|
||||
* Subclasses include all unary and binary operators except for the reference operators (IntersectionPtg, RangePtg, UnionPtg)
|
||||
* Common superclass of all value operators. Subclasses include all unary and
|
||||
* binary operators except for the reference operators (IntersectionPtg,
|
||||
* RangePtg, UnionPtg)
|
||||
*
|
||||
* @author Josh Micich
|
||||
*/
|
||||
@ -38,8 +39,8 @@ public abstract class ValueOperatorPtg extends OperationPtg {
|
||||
return Ptg.CLASS_VALUE;
|
||||
}
|
||||
|
||||
public final void writeBytes(byte[] array, int offset) {
|
||||
array[offset + 0] = getSid();
|
||||
public void write(LittleEndianOutput out) {
|
||||
out.writeByte(getSid());
|
||||
}
|
||||
|
||||
protected abstract byte getSid();
|
||||
@ -47,6 +48,7 @@ public abstract class ValueOperatorPtg extends OperationPtg {
|
||||
public final int getSize() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public final String toFormulaString() {
|
||||
// TODO - prune this method out of the hierarchy
|
||||
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…
Reference in New Issue
Block a user