public FibBase( byte[] std, int offset ) { fillFields( std, offset ); }
public int getNFib() { if ( _cswNew == 0 ) return _fibBase.getNFib(); return _nFibNew; }
} else { byte[] fibBaseBytes = (_mainStream != null) ? _mainStream : getDocumentEntryBytes(STREAM_WORD_DOCUMENT, -1, FIB_BASE_LEN); fibBase = new FibBase( fibBaseBytes, 0 ); if (!fibBase.isFEncrypted()) { return null; String tableStrmName = fibBase.isFWhichTblStm() ? STREAM_TABLE_1 : STREAM_TABLE_0; byte[] tableStream = getDocumentEntryBytes(tableStrmName, -1, fibBase.getLKey()); LittleEndianByteArrayInputStream leis = new LittleEndianByteArrayInputStream(tableStream); EncryptionMode em = fibBase.isFObfuscated() ? EncryptionMode.xor : null; EncryptionInfo ei = new EncryptionInfo(leis, em); Decryptor dec = ei.getDecryptor();
_fibBase = new FibBase( mainDocument, offset ); offset = FibBase.getSize(); assert offset == 32; if ( _fibBase.isFEncrypted() ) assert offset == 64; if ( _fibBase.getNFib() < 105 )
if(_fib.getFibBase().isFComplex()) { cft = new ComplexFileTable( _mainStream, _mainStream, complexTableOffset, _fib.getFibBase().getFcMin() ); tpt = cft.getTextPieceTable(); pd.setFilePosition(_fib.getFibBase().getFcMin()); byte[] textData = new byte[_fib.getFibBase().getFcMac()-_fib.getFibBase().getFcMin()]; System.arraycopy(_mainStream, _fib.getFibBase().getFcMin(), textData, 0, textData.length); TextPiece tp = new TextPiece( 0, textData.length, textData, pd _fib.getFibBase().getFcMin(), tpt ); _pbt = new OldPAPBinTable( _mainStream, papTableOffset, papTableSize, _fib.getFibBase().getFcMin(), tpt ); _st = new OldSectionTable( _mainStream, sedTableOffset, sedTableSize, _fib.getFibBase().getFcMin(), tpt );
public void writeTo( byte[] mainStream, ByteArrayOutputStream tableStream ) throws IOException { _cbRgFcLcb = _fieldHandler.getFieldsCount(); _fibBase.serialize( mainStream, 0 ); int offset = FibBase.getSize(); LittleEndian.putUShort( mainStream, offset, _csw ); offset += LittleEndian.SHORT_SIZE; _fibRgW.serialize( mainStream, offset ); offset += FibRgW97.getSize(); LittleEndian.putUShort( mainStream, offset, _cslw ); offset += LittleEndian.SHORT_SIZE; ( (FibRgLw97) _fibRgLw ).serialize( mainStream, offset ); offset += FibRgLw97.getSize(); LittleEndian.putUShort( mainStream, offset, _cbRgFcLcb ); offset += LittleEndian.SHORT_SIZE; _fieldHandler.writeTo( mainStream, offset, tableStream ); offset += _cbRgFcLcb * LittleEndian.INT_SIZE * 2; LittleEndian.putUShort( mainStream, offset, _cswNew ); offset += LittleEndian.SHORT_SIZE; if ( _cswNew != 0 ) { LittleEndian.putUShort( mainStream, offset, _nFibNew ); offset += LittleEndian.SHORT_SIZE; System.arraycopy( _fibRgCswNew, 0, mainStream, offset, _fibRgCswNew.length ); offset += _fibRgCswNew.length; } }
if(_fib.getFibBase().getNFib() < 106) { throw new OldWordFileFormatException("The document is too old - Word 95 or older. Try HWPFOldDocument instead?"); String name = (_fib.getFibBase().isFWhichTblStm()) ? STREAM_TABLE_1 : STREAM_TABLE_0; _tableStream = getDocumentEntryBytes(name, _fib.getFibBase().getLKey(), Integer.MAX_VALUE);
if(_fib.getFibBase().isFComplex()) { cft = new OldComplexFileTable( _mainStream, _mainStream, complexTableOffset, _fib.getFibBase().getFcMin(), guessedCharset ); tpt = (OldTextPieceTable)cft.getTextPieceTable(); _fib.getFibBase().getFcMin(), tpt ); _pbt = new OldPAPBinTable( _mainStream, papTableOffset, papTableSize, _fib.getFibBase().getFcMin(), tpt ); _st = new OldSectionTable( _mainStream, sedTableOffset, sedTableSize, _fib.getFibBase().getFcMin(), tpt );
if(_fib.getFibBase().getNFib() < 106) { throw new OldWordFileFormatException("The document is too old - Word 95 or older. Try HWPFOldDocument instead?"); if (_fib.getFibBase().isFWhichTblStm())
public int getSize() { return FibBase.getSize() + LittleEndian.SHORT_SIZE + FibRgW97.getSize() + LittleEndian.SHORT_SIZE + FibRgLw97.getSize() + LittleEndian.SHORT_SIZE + _fieldHandler.sizeInBytes(); }
public void writeTo( byte[] mainStream, HWPFOutputStream tableStream ) throws IOException { _cbRgFcLcb = _fieldHandler.getFieldsCount(); _fibBase.serialize( mainStream, 0 ); int offset = FibBase.getSize(); LittleEndian.putUShort( mainStream, offset, _csw ); offset += LittleEndian.SHORT_SIZE; _fibRgW.serialize( mainStream, offset ); offset += FibRgW97.getSize(); LittleEndian.putUShort( mainStream, offset, _cslw ); offset += LittleEndian.SHORT_SIZE; ( (FibRgLw97) _fibRgLw ).serialize( mainStream, offset ); offset += FibRgLw97.getSize(); LittleEndian.putUShort( mainStream, offset, _cbRgFcLcb ); offset += LittleEndian.SHORT_SIZE; _fieldHandler.writeTo( mainStream, offset, tableStream ); offset += _cbRgFcLcb * LittleEndian.INT_SIZE * 2; LittleEndian.putUShort( mainStream, offset, _cswNew ); offset += LittleEndian.SHORT_SIZE; if ( _cswNew != 0 ) { LittleEndian.putUShort( mainStream, offset, _nFibNew ); offset += LittleEndian.SHORT_SIZE; System.arraycopy( _fibRgCswNew, 0, mainStream, offset, _fibRgCswNew.length ); offset += _fibRgCswNew.length; } }
public int getSize() { return FibBase.getSize() + LittleEndian.SHORT_SIZE + FibRgW97.getSize() + LittleEndian.SHORT_SIZE + FibRgLw97.getSize() + LittleEndian.SHORT_SIZE + _fieldHandler.sizeInBytes(); }
public int getNFib() { if ( _cswNew == 0 ) return _fibBase.getNFib(); return _nFibNew; }
public FibBase( byte[] std, int offset ) { fillFields( std, offset ); }
/** * * @param guessedCharset charset that we think this is * @return a new text piece * @throws IllegalStateException if the length isn't correct */ private TextPiece buildTextPiece(Charset guessedCharset) throws IllegalStateException { PieceDescriptor pd = new PieceDescriptor(new byte[] {0,0, 0,0,0,127, 0,0}, 0, guessedCharset); pd.setFilePosition(_fib.getFibBase().getFcMin()); // Generate a single Text Piece Table, with a single Text Piece // which covers all the (8 bit only) text in the file tpt = new OldTextPieceTable(); byte[] textData = IOUtils.safelyAllocate( _fib.getFibBase().getFcMac()-_fib.getFibBase().getFcMin(), MAX_RECORD_LENGTH); System.arraycopy(_mainStream, _fib.getFibBase().getFcMin(), textData, 0, textData.length); int numChars = textData.length; if (CodePageUtil.DOUBLE_BYTE_CHARSETS.contains(guessedCharset)) { numChars /= 2; } return new TextPiece( 0, numChars, textData, pd ); }