mirror of https://github.com/apache/poi.git
Sonar fixes - "static" base class members should not be accessed via derived types
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1876159 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
074d68fedf
commit
d842136464
|
@ -46,10 +46,10 @@ public final class HSSFClientAnchor extends HSSFAnchor implements ClientAnchor {
|
||||||
/**
|
/**
|
||||||
* Creates a new client anchor and sets the top-left and bottom-right
|
* Creates a new client anchor and sets the top-left and bottom-right
|
||||||
* coordinates of the anchor.
|
* coordinates of the anchor.
|
||||||
*
|
*
|
||||||
* Note: Microsoft Excel seems to sometimes disallow
|
* Note: Microsoft Excel seems to sometimes disallow
|
||||||
* higher y1 than y2 or higher x1 than x2, you might need to
|
* higher y1 than y2 or higher x1 than x2, you might need to
|
||||||
* reverse them and draw shapes vertically or horizontally flipped!
|
* reverse them and draw shapes vertically or horizontally flipped!
|
||||||
*
|
*
|
||||||
* @param dx1 the x coordinate within the first cell.
|
* @param dx1 the x coordinate within the first cell.
|
||||||
* @param dy1 the y coordinate within the first cell.
|
* @param dy1 the y coordinate within the first cell.
|
||||||
|
@ -175,7 +175,7 @@ public final class HSSFClientAnchor extends HSSFAnchor implements ClientAnchor {
|
||||||
*/
|
*/
|
||||||
public void setRow1(int row1) {
|
public void setRow1(int row1) {
|
||||||
checkRange(row1, 0, MAX_ROW, "row1");
|
checkRange(row1, 0, MAX_ROW, "row1");
|
||||||
_escherClientAnchor.setRow1(Integer.valueOf(row1).shortValue());
|
_escherClientAnchor.setRow1((short)row1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -190,16 +190,16 @@ public final class HSSFClientAnchor extends HSSFAnchor implements ClientAnchor {
|
||||||
*/
|
*/
|
||||||
public void setRow2(int row2) {
|
public void setRow2(int row2) {
|
||||||
checkRange(row2, 0, MAX_ROW, "row2");
|
checkRange(row2, 0, MAX_ROW, "row2");
|
||||||
_escherClientAnchor.setRow2(Integer.valueOf(row2).shortValue());
|
_escherClientAnchor.setRow2((short)row2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the top-left and bottom-right coordinates of
|
* Sets the top-left and bottom-right coordinates of
|
||||||
* the anchor.
|
* the anchor.
|
||||||
*
|
*
|
||||||
* Note: Microsoft Excel seems to sometimes disallow
|
* Note: Microsoft Excel seems to sometimes disallow
|
||||||
* higher y1 than y2 or higher x1 than x2, you might need to
|
* higher y1 than y2 or higher x1 than x2, you might need to
|
||||||
* reverse them and draw shapes vertically or horizontally flipped!
|
* reverse them and draw shapes vertically or horizontally flipped!
|
||||||
*
|
*
|
||||||
* @param x1 the x coordinate within the first cell.
|
* @param x1 the x coordinate within the first cell.
|
||||||
* @param y1 the y coordinate within the first cell.
|
* @param y1 the y coordinate within the first cell.
|
||||||
|
@ -311,7 +311,7 @@ public final class HSSFClientAnchor extends HSSFAnchor implements ClientAnchor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDx1(int dx1) {
|
public void setDx1(int dx1) {
|
||||||
_escherClientAnchor.setDx1(Integer.valueOf(dx1).shortValue());
|
_escherClientAnchor.setDx1((short)dx1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -321,7 +321,7 @@ public final class HSSFClientAnchor extends HSSFAnchor implements ClientAnchor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDy1(int dy1) {
|
public void setDy1(int dy1) {
|
||||||
_escherClientAnchor.setDy1(Integer.valueOf(dy1).shortValue());
|
_escherClientAnchor.setDy1((short)dy1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -331,7 +331,7 @@ public final class HSSFClientAnchor extends HSSFAnchor implements ClientAnchor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDy2(int dy2) {
|
public void setDy2(int dy2) {
|
||||||
_escherClientAnchor.setDy2(Integer.valueOf(dy2).shortValue());
|
_escherClientAnchor.setDy2((short)dy2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -341,6 +341,6 @@ public final class HSSFClientAnchor extends HSSFAnchor implements ClientAnchor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDx2(int dx2) {
|
public void setDx2(int dx2) {
|
||||||
_escherClientAnchor.setDx2(Integer.valueOf(dx2).shortValue());
|
_escherClientAnchor.setDx2((short)dx2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,9 +77,8 @@ public class AbstractWordUtils
|
||||||
{
|
{
|
||||||
TableCell tableCell = tableRow.getCell( c );
|
TableCell tableCell = tableRow.getCell( c );
|
||||||
|
|
||||||
edges.add( Integer.valueOf( tableCell.getLeftEdge() ) );
|
edges.add(tableCell.getLeftEdge());
|
||||||
edges.add( Integer.valueOf( tableCell.getLeftEdge()
|
edges.add(tableCell.getLeftEdge() + tableCell.getWidth());
|
||||||
+ tableCell.getWidth() ) );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +86,7 @@ public class AbstractWordUtils
|
||||||
int[] result = new int[sorted.length];
|
int[] result = new int[sorted.length];
|
||||||
for ( int i = 0; i < sorted.length; i++ )
|
for ( int i = 0; i < sorted.length; i++ )
|
||||||
{
|
{
|
||||||
result[i] = sorted[i].intValue();
|
result[i] = sorted[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -165,45 +164,37 @@ public class AbstractWordUtils
|
||||||
|
|
||||||
switch ( borderCode.getBorderType() )
|
switch ( borderCode.getBorderType() )
|
||||||
{
|
{
|
||||||
case 1:
|
case 3:
|
||||||
case 2:
|
case 10:
|
||||||
return "solid";
|
case 11:
|
||||||
case 3:
|
case 12:
|
||||||
return "double";
|
case 13:
|
||||||
case 5:
|
case 14:
|
||||||
return "solid";
|
case 15:
|
||||||
case 6:
|
case 16:
|
||||||
return "dotted";
|
case 17:
|
||||||
case 7:
|
case 18:
|
||||||
case 8:
|
case 19:
|
||||||
return "dashed";
|
case 21:
|
||||||
case 9:
|
return "double";
|
||||||
return "dotted";
|
case 6:
|
||||||
case 10:
|
case 9:
|
||||||
case 11:
|
return "dotted";
|
||||||
case 12:
|
case 7:
|
||||||
case 13:
|
case 8:
|
||||||
case 14:
|
case 22:
|
||||||
case 15:
|
case 23:
|
||||||
case 16:
|
return "dashed";
|
||||||
case 17:
|
case 24:
|
||||||
case 18:
|
return "ridge";
|
||||||
case 19:
|
case 25:
|
||||||
return "double";
|
return "grooved";
|
||||||
case 20:
|
case 5:
|
||||||
return "solid";
|
case 1:
|
||||||
case 21:
|
case 2:
|
||||||
return "double";
|
case 20:
|
||||||
case 22:
|
default:
|
||||||
return "dashed";
|
return "solid";
|
||||||
case 23:
|
|
||||||
return "dashed";
|
|
||||||
case 24:
|
|
||||||
return "ridge";
|
|
||||||
case 25:
|
|
||||||
return "grooved";
|
|
||||||
default:
|
|
||||||
return "solid";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,12 +204,7 @@ public class AbstractWordUtils
|
||||||
int pt = lineWidth / 8;
|
int pt = lineWidth / 8;
|
||||||
int pte = lineWidth - pt * 8;
|
int pte = lineWidth - pt * 8;
|
||||||
|
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
return pt + "." + 1000 / 8 * pte + "pt";
|
||||||
stringBuilder.append( pt );
|
|
||||||
stringBuilder.append( "." );
|
|
||||||
stringBuilder.append( 1000 / 8 * pte );
|
|
||||||
stringBuilder.append( "pt" );
|
|
||||||
return stringBuilder.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class NumberingState
|
public static class NumberingState
|
||||||
|
@ -294,48 +280,46 @@ public class AbstractWordUtils
|
||||||
|
|
||||||
public static String getColor( int ico )
|
public static String getColor( int ico )
|
||||||
{
|
{
|
||||||
switch ( ico )
|
switch ( ico ) {
|
||||||
{
|
case 2:
|
||||||
case 1:
|
return "blue";
|
||||||
return "black";
|
case 3:
|
||||||
case 2:
|
return "cyan";
|
||||||
return "blue";
|
case 4:
|
||||||
case 3:
|
return "green";
|
||||||
return "cyan";
|
case 5:
|
||||||
case 4:
|
return "magenta";
|
||||||
return "green";
|
case 6:
|
||||||
case 5:
|
return "red";
|
||||||
return "magenta";
|
case 7:
|
||||||
case 6:
|
return "yellow";
|
||||||
return "red";
|
case 8:
|
||||||
case 7:
|
return "white";
|
||||||
return "yellow";
|
case 9:
|
||||||
case 8:
|
return "darkblue";
|
||||||
return "white";
|
case 10:
|
||||||
case 9:
|
return "darkcyan";
|
||||||
return "darkblue";
|
case 11:
|
||||||
case 10:
|
return "darkgreen";
|
||||||
return "darkcyan";
|
case 12:
|
||||||
case 11:
|
return "darkmagenta";
|
||||||
return "darkgreen";
|
case 13:
|
||||||
case 12:
|
return "darkred";
|
||||||
return "darkmagenta";
|
case 14:
|
||||||
case 13:
|
return "darkyellow";
|
||||||
return "darkred";
|
case 15:
|
||||||
case 14:
|
return "darkgray";
|
||||||
return "darkyellow";
|
case 16:
|
||||||
case 15:
|
return "lightgray";
|
||||||
return "darkgray";
|
case 1:
|
||||||
case 16:
|
default:
|
||||||
return "lightgray";
|
return "black";
|
||||||
default:
|
|
||||||
return "black";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getOpacity( int argbValue )
|
public static String getOpacity( int argbValue )
|
||||||
{
|
{
|
||||||
int opacity = (int) ( ( argbValue & 0xFF000000l ) >>> 24 );
|
int opacity = (int) ( ( argbValue & 0xFF000000L) >>> 24 );
|
||||||
if ( opacity == 0 || opacity == 0xFF )
|
if ( opacity == 0 || opacity == 0xFF )
|
||||||
return ".0";
|
return ".0";
|
||||||
|
|
||||||
|
@ -403,24 +387,20 @@ public class AbstractWordUtils
|
||||||
switch ( js )
|
switch ( js )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
case 7:
|
||||||
return "start";
|
return "start";
|
||||||
case 1:
|
case 1:
|
||||||
|
case 5:
|
||||||
return "center";
|
return "center";
|
||||||
case 2:
|
case 2:
|
||||||
|
case 8:
|
||||||
return "end";
|
return "end";
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
return "justify";
|
|
||||||
case 5:
|
|
||||||
return "center";
|
|
||||||
case 6:
|
|
||||||
return "left";
|
|
||||||
case 7:
|
|
||||||
return "start";
|
|
||||||
case 8:
|
|
||||||
return "end";
|
|
||||||
case 9:
|
case 9:
|
||||||
return "justify";
|
return "justify";
|
||||||
|
case 6:
|
||||||
|
return "left";
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -438,8 +418,7 @@ public class AbstractWordUtils
|
||||||
case 2057:
|
case 2057:
|
||||||
return "en-uk";
|
return "en-uk";
|
||||||
default:
|
default:
|
||||||
logger.log( POILogger.WARN, "Uknown or unmapped language code: ",
|
logger.log( POILogger.WARN, "Uknown or unmapped language code: ", languageCode);
|
||||||
Integer.valueOf( languageCode ) );
|
|
||||||
return EMPTY;
|
return EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,8 +88,7 @@ public class HtmlDocumentFacade
|
||||||
{
|
{
|
||||||
String exising = element.getAttribute( "class" );
|
String exising = element.getAttribute( "class" );
|
||||||
String addition = getOrCreateCssClass( classNamePrefix, style );
|
String addition = getOrCreateCssClass( classNamePrefix, style );
|
||||||
String newClassValue = WordToHtmlUtils.isEmpty( exising ) ? addition
|
String newClassValue = AbstractWordUtils.isEmpty( exising ) ? addition : ( exising + " " + addition );
|
||||||
: ( exising + " " + addition );
|
|
||||||
element.setAttribute( "class", newClassValue );
|
element.setAttribute( "class", newClassValue );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,7 +271,7 @@ public class HtmlDocumentFacade
|
||||||
|
|
||||||
public void setTitle( String titleText )
|
public void setTitle( String titleText )
|
||||||
{
|
{
|
||||||
if ( WordToHtmlUtils.isEmpty( titleText ) && this.title != null )
|
if ( AbstractWordUtils.isEmpty( titleText ) && this.title != null )
|
||||||
{
|
{
|
||||||
this.head.removeChild( this.title );
|
this.head.removeChild( this.title );
|
||||||
this.title = null;
|
this.title = null;
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class TextDocumentFacade
|
||||||
|
|
||||||
root.appendChild( head );
|
root.appendChild( head );
|
||||||
root.appendChild( body );
|
root.appendChild( body );
|
||||||
|
|
||||||
title = document.createElement( "title" );
|
title = document.createElement( "title" );
|
||||||
titleText = document.createTextNode( "" );
|
titleText = document.createTextNode( "" );
|
||||||
head.appendChild( title );
|
head.appendChild( title );
|
||||||
|
@ -159,7 +159,7 @@ public class TextDocumentFacade
|
||||||
|
|
||||||
public void setTitle( String titleText )
|
public void setTitle( String titleText )
|
||||||
{
|
{
|
||||||
if ( WordToHtmlUtils.isEmpty( titleText ) && this.title != null )
|
if ( AbstractWordUtils.isEmpty( titleText ) && this.title != null )
|
||||||
{
|
{
|
||||||
this.head.removeChild( this.title );
|
this.head.removeChild( this.title );
|
||||||
this.title = null;
|
this.title = null;
|
||||||
|
|
|
@ -16,6 +16,11 @@
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
package org.apache.poi.hwpf.converter;
|
package org.apache.poi.hwpf.converter;
|
||||||
|
|
||||||
|
import static org.apache.poi.hwpf.converter.AbstractWordUtils.TWIPS_PER_INCH;
|
||||||
|
import static org.apache.poi.hwpf.converter.AbstractWordUtils.isNotEmpty;
|
||||||
|
import static org.apache.poi.hwpf.converter.AbstractWordUtils.loadDoc;
|
||||||
|
import static org.apache.poi.hwpf.converter.WordToFoUtils.*;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
@ -64,7 +69,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Java main() interface to interact with {@link WordToFoConverter}
|
* Java main() interface to interact with {@link WordToFoConverter}
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Usage: WordToFoConverter infile outfile
|
* Usage: WordToFoConverter infile outfile
|
||||||
* </p>
|
* </p>
|
||||||
|
@ -92,7 +97,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
static Document process( File docFile ) throws Exception
|
static Document process( File docFile ) throws Exception
|
||||||
{
|
{
|
||||||
final DocumentBuilder docBuild = XMLHelper.newDocumentBuilder();
|
final DocumentBuilder docBuild = XMLHelper.newDocumentBuilder();
|
||||||
try (final HWPFDocumentCore hwpfDocument = WordToFoUtils.loadDoc( docFile )) {
|
try (final HWPFDocumentCore hwpfDocument = loadDoc( docFile )) {
|
||||||
WordToFoConverter wordToFoConverter = new WordToFoConverter(docBuild.newDocument());
|
WordToFoConverter wordToFoConverter = new WordToFoConverter(docBuild.newDocument());
|
||||||
wordToFoConverter.processDocument(hwpfDocument);
|
wordToFoConverter.processDocument(hwpfDocument);
|
||||||
return wordToFoConverter.getDocument();
|
return wordToFoConverter.getDocument();
|
||||||
|
@ -112,7 +117,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
/**
|
/**
|
||||||
* Creates new instance of {@link WordToFoConverter}. Can be used for output
|
* Creates new instance of {@link WordToFoConverter}. Can be used for output
|
||||||
* several {@link HWPFDocument}s into single FO document.
|
* several {@link HWPFDocument}s into single FO document.
|
||||||
*
|
*
|
||||||
* @param document
|
* @param document
|
||||||
* XML DOM Document used as XSL FO document. Shall support
|
* XML DOM Document used as XSL FO document. Shall support
|
||||||
* namespaces
|
* namespaces
|
||||||
|
@ -136,18 +141,13 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
return inline;
|
return inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String createPageMaster( Section section, String type,
|
protected String createPageMaster( Section section, String type, int sectionIndex ) {
|
||||||
int sectionIndex )
|
float height = section.getPageHeight() / TWIPS_PER_INCH;
|
||||||
{
|
float width = section.getPageWidth() / TWIPS_PER_INCH;
|
||||||
float height = section.getPageHeight() / WordToFoUtils.TWIPS_PER_INCH;
|
float leftMargin = section.getMarginLeft() / TWIPS_PER_INCH;
|
||||||
float width = section.getPageWidth() / WordToFoUtils.TWIPS_PER_INCH;
|
float rightMargin = section.getMarginRight() / TWIPS_PER_INCH;
|
||||||
float leftMargin = section.getMarginLeft()
|
float topMargin = section.getMarginTop() / TWIPS_PER_INCH;
|
||||||
/ WordToFoUtils.TWIPS_PER_INCH;
|
float bottomMargin = section.getMarginBottom() / TWIPS_PER_INCH;
|
||||||
float rightMargin = section.getMarginRight()
|
|
||||||
/ WordToFoUtils.TWIPS_PER_INCH;
|
|
||||||
float topMargin = section.getMarginTop() / WordToFoUtils.TWIPS_PER_INCH;
|
|
||||||
float bottomMargin = section.getMarginBottom()
|
|
||||||
/ WordToFoUtils.TWIPS_PER_INCH;
|
|
||||||
|
|
||||||
// add these to the header
|
// add these to the header
|
||||||
String pageMasterName = type + "-page" + sectionIndex;
|
String pageMasterName = type + "-page" + sectionIndex;
|
||||||
|
@ -163,7 +163,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 6.4.14 fo:region-body
|
* 6.4.14 fo:region-body
|
||||||
*
|
*
|
||||||
* The values of the padding and border-width traits must be "0".
|
* The values of the padding and border-width traits must be "0".
|
||||||
*/
|
*/
|
||||||
// WordToFoUtils.setBorder(regionBody, sep.getBrcTop(), "top");
|
// WordToFoUtils.setBorder(regionBody, sep.getBrcTop(), "top");
|
||||||
|
@ -177,8 +177,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
"" + ( section.getNumColumns() ) );
|
"" + ( section.getNumColumns() ) );
|
||||||
if ( section.isColumnsEvenlySpaced() )
|
if ( section.isColumnsEvenlySpaced() )
|
||||||
{
|
{
|
||||||
float distance = section.getDistanceBetweenColumns()
|
float distance = section.getDistanceBetweenColumns() / TWIPS_PER_INCH;
|
||||||
/ WordToFoUtils.TWIPS_PER_INCH;
|
|
||||||
regionBody.setAttribute( "column-gap", distance + "in" );
|
regionBody.setAttribute( "column-gap", distance + "in" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -208,15 +207,15 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
|
|
||||||
Triplet triplet = getCharacterRunTriplet( characterRun );
|
Triplet triplet = getCharacterRunTriplet( characterRun );
|
||||||
|
|
||||||
if ( WordToFoUtils.isNotEmpty( triplet.fontName ) )
|
if ( isNotEmpty( triplet.fontName ) )
|
||||||
WordToFoUtils.setFontFamily( inline, triplet.fontName );
|
setFontFamily( inline, triplet.fontName );
|
||||||
WordToFoUtils.setBold( inline, triplet.bold );
|
setBold( inline, triplet.bold );
|
||||||
WordToFoUtils.setItalic( inline, triplet.italic );
|
setItalic( inline, triplet.italic );
|
||||||
WordToFoUtils.setFontSize( inline, characterRun.getFontSize() / 2 );
|
setFontSize( inline, characterRun.getFontSize() / 2 );
|
||||||
WordToFoUtils.setCharactersProperties( characterRun, inline );
|
setCharactersProperties( characterRun, inline );
|
||||||
|
|
||||||
if ( isOutputCharactersLanguage() )
|
if ( isOutputCharactersLanguage() )
|
||||||
WordToFoUtils.setLanguage( characterRun, inline );
|
setLanguage( characterRun, inline );
|
||||||
|
|
||||||
block.appendChild( inline );
|
block.appendChild( inline );
|
||||||
|
|
||||||
|
@ -254,16 +253,16 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
protected void processDocumentInformation(
|
protected void processDocumentInformation(
|
||||||
SummaryInformation summaryInformation )
|
SummaryInformation summaryInformation )
|
||||||
{
|
{
|
||||||
if ( WordToHtmlUtils.isNotEmpty( summaryInformation.getTitle() ) )
|
if ( isNotEmpty( summaryInformation.getTitle() ) )
|
||||||
foDocumentFacade.setTitle( summaryInformation.getTitle() );
|
foDocumentFacade.setTitle( summaryInformation.getTitle() );
|
||||||
|
|
||||||
if ( WordToHtmlUtils.isNotEmpty( summaryInformation.getAuthor() ) )
|
if ( isNotEmpty( summaryInformation.getAuthor() ) )
|
||||||
foDocumentFacade.setCreator( summaryInformation.getAuthor() );
|
foDocumentFacade.setCreator( summaryInformation.getAuthor() );
|
||||||
|
|
||||||
if ( WordToHtmlUtils.isNotEmpty( summaryInformation.getKeywords() ) )
|
if ( isNotEmpty( summaryInformation.getKeywords() ) )
|
||||||
foDocumentFacade.setKeywords( summaryInformation.getKeywords() );
|
foDocumentFacade.setKeywords( summaryInformation.getKeywords() );
|
||||||
|
|
||||||
if ( WordToHtmlUtils.isNotEmpty( summaryInformation.getComments() ) )
|
if ( isNotEmpty( summaryInformation.getComments() ) )
|
||||||
foDocumentFacade.setDescription( summaryInformation.getComments() );
|
foDocumentFacade.setDescription( summaryInformation.getComments() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,7 +301,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
processCharacters( wordDocument, Integer.MIN_VALUE, endnoteTextRange,
|
processCharacters( wordDocument, Integer.MIN_VALUE, endnoteTextRange,
|
||||||
endnote );
|
endnote );
|
||||||
|
|
||||||
WordToFoUtils.compactInlines( endnote );
|
compactInlines( endnote );
|
||||||
this.endnotes.add( endnote );
|
this.endnotes.add( endnote );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,7 +338,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
processCharacters( wordDocument, Integer.MIN_VALUE, footnoteTextRange,
|
processCharacters( wordDocument, Integer.MIN_VALUE, footnoteTextRange,
|
||||||
footnoteBlock );
|
footnoteBlock );
|
||||||
|
|
||||||
WordToFoUtils.compactInlines( footnoteBlock );
|
compactInlines( footnoteBlock );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void processHyperlink( HWPFDocumentCore wordDocument,
|
protected void processHyperlink( HWPFDocumentCore wordDocument,
|
||||||
|
@ -360,7 +359,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
{
|
{
|
||||||
final Element externalGraphic = foDocumentFacade
|
final Element externalGraphic = foDocumentFacade
|
||||||
.createExternalGraphic( url );
|
.createExternalGraphic( url );
|
||||||
WordToFoUtils.setPictureProperties( picture, externalGraphic );
|
setPictureProperties( picture, externalGraphic );
|
||||||
currentBlock.appendChild( externalGraphic );
|
currentBlock.appendChild( externalGraphic );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,7 +425,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
final Element block = foDocumentFacade.createBlock();
|
final Element block = foDocumentFacade.createBlock();
|
||||||
parentFopElement.appendChild( block );
|
parentFopElement.appendChild( block );
|
||||||
|
|
||||||
WordToFoUtils.setParagraphProperties( paragraph, block );
|
setParagraphProperties( paragraph, block );
|
||||||
|
|
||||||
final int charRuns = paragraph.numCharacterRuns();
|
final int charRuns = paragraph.numCharacterRuns();
|
||||||
|
|
||||||
|
@ -437,7 +436,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
|
|
||||||
boolean haveAnyText = false;
|
boolean haveAnyText = false;
|
||||||
|
|
||||||
if ( WordToFoUtils.isNotEmpty( bulletText ) )
|
if ( isNotEmpty( bulletText ) )
|
||||||
{
|
{
|
||||||
Element inline = foDocumentFacade.createInline();
|
Element inline = foDocumentFacade.createInline();
|
||||||
block.appendChild( inline );
|
block.appendChild( inline );
|
||||||
|
@ -457,7 +456,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
block.appendChild( leader );
|
block.appendChild( leader );
|
||||||
}
|
}
|
||||||
|
|
||||||
WordToFoUtils.compactInlines( block );
|
compactInlines( block );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void processSection( HWPFDocumentCore wordDocument,
|
protected void processSection( HWPFDocumentCore wordDocument,
|
||||||
|
@ -485,8 +484,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
Element tableHeader = foDocumentFacade.createTableHeader();
|
Element tableHeader = foDocumentFacade.createTableHeader();
|
||||||
Element tableBody = foDocumentFacade.createTableBody();
|
Element tableBody = foDocumentFacade.createTableBody();
|
||||||
|
|
||||||
final int[] tableCellEdges = WordToHtmlUtils
|
final int[] tableCellEdges = buildTableCellEdgesArray( table );
|
||||||
.buildTableCellEdgesArray( table );
|
|
||||||
final int tableRows = table.numRows();
|
final int tableRows = table.numRows();
|
||||||
|
|
||||||
int maxColumns = Integer.MIN_VALUE;
|
int maxColumns = Integer.MIN_VALUE;
|
||||||
|
@ -500,7 +498,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
TableRow tableRow = table.getRow( r );
|
TableRow tableRow = table.getRow( r );
|
||||||
|
|
||||||
Element tableRowElement = foDocumentFacade.createTableRow();
|
Element tableRowElement = foDocumentFacade.createTableRow();
|
||||||
WordToFoUtils.setTableRowProperties( tableRow, tableRowElement );
|
setTableRowProperties( tableRow, tableRowElement );
|
||||||
|
|
||||||
// index of current element in tableCellEdges[]
|
// index of current element in tableCellEdges[]
|
||||||
int currentEdgeIndex = 0;
|
int currentEdgeIndex = 0;
|
||||||
|
@ -518,7 +516,7 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
}
|
}
|
||||||
|
|
||||||
Element tableCellElement = foDocumentFacade.createTableCell();
|
Element tableCellElement = foDocumentFacade.createTableCell();
|
||||||
WordToFoUtils.setTableCellProperties( tableRow, tableCell,
|
setTableCellProperties( tableRow, tableCell,
|
||||||
tableCellElement, r == 0, r == tableRows - 1, c == 0,
|
tableCellElement, r == 0, r == tableRows - 1, c == 0,
|
||||||
c == rowCells - 1 );
|
c == rowCells - 1 );
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.io.InputStream;
|
||||||
|
|
||||||
import org.apache.poi.extractor.POIOLE2TextExtractor;
|
import org.apache.poi.extractor.POIOLE2TextExtractor;
|
||||||
import org.apache.poi.hwpf.HWPFDocument;
|
import org.apache.poi.hwpf.HWPFDocument;
|
||||||
|
import org.apache.poi.hwpf.HWPFDocumentCore;
|
||||||
import org.apache.poi.hwpf.converter.WordToTextConverter;
|
import org.apache.poi.hwpf.converter.WordToTextConverter;
|
||||||
import org.apache.poi.hwpf.usermodel.HeaderStories;
|
import org.apache.poi.hwpf.usermodel.HeaderStories;
|
||||||
import org.apache.poi.hwpf.usermodel.Paragraph;
|
import org.apache.poi.hwpf.usermodel.Paragraph;
|
||||||
|
@ -32,10 +33,10 @@ import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to extract the text from a Word Document.
|
* Class to extract the text from a Word Document.
|
||||||
*
|
*
|
||||||
* You should use either getParagraphText() or getText() unless you have a
|
* You should use either getParagraphText() or getText() unless you have a
|
||||||
* strong reason otherwise.
|
* strong reason otherwise.
|
||||||
*
|
*
|
||||||
* @author Nick Burch
|
* @author Nick Burch
|
||||||
*/
|
*/
|
||||||
public final class WordExtractor extends POIOLE2TextExtractor {
|
public final class WordExtractor extends POIOLE2TextExtractor {
|
||||||
|
@ -43,17 +44,17 @@ public final class WordExtractor extends POIOLE2TextExtractor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new Word Extractor
|
* Create a new Word Extractor
|
||||||
*
|
*
|
||||||
* @param is
|
* @param is
|
||||||
* InputStream containing the word file
|
* InputStream containing the word file
|
||||||
*/
|
*/
|
||||||
public WordExtractor( InputStream is ) throws IOException {
|
public WordExtractor( InputStream is ) throws IOException {
|
||||||
this( HWPFDocument.verifyAndBuildPOIFS( is ) );
|
this(HWPFDocumentCore.verifyAndBuildPOIFS(is ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new Word Extractor
|
* Create a new Word Extractor
|
||||||
*
|
*
|
||||||
* @param fs
|
* @param fs
|
||||||
* POIFSFileSystem containing the word file
|
* POIFSFileSystem containing the word file
|
||||||
*/
|
*/
|
||||||
|
@ -67,7 +68,7 @@ public final class WordExtractor extends POIOLE2TextExtractor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new Word Extractor
|
* Create a new Word Extractor
|
||||||
*
|
*
|
||||||
* @param doc
|
* @param doc
|
||||||
* The HWPFDocument to extract from
|
* The HWPFDocument to extract from
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.BKFAbstractType;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
import org.apache.poi.util.POILogFactory;
|
import org.apache.poi.util.POILogFactory;
|
||||||
import org.apache.poi.util.POILogger;
|
import org.apache.poi.util.POILogger;
|
||||||
|
@ -124,9 +125,9 @@ public class BookmarksTables
|
||||||
int firstDescriptorsStart = fib.getFcPlcfbkf();
|
int firstDescriptorsStart = fib.getFcPlcfbkf();
|
||||||
int firstDescriptorsLength = fib.getLcbPlcfbkf();
|
int firstDescriptorsLength = fib.getLcbPlcfbkf();
|
||||||
if ( firstDescriptorsStart != 0 && firstDescriptorsLength != 0 )
|
if ( firstDescriptorsStart != 0 && firstDescriptorsLength != 0 )
|
||||||
descriptorsFirst = new PlexOfCps( tableStream,
|
descriptorsFirst = new PlexOfCps(tableStream,
|
||||||
firstDescriptorsStart, firstDescriptorsLength,
|
firstDescriptorsStart, firstDescriptorsLength,
|
||||||
BookmarkFirstDescriptor.getSize() );
|
BKFAbstractType.getSize() );
|
||||||
|
|
||||||
int limDescriptorsStart = fib.getFcPlcfbkl();
|
int limDescriptorsStart = fib.getFcPlcfbkl();
|
||||||
int limDescriptorsLength = fib.getLcbPlcfbkl();
|
int limDescriptorsLength = fib.getLcbPlcfbkl();
|
||||||
|
|
|
@ -16,6 +16,11 @@
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
package org.apache.poi.hwpf.model;
|
package org.apache.poi.hwpf.model;
|
||||||
|
|
||||||
|
import static org.apache.poi.hwpf.model.types.FFDataBaseAbstractType.ITYPE_CHCK;
|
||||||
|
import static org.apache.poi.hwpf.model.types.FFDataBaseAbstractType.ITYPE_DROP;
|
||||||
|
import static org.apache.poi.hwpf.model.types.FFDataBaseAbstractType.ITYPE_TEXT;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.FFDataBaseAbstractType;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
import org.apache.poi.util.LittleEndianConsts;
|
import org.apache.poi.util.LittleEndianConsts;
|
||||||
|
@ -95,12 +100,12 @@ public class FFData
|
||||||
int offset = startOffset;
|
int offset = startOffset;
|
||||||
|
|
||||||
this._base = new FFDataBase( std, offset );
|
this._base = new FFDataBase( std, offset );
|
||||||
offset += FFDataBase.getSize();
|
offset += FFDataBaseAbstractType.getSize();
|
||||||
|
|
||||||
this._xstzName = new Xstz( std, offset );
|
this._xstzName = new Xstz( std, offset );
|
||||||
offset += this._xstzName.getSize();
|
offset += this._xstzName.getSize();
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_TEXT )
|
if ( _base.getIType() == ITYPE_TEXT )
|
||||||
{
|
{
|
||||||
_xstzTextDef = new Xstz( std, offset );
|
_xstzTextDef = new Xstz( std, offset );
|
||||||
offset += this._xstzTextDef.getSize();
|
offset += this._xstzTextDef.getSize();
|
||||||
|
@ -110,11 +115,10 @@ public class FFData
|
||||||
this._xstzTextDef = null;
|
this._xstzTextDef = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_CHCK
|
if ( _base.getIType() == ITYPE_CHCK
|
||||||
|| _base.getIType() == FFDataBase.ITYPE_DROP )
|
|| _base.getIType() == ITYPE_DROP )
|
||||||
{
|
{
|
||||||
this._wDef = Integer
|
this._wDef = LittleEndian.getUShort(std, offset);
|
||||||
.valueOf( LittleEndian.getUShort( std, offset ) );
|
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -137,10 +141,8 @@ public class FFData
|
||||||
_xstzExitMcr = new Xstz( std, offset );
|
_xstzExitMcr = new Xstz( std, offset );
|
||||||
offset += this._xstzExitMcr.getSize();
|
offset += this._xstzExitMcr.getSize();
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_DROP )
|
if ( _base.getIType() == ITYPE_DROP ) {
|
||||||
{
|
|
||||||
_hsttbDropList = new Sttb( std, offset );
|
_hsttbDropList = new Sttb( std, offset );
|
||||||
offset += _hsttbDropList.getSize();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +151,7 @@ public class FFData
|
||||||
*/
|
*/
|
||||||
public int getDefaultDropDownItemIndex()
|
public int getDefaultDropDownItemIndex()
|
||||||
{
|
{
|
||||||
return _wDef.intValue();
|
return _wDef;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getDropList()
|
public String[] getDropList()
|
||||||
|
@ -159,17 +161,17 @@ public class FFData
|
||||||
|
|
||||||
public int getSize()
|
public int getSize()
|
||||||
{
|
{
|
||||||
int size = FFDataBase.getSize();
|
int size = FFDataBaseAbstractType.getSize();
|
||||||
|
|
||||||
size += _xstzName.getSize();
|
size += _xstzName.getSize();
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_TEXT )
|
if ( _base.getIType() == ITYPE_TEXT )
|
||||||
{
|
{
|
||||||
size += _xstzTextDef.getSize();
|
size += _xstzTextDef.getSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_CHCK
|
if ( _base.getIType() == ITYPE_CHCK
|
||||||
|| _base.getIType() == FFDataBase.ITYPE_DROP )
|
|| _base.getIType() == ITYPE_DROP )
|
||||||
{
|
{
|
||||||
size += LittleEndianConsts.SHORT_SIZE;
|
size += LittleEndianConsts.SHORT_SIZE;
|
||||||
}
|
}
|
||||||
|
@ -180,7 +182,7 @@ public class FFData
|
||||||
size += _xstzEntryMcr.getSize();
|
size += _xstzEntryMcr.getSize();
|
||||||
size += _xstzExitMcr.getSize();
|
size += _xstzExitMcr.getSize();
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_DROP )
|
if ( _base.getIType() == ITYPE_DROP )
|
||||||
{
|
{
|
||||||
size += _hsttbDropList.getSize();
|
size += _hsttbDropList.getSize();
|
||||||
}
|
}
|
||||||
|
@ -199,17 +201,17 @@ public class FFData
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
_base.serialize( buffer, offset );
|
_base.serialize( buffer, offset );
|
||||||
offset += FFDataBase.getSize();
|
offset += FFDataBaseAbstractType.getSize();
|
||||||
|
|
||||||
offset += _xstzName.serialize( buffer, offset );
|
offset += _xstzName.serialize( buffer, offset );
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_TEXT )
|
if ( _base.getIType() == ITYPE_TEXT )
|
||||||
{
|
{
|
||||||
offset += _xstzTextDef.serialize( buffer, offset );
|
offset += _xstzTextDef.serialize( buffer, offset );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_CHCK
|
if ( _base.getIType() == ITYPE_CHCK
|
||||||
|| _base.getIType() == FFDataBase.ITYPE_DROP )
|
|| _base.getIType() == ITYPE_DROP )
|
||||||
{
|
{
|
||||||
LittleEndian.putUShort( buffer, offset, _wDef );
|
LittleEndian.putUShort( buffer, offset, _wDef );
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
|
@ -221,9 +223,8 @@ public class FFData
|
||||||
offset += _xstzEntryMcr.serialize( buffer, offset );
|
offset += _xstzEntryMcr.serialize( buffer, offset );
|
||||||
offset += _xstzExitMcr.serialize( buffer, offset );
|
offset += _xstzExitMcr.serialize( buffer, offset );
|
||||||
|
|
||||||
if ( _base.getIType() == FFDataBase.ITYPE_DROP )
|
if ( _base.getIType() == ITYPE_DROP ) {
|
||||||
{
|
_hsttbDropList.serialize( buffer, offset );
|
||||||
offset += _hsttbDropList.serialize( buffer, offset );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
|
|
|
@ -22,12 +22,11 @@ import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.FSPAAbstractType;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class holds all the FSPA (File Shape Address) structures.
|
* This class holds all the FSPA (File Shape Address) structures.
|
||||||
*
|
|
||||||
* @author Squeeself
|
|
||||||
*/
|
*/
|
||||||
@Internal
|
@Internal
|
||||||
public final class FSPATable
|
public final class FSPATable
|
||||||
|
@ -41,12 +40,11 @@ public final class FSPATable
|
||||||
int offset = fib.getFSPAPlcfOffset( part );
|
int offset = fib.getFSPAPlcfOffset( part );
|
||||||
int length = fib.getFSPAPlcfLength( part );
|
int length = fib.getFSPAPlcfLength( part );
|
||||||
|
|
||||||
PlexOfCps plex = new PlexOfCps( tableStream, offset, length,
|
PlexOfCps plex = new PlexOfCps(tableStream, offset, length, FSPAAbstractType.getSize() );
|
||||||
FSPA.getSize() );
|
|
||||||
for ( int i = 0; i < plex.length(); i++ )
|
for ( int i = 0; i < plex.length(); i++ )
|
||||||
{
|
{
|
||||||
GenericPropertyNode property = plex.getProperty( i );
|
GenericPropertyNode property = plex.getProperty( i );
|
||||||
_byStart.put( Integer.valueOf( property.getStart() ), property );
|
_byStart.put(property.getStart(), property );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,13 +61,13 @@ public final class FSPATable
|
||||||
for ( int i = 0; i < plex.length(); i++ )
|
for ( int i = 0; i < plex.length(); i++ )
|
||||||
{
|
{
|
||||||
GenericPropertyNode property = plex.getProperty( i );
|
GenericPropertyNode property = plex.getProperty( i );
|
||||||
_byStart.put( Integer.valueOf( property.getStart() ), property );
|
_byStart.put(property.getStart(), property );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public FSPA getFspaFromCp( int cp )
|
public FSPA getFspaFromCp( int cp )
|
||||||
{
|
{
|
||||||
GenericPropertyNode propertyNode = _byStart.get( Integer.valueOf( cp ) );
|
GenericPropertyNode propertyNode = _byStart.get(cp);
|
||||||
if ( propertyNode == null )
|
if ( propertyNode == null )
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
@ -96,7 +94,7 @@ public final class FSPATable
|
||||||
buf.append( " " ).append(i).append( " => \t" );
|
buf.append( " " ).append(i).append( " => \t" );
|
||||||
|
|
||||||
try {
|
try {
|
||||||
FSPA fspa = getFspaFromCp( i.intValue() );
|
FSPA fspa = getFspaFromCp(i);
|
||||||
buf.append(fspa);
|
buf.append(fspa);
|
||||||
} catch ( Exception exc ) {
|
} catch ( Exception exc ) {
|
||||||
buf.append( exc.getMessage() );
|
buf.append( exc.getMessage() );
|
||||||
|
|
|
@ -24,6 +24,8 @@ import java.lang.reflect.Modifier;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.FibBaseAbstractType;
|
||||||
|
import org.apache.poi.hwpf.model.types.FibRgW97AbstractType;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
@ -69,20 +71,18 @@ public final class FileInformationBlock
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
_fibBase = new FibBase( mainDocument, offset );
|
_fibBase = new FibBase( mainDocument, offset );
|
||||||
offset = FibBase.getSize();
|
offset = FibBaseAbstractType.getSize();
|
||||||
assert offset == 32;
|
assert offset == 32;
|
||||||
|
|
||||||
_csw = LittleEndian.getUShort( mainDocument, offset );
|
_csw = LittleEndian.getUShort( mainDocument, offset );
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
assert offset == 34;
|
|
||||||
|
|
||||||
_fibRgW = new FibRgW97( mainDocument, offset );
|
_fibRgW = new FibRgW97( mainDocument, offset );
|
||||||
offset += FibRgW97.getSize();
|
offset += FibRgW97AbstractType.getSize();
|
||||||
assert offset == 62;
|
assert offset == 62;
|
||||||
|
|
||||||
_cslw = LittleEndian.getUShort( mainDocument, offset );
|
_cslw = LittleEndian.getUShort( mainDocument, offset );
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
assert offset == 64;
|
|
||||||
|
|
||||||
if ( _fibBase.getNFib() < 105 )
|
if ( _fibBase.getNFib() < 105 )
|
||||||
{
|
{
|
||||||
|
@ -1079,13 +1079,13 @@ public final class FileInformationBlock
|
||||||
_cbRgFcLcb = _fieldHandler.getFieldsCount();
|
_cbRgFcLcb = _fieldHandler.getFieldsCount();
|
||||||
|
|
||||||
_fibBase.serialize( mainStream, 0 );
|
_fibBase.serialize( mainStream, 0 );
|
||||||
int offset = FibBase.getSize();
|
int offset = FibBaseAbstractType.getSize();
|
||||||
|
|
||||||
LittleEndian.putUShort( mainStream, offset, _csw );
|
LittleEndian.putUShort( mainStream, offset, _csw );
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
|
|
||||||
_fibRgW.serialize( mainStream, offset );
|
_fibRgW.serialize( mainStream, offset );
|
||||||
offset += FibRgW97.getSize();
|
offset += FibRgW97AbstractType.getSize();
|
||||||
|
|
||||||
LittleEndian.putUShort( mainStream, offset, _cslw );
|
LittleEndian.putUShort( mainStream, offset, _cslw );
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
|
@ -1114,7 +1114,7 @@ public final class FileInformationBlock
|
||||||
|
|
||||||
public int getSize()
|
public int getSize()
|
||||||
{
|
{
|
||||||
return FibBase.getSize() + LittleEndianConsts.SHORT_SIZE + FibRgW97.getSize()
|
return FibBaseAbstractType.getSize() + LittleEndianConsts.SHORT_SIZE + FibRgW97AbstractType.getSize()
|
||||||
+ LittleEndianConsts.SHORT_SIZE + FibRgLw97.getSize()
|
+ LittleEndianConsts.SHORT_SIZE + FibRgLw97.getSize()
|
||||||
+ LittleEndianConsts.SHORT_SIZE + _fieldHandler.sizeInBytes();
|
+ LittleEndianConsts.SHORT_SIZE + _fieldHandler.sizeInBytes();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ package org.apache.poi.hwpf.model;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.LFOLVLBaseAbstractType;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,7 +37,7 @@ public final class ListFormatOverrideLevel
|
||||||
public ListFormatOverrideLevel( byte[] buf, int offset )
|
public ListFormatOverrideLevel( byte[] buf, int offset )
|
||||||
{
|
{
|
||||||
_base = new LFOLVLBase( buf, offset );
|
_base = new LFOLVLBase( buf, offset );
|
||||||
offset += LFOLVLBase.getSize();
|
offset += LFOLVLBaseAbstractType.getSize();
|
||||||
|
|
||||||
if ( _base.isFFormatting() )
|
if ( _base.isFFormatting() )
|
||||||
{
|
{
|
||||||
|
@ -78,7 +79,7 @@ public final class ListFormatOverrideLevel
|
||||||
|
|
||||||
public int getSizeInBytes()
|
public int getSizeInBytes()
|
||||||
{
|
{
|
||||||
return _lvl == null ? LFOLVLBase.getSize() : LFOLVLBase.getSize()
|
return _lvl == null ? LFOLVLBaseAbstractType.getSize() : LFOLVLBaseAbstractType.getSize()
|
||||||
+ _lvl.getSizeInBytes();
|
+ _lvl.getSizeInBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,7 +104,7 @@ public final class ListFormatOverrideLevel
|
||||||
|
|
||||||
byte[] buf = new byte[getSizeInBytes()];
|
byte[] buf = new byte[getSizeInBytes()];
|
||||||
_base.serialize( buf, offset );
|
_base.serialize( buf, offset );
|
||||||
offset += LFOLVLBase.getSize();
|
offset += LFOLVLBaseAbstractType.getSize();
|
||||||
|
|
||||||
if ( _lvl != null )
|
if ( _lvl != null )
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.poi.hwpf.model;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.LVLFAbstractType;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
import org.apache.poi.util.POILogFactory;
|
import org.apache.poi.util.POILogFactory;
|
||||||
|
@ -54,7 +55,7 @@ public final class ListLevel
|
||||||
* from the other paragraphs in the list. Any element in the rgtchar field
|
* from the other paragraphs in the list. Any element in the rgtchar field
|
||||||
* of this Xst can be a placeholder. Each placeholder is an unsigned 2-byte
|
* of this Xst can be a placeholder. Each placeholder is an unsigned 2-byte
|
||||||
* integer that specifies the zero-based level that the placeholder is for.
|
* integer that specifies the zero-based level that the placeholder is for.
|
||||||
*
|
*
|
||||||
* Each placeholder MUST have a value that is less than or equal to the
|
* Each placeholder MUST have a value that is less than or equal to the
|
||||||
* zero-based level of the list that this LVL represents. The indexes of the
|
* zero-based level of the list that this LVL represents. The indexes of the
|
||||||
* placeholders are specified by lvlf.rgbxchNums. Placeholders that
|
* placeholders are specified by lvlf.rgbxchNums. Placeholders that
|
||||||
|
@ -162,7 +163,7 @@ public final class ListLevel
|
||||||
|
|
||||||
public int getSizeInBytes()
|
public int getSizeInBytes()
|
||||||
{
|
{
|
||||||
return LVLF.getSize() + _lvlf.getCbGrpprlChpx()
|
return LVLFAbstractType.getSize() + _lvlf.getCbGrpprlChpx()
|
||||||
+ _lvlf.getCbGrpprlPapx() + _xst.getSize();
|
+ _lvlf.getCbGrpprlPapx() + _xst.getSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,35 +183,35 @@ public final class ListLevel
|
||||||
/**
|
/**
|
||||||
* An unsigned integer that specifies the first (most-significant) zero-based level after which the number sequence of this level does not restart. The number sequence of this level does restart after any level that is more significant than the specified level. This MUST be less than or equal to the zero-based level of the list to which this LVLF corresponds.
|
* An unsigned integer that specifies the first (most-significant) zero-based level after which the number sequence of this level does not restart. The number sequence of this level does restart after any level that is more significant than the specified level. This MUST be less than or equal to the zero-based level of the list to which this LVLF corresponds.
|
||||||
* <p>see [MS-DOC], v20140721, 2.9.150</p>
|
* <p>see [MS-DOC], v20140721, 2.9.150</p>
|
||||||
*
|
*
|
||||||
* @return the first ({@code 0} is the most significant) level after which
|
* @return the first ({@code 0} is the most significant) level after which
|
||||||
* the numbering does not restart or {@code -1} if no restart is applicable
|
* the numbering does not restart or {@code -1} if no restart is applicable
|
||||||
*/
|
*/
|
||||||
public short getRestart() {
|
public short getRestart() {
|
||||||
return _lvlf.isFNoRestart() ? _lvlf.getIlvlRestartLim() : -1;
|
return _lvlf.isFNoRestart() ? _lvlf.getIlvlRestartLim() : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines if the number formatting shall be overridden by
|
* Determines if the number formatting shall be overridden by
|
||||||
* {@code msonfcArabic}; unless it originally was {@code msonfcArabicLZ}
|
* {@code msonfcArabic}; unless it originally was {@code msonfcArabicLZ}
|
||||||
* in which case it is preserved.
|
* in which case it is preserved.
|
||||||
* <p>see [MS-DOC], v20140721, 2.9.150 and [MS-OSHARED], v20140721, 2.2.1.3</p>
|
* <p>see [MS-DOC], v20140721, 2.9.150 and [MS-OSHARED], v20140721, 2.2.1.3</p>
|
||||||
*
|
*
|
||||||
* @return {@code true} if the level numbering of this and all more
|
* @return {@code true} if the level numbering of this and all more
|
||||||
* significant levels must be overridden; {@code false} otherwise
|
* significant levels must be overridden; {@code false} otherwise
|
||||||
*/
|
*/
|
||||||
public boolean isLegalNumbering() {
|
public boolean isLegalNumbering() {
|
||||||
return _lvlf.isFLegal();
|
return _lvlf.isFLegal();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array which specifies the character offsets of the level numbers in a
|
* Array which specifies the character offsets of the level numbers in a
|
||||||
* level numbering string.
|
* level numbering string.
|
||||||
* <p>see [MS-DOC], v20140721, 2.9.150</p>
|
* <p>see [MS-DOC], v20140721, 2.9.150</p>
|
||||||
*
|
*
|
||||||
* @return {@code 0}-terminated array, unless it is full
|
* @return {@code 0}-terminated array, unless it is full
|
||||||
*/
|
*/
|
||||||
public byte[] getLevelNumberingPlaceholderOffsets() {
|
public byte[] getLevelNumberingPlaceholderOffsets() {
|
||||||
return _lvlf.getRgbxchNums();
|
return _lvlf.getRgbxchNums();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +220,7 @@ public final class ListLevel
|
||||||
int offset = startOffset;
|
int offset = startOffset;
|
||||||
|
|
||||||
_lvlf = new LVLF( data, offset );
|
_lvlf = new LVLF( data, offset );
|
||||||
offset += LVLF.getSize();
|
offset += LVLFAbstractType.getSize();
|
||||||
|
|
||||||
//short -- no need to safely allocate
|
//short -- no need to safely allocate
|
||||||
_grpprlPapx = new byte[_lvlf.getCbGrpprlPapx()];
|
_grpprlPapx = new byte[_lvlf.getCbGrpprlPapx()];
|
||||||
|
@ -292,7 +293,7 @@ public final class ListLevel
|
||||||
_lvlf.setCbGrpprlChpx( (short) _grpprlChpx.length );
|
_lvlf.setCbGrpprlChpx( (short) _grpprlChpx.length );
|
||||||
_lvlf.setCbGrpprlPapx( (short) _grpprlPapx.length );
|
_lvlf.setCbGrpprlPapx( (short) _grpprlPapx.length );
|
||||||
_lvlf.serialize( buf, offset );
|
_lvlf.serialize( buf, offset );
|
||||||
offset += LVLF.getSize();
|
offset += LVLFAbstractType.getSize();
|
||||||
|
|
||||||
System.arraycopy( _grpprlPapx, 0, buf, offset, _grpprlPapx.length );
|
System.arraycopy( _grpprlPapx, 0, buf, offset, _grpprlPapx.length );
|
||||||
offset += _grpprlPapx.length;
|
offset += _grpprlPapx.length;
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.util.LinkedHashMap;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.LSTFAbstractType;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
import org.apache.poi.util.LittleEndianConsts;
|
import org.apache.poi.util.LittleEndianConsts;
|
||||||
|
@ -58,13 +59,13 @@ public final class ListTables
|
||||||
|
|
||||||
int cLst = LittleEndian.getShort( tableStream, offset );
|
int cLst = LittleEndian.getShort( tableStream, offset );
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
int levelOffset = offset + ( cLst * LSTF.getSize() );
|
int levelOffset = offset + ( cLst * LSTFAbstractType.getSize() );
|
||||||
|
|
||||||
for ( int x = 0; x < cLst; x++ )
|
for ( int x = 0; x < cLst; x++ )
|
||||||
{
|
{
|
||||||
ListData lst = new ListData( tableStream, offset );
|
ListData lst = new ListData( tableStream, offset );
|
||||||
_listMap.put( Integer.valueOf( lst.getLsid() ), lst );
|
_listMap.put(lst.getLsid(), lst );
|
||||||
offset += LSTF.getSize();
|
offset += LSTFAbstractType.getSize();
|
||||||
|
|
||||||
int num = lst.numLevels();
|
int num = lst.numLevels();
|
||||||
for ( int y = 0; y < num; y++ )
|
for ( int y = 0; y < num; y++ )
|
||||||
|
@ -96,10 +97,9 @@ public final class ListTables
|
||||||
for(ListData lst : _listMap.values()) {
|
for(ListData lst : _listMap.values()) {
|
||||||
tableStream.write(lst.toByteArray());
|
tableStream.write(lst.toByteArray());
|
||||||
ListLevel[] lvls = lst.getLevels();
|
ListLevel[] lvls = lst.getLevels();
|
||||||
for (int y = 0; y < lvls.length; y++)
|
for (ListLevel lvl : lvls) {
|
||||||
{
|
levelBuf.write(lvl.toByteArray());
|
||||||
levelBuf.write(lvls[y].toByteArray());
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -135,13 +135,11 @@ public final class ListTables
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the ListLevel for a given lsid and level
|
* Get the ListLevel for a given lsid and level
|
||||||
* @param lsid
|
|
||||||
* @param level
|
|
||||||
* @return ListLevel if found, or <code>null</code> if ListData can't be found or if level is > that available
|
* @return ListLevel if found, or <code>null</code> if ListData can't be found or if level is > that available
|
||||||
*/
|
*/
|
||||||
public ListLevel getLevel(int lsid, int level)
|
public ListLevel getLevel(int lsid, int level)
|
||||||
{
|
{
|
||||||
ListData lst = _listMap.get(Integer.valueOf(lsid));
|
ListData lst = _listMap.get(lsid);
|
||||||
if (lst == null) {
|
if (lst == null) {
|
||||||
if (log.check(POILogger.WARN)) {
|
if (log.check(POILogger.WARN)) {
|
||||||
log.log(POILogger.WARN, "ListData for " +
|
log.log(POILogger.WARN, "ListData for " +
|
||||||
|
@ -160,7 +158,7 @@ public final class ListTables
|
||||||
|
|
||||||
public ListData getListData(int lsid)
|
public ListData getListData(int lsid)
|
||||||
{
|
{
|
||||||
return _listMap.get(Integer.valueOf(lsid));
|
return _listMap.get(lsid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -180,25 +178,18 @@ public final class ListTables
|
||||||
ListTables other = (ListTables) obj;
|
ListTables other = (ListTables) obj;
|
||||||
if ( !_listMap.equals( other._listMap ) )
|
if ( !_listMap.equals( other._listMap ) )
|
||||||
return false;
|
return false;
|
||||||
if ( _plfLfo == null )
|
return Objects.equals(_plfLfo, other._plfLfo);
|
||||||
{
|
|
||||||
if ( other._plfLfo != null )
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if ( !_plfLfo.equals( other._plfLfo ) )
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int addList( ListData lst, LFO lfo, LFOData lfoData )
|
public int addList( ListData lst, LFO lfo, LFOData lfoData )
|
||||||
{
|
{
|
||||||
int lsid = lst.getLsid();
|
int lsid = lst.getLsid();
|
||||||
while ( _listMap.get( Integer.valueOf( lsid ) ) != null )
|
while (_listMap.containsKey(lsid))
|
||||||
{
|
{
|
||||||
lsid = lst.resetListID();
|
lsid = lst.resetListID();
|
||||||
lfo.setLsid( lsid );
|
lfo.setLsid( lsid );
|
||||||
}
|
}
|
||||||
_listMap.put( Integer.valueOf( lsid ), lst );
|
_listMap.put(lsid, lst );
|
||||||
|
|
||||||
if ( lfo == null && lfoData != null )
|
if ( lfo == null && lfoData != null )
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,18 +19,18 @@ package org.apache.poi.hwpf.model;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.FRDAbstractType;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds information about document notes (footnotes or ending notes)
|
* Holds information about document notes (footnotes or ending notes)
|
||||||
*
|
*
|
||||||
* @author Sergey Vladimirov (vlsergey {at} gmail {doc} com)
|
* @author Sergey Vladimirov (vlsergey {at} gmail {doc} com)
|
||||||
*/
|
*/
|
||||||
@Internal
|
@Internal
|
||||||
public class NotesTables
|
public class NotesTables
|
||||||
{
|
{
|
||||||
private PlexOfCps descriptors = new PlexOfCps(
|
private PlexOfCps descriptors = new PlexOfCps(FRDAbstractType.getSize() );
|
||||||
FootnoteReferenceDescriptor.getSize() );
|
|
||||||
|
|
||||||
private final NoteType noteType;
|
private final NoteType noteType;
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ public class NotesTables
|
||||||
|
|
||||||
if ( referencesStart != 0 && referencesLength != 0 )
|
if ( referencesStart != 0 && referencesLength != 0 )
|
||||||
this.descriptors = new PlexOfCps( tableStream, referencesStart,
|
this.descriptors = new PlexOfCps( tableStream, referencesStart,
|
||||||
referencesLength, FootnoteReferenceDescriptor.getSize() );
|
referencesLength, FRDAbstractType.getSize() );
|
||||||
|
|
||||||
int textPositionsStart = fib.getNotesTextPositionsOffset( noteType );
|
int textPositionsStart = fib.getNotesTextPositionsOffset( noteType );
|
||||||
int textPositionsLength = fib.getNotesTextPositionsSize( noteType );
|
int textPositionsLength = fib.getNotesTextPositionsSize( noteType );
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.util.List;
|
||||||
import org.apache.poi.ddf.DefaultEscherRecordFactory;
|
import org.apache.poi.ddf.DefaultEscherRecordFactory;
|
||||||
import org.apache.poi.ddf.EscherContainerRecord;
|
import org.apache.poi.ddf.EscherContainerRecord;
|
||||||
import org.apache.poi.ddf.EscherRecord;
|
import org.apache.poi.ddf.EscherRecord;
|
||||||
|
import org.apache.poi.hwpf.model.types.PICFAbstractType;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
|
||||||
|
@ -47,7 +48,7 @@ public class PICFAndOfficeArtData
|
||||||
int offset = startOffset;
|
int offset = startOffset;
|
||||||
|
|
||||||
_picf = new PICF( dataStream, offset );
|
_picf = new PICF( dataStream, offset );
|
||||||
offset += PICF.getSize();
|
offset += PICFAbstractType.getSize();
|
||||||
|
|
||||||
if ( _picf.getMm() == 0x0066 )
|
if ( _picf.getMm() == 0x0066 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.LFOAbstractType;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
import org.apache.poi.util.LittleEndianConsts;
|
import org.apache.poi.util.LittleEndianConsts;
|
||||||
import org.apache.poi.util.POILogFactory;
|
import org.apache.poi.util.POILogFactory;
|
||||||
|
@ -87,7 +88,7 @@ public class PlfLfo
|
||||||
for ( int x = 0; x < _lfoMac; x++ )
|
for ( int x = 0; x < _lfoMac; x++ )
|
||||||
{
|
{
|
||||||
LFO lfo = new LFO( tableStream, offset );
|
LFO lfo = new LFO( tableStream, offset );
|
||||||
offset += LFO.getSize();
|
offset += LFOAbstractType.getSize();
|
||||||
_rgLfo[x] = lfo;
|
_rgLfo[x] = lfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,12 +206,12 @@ public class PlfLfo
|
||||||
|
|
||||||
LittleEndian.putUInt( _lfoMac, outputStream );
|
LittleEndian.putUInt( _lfoMac, outputStream );
|
||||||
|
|
||||||
byte[] bs = new byte[LFO.getSize() * _lfoMac];
|
byte[] bs = new byte[LFOAbstractType.getSize() * _lfoMac];
|
||||||
for ( int i = 0; i < _lfoMac; i++ )
|
for ( int i = 0; i < _lfoMac; i++ )
|
||||||
{
|
{
|
||||||
_rgLfo[i].serialize( bs, i * LFO.getSize() );
|
_rgLfo[i].serialize( bs, i * LFOAbstractType.getSize() );
|
||||||
}
|
}
|
||||||
outputStream.write( bs, 0, LFO.getSize() * _lfoMac );
|
outputStream.write( bs, 0, LFOAbstractType.getSize() * _lfoMac );
|
||||||
|
|
||||||
for ( int i = 0; i < _lfoMac; i++ )
|
for ( int i = 0; i < _lfoMac; i++ )
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,7 +18,9 @@
|
||||||
package org.apache.poi.hwpf.model;
|
package org.apache.poi.hwpf.model;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.apache.poi.hwpf.model.types.StdfBaseAbstractType;
|
||||||
import org.apache.poi.hwpf.usermodel.CharacterProperties;
|
import org.apache.poi.hwpf.usermodel.CharacterProperties;
|
||||||
import org.apache.poi.hwpf.usermodel.ParagraphProperties;
|
import org.apache.poi.hwpf.usermodel.ParagraphProperties;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
|
@ -72,13 +74,11 @@ public final class StyleDescription {
|
||||||
} else if (baseLength == 0x000A) {
|
} else if (baseLength == 0x000A) {
|
||||||
readStdfPost2000 = false;
|
readStdfPost2000 = false;
|
||||||
} else {
|
} else {
|
||||||
logger.log(POILogger.WARN,
|
logger.log(POILogger.WARN, "Style definition has non-standard size of ", baseLength);
|
||||||
"Style definition has non-standard size of ",
|
|
||||||
Integer.valueOf(baseLength));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_stdfBase = new StdfBase(std, offset);
|
_stdfBase = new StdfBase(std, offset);
|
||||||
offset += StdfBase.getSize();
|
offset += StdfBaseAbstractType.getSize();
|
||||||
|
|
||||||
if (readStdfPost2000) {
|
if (readStdfPost2000) {
|
||||||
_stdfPost2000 = new StdfPost2000(std, offset);
|
_stdfPost2000 = new StdfPost2000(std, offset);
|
||||||
|
@ -146,12 +146,7 @@ public final class StyleDescription {
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getPAPX() {
|
public byte[] getPAPX() {
|
||||||
switch (_stdfBase.getStk()) {
|
return _stdfBase.getStk() == PARAGRAPH_STYLE ? _upxs[0].getUPX() : null;
|
||||||
case PARAGRAPH_STYLE:
|
|
||||||
return _upxs[0].getUPX();
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -201,18 +196,18 @@ public final class StyleDescription {
|
||||||
char[] letters = _name.toCharArray();
|
char[] letters = _name.toCharArray();
|
||||||
LittleEndian.putShort(buf, _baseLength, (short) letters.length);
|
LittleEndian.putShort(buf, _baseLength, (short) letters.length);
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
for (int x = 0; x < letters.length; x++) {
|
for (char letter : letters) {
|
||||||
LittleEndian.putShort(buf, offset, (short) letters[x]);
|
LittleEndian.putShort(buf, offset, (short) letter);
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
}
|
}
|
||||||
// get past the null delimiter for the name.
|
// get past the null delimiter for the name.
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
|
|
||||||
for (int x = 0; x < _upxs.length; x++) {
|
for (UPX upx : _upxs) {
|
||||||
short upxSize = (short) _upxs[x].size();
|
short upxSize = (short) upx.size();
|
||||||
LittleEndian.putShort(buf, offset, upxSize);
|
LittleEndian.putShort(buf, offset, upxSize);
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
System.arraycopy(_upxs[x].getUPX(), 0, buf, offset, upxSize);
|
System.arraycopy(upx.getUPX(), 0, buf, offset, upxSize);
|
||||||
offset += upxSize + (upxSize % 2);
|
offset += upxSize + (upxSize % 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,24 +223,16 @@ public final class StyleDescription {
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj) {
|
||||||
if (this == obj)
|
if (this == obj)
|
||||||
return true;
|
return true;
|
||||||
if (obj == null)
|
if (!(obj instanceof StyleDescription))
|
||||||
return false;
|
|
||||||
if (getClass() != obj.getClass())
|
|
||||||
return false;
|
return false;
|
||||||
StyleDescription other = (StyleDescription) obj;
|
StyleDescription other = (StyleDescription) obj;
|
||||||
if (_name == null) {
|
if (!Objects.equals(_name, other._name)) {
|
||||||
if (other._name != null)
|
|
||||||
return false;
|
|
||||||
} else if (!_name.equals(other._name))
|
|
||||||
return false;
|
return false;
|
||||||
if (_stdfBase == null) {
|
}
|
||||||
if (other._stdfBase != null)
|
if (!Objects.equals(_stdfBase, other._stdfBase)) {
|
||||||
return false;
|
|
||||||
} else if (!_stdfBase.equals(other._stdfBase))
|
|
||||||
return false;
|
return false;
|
||||||
if (!Arrays.equals(_upxs, other._upxs))
|
}
|
||||||
return false;
|
return Arrays.equals(_upxs, other._upxs);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -89,7 +89,6 @@ public final class StyleSheet {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
_stshif = new Stshif(tableStream, offset);
|
_stshif = new Stshif(tableStream, offset);
|
||||||
offset += Stshif.getSize();
|
|
||||||
|
|
||||||
// shall we discard cbLSD and mpstilsd?
|
// shall we discard cbLSD and mpstilsd?
|
||||||
|
|
||||||
|
@ -144,9 +143,9 @@ public final class StyleSheet {
|
||||||
out.write(buf);
|
out.write(buf);
|
||||||
|
|
||||||
byte[] sizeHolder = new byte[2];
|
byte[] sizeHolder = new byte[2];
|
||||||
for (int x = 0; x < _styleDescriptions.length; x++) {
|
for (StyleDescription styleDescription : _styleDescriptions) {
|
||||||
if (_styleDescriptions[x] != null) {
|
if (styleDescription != null) {
|
||||||
byte[] std = _styleDescriptions[x].toByteArray();
|
byte[] std = styleDescription.toByteArray();
|
||||||
|
|
||||||
// adjust the size so it is always on a word boundary
|
// adjust the size so it is always on a word boundary
|
||||||
LittleEndian.putShort(sizeHolder, 0, (short) ((std.length) + (std.length % 2)));
|
LittleEndian.putShort(sizeHolder, 0, (short) ((std.length) + (std.length % 2)));
|
||||||
|
@ -179,7 +178,7 @@ public final class StyleSheet {
|
||||||
StyleDescription tsd = this._styleDescriptions[i];
|
StyleDescription tsd = this._styleDescriptions[i];
|
||||||
StyleDescription osd = ss._styleDescriptions[i];
|
StyleDescription osd = ss._styleDescriptions[i];
|
||||||
if (tsd == null && osd == null) continue;
|
if (tsd == null && osd == null) continue;
|
||||||
if (tsd == null || osd == null || !osd.equals(tsd)) return false;
|
if (osd == null || !osd.equals(tsd)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.poi.hwpf.model.TabDescriptor;
|
import org.apache.poi.hwpf.model.TabDescriptor;
|
||||||
|
import org.apache.poi.hwpf.model.types.TBDAbstractType;
|
||||||
import org.apache.poi.hwpf.usermodel.BorderCode;
|
import org.apache.poi.hwpf.usermodel.BorderCode;
|
||||||
import org.apache.poi.hwpf.usermodel.DateAndTime;
|
import org.apache.poi.hwpf.usermodel.DateAndTime;
|
||||||
import org.apache.poi.hwpf.usermodel.DropCapSpecifier;
|
import org.apache.poi.hwpf.usermodel.DropCapSpecifier;
|
||||||
|
@ -155,7 +156,7 @@ public final class ParagraphSprmUncompressor
|
||||||
newPAP.setFNoLnn (sprm.getOperand() != 0);
|
newPAP.setFNoLnn (sprm.getOperand() != 0);
|
||||||
break;
|
break;
|
||||||
case 0xd:
|
case 0xd:
|
||||||
/**handle tabs . variable parameter. seperate processing needed*/
|
// handle tabs . variable parameter. seperate processing needed
|
||||||
handleTabs(newPAP, sprm);
|
handleTabs(newPAP, sprm);
|
||||||
break;
|
break;
|
||||||
case 0xe:
|
case 0xe:
|
||||||
|
@ -204,7 +205,7 @@ public final class ParagraphSprmUncompressor
|
||||||
break;
|
break;
|
||||||
case 0x1b:
|
case 0x1b:
|
||||||
byte param = (byte)sprm.getOperand();
|
byte param = (byte)sprm.getOperand();
|
||||||
/** @todo handle paragraph postioning*/
|
// TODO: handle paragraph postioning
|
||||||
byte pcVert = (byte) ((param & 0x0c) >> 2);
|
byte pcVert = (byte) ((param & 0x0c) >> 2);
|
||||||
byte pcHorz = (byte) (param & 0x03);
|
byte pcHorz = (byte) (param & 0x03);
|
||||||
if (pcVert != 3)
|
if (pcVert != 3)
|
||||||
|
@ -430,12 +431,12 @@ public final class ParagraphSprmUncompressor
|
||||||
Map<Integer, TabDescriptor> tabMap = new HashMap<>();
|
Map<Integer, TabDescriptor> tabMap = new HashMap<>();
|
||||||
for (int x = 0; x < tabPositions.length; x++)
|
for (int x = 0; x < tabPositions.length; x++)
|
||||||
{
|
{
|
||||||
tabMap.put(Integer.valueOf(tabPositions[x]), tabDescriptors[x]);
|
tabMap.put(tabPositions[x], tabDescriptors[x]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int x = 0; x < delSize; x++)
|
for (int x = 0; x < delSize; x++)
|
||||||
{
|
{
|
||||||
tabMap.remove(Integer.valueOf(LittleEndian.getShort(grpprl, offset)));
|
tabMap.remove((int) LittleEndian.getShort(grpprl, offset));
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,8 +444,8 @@ public final class ParagraphSprmUncompressor
|
||||||
int start = offset;
|
int start = offset;
|
||||||
for (int x = 0; x < addSize; x++)
|
for (int x = 0; x < addSize; x++)
|
||||||
{
|
{
|
||||||
Integer key = Integer.valueOf(LittleEndian.getShort(grpprl, offset));
|
Integer key = (int) LittleEndian.getShort(grpprl, offset);
|
||||||
TabDescriptor val = new TabDescriptor( grpprl, start + ((TabDescriptor.getSize() * addSize) + x) );
|
TabDescriptor val = new TabDescriptor( grpprl, start + ((TBDAbstractType.getSize() * addSize) + x) );
|
||||||
tabMap.put(key, val);
|
tabMap.put(key, val);
|
||||||
offset += LittleEndianConsts.SHORT_SIZE;
|
offset += LittleEndianConsts.SHORT_SIZE;
|
||||||
}
|
}
|
||||||
|
@ -458,7 +459,7 @@ public final class ParagraphSprmUncompressor
|
||||||
for (int x = 0; x < tabPositions.length; x++)
|
for (int x = 0; x < tabPositions.length; x++)
|
||||||
{
|
{
|
||||||
Integer key = list.get(x);
|
Integer key = list.get(x);
|
||||||
tabPositions[x] = key.intValue();
|
tabPositions[x] = key;
|
||||||
if (tabMap.containsKey( key ))
|
if (tabMap.containsKey( key ))
|
||||||
tabDescriptors[x] = tabMap.get(key);
|
tabDescriptors[x] = tabMap.get(key);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue