]> source.dussan.org Git - poi.git/commitdiff
preserve leading and trailing white spaces in XWPFRun, see bug #49593
authorYegor Kozlov <yegor@apache.org>
Tue, 27 Jul 2010 05:38:48 +0000 (05:38 +0000)
committerYegor Kozlov <yegor@apache.org>
Tue, 27 Jul 2010 05:38:48 +0000 (05:38 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@979540 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java

index e2a5d1dae95aa004b8cc7399398364f13a422f08..3d631d457a0727334a48d4716877ce52ce369474 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.7-beta2" date="2010-??-??">
+           <action dev="POI-DEVELOPERS" type="add">49593 - preserve leading and trailing white spaces in  XWPFRun</action>
            <action dev="POI-DEVELOPERS" type="add">49455 - Insert the content of fldSimple fields into the XWPFWordTextExtractor output</action>
            <action dev="POI-DEVELOPERS" type="add">49640 - Fixed parsing formulas containing defined names beginning with an underscore</action>
            <action dev="POI-DEVELOPERS" type="add">49538 - Added implementation for POISSON()</action>
index 6dcaf5c72a3b7e843d14b94db30a94e3be4d0835..dccd02bfbbbbb0fd5beddc4b193ac1bfdbeef6c2 100644 (file)
@@ -19,6 +19,8 @@ package org.apache.poi.xwpf.usermodel;
 import java.math.BigInteger;
 
 import org.apache.poi.util.Internal;
+import org.apache.xmlbeans.XmlString;
+import org.apache.xmlbeans.XmlCursor;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure;
@@ -35,6 +37,8 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
 
+import javax.xml.namespace.QName;
+
 /**
  * XWPFRun object defines a region of text with a common set of properties
  *
@@ -140,6 +144,7 @@ public class XWPFRun {
        if(pos > run.sizeOfTArray()) throw new ArrayIndexOutOfBoundsException("Value too large for the parameter position in XWPFRun.setText(String value,int pos)");
         CTText t = (pos < run.sizeOfTArray() && pos >= 0) ? run.getTArray(pos) : run.addNewT();
         t.setStringValue(value);
+        preserveSpaces(t);
     }
 
     
@@ -472,5 +477,19 @@ public class XWPFRun {
        //TODO
     }    
 
-    
+    /**
+     * Add the xml:spaces="preserve" attribute if the string has leading or trailing white spaces
+     *
+     * @param xs    the string to check
+     */
+    static void preserveSpaces(XmlString 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();
+        }
+    }
+
 }