add TOC support
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1189217 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ef237c3eb6
commit
9e530bcf96
@ -58,6 +58,21 @@ import org.w3c.dom.Element;
|
|||||||
@Beta
|
@Beta
|
||||||
public abstract class AbstractWordConverter
|
public abstract class AbstractWordConverter
|
||||||
{
|
{
|
||||||
|
private static class DeadFieldBoundaries
|
||||||
|
{
|
||||||
|
final int beginMark;
|
||||||
|
final int endMark;
|
||||||
|
final int separatorMark;
|
||||||
|
|
||||||
|
public DeadFieldBoundaries( int beginMark, int separatorMark,
|
||||||
|
int endMark )
|
||||||
|
{
|
||||||
|
this.beginMark = beginMark;
|
||||||
|
this.separatorMark = separatorMark;
|
||||||
|
this.endMark = endMark;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static final class Structure implements Comparable<Structure>
|
private static final class Structure implements Comparable<Structure>
|
||||||
{
|
{
|
||||||
final int end;
|
final int end;
|
||||||
@ -71,6 +86,13 @@ public abstract class AbstractWordConverter
|
|||||||
this.structure = bookmark;
|
this.structure = bookmark;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Structure( DeadFieldBoundaries deadFieldBoundaries, int start, int end )
|
||||||
|
{
|
||||||
|
this.start = start;
|
||||||
|
this.end = end;
|
||||||
|
this.structure = deadFieldBoundaries;
|
||||||
|
}
|
||||||
|
|
||||||
Structure( Field field )
|
Structure( Field field )
|
||||||
{
|
{
|
||||||
this.start = field.getFieldStartOffset();
|
this.start = field.getFieldStartOffset();
|
||||||
@ -78,13 +100,6 @@ public abstract class AbstractWordConverter
|
|||||||
this.structure = field;
|
this.structure = field;
|
||||||
}
|
}
|
||||||
|
|
||||||
Structure( int start, int end )
|
|
||||||
{
|
|
||||||
this.start = start;
|
|
||||||
this.end = end;
|
|
||||||
this.structure = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int compareTo( Structure o )
|
public int compareTo( Structure o )
|
||||||
{
|
{
|
||||||
return start < o.start ? -1 : start == o.start ? 0 : 1;
|
return start < o.start ? -1 : start == o.start ? 0 : 1;
|
||||||
@ -334,7 +349,9 @@ public abstract class AbstractWordConverter
|
|||||||
wordDocument, range, c );
|
wordDocument, range, c );
|
||||||
if ( separatorEnd != null )
|
if ( separatorEnd != null )
|
||||||
{
|
{
|
||||||
addToStructures( structures, new Structure(
|
addToStructures( structures,
|
||||||
|
new Structure( new DeadFieldBoundaries( c,
|
||||||
|
separatorEnd[0], separatorEnd[1] ),
|
||||||
characterRun.getStartOffset(),
|
characterRun.getStartOffset(),
|
||||||
separatorEnd[1] + 1 ) );
|
separatorEnd[1] + 1 ) );
|
||||||
c = separatorEnd[1];
|
c = separatorEnd[1];
|
||||||
@ -407,6 +424,13 @@ public abstract class AbstractWordConverter
|
|||||||
processField( (HWPFDocument) wordDocument, range,
|
processField( (HWPFDocument) wordDocument, range,
|
||||||
currentTableLevel, field, block );
|
currentTableLevel, field, block );
|
||||||
}
|
}
|
||||||
|
else if ( structure.structure instanceof DeadFieldBoundaries )
|
||||||
|
{
|
||||||
|
DeadFieldBoundaries boundaries = (DeadFieldBoundaries) structure.structure;
|
||||||
|
processDeadField( wordDocument, block, range,
|
||||||
|
currentTableLevel, boundaries.beginMark,
|
||||||
|
boundaries.separatorMark, boundaries.endMark );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException( "NYI: "
|
throw new UnsupportedOperationException( "NYI: "
|
||||||
@ -660,25 +684,6 @@ public abstract class AbstractWordConverter
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Field processDeadField( HWPFDocumentCore wordDocument,
|
|
||||||
Range charactersRange, int currentTableLevel, int startOffset,
|
|
||||||
Element currentBlock )
|
|
||||||
{
|
|
||||||
if ( !( wordDocument instanceof HWPFDocument ) )
|
|
||||||
return null;
|
|
||||||
|
|
||||||
HWPFDocument hwpfDocument = (HWPFDocument) wordDocument;
|
|
||||||
Field field = hwpfDocument.getFields().getFieldByStartOffset(
|
|
||||||
FieldsDocumentPart.MAIN, startOffset );
|
|
||||||
if ( field == null )
|
|
||||||
return null;
|
|
||||||
|
|
||||||
processField( hwpfDocument, charactersRange, currentTableLevel, field,
|
|
||||||
currentBlock );
|
|
||||||
|
|
||||||
return field;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void processDocument( HWPFDocumentCore wordDocument )
|
public void processDocument( HWPFDocumentCore wordDocument )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
Loading…
Reference in New Issue
Block a user