git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@636751 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ff78b7ac71
commit
6025d98504
@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
<!-- Don't forget to update status.xml too! -->
|
<!-- Don't forget to update status.xml too! -->
|
||||||
<release version="3.1-beta1" date="2008-??-??">
|
<release version="3.1-beta1" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">28627 / 44580 - Fix Range.delete() in HWPF</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">44539 - Support for area references in formulas of rows >= 32768</action>
|
<action dev="POI-DEVELOPERS" type="add">44539 - Support for area references in formulas of rows >= 32768</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">44536 - Improved support for detecting read-only recommended files</action>
|
<action dev="POI-DEVELOPERS" type="add">44536 - Improved support for detecting read-only recommended files</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">43901 - Correctly update the internal last cell number when adding and removing cells (previously sometimes off-by-one)</action>
|
<action dev="POI-DEVELOPERS" type="fix">43901 - Correctly update the internal last cell number when adding and removing cells (previously sometimes off-by-one)</action>
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
<!-- Don't forget to update changes.xml too! -->
|
<!-- Don't forget to update changes.xml too! -->
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.1-beta1" date="2008-??-??">
|
<release version="3.1-beta1" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">28627 / 44580 - Fix Range.delete() in HWPF</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">44539 - Support for area references in formulas of rows >= 32768</action>
|
<action dev="POI-DEVELOPERS" type="add">44539 - Support for area references in formulas of rows >= 32768</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">44536 - Improved support for detecting read-only recommended files</action>
|
<action dev="POI-DEVELOPERS" type="add">44536 - Improved support for detecting read-only recommended files</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">43901 - Correctly update the internal last cell number when adding and removing cells (previously sometimes off-by-one)</action>
|
<action dev="POI-DEVELOPERS" type="fix">43901 - Correctly update the internal last cell number when adding and removing cells (previously sometimes off-by-one)</action>
|
||||||
|
@ -90,7 +90,19 @@ public class TextPiece extends PropertyNode implements Comparable
|
|||||||
|
|
||||||
public void adjustForDelete(int start, int length)
|
public void adjustForDelete(int start, int length)
|
||||||
{
|
{
|
||||||
|
int myStart = getStart();
|
||||||
|
int myEnd = getEnd();
|
||||||
|
int end = start + length;
|
||||||
|
|
||||||
|
/* do we have to delete from this text piece? */
|
||||||
|
if (start <= myEnd && end >= myStart) {
|
||||||
|
/* find where the deleted area overlaps with this text piece */
|
||||||
|
int overlapStart = Math.max(myStart, start);
|
||||||
|
int overlapEnd = Math.min(myEnd, end);
|
||||||
|
((StringBuffer)_buf).delete(overlapStart, overlapEnd);
|
||||||
|
|
||||||
|
super.adjustForDelete(start, length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int characterLength()
|
public int characterLength()
|
||||||
|
@ -494,6 +494,7 @@ public class Range
|
|||||||
int numSections = _sections.size();
|
int numSections = _sections.size();
|
||||||
int numRuns = _characters.size();
|
int numRuns = _characters.size();
|
||||||
int numParagraphs = _paragraphs.size();
|
int numParagraphs = _paragraphs.size();
|
||||||
|
int numTextPieces = _text.size();
|
||||||
|
|
||||||
for (int x = _charStart; x < numRuns; x++)
|
for (int x = _charStart; x < numRuns; x++)
|
||||||
{
|
{
|
||||||
@ -512,6 +513,12 @@ public class Range
|
|||||||
SEPX sepx = (SEPX)_sections.get(x);
|
SEPX sepx = (SEPX)_sections.get(x);
|
||||||
sepx.adjustForDelete(_start, _end - _start);
|
sepx.adjustForDelete(_start, _end - _start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int x = _textStart; x < numTextPieces; x++)
|
||||||
|
{
|
||||||
|
TextPiece piece = (TextPiece)_text.get(x);
|
||||||
|
piece.adjustForDelete(_start, _end - _start);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
BIN
src/scratchpad/testcases/org/apache/poi/hwpf/data/Bug28627.doc
Normal file
BIN
src/scratchpad/testcases/org/apache/poi/hwpf/data/Bug28627.doc
Normal file
Binary file not shown.
@ -16,19 +16,14 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.poi.hwpf.usermodel;
|
package org.apache.poi.hwpf.usermodel;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.util.Iterator;
|
import java.io.FileOutputStream;
|
||||||
import java.util.List;
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.hwpf.HWPFDocument;
|
import org.apache.poi.hwpf.HWPFDocument;
|
||||||
import org.apache.poi.hwpf.model.StyleSheet;
|
import org.apache.poi.hwpf.model.StyleSheet;
|
||||||
import org.apache.poi.hwpf.model.TextPiece;
|
|
||||||
import org.apache.poi.hwpf.usermodel.Paragraph;
|
|
||||||
import org.apache.poi.hwpf.usermodel.Range;
|
|
||||||
import org.apache.poi.util.LittleEndian;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test various problem documents
|
* Test various problem documents
|
||||||
@ -36,16 +31,18 @@ import junit.framework.TestCase;
|
|||||||
* @author Nick Burch (nick at torchbox dot com)
|
* @author Nick Burch (nick at torchbox dot com)
|
||||||
*/
|
*/
|
||||||
public class TestProblems extends TestCase {
|
public class TestProblems extends TestCase {
|
||||||
|
|
||||||
private String dirname = System.getProperty("HWPF.testdata.path");
|
private String dirname = System.getProperty("HWPF.testdata.path");
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ListEntry passed no ListTable
|
* ListEntry passed no ListTable
|
||||||
*/
|
*/
|
||||||
public void testListEntryNoListTable() throws Exception {
|
public void testListEntryNoListTable() throws Exception {
|
||||||
HWPFDocument doc = new HWPFDocument(new FileInputStream(dirname + "/ListEntryNoListTable.doc"));
|
HWPFDocument doc = new HWPFDocument(new FileInputStream(
|
||||||
|
new File(dirname, "ListEntryNoListTable.doc")));
|
||||||
|
|
||||||
Range r = doc.getRange();
|
Range r = doc.getRange();
|
||||||
StyleSheet styleSheet = doc.getStyleSheet();
|
StyleSheet styleSheet = doc.getStyleSheet();
|
||||||
@ -62,7 +59,8 @@ public class TestProblems extends TestCase {
|
|||||||
* AIOOB for TableSprmUncompressor.unCompressTAPOperation
|
* AIOOB for TableSprmUncompressor.unCompressTAPOperation
|
||||||
*/
|
*/
|
||||||
public void testSprmAIOOB() throws Exception {
|
public void testSprmAIOOB() throws Exception {
|
||||||
HWPFDocument doc = new HWPFDocument(new FileInputStream(dirname + "/AIOOB-Tap.doc"));
|
HWPFDocument doc = new HWPFDocument(new FileInputStream(
|
||||||
|
new File(dirname, "AIOOB-Tap.doc")));
|
||||||
|
|
||||||
Range r = doc.getRange();
|
Range r = doc.getRange();
|
||||||
StyleSheet styleSheet = doc.getStyleSheet();
|
StyleSheet styleSheet = doc.getStyleSheet();
|
||||||
@ -79,7 +77,8 @@ public class TestProblems extends TestCase {
|
|||||||
* Test for TableCell not skipping the last paragraph
|
* Test for TableCell not skipping the last paragraph
|
||||||
*/
|
*/
|
||||||
public void testTableCellLastParagraph() throws Exception {
|
public void testTableCellLastParagraph() throws Exception {
|
||||||
HWPFDocument doc = new HWPFDocument(new FileInputStream(dirname + "/Bug44292.doc"));
|
HWPFDocument doc = new HWPFDocument(new FileInputStream(
|
||||||
|
new File(dirname, "Bug44292.doc")));
|
||||||
Range r = doc.getRange();
|
Range r = doc.getRange();
|
||||||
|
|
||||||
//get the table
|
//get the table
|
||||||
@ -104,4 +103,39 @@ public class TestProblems extends TestCase {
|
|||||||
// Last cell should have one paragraph
|
// Last cell should have one paragraph
|
||||||
assertEquals(1, cell.numParagraphs());
|
assertEquals(1, cell.numParagraphs());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testRangeDelete() throws Exception {
|
||||||
|
HWPFDocument doc = new HWPFDocument(new FileInputStream(
|
||||||
|
new File(dirname, "Bug28627.doc")));
|
||||||
|
|
||||||
|
Range range = doc.getRange();
|
||||||
|
int numParagraphs = range.numParagraphs();
|
||||||
|
|
||||||
|
int totalLength = 0, deletedLength = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < numParagraphs; i++) {
|
||||||
|
Paragraph para = range.getParagraph(i);
|
||||||
|
String text = para.text();
|
||||||
|
|
||||||
|
totalLength += text.length();
|
||||||
|
if (text.indexOf("{delete me}") > -1) {
|
||||||
|
para.delete();
|
||||||
|
deletedLength = text.length();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check the text length after deletion
|
||||||
|
int newLength = 0;
|
||||||
|
range = doc.getRange();
|
||||||
|
numParagraphs = range.numParagraphs();
|
||||||
|
|
||||||
|
for (int i = 0; i < numParagraphs; i++) {
|
||||||
|
Paragraph para = range.getParagraph(i);
|
||||||
|
String text = para.text();
|
||||||
|
|
||||||
|
newLength += text.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(newLength, totalLength - deletedLength);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user