// We need to get hold of the text that makes up the
// document, which might be regular or fast-saved
+ ComplexFileTable cft = null;
StringBuffer text = new StringBuffer();
if(_fib.getFibBase().isFComplex()) {
- ComplexFileTable cft = new ComplexFileTable(
+ cft = new ComplexFileTable(
_mainStream, _mainStream,
complexTableOffset, _fib.getFibBase().getFcMin()
);
_mainStream, sedTableOffset, sedTableSize,
_fib.getFibBase().getFcMin(), tpt
);
+
+ /*
+ * in this mode we preserving PAPX/CHPX structure from file, so text may
+ * miss from output, and text order may be corrupted
+ */
+ boolean preserveBinTables = false;
+ try
+ {
+ preserveBinTables = Boolean.parseBoolean( System
+ .getProperty( HWPFDocument.PROPERTY_PRESERVE_BIN_TABLES ) );
+ }
+ catch ( Exception exc )
+ {
+ // ignore;
+ }
+
+ if ( !preserveBinTables )
+ {
+ _cbt.rebuild( cft );
+ _pbt.rebuild( _text, cft );
+ }
}
public Range getOverallRange()
public void rebuild( final StringBuilder docText,
ComplexFileTable complexFileTable )
+ {
+ rebuild( docText, complexFileTable, _paragraphs );
+ }
+
+ static void rebuild( final StringBuilder docText,
+ ComplexFileTable complexFileTable, List<PAPX> paragraphs )
{
long start = System.currentTimeMillis();
PAPX papx = new PAPX( textPiece.getStart(),
textPiece.getEnd(), newSprmBuffer );
- _paragraphs.add( papx );
+ paragraphs.add( papx );
}
}
logger.log( POILogger.DEBUG,
"Merged (?) with PAPX from complex file table in ",
Long.valueOf( System.currentTimeMillis() - start ),
- " ms (", Integer.valueOf( _paragraphs.size() ),
+ " ms (", Integer.valueOf( paragraphs.size() ),
" elements in total)" );
start = System.currentTimeMillis();
}
- List<PAPX> oldPapxSortedByEndPos = new ArrayList<PAPX>( _paragraphs );
+ List<PAPX> oldPapxSortedByEndPos = new ArrayList<PAPX>( paragraphs );
Collections.sort( oldPapxSortedByEndPos,
PropertyNode.EndComparator.instance );
final Map<PAPX, Integer> papxToFileOrder = new IdentityHashMap<PAPX, Integer>();
{
int counter = 0;
- for ( PAPX papx : _paragraphs )
+ for ( PAPX papx : paragraphs )
{
papxToFileOrder.put( papx, Integer.valueOf( counter++ ) );
}
SprmBuffer sprmBuffer = null;
for ( PAPX papx : papxs )
{
+ if ( papx.getGrpprl() == null || papx.getGrpprl().length == 0 )
+ continue;
+
if ( sprmBuffer == null )
try
{
throw new Error( e );
}
else
+ {
sprmBuffer.append( papx.getGrpprl(), 2 );
+ }
}
PAPX newPapx = new PAPX( startInclusive, endExclusive, sprmBuffer );
newPapxs.add( newPapx );
lastParStart = endExclusive;
continue;
}
- this._paragraphs = new ArrayList<PAPX>( newPapxs );
+ paragraphs.clear();
+ paragraphs.addAll( newPapxs );
logger.log( POILogger.DEBUG, "PAPX rebuilded from document text in ",
Long.valueOf( System.currentTimeMillis() - start ), " ms (",
- Integer.valueOf( _paragraphs.size() ), " elements)" );
+ Integer.valueOf( paragraphs.size() ), " elements)" );
start = System.currentTimeMillis();
}