Bug 48877 - Fixed XSSFRichTextString to respect leading and trailing line breaks
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1139505 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
14d4f183aa
commit
f51b59e51e
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.8-beta4" date="2011-??-??">
|
<release version="3.8-beta4" date="2011-??-??">
|
||||||
|
<action dev="poi-developers" type="fix">48877 - Fixed XSSFRichTextString to respect leading and trailing line breaks </action>
|
||||||
<action dev="poi-developers" type="fix">49564 - Fixed default behaviour of XSSFCellStyle.getLocked() </action>
|
<action dev="poi-developers" type="fix">49564 - Fixed default behaviour of XSSFCellStyle.getLocked() </action>
|
||||||
<action dev="poi-developers" type="fix">48314 - Fixed setting column and row breaks in XSSF</action>
|
<action dev="poi-developers" type="fix">48314 - Fixed setting column and row breaks in XSSF</action>
|
||||||
<action dev="poi-developers" type="add">51424 - Ignore exceptions in ParagraphSprmUncompressor</action>
|
<action dev="poi-developers" type="add">51424 - Ignore exceptions in ParagraphSprmUncompressor</action>
|
||||||
|
@ -440,17 +440,21 @@ public class XSSFRichTextString implements RichTextString {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add the xml:spaces="preserve" attribute if the string has leading or trailing white spaces
|
* Add the xml:spaces="preserve" attribute if the string has leading or trailing spaces
|
||||||
*
|
*
|
||||||
* @param xs the string to check
|
* @param xs the string to check
|
||||||
*/
|
*/
|
||||||
protected static void preserveSpaces(STXstring xs) {
|
protected static void preserveSpaces(STXstring xs) {
|
||||||
String text = xs.getStringValue();
|
String text = xs.getStringValue();
|
||||||
if (text != null && (text.startsWith(" ") || text.endsWith(" "))) {
|
if (text != null && text.length() > 0) {
|
||||||
XmlCursor c = xs.newCursor();
|
char firstChar = text.charAt(0);
|
||||||
c.toNextToken();
|
char lastChar = text.charAt(text.length() - 1);
|
||||||
c.insertAttributeWithValue(new QName("http://www.w3.org/XML/1998/namespace", "space"), "preserve");
|
if(Character.isWhitespace(firstChar) || Character.isWhitespace(lastChar)) {
|
||||||
c.dispose();
|
XmlCursor c = xs.newCursor();
|
||||||
|
c.toNextToken();
|
||||||
|
c.insertAttributeWithValue(new QName("http://www.w3.org/XML/1998/namespace", "space"), "preserve");
|
||||||
|
c.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,10 +17,14 @@
|
|||||||
|
|
||||||
package org.apache.poi.xssf.usermodel;
|
package org.apache.poi.xssf.usermodel;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringWriter;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.apache.poi.POIXMLDocumentPart;
|
||||||
|
import org.apache.xmlbeans.XmlOptions;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRPrElt;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRPrElt;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXstring;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXstring;
|
||||||
@ -290,4 +294,64 @@ public final class TestXSSFRichTextString extends TestCase {
|
|||||||
assertEquals("Apache", str.getCTRst().getRArray(0).getT());
|
assertEquals("Apache", str.getCTRst().getRArray(0).getT());
|
||||||
assertEquals(" Software Foundation", str.getCTRst().getRArray(1).getT());
|
assertEquals(" Software Foundation", str.getCTRst().getRArray(1).getT());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testLineBreaks_bug48877() throws IOException{
|
||||||
|
|
||||||
|
XSSFFont font = new XSSFFont();
|
||||||
|
font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
|
||||||
|
font.setFontHeightInPoints((short) 14);
|
||||||
|
XSSFRichTextString str;
|
||||||
|
STXstring t1, t2, t3;
|
||||||
|
|
||||||
|
str = new XSSFRichTextString("Incorrect\nLine-Breaking");
|
||||||
|
str.applyFont(0, 8, font);
|
||||||
|
t1 = str.getCTRst().getRList().get(0).xgetT();
|
||||||
|
t2 = str.getCTRst().getRList().get(1).xgetT();
|
||||||
|
assertEquals("<xml-fragment>Incorrec</xml-fragment>", t1.xmlText());
|
||||||
|
assertEquals("<xml-fragment>t\nLine-Breaking</xml-fragment>", t2.xmlText());
|
||||||
|
|
||||||
|
str = new XSSFRichTextString("Incorrect\nLine-Breaking");
|
||||||
|
str.applyFont(0, 9, font);
|
||||||
|
t1 = str.getCTRst().getRList().get(0).xgetT();
|
||||||
|
t2 = str.getCTRst().getRList().get(1).xgetT();
|
||||||
|
assertEquals("<xml-fragment>Incorrect</xml-fragment>", t1.xmlText());
|
||||||
|
assertEquals("<xml-fragment xml:space=\"preserve\">\nLine-Breaking</xml-fragment>", t2.xmlText());
|
||||||
|
|
||||||
|
str = new XSSFRichTextString("Incorrect\n Line-Breaking");
|
||||||
|
str.applyFont(0, 9, font);
|
||||||
|
t1 = str.getCTRst().getRList().get(0).xgetT();
|
||||||
|
t2 = str.getCTRst().getRList().get(1).xgetT();
|
||||||
|
assertEquals("<xml-fragment>Incorrect</xml-fragment>", t1.xmlText());
|
||||||
|
assertEquals("<xml-fragment xml:space=\"preserve\">\n Line-Breaking</xml-fragment>", t2.xmlText());
|
||||||
|
|
||||||
|
str = new XSSFRichTextString("Tab\tseparated\n");
|
||||||
|
t1 = str.getCTRst().xgetT();
|
||||||
|
// trailing \n causes must be preserved
|
||||||
|
assertEquals("<xml-fragment xml:space=\"preserve\">Tab\tseparated\n</xml-fragment>", t1.xmlText());
|
||||||
|
|
||||||
|
str.applyFont(0, 3, font);
|
||||||
|
t1 = str.getCTRst().getRList().get(0).xgetT();
|
||||||
|
t2 = str.getCTRst().getRList().get(1).xgetT();
|
||||||
|
assertEquals("<xml-fragment>Tab</xml-fragment>", t1.xmlText());
|
||||||
|
assertEquals("<xml-fragment xml:space=\"preserve\">\tseparated\n</xml-fragment>", t2.xmlText());
|
||||||
|
|
||||||
|
str = new XSSFRichTextString("Tab\tseparated\n");
|
||||||
|
str.applyFont(0, 4, font);
|
||||||
|
t1 = str.getCTRst().getRList().get(0).xgetT();
|
||||||
|
t2 = str.getCTRst().getRList().get(1).xgetT();
|
||||||
|
// YK: don't know why, but XmlBeans converts leading tab characters to spaces
|
||||||
|
//assertEquals("<xml-fragment>Tab\t</xml-fragment>", t1.xmlText());
|
||||||
|
assertEquals("<xml-fragment xml:space=\"preserve\">separated\n</xml-fragment>", t2.xmlText());
|
||||||
|
|
||||||
|
str = new XSSFRichTextString("\n\n\nNew Line\n\n");
|
||||||
|
str.applyFont(0, 3, font);
|
||||||
|
str.applyFont(11, 13, font);
|
||||||
|
t1 = str.getCTRst().getRList().get(0).xgetT();
|
||||||
|
t2 = str.getCTRst().getRList().get(1).xgetT();
|
||||||
|
t3 = str.getCTRst().getRList().get(2).xgetT();
|
||||||
|
// YK: don't know why, but XmlBeans converts leading tab characters to spaces
|
||||||
|
assertEquals("<xml-fragment xml:space=\"preserve\">\n\n\n</xml-fragment>", t1.xmlText());
|
||||||
|
assertEquals("<xml-fragment>New Line</xml-fragment>", t2.xmlText());
|
||||||
|
assertEquals("<xml-fragment xml:space=\"preserve\">\n\n</xml-fragment>", t3.xmlText());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user