aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2017-05-18 20:15:44 +0100
committerMichael Williamson <mike@zwobble.org>2017-05-18 20:15:44 +0100
commit62cdf68ff42c1887aac3c639226f878335a39a79 (patch)
tree7208db83cb77ded7a87f44d1ba0edcee99931f2f /src/main/java/org
parent81514169b8af735e7f2989f53f3b0920dd7833a3 (diff)
Add anchor on hyperlinks as fragment if present
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java6
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/Uris.java8
2 files changed, 12 insertions, 2 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 2097822..f726a29 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
@@ -436,8 +436,10 @@ class StatefulBodyXmlReader {
Optional<String> anchor = element.getAttributeOrNone("w:anchor");
ReadResult childrenResult = readElements(element.getChildren());
if (relationshipId.isPresent()) {
- return childrenResult.map(children -> Hyperlink.href(
- relationships.findRelationshipById(relationshipId.get()).getTarget(), children));
+ 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));
} else if (anchor.isPresent()) {
return childrenResult.map(children -> Hyperlink.anchor(
anchor.get(), children));
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/Uris.java b/src/main/java/org/zwobble/mammoth/internal/docx/Uris.java
index 51dab9c..35b1751 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/Uris.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/Uris.java
@@ -11,4 +11,12 @@ public class Uris {
return base + "/" + uri;
}
}
+
+ public static String replaceFragment(String uri, String fragment) {
+ int hashIndex = uri.indexOf("#");
+ if (hashIndex != -1) {
+ uri = uri.substring(0, hashIndex);
+ }
+ return uri + "#" + fragment;
+ }
}