preserve leading and trailing white spaces in XSSFRichTextString, see Bugzilla 48070
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@830492 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
fe00a182a7
commit
ab1748ab50
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.6-beta1" date="2009-??-??">
|
<release version="3.6-beta1" date="2009-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">48070 - preserve leading and trailing white spaces in XSSFRichTextString</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">48044 - added implementation for CountBlank function</action>
|
<action dev="POI-DEVELOPERS" type="add">48044 - added implementation for CountBlank function</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">48036 - added IntersectionEval to allow evaluation of the intersection formula operator</action>
|
<action dev="POI-DEVELOPERS" type="fix">48036 - added IntersectionEval to allow evaluation of the intersection formula operator</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">47999 - avoid un-needed call to the JVM Garbage Collector when working on OOXML OPC Packages</action>
|
<action dev="POI-DEVELOPERS" type="fix">47999 - avoid un-needed call to the JVM Garbage Collector when working on OOXML OPC Packages</action>
|
||||||
|
@ -20,8 +20,11 @@ package org.apache.poi.xssf.usermodel;
|
|||||||
import org.apache.poi.ss.usermodel.Font;
|
import org.apache.poi.ss.usermodel.Font;
|
||||||
import org.apache.poi.ss.usermodel.RichTextString;
|
import org.apache.poi.ss.usermodel.RichTextString;
|
||||||
import org.apache.poi.xssf.model.StylesTable;
|
import org.apache.poi.xssf.model.StylesTable;
|
||||||
|
import org.apache.xmlbeans.XmlObject;
|
||||||
|
import org.apache.xmlbeans.XmlCursor;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
|
||||||
|
|
||||||
|
import javax.xml.namespace.QName;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|
||||||
@ -70,15 +73,16 @@ public class XSSFRichTextString implements RichTextString {
|
|||||||
private StylesTable styles;
|
private StylesTable styles;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a rich text string and initialize it with empty string
|
* Create a rich text string
|
||||||
*/
|
*/
|
||||||
public XSSFRichTextString(String str) {
|
public XSSFRichTextString(String str) {
|
||||||
st = CTRst.Factory.newInstance();
|
st = CTRst.Factory.newInstance();
|
||||||
st.setT(str);
|
st.setT(str);
|
||||||
|
preserveSpaces(st.xgetT());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create empty rich text string
|
* Create empty rich text string and initialize it with empty string
|
||||||
*/
|
*/
|
||||||
public XSSFRichTextString() {
|
public XSSFRichTextString() {
|
||||||
st = CTRst.Factory.newInstance();
|
st = CTRst.Factory.newInstance();
|
||||||
@ -342,6 +346,7 @@ public class XSSFRichTextString implements RichTextString {
|
|||||||
public void setString(String s){
|
public void setString(String s){
|
||||||
clearFormatting();
|
clearFormatting();
|
||||||
st.setT(s);
|
st.setT(s);
|
||||||
|
preserveSpaces(st.xgetT());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -461,4 +466,19 @@ public class XSSFRichTextString implements RichTextString {
|
|||||||
|
|
||||||
return ctFont;
|
return ctFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the xml:spaces="preserve" attribute if the string has leading or trailing white spaces
|
||||||
|
*
|
||||||
|
* @param xs the string to check
|
||||||
|
*/
|
||||||
|
protected static void preserveSpaces(STXstring xs) {
|
||||||
|
String text = xs.getStringValue();
|
||||||
|
if (text != null && (text.startsWith(" ") || text.endsWith(" "))) {
|
||||||
|
XmlCursor c = xs.newCursor();
|
||||||
|
c.toNextToken();
|
||||||
|
c.insertAttributeWithValue(new QName("http://www.w3.org/XML/1998/namespace", "space"), "preserve");
|
||||||
|
c.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ package org.apache.poi.xssf.usermodel;
|
|||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
||||||
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXstring;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests functionality of the XSSFRichTextRun object
|
* Tests functionality of the XSSFRichTextRun object
|
||||||
@ -115,4 +116,18 @@ public final class TestXSSFRichTextString extends TestCase {
|
|||||||
assertEquals(font2.getBold(), font2$.getBold());
|
assertEquals(font2.getBold(), font2$.getBold());
|
||||||
assertEquals(font2.getFontName(), font2$.getFontName());
|
assertEquals(font2.getFontName(), font2$.getFontName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* make sure we insert xml:space="preserve" attribute
|
||||||
|
* if a string has leading or trailing white spaces
|
||||||
|
*/
|
||||||
|
public void testPreserveSpaces() {
|
||||||
|
XSSFRichTextString rt = new XSSFRichTextString("Apache");
|
||||||
|
CTRst ct = rt.getCTRst();
|
||||||
|
STXstring xs = ct.xgetT();
|
||||||
|
assertEquals("<xml-fragment>Apache</xml-fragment>", xs.xmlText());
|
||||||
|
rt.setString(" Apache");
|
||||||
|
assertEquals("<xml-fragment xml:space=\"preserve\"> Apache</xml-fragment>", xs.xmlText());
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user