From: Yegor Kozlov Date: Thu, 23 Feb 2012 12:07:16 +0000 (+0000) Subject: Bugzilla 52745: fixed XSSFRichtextString.append to preserve leading / trailing spaces X-Git-Tag: REL_3_8_FINAL~35 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7d9173caa45e363731342a4f64564e90d00dfc6f;p=poi.git Bugzilla 52745: fixed XSSFRichtextString.append to preserve leading / trailing spaces git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1292759 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index d2d7aebf85..57161cd5ae 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 52745 - fixed XSSFRichtextString.append to preserve leading / trailing spaces 52716 - tolerate hyperlinks that have neither location nor relation 52599 - avoid duplicate text when rendering slides in HSLF 52598 - respect slide background when rendering slides in HSLF diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java index e3ed3223a7..39911f393a 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java @@ -194,11 +194,14 @@ public class XSSFRichTextString implements RichTextString { public void append(String text, XSSFFont font){ if(st.sizeOfRArray() == 0 && st.isSetT()) { //convert string into a text run: string - 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)); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java index 30f7948828..481c56dd65 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java @@ -140,6 +140,12 @@ public final class TestXSSFRichTextString extends TestCase { rt.setString(" Apache"); assertEquals(" Apache", xs.xmlText()); + rt.append(" POI"); + rt.append(" "); + assertEquals(" Apache POI ", rt.getString()); + assertEquals(" Apache", rt.getCTRst().getRArray(0).xgetT().xmlText()); + assertEquals(" POI", rt.getCTRst().getRArray(1).xgetT().xmlText()); + assertEquals(" ", rt.getCTRst().getRArray(2).xgetT().xmlText()); } /**