From f57601b2426656a014d099ec66828e9f40732492 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 14 Feb 2016 11:47:36 +0000 Subject: Convert hyperlink with internal anchor to HTML --- .../org/zwobble/mammoth/DocumentConverter.java | 26 +++++++++++++++++----- src/main/java/org/zwobble/mammoth/Mammoth.java | 4 +++- 2 files changed, 24 insertions(+), 6 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/mammoth/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/DocumentConverter.java index e8d9059..49bc904 100644 --- a/src/main/java/org/zwobble/mammoth/DocumentConverter.java +++ b/src/main/java/org/zwobble/mammoth/DocumentConverter.java @@ -12,17 +12,23 @@ import static org.zwobble.mammoth.util.MammothLists.list; import static org.zwobble.mammoth.util.MammothMaps.map; public class DocumentConverter { - public static List convertToHtml(Document document) { + private final String idPrefix; + + public DocumentConverter(String idPrefix) { + this.idPrefix = idPrefix; + } + + public List convertToHtml(Document document) { return convertChildrenToHtml(document); } - private static List convertChildrenToHtml(HasChildren element) { + private List convertChildrenToHtml(HasChildren element) { return eagerFlatMap( element.getChildren(), - DocumentConverter::convertToHtml); + this::convertToHtml); } - public static List convertToHtml(DocumentElement element) { + public List convertToHtml(DocumentElement element) { return element.accept(new DocumentElementVisitor>() { @Override public List visit(Paragraph paragraph) { @@ -91,10 +97,20 @@ public class DocumentConverter { @Override public List visit(Hyperlink hyperlink) { - Map attributes = map("href", hyperlink.getHref().get()); + Map attributes = map("href", generateHref(hyperlink)); return list(Html.element("a", attributes, convertChildrenToHtml(hyperlink))); } + private String generateHref(Hyperlink hyperlink) { + if (hyperlink.getHref().isPresent()) { + return hyperlink.getHref().get(); + } else if (hyperlink.getAnchor().isPresent()) { + return "#" + idPrefix + "-" + hyperlink.getAnchor().get(); + } else { + return ""; + } + } + @Override public List visit(Bookmark bookmark) { throw new UnsupportedOperationException(); diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java index 9da4c14..26db504 100644 --- a/src/main/java/org/zwobble/mammoth/Mammoth.java +++ b/src/main/java/org/zwobble/mammoth/Mammoth.java @@ -32,8 +32,10 @@ public class Mammoth { contentTypes, zipFile, fileReader)); + // TODO: prefix + String idPrefix = "document"; return reader.readElement(documentXml) - .map(DocumentConverter::convertToHtml) + .map(nodes -> new DocumentConverter(idPrefix).convertToHtml(nodes)) .map(Html::write); } catch (IOException e) { throw new UnsupportedOperationException("Should return a result of failure"); -- cgit v1.2.3