Browse Source

Patch from Tim Allison from bug #55142 - Not all XWPF SDT block

s need newlines

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1496458 13f79535-47bb-0310-9956-ffa450edef68
tags/3.10-beta1
Nick Burch 11 years ago
parent
commit
3c379bbcde

+ 6
- 1
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java View File

@@ -83,18 +83,23 @@ public class XWPFSDTContent {

public String getText(){
StringBuilder text = new StringBuilder();
boolean addNewLine = false;
for (int i = 0; i < bodyElements.size(); i++){
Object o = bodyElements.get(i);
if (o instanceof XWPFParagraph){
text.append(((XWPFParagraph)o).getText());
addNewLine = true;
} else if (o instanceof XWPFTable){
text.append(((XWPFTable)o).getText());
addNewLine = true;
} else if (o instanceof XWPFSDT){
text.append(((XWPFSDT)o).getContent().getText());
addNewLine = true;
} else if (o instanceof XWPFRun){
text.append(((XWPFRun)o).toString());
addNewLine = false;
}
if (i < bodyElements.size()-1){
if (addNewLine == true && i < bodyElements.size()-1){
text.append("\n");
}
}

+ 25
- 0
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java View File

@@ -93,6 +93,31 @@ public final class TestXWPFSDT extends TestCase {
}
assertEquals("SDT as cell known failure", false, found);
}
/**
* POI-55142 and Tika 1130
*/
public void testNewLinesBetweenRuns() throws Exception{
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Bug55142.docx");
List<XWPFSDT> sdts = extractAllSDTs(doc);
List<String> targs = new ArrayList<String>();
//these test newlines and tabs in paragraphs/body elements
targs.add("Rich-text1 abcdefghi");
targs.add("Rich-text2 abcd\t\tefgh");
targs.add("Rich-text3 abcd\nefg");
targs.add("Rich-text4 abcdefg");
targs.add("Rich-text5 abcdefg\nhijk");
targs.add("Plain-text1 abcdefg");
targs.add("Plain-text2 abcdefg\nhijk\nlmnop");
//this tests consecutive runs within a cell (not a paragraph)
//this test case was triggered by Tika-1130
targs.add("sdt_incell2 abcdefg");
for (int i = 0; i < sdts.size(); i++){
XWPFSDT sdt = sdts.get(i);
assertEquals(targs.get(i), targs.get(i), sdt.getContent().getText());
}
}

private List<XWPFSDT> extractAllSDTs(XWPFDocument doc){


BIN
test-data/document/Bug55142.docx View File


Loading…
Cancel
Save