summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java2
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java26
2 files changed, 28 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
index 2e0bdc6..2097822 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
@@ -245,6 +245,7 @@ class StatefulBodyXmlReader {
private ReadResult readFieldChar(XmlElement element) {
String type = element.getAttributeOrNone("w:fldCharType").orElse("");
if (type.equals("begin")) {
+ complexFieldStack.add(ComplexField.UNKNOWN);
currentInstrText.setLength(0);
} else if (type.equals("end")) {
complexFieldStack.remove();
@@ -253,6 +254,7 @@ class StatefulBodyXmlReader {
ComplexField complexField = parseHyperlinkFieldCode(instrText)
.map(href -> ComplexField.hyperlink(href))
.orElse(ComplexField.UNKNOWN);
+ complexFieldStack.remove();
complexFieldStack.add(complexField);
}
return ReadResult.EMPTY_SUCCESS;
diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
index a28086d..4a750a5 100644
--- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
@@ -307,6 +307,32 @@ public class BodyXmlTests {
isEmptyRun()
)));
}
+
+ @Test
+ public void fieldWithoutSeparateFldCharIsIgnored() {
+ XmlElement hyperlinkRunXml = runXml("this is a hyperlink");
+ XmlElement element = paragraphXml(list(
+ BEGIN_COMPLEX_FIELD,
+ HYPERLINK_INSTRTEXT,
+ SEPARATE_COMPLEX_FIELD,
+ BEGIN_COMPLEX_FIELD,
+ END_COMPLEX_FIELD,
+ hyperlinkRunXml,
+ END_COMPLEX_FIELD
+ ));
+ DocumentElement paragraph = readSuccess(bodyReader(), element);
+
+ assertThat(paragraph, isParagraph(hasChildren(
+ isEmptyRun(),
+ isEmptyHyperlinkedRun(),
+ isEmptyHyperlinkedRun(),
+ isEmptyHyperlinkedRun(),
+ isHyperlinkedRun(hasChildren(
+ isTextElement("this is a hyperlink")
+ )),
+ isEmptyRun()
+ )));
+ }
}
@Test