change some tabs to spaces

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1870049 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2019-11-20 10:02:45 +00:00
parent 96bf53f3fc
commit cd3f373c44
3 changed files with 140 additions and 140 deletions

View File

@ -32,7 +32,7 @@ public final class NumberRecord extends CellRecord implements Cloneable {
/** Creates new NumberRecord */ /** Creates new NumberRecord */
public NumberRecord() { public NumberRecord() {
// fields uninitialised // fields uninitialised
} }
/** /**
@ -63,12 +63,12 @@ public final class NumberRecord extends CellRecord implements Cloneable {
@Override @Override
protected String getRecordName() { protected String getRecordName() {
return "NUMBER"; return "NUMBER";
} }
@Override @Override
protected void appendValueText(StringBuilder sb) { protected void appendValueText(StringBuilder sb) {
sb.append(" .value= ").append(NumberToTextConverter.toText(field_4_value)); sb.append(" .value= ").append(NumberToTextConverter.toText(field_4_value));
} }
@Override @Override
@ -78,7 +78,7 @@ public final class NumberRecord extends CellRecord implements Cloneable {
@Override @Override
protected int getValueDataSize() { protected int getValueDataSize() {
return 8; return 8;
} }
@Override @Override

View File

@ -33,140 +33,140 @@ import org.apache.poi.util.RecordFormatException;
* The obj record is used to hold various graphic objects and controls. * The obj record is used to hold various graphic objects and controls.
*/ */
public final class ObjRecord extends Record implements Cloneable { public final class ObjRecord extends Record implements Cloneable {
public final static short sid = 0x005D; public final static short sid = 0x005D;
private static final int NORMAL_PAD_ALIGNMENT = 2; private static final int NORMAL_PAD_ALIGNMENT = 2;
private static int MAX_PAD_ALIGNMENT = 4; private static int MAX_PAD_ALIGNMENT = 4;
private List<SubRecord> subrecords; private List<SubRecord> subrecords;
/** used when POI has no idea what is going on */ /** used when POI has no idea what is going on */
private final byte[] _uninterpretedData; private final byte[] _uninterpretedData;
/** /**
* Excel seems to tolerate padding to quad or double byte length * Excel seems to tolerate padding to quad or double byte length
*/ */
private boolean _isPaddedToQuadByteMultiple; private boolean _isPaddedToQuadByteMultiple;
//00000000 15 00 12 00 01 00 01 00 11 60 00 00 00 00 00 0D .........`...... //00000000 15 00 12 00 01 00 01 00 11 60 00 00 00 00 00 0D .........`......
//00000010 26 01 00 00 00 00 00 00 00 00 &......... //00000010 26 01 00 00 00 00 00 00 00 00 &.........
public ObjRecord() { public ObjRecord() {
subrecords = new ArrayList<>(2); subrecords = new ArrayList<>(2);
// TODO - ensure 2 sub-records (ftCmo 15h, and ftEnd 00h) are always created // TODO - ensure 2 sub-records (ftCmo 15h, and ftEnd 00h) are always created
_uninterpretedData = null; _uninterpretedData = null;
} }
public ObjRecord(RecordInputStream in) { public ObjRecord(RecordInputStream in) {
// TODO - problems with OBJ sub-records stream // TODO - problems with OBJ sub-records stream
// MS spec says first sub-record is always CommonObjectDataSubRecord, // MS spec says first sub-record is always CommonObjectDataSubRecord,
// and last is always EndSubRecord. OOO spec does not mention ObjRecord(0x005D). // and last is always EndSubRecord. OOO spec does not mention ObjRecord(0x005D).
// Existing POI test data seems to violate that rule. Some test data // Existing POI test data seems to violate that rule. Some test data
// seems to contain garbage, and a crash is only averted by stopping at // seems to contain garbage, and a crash is only averted by stopping at
// what looks like the 'EndSubRecord' // what looks like the 'EndSubRecord'
// Check if this can be continued, if so then the // Check if this can be continued, if so then the
// following wont work properly // following wont work properly
byte[] subRecordData = in.readRemainder(); byte[] subRecordData = in.readRemainder();
if (LittleEndian.getUShort(subRecordData, 0) != CommonObjectDataSubRecord.sid) { if (LittleEndian.getUShort(subRecordData, 0) != CommonObjectDataSubRecord.sid) {
// seems to occur in just one junit on "OddStyleRecord.xls" (file created by CrystalReports) // seems to occur in just one junit on "OddStyleRecord.xls" (file created by CrystalReports)
// Excel tolerates the funny ObjRecord, and replaces it with a corrected version // Excel tolerates the funny ObjRecord, and replaces it with a corrected version
// The exact logic/reasoning is not yet understood // The exact logic/reasoning is not yet understood
_uninterpretedData = subRecordData; _uninterpretedData = subRecordData;
subrecords = null; subrecords = null;
return; return;
} }
//YK: files produced by OO violate the condition below //YK: files produced by OO violate the condition below
/* /*
if (subRecordData.length % 2 != 0) { if (subRecordData.length % 2 != 0) {
String msg = "Unexpected length of subRecordData : " + HexDump.toHex(subRecordData); String msg = "Unexpected length of subRecordData : " + HexDump.toHex(subRecordData);
throw new RecordFormatException(msg); throw new RecordFormatException(msg);
} }
*/ */
subrecords = new ArrayList<>(); subrecords = new ArrayList<>();
LittleEndianByteArrayInputStream subRecStream = new LittleEndianByteArrayInputStream(subRecordData); LittleEndianByteArrayInputStream subRecStream = new LittleEndianByteArrayInputStream(subRecordData);
CommonObjectDataSubRecord cmo = (CommonObjectDataSubRecord)SubRecord.createSubRecord(subRecStream, 0); CommonObjectDataSubRecord cmo = (CommonObjectDataSubRecord)SubRecord.createSubRecord(subRecStream, 0);
subrecords.add(cmo); subrecords.add(cmo);
while (true) { while (true) {
SubRecord subRecord = SubRecord.createSubRecord(subRecStream, cmo.getObjectType()); SubRecord subRecord = SubRecord.createSubRecord(subRecStream, cmo.getObjectType());
subrecords.add(subRecord); subrecords.add(subRecord);
if (subRecord.isTerminating()) { if (subRecord.isTerminating()) {
break; break;
} }
} }
final int nRemainingBytes = subRecordData.length-subRecStream.getReadIndex(); final int nRemainingBytes = subRecordData.length-subRecStream.getReadIndex();
if (nRemainingBytes > 0) { if (nRemainingBytes > 0) {
// At present (Oct-2008), most unit test samples have (subRecordData.length % 2 == 0) // At present (Oct-2008), most unit test samples have (subRecordData.length % 2 == 0)
_isPaddedToQuadByteMultiple = subRecordData.length % MAX_PAD_ALIGNMENT == 0; _isPaddedToQuadByteMultiple = subRecordData.length % MAX_PAD_ALIGNMENT == 0;
if (nRemainingBytes >= (_isPaddedToQuadByteMultiple ? MAX_PAD_ALIGNMENT : NORMAL_PAD_ALIGNMENT)) { if (nRemainingBytes >= (_isPaddedToQuadByteMultiple ? MAX_PAD_ALIGNMENT : NORMAL_PAD_ALIGNMENT)) {
if (!canPaddingBeDiscarded(subRecordData, nRemainingBytes)) { if (!canPaddingBeDiscarded(subRecordData, nRemainingBytes)) {
String msg = "Leftover " + nRemainingBytes String msg = "Leftover " + nRemainingBytes
+ " bytes in subrecord data " + HexDump.toHex(subRecordData); + " bytes in subrecord data " + HexDump.toHex(subRecordData);
throw new RecordFormatException(msg); throw new RecordFormatException(msg);
} }
_isPaddedToQuadByteMultiple = false; _isPaddedToQuadByteMultiple = false;
} }
} else { } else {
_isPaddedToQuadByteMultiple = false; _isPaddedToQuadByteMultiple = false;
} }
_uninterpretedData = null; _uninterpretedData = null;
} }
/** /**
* Some XLS files have ObjRecords with nearly 8Kb of excessive padding. These were probably * Some XLS files have ObjRecords with nearly 8Kb of excessive padding. These were probably
* written by a version of POI (around 3.1) which incorrectly interpreted the second short of * written by a version of POI (around 3.1) which incorrectly interpreted the second short of
* the ftLbs subrecord (0x1FEE) as a length, and read that many bytes as padding (other bugs * the ftLbs subrecord (0x1FEE) as a length, and read that many bytes as padding (other bugs
* helped allow this to occur). * helped allow this to occur).
* *
* Excel reads files with this excessive padding OK, truncating the over-sized ObjRecord back * Excel reads files with this excessive padding OK, truncating the over-sized ObjRecord back
* to the its proper size. POI does the same. * to the its proper size. POI does the same.
*/ */
private static boolean canPaddingBeDiscarded(byte[] data, int nRemainingBytes) { private static boolean canPaddingBeDiscarded(byte[] data, int nRemainingBytes) {
// make sure none of the padding looks important // make sure none of the padding looks important
for(int i=data.length-nRemainingBytes; i<data.length; i++) { for(int i=data.length-nRemainingBytes; i<data.length; i++) {
if (data[i] != 0x00) { if (data[i] != 0x00) {
return false; return false;
} }
} }
return true; return true;
} }
@Override @Override
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("[OBJ]\n"); sb.append("[OBJ]\n");
if(subrecords != null) { // there are special cases where this can be, see comments in constructor above if(subrecords != null) { // there are special cases where this can be, see comments in constructor above
for (final SubRecord record : subrecords) { for (final SubRecord record : subrecords) {
sb.append("SUBRECORD: ").append(record); sb.append("SUBRECORD: ").append(record);
} }
} }
sb.append("[/OBJ]\n"); sb.append("[/OBJ]\n");
return sb.toString(); return sb.toString();
} }
@Override @Override
public int getRecordSize() { public int getRecordSize() {
if (_uninterpretedData != null) { if (_uninterpretedData != null) {
return _uninterpretedData.length + 4; return _uninterpretedData.length + 4;
} }
int size = 0; int size = 0;
for (SubRecord record : subrecords) { for (SubRecord record : subrecords) {
size += record.getDataSize()+4; size += record.getDataSize()+4;
} }
if (_isPaddedToQuadByteMultiple) { if (_isPaddedToQuadByteMultiple) {
while (size % MAX_PAD_ALIGNMENT != 0) { while (size % MAX_PAD_ALIGNMENT != 0) {
size++; size++;
} }
} else { } else {
while (size % NORMAL_PAD_ALIGNMENT != 0) { while (size % NORMAL_PAD_ALIGNMENT != 0) {
size++; size++;
} }
} }
return size + 4; return size + 4;
} }
@Override @Override
public int serialize(int offset, byte[] data) { public int serialize(int offset, byte[] data) {
@ -198,35 +198,35 @@ public final class ObjRecord extends Record implements Cloneable {
return recSize; return recSize;
} }
@Override @Override
public short getSid() { public short getSid() {
return sid; return sid;
} }
// FIXME: return Collections.unmodifiableList? // FIXME: return Collections.unmodifiableList?
public List<SubRecord> getSubRecords() { public List<SubRecord> getSubRecords() {
return subrecords; return subrecords;
} }
public void clearSubRecords() { public void clearSubRecords() {
subrecords.clear(); subrecords.clear();
} }
public void addSubRecord(int index, SubRecord element) { public void addSubRecord(int index, SubRecord element) {
subrecords.add(index, element); subrecords.add(index, element);
} }
public boolean addSubRecord(SubRecord o) { public boolean addSubRecord(SubRecord o) {
return subrecords.add(o); return subrecords.add(o);
} }
@Override @Override
public ObjRecord clone() { public ObjRecord clone() {
ObjRecord rec = new ObjRecord(); ObjRecord rec = new ObjRecord();
for (SubRecord record : subrecords) { for (SubRecord record : subrecords) {
rec.addSubRecord(record.clone()); rec.addSubRecord(record.clone());
} }
return rec; return rec;
} }
} }

View File

@ -76,7 +76,7 @@ public final class ObjectProtectRecord extends StandardRecord implements Cloneab
StringBuilder buffer = new StringBuilder(); StringBuilder buffer = new StringBuilder();
buffer.append("[SCENARIOPROTECT]\n"); buffer.append("[SCENARIOPROTECT]\n");
buffer.append(" .protect = ").append(getProtect()) buffer.append(" .protect = ").append(getProtect())
.append("\n"); .append("\n");
buffer.append("[/SCENARIOPROTECT]\n"); buffer.append("[/SCENARIOPROTECT]\n");
return buffer.toString(); return buffer.toString();