]> source.dussan.org Git - poi.git/commitdiff
[github-670] XWPFRun.getText should support delInstrText and noBreakHyphen. Thanks...
authorPJ Fanning <fanningpj@apache.org>
Wed, 14 Aug 2024 17:38:32 +0000 (17:38 +0000)
committerPJ Fanning <fanningpj@apache.org>
Wed, 14 Aug 2024 17:38:32 +0000 (17:38 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1919895 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java

index 481e5ba8d21a8ed7698d36e778e84fef9ae11384..ca95740fe8f4bd9a45c73c9d5ebf95cc699803a1 100644 (file)
@@ -1521,10 +1521,10 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun {
 
         if (o instanceof CTText) {
             final Node node = o.getDomNode();
-            // Field Codes (w:instrText, defined in spec sec. 17.16.23)
+            // Field Codes (w:instrText, defined in spec sec. 17.16.23 and w:delInstrText, defined in spec sec. 17.16.13)
             //  come up as instances of CTText, but we don't want them
             //  in the normal text output
-            if (!("instrText".equals(node.getLocalName()) && XSSFRelation.NS_WORDPROCESSINGML.equals(node.getNamespaceURI()))) {
+            if (!(("instrText".equals(node.getLocalName()) || "delInstrText".equals(node.getLocalName())) && XSSFRelation.NS_WORDPROCESSINGML.equals(node.getNamespaceURI()))) {
                 String textValue = ((CTText) o).getStringValue();
                 if (textValue != null) {
                     if (isCapitalized() || isSmallCaps()) {
@@ -1564,6 +1564,9 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun {
             final Node node = o.getDomNode();
             if (XSSFRelation.NS_WORDPROCESSINGML.equals(node.getNamespaceURI())) {
                 switch (node.getLocalName()) {
+                    case "noBreakHyphen":
+                        text.append('‑');
+                        break;
                     case "tab":
                         text.append('\t');
                         break;
index eee37446e18ede995d5590adf434b1df119939ab..c9c199429c22c9e6bc1eaa0b44cd2a2178e2830d 100644 (file)
@@ -99,6 +99,17 @@ class TestXWPFRun {
         //fail("Position wrong");
     }
 
+    @Test
+    void testGetTextWithNoBreakHyphen() {
+        ctRun.addNewT().setStringValue("TEST STRING 1");
+        ctRun.addNewInstrText().setStringValue("InstrText");
+        ctRun.addNewNoBreakHyphen();
+        ctRun.addNewDelInstrText().setStringValue("DelInstrText");
+        ctRun.addNewT().setStringValue("1");
+        XWPFRun run = new XWPFRun(ctRun, irb);
+        assertEquals("TEST STRING 1‑1", run.text());
+    }
+
     /*
      * bug 59208
      * Purpose: test all valid boolean-like values