From 62cdf68ff42c1887aac3c639226f878335a39a79 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 18 May 2017 20:15:44 +0100 Subject: Add anchor on hyperlinks as fragment if present --- .../org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java | 6 ++++-- src/main/java/org/zwobble/mammoth/internal/docx/Uris.java | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'src/main/java') 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 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; + } } -- cgit v1.2.3