]> source.dussan.org Git - poi.git/commitdiff
Bugzilla 52745: fixed XSSFRichtextString.append to preserve leading / trailing spaces
authorYegor Kozlov <yegor@apache.org>
Thu, 23 Feb 2012 12:07:16 +0000 (12:07 +0000)
committerYegor Kozlov <yegor@apache.org>
Thu, 23 Feb 2012 12:07:16 +0000 (12:07 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1292759 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java

index d2d7aebf8591cc4ae1b2fc68f7f4940e7cb8496b..57161cd5ae9b0ceb859a3406e95c6986de602cb0 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta6" date="2012-??-??">
+           <action dev="poi-developers" type="fix">52745 - fixed XSSFRichtextString.append to preserve leading / trailing spaces </action>
            <action dev="poi-developers" type="fix">52716 - tolerate hyperlinks that have neither location nor relation </action>
            <action dev="poi-developers" type="fix">52599 - avoid duplicate text when rendering slides in HSLF</action>
            <action dev="poi-developers" type="fix">52598 - respect slide background when rendering slides in HSLF</action>
index e3ed3223a79fba301c87858f2e66731d0f2889b8..39911f393a8f6b37b4f858343df42b4fb3c814b8 100644 (file)
@@ -194,11 +194,14 @@ public class XSSFRichTextString implements RichTextString {
     public void append(String text, XSSFFont font){
         if(st.sizeOfRArray() == 0 && st.isSetT()) {
             //convert <t>string</t> into a text run: <r><t>string</t></r>
-            st.addNewR().setT(st.getT());
+            CTRElt lt = st.addNewR();
+            lt.setT(st.getT());
+            preserveSpaces(lt.xgetT());
             st.unsetT();
         }
         CTRElt lt = st.addNewR();
         lt.setT(text);
+        preserveSpaces(lt.xgetT());
         CTRPrElt pr = lt.addNewRPr();
         if(font != null) setRunAttributes(font.getCTFont(), pr);
     }
@@ -392,7 +395,7 @@ public class XSSFRichTextString implements RichTextString {
         if(st.sizeOfRArray() > 0) {
             for (CTRElt r : st.getRArray()) {
                 CTRPrElt pr = r.getRPr();
-                if(pr != null){
+                if(pr != null && pr.sizeOfRFontArray() > 0){
                     String fontName = pr.getRFontArray(0).getVal();
                     if(fontName.startsWith("#")){
                         int idx = Integer.parseInt(fontName.substring(1));
index 30f7948828c26b34837bbaa76fffc7e3aaba72fa..481c56dd652a269cf203b5ac46044170917760d6 100644 (file)
@@ -140,6 +140,12 @@ public final class TestXSSFRichTextString extends TestCase {
         rt.setString("  Apache");
         assertEquals("<xml-fragment xml:space=\"preserve\">  Apache</xml-fragment>", xs.xmlText());
 
+        rt.append(" POI");
+        rt.append(" ");
+        assertEquals("  Apache POI ", rt.getString());
+        assertEquals("<xml-fragment xml:space=\"preserve\">  Apache</xml-fragment>", rt.getCTRst().getRArray(0).xgetT().xmlText());
+        assertEquals("<xml-fragment xml:space=\"preserve\"> POI</xml-fragment>", rt.getCTRst().getRArray(1).xgetT().xmlText());
+        assertEquals("<xml-fragment xml:space=\"preserve\"> </xml-fragment>", rt.getCTRst().getRArray(2).xgetT().xmlText());
     }
 
     /**