diff options
| author | Michael Williamson <mike@zwobble.org> | 2017-05-30 11:26:21 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2017-05-30 11:26:21 +0100 |
| commit | 275ff587231c8a74910a8f63595a7a23481d713f (patch) | |
| tree | 8aa109568981a23bfcccfadb7388a402f4203c9f /src/main/java/org/zwobble | |
| parent | 33c342c9c5b102ec5cb171cdfd72ac3722631d15 (diff) | |
Read target frame on hyperlinks
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java | 16 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java | 13 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java b/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java index f78b7fe..c3fe794 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java @@ -4,21 +4,23 @@ import java.util.List; 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), Optional.empty(), children); + public static Hyperlink href(String href, Optional<String> targetFrame, List<DocumentElement> children) { + return new Hyperlink(Optional.of(href), Optional.empty(), targetFrame, children); } - public static Hyperlink anchor(String anchor, List<DocumentElement> children) { - return new Hyperlink(Optional.empty(), Optional.of(anchor), children); + public static Hyperlink anchor(String anchor, Optional<String> targetFrame, List<DocumentElement> children) { + return new Hyperlink(Optional.empty(), Optional.of(anchor), targetFrame, children); } private final Optional<String> href; private final Optional<String> anchor; + private final Optional<String> targetFrame; private final List<DocumentElement> children; - private Hyperlink(Optional<String> href, Optional<String> anchor, List<DocumentElement> children) { + public Hyperlink(Optional<String> href, Optional<String> anchor, Optional<String> targetFrame, List<DocumentElement> children) { this.href = href; this.anchor = anchor; + this.targetFrame = targetFrame; this.children = children; } @@ -30,6 +32,10 @@ public class Hyperlink implements DocumentElement, HasChildren { return anchor; } + public Optional<String> getTargetFrame() { + return targetFrame; + } + @Override public List<DocumentElement> getChildren() { return children; 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 f4eda9e..b72ff29 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java @@ -168,7 +168,7 @@ class StatefulBodyXmlReader { (style, children) -> { Optional<String> hyperlinkHref = currentHyperlinkHref(); if (hyperlinkHref.isPresent()) { - children = list(Hyperlink.href(hyperlinkHref.get(), children)); + children = list(Hyperlink.href(hyperlinkHref.get(), Optional.empty(), children)); } return new Run( @@ -442,15 +442,20 @@ class StatefulBodyXmlReader { private ReadResult readHyperlink(XmlElement element) { Optional<String> relationshipId = element.getAttributeOrNone("r:id"); Optional<String> anchor = element.getAttributeOrNone("w:anchor"); + Optional<String> targetFrame = element.getAttributeOrNone("w:tgtFrame"); ReadResult childrenResult = readElements(element.getChildren()); + if (relationshipId.isPresent()) { String targetHref = relationships.findRelationshipById(relationshipId.get()).getTarget(); String href = anchor.map(fragment -> Uris.replaceFragment(targetHref, anchor.get())) .orElse(targetHref); - return childrenResult.map(children -> Hyperlink.href(href, children)); + return childrenResult.map(children -> + Hyperlink.href(href, targetFrame, children) + ); } else if (anchor.isPresent()) { - return childrenResult.map(children -> Hyperlink.anchor( - anchor.get(), children)); + return childrenResult.map(children -> + Hyperlink.anchor(anchor.get(), targetFrame, children) + ); } else { return childrenResult; } |
