aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/mammoth/documents/Hyperlink.java14
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java16
2 files changed, 24 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/mammoth/documents/Hyperlink.java b/src/main/java/org/zwobble/mammoth/documents/Hyperlink.java
index 1d62076..9b2b920 100644
--- a/src/main/java/org/zwobble/mammoth/documents/Hyperlink.java
+++ b/src/main/java/org/zwobble/mammoth/documents/Hyperlink.java
@@ -5,14 +5,20 @@ import java.util.Optional;
public class Hyperlink implements DocumentElement, HasChildren {
public static Hyperlink href(String href, List<DocumentElement> children) {
- return new Hyperlink(Optional.of(href), children);
+ return new Hyperlink(Optional.of(href), Optional.empty(), children);
+ }
+
+ public static Hyperlink anchor(String anchor, List<DocumentElement> children) {
+ return new Hyperlink(Optional.empty(), Optional.of(anchor), children);
}
private final Optional<String> href;
+ private final Optional<String> anchor;
private final List<DocumentElement> children;
- public Hyperlink(Optional<String> href, List<DocumentElement> children) {
+ private Hyperlink(Optional<String> href, Optional<String> anchor, List<DocumentElement> children) {
this.href = href;
+ this.anchor = anchor;
this.children = children;
}
@@ -20,6 +26,10 @@ public class Hyperlink implements DocumentElement, HasChildren {
return href;
}
+ public Optional<String> getAnchor() {
+ return anchor;
+ }
+
@Override
public List<DocumentElement> getChildren() {
return children;
diff --git a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
index 6b6fceb..dd0bf09 100644
--- a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
@@ -158,10 +158,18 @@ public class BodyXmlReader {
}
private ReadResult readHyperlink(XmlElement element) {
- String relationshipId = element.getAttribute("r:id");
- return readElements(element.children())
- .map(children -> Hyperlink.href(
- relationships.findRelationshipById(relationshipId).getTarget(), children));
+ Optional<String> relationshipId = element.getAttributeOrNone("r:id");
+ Optional<String> anchor = element.getAttributeOrNone("w:anchor");
+ ReadResult childrenResult = readElements(element.children());
+ if (relationshipId.isPresent()) {
+ return childrenResult.map(children -> Hyperlink.href(
+ relationships.findRelationshipById(relationshipId.get()).getTarget(), children));
+ } else if (anchor.isPresent()) {
+ return childrenResult.map(children -> Hyperlink.anchor(
+ anchor.get(), children));
+ } else {
+ return ReadResult.EMPTY_SUCCESS;
+ }
}
private Optional<String> readVal(XmlElementLike element, String name) {